This roll looked better to me, but are those two dquote really needed? Does
a return code of 32 indicate error?
Вск, 23 Янв 2011, David Mitchell писал(а):
> I stand corrected on MIME. Thanks.
>
> Here is my last effort with browse:
>
> NB. Insert 1
> ShellExecute=: 'shell32 ShellExecuteA i i *c *c *c *c i'&cd
> SW_SHOWNORMAL=:1
> NULL=:<0
> NB. End insert 1
> browse=: 3 : 0
> cmd=. deb y
> isURL=. 1 e. '://'&E.
> if. IFJHS do.
> cmd=. '/' (I. cmd='\') } cmd
> if. -. isURL cmd do.
> if. -.fexist cmd do. EMPTY return. end.
> cmd=. 'file://',cmd
> end.
> redirecturl_jijxm_=: cmd
> EMPTY return.
> end.
> browser=. Browser_j_
> NB. Insert 2
> if. IFWIN do.
> cmd=. '/' (I. cmd='\') } cmd
> if. -. isURL cmd do.
> if. -.fexist cmd do. EMPTY return. end.
> cmd=. 'file://',cmd
> end.
> if. 0 = #browser do.
> r=.>0{ShellExecute(0;'open';cmd;NULL;NULL;SW_SHOWNORMAL)
> else.
> r=.>0{ShellExecute(0;'open';(dquote browser);(dquote
> cmd);NULL;SW_SHOWNORMAL)
> end.
> if. r<33 do. (sminfo 'browse error:',browser,' ',cmd) return. end.
> EMPTY return.
> end.
> NB. End insert 2
> if. 0 = #browser do.
> ...
>
> This works for me in JGTK and J console on Win7 and WinXP. It gives a
> reasonable message that should be helpful either way.
>
> On 1/23/2011 12:13, bill lam wrote:
> > The help message in your proposed browse verb, as you already noted, only
> > applicable to gtkide.
> >
> > The IFUNIX and IFWIN should cover all os supported by J7 so the fork_jtask_
> > is dead code.
> >
> > mime type was designed for emails, it does not specify programs to open
> > document. Of course any application uses mime types in some clever and
> > incompatible ways.
> >
> > I was not saying that is bad or mime types should not be used for file
> > association. Instead, I wanted to point out it is impossible to look at
> > mime.types to determine default browser.
> >
> > FWIW the file /usr/share/applications/defaults.list can be ignored by any
> > desktop if that file does not happen to its 'default'. My debian lenny
> > does not have that file.
> >
> > Вск, 23 Янв 2011, David Mitchell писал(а):
> >> I am curious why we could not use the updated browse verb for all J
> >> environments
> >> available in Windows. It would seem to be useful for all J users in
> >> Windows to
> >> know when the browse verb is failing. Why use a less reliable version of
> >> browse
> >> anywhere when a more reliable version is available?
> >>
> >> Can you describe the drawbacks of using something like my changed version
> >> in all
> >> J environments? If I do a search in the J system directories for IFWIN and
> >> IFUNIX and IFGTK and IFJHS, I find more OS and GUI specific code than just
> >> in
> >> browse. It would seem to be simpler to me to have common verbs with
> >> OS-specific
> >> modifications rather than splitting out all of the OS or GUI specific
> >> verbs as
> >> separate, duplicated verbs. We would wind up with 9 or so versions of
> >> many verbs.
> >>
> >> I made the minimal changes required to the distributed browse verb to
> >> support
> >> Windows ShellExecute. My intent was not to provide a GTK specific change.
> >> I
> >> thought it would be a good idea to improve the current browse verb that was
> >> being used in all J environments.
> >>
> >> The code for reporting the errors in the global browse verb was already
> >> there
> >> before I added my changes. The only lack in the original code was to use a
> >> command verb that would actually report errors.
> >>
> >> When I look at the page I sent you has this note:
> >>
> >> This tells the system what applications can be used for that MIME type and
> >> provides the applications in the 'Open With' list. The default is defined
> >> elsewhere. The file /usr/share/applications/defaults.list
> >>
> >> I realize that MIME types were implemented initially by web browsers and
> >> that
> >> various Linux desktop and file managers started using them later, to
> >> various
> >> degrees. But, other languages such as Perl and Python seem to taking
> >> advantage
> >> of MIME types as well. Perhaps the Linux usage of MIME types is not
> >> consistent
> >> enough to be worth using.
> >>
> >> Personally, I would not want to use an install of Linux if I could use
> >> only the
> >> capabilities provided by a particular Linux kernel or even one shell, any
> >> more
> >> than I want to use only MS-DOS. So, in my opinion, products such as J
> >> should be
> >> aware and take advantage of, as much as practical, widely used and
> >> available
> >> features of Linux, even if they are not part of one particular kernel or
> >> some shell.
> >>
> >> I am curious. Why do you consider the Linux usage of MIME types a
> >> 'trick'? I
> >> have seen signs that it is used, at least in some way, in the K GUI , the
> >> Gnome
> >> GUI, in Firefox and in such languages as Perl and Python. To me, it
> >> doesn't
> >> seem any more of a 'trick' than the Linux kernel using loadable modules to
> >> support devices that are not in the compiled in the kernel or the various
> >> Linux
> >> shells using environment variables to customize the behavior of shell
> >> commands.
> >>
> >> On 1/23/2011 9:25, bill lam wrote:
> >>> Perhap we can leave the browse_j_/browse_z_ as it is, and add your
> >>> proposed
> >>> browse verb for gtkide. Will that be ok? BTW the fork_jtask_ branch is
> >>> reducdant because jgtk only supports IFUNIX or IFWIN.
> >>>
> >>> The page you referred is not mime types. Each desktop/file manager has its
> >>> own trick to for file association. Linux kernel or shell does not have
> >>> any
> >>> concept of file association, or default browser.
> >>>
> >>>
> >>> Вск, 23 Янв 2011, David Mitchell писал(а):
> >>>> You make some good points.
> >>>>
> >>>> Here is a modified version of my change that produces a good response,
> >>>> in my
> >>>> opinion, to browse errors in Windows:
> >>>>
> >>>> browse=: 3 : 0
> >>>> ...
> >>>> try.
> >>>> if. IFUNIX do.
> >>>> 2!:1 cmd, (0=nox)#'&'
> >>>> elseif. IFWIN do.
> >>>> r=.>0{ShellExecute(0;'open';cmd;NULL;NULL;SW_SHOWNORMAL)
> >>>> if. r<33 do. 'browse error' 13!:8 255 end.
> >>>> elseif. do.
> >>>> fork_jtask_ cmd
> >>>> end.
> >>>> catch.
> >>>> msg=. 'Could not run the browser with the command:',LF,LF
> >>>> msg=. msg, cmd,LF,LF
> >>>> msg=. msg,'You can change the browser definition in
> >>>> Edit|Configure|Base',LF,LF
> >>>> sminfo 'Run Browser';msg
> >>>> end.
> >>>>
> >>>> This version of browse gives this response in GTK:
> >>>>
> >>>> http://www.jsoftware.com/jwiki/DavidMitchell?action=AttachFile&do=view&target=runbrowseboxgtk.png
> >>>>
> >>>> It gives this response in J console:
> >>>>
> >>>> browse_j_'foo'
> >>>> +-----------+-------------------------------------------------------------------
> >>>> ------------------------------------------------------------+
> >>>> |Run Browser|Could not run the browser with the command: "xxx"
> >>>> "file://foo" Yo
> >>>> u can change the browser definition in Edit|Configure|Base |
> >>>> +-----------+-------------------------------------------------------------------
> >>>> ------------------------------------------------------------+
> >>>>
> >>>> While the J console message is not precisely accurate for J console
> >>>> users, I
> >>>> think it does indicate, in a general way, what the problem is.
> >>>>
> >>>> This change allows Windows to use file associations if Browser is null
> >>>> and
> >>>> allows GTK to report problems should anyone want to use a non-default
> >>>> browser
> >>>> and has not set up the Browser information correctly.
> >>>>
> >>>> I did find I was wrong about Linux 2!:1 giving useful results, at least
> >>>> in all
> >>>> cases. I tried my change on Linux and discovered that 2!:1 does not
> >>>> return a
> >>>> useful result when the command supplied is run in the background with a
> >>>> terminal&.
> >>>>
> >>>> One small nit to pick about Linux and default browsers. I took a (very
> >>>> quick
> >>>> and I am sure very incomplete) look at Linux substitutes for Windows file
> >>>> associations. I found that many Linux versions seem to use MIME Types
> >>>> as a
> >>>> functional equivalent of Windows file associations. It does not seem to
> >>>> be as
> >>>> well supported as Windows file associations, but there does seem to be
> >>>> growing
> >>>> support for MIME types as a way to centralize this information,
> >>>> including the
> >>>> Linux default HTML browser.
> >>>>
> >>>> For example:
> >>>>
> >>>> http://askubuntu.com/questions/16580/where-are-file-associations-stored
> >>>>
> >>>> I'll see if I can determine if J in Linux could use MIME types to give
> >>>> more
> >>>> reliable results.
> >>>>
> >>>>
> >>>> On 1/22/2011 20:08, bill lam wrote:
> >>>>> I agree that fork_jtask_ is over-skill for browse and shellexecute is a
> >>>>> simpler way to do it. But I still unsure if returning an error code for
> >>>>> browse could be helpful because,
> >>>>> 1. there should already enough or lack of visual feedback to indicate
> >>>>> error had
> >>>>> occurred.
> >>>>> 2. the gtkide itself cannot do anything to rectify the error.
> >>>>> 3. users or sys admin for that matter is responsible for setting up
> >>>>> Browser_j_ or leaved it as to the default empty string.
> >>>>>
> >>>>> I cannot see why choice of browser can be configurable is a bad thing in
> >>>>> gtkide. Incidentally Linux does not have default browser.
> >>>>>
> >>>>> I'll incorporate your shellexecute code into browse.
> >>>>>
> >>>>> Сбт, 22 Янв 2011, David Mitchell писал(а):
> >>>>>> Well, there is at least an indication of an error in Linux when its
> >>>>>> fork verb
> >>>>>> fails. It is not as sophisticated as the values returned by the
> >>>>>> Windows
> >>>>>> ShellExecute facility but it seems as if this could be used to at least
> >>>>>> determine if the forked task in Linux had some level of success:
> >>>>>>
> >>>>>> fork_jtask_
> >>>>>> 2!:1
> >>>>>> fork_jtask_ 'foo'
> >>>>>> |interface error: fork_jtask_
> >>>>>> | fork_jtask_'foo'
> >>>>>> fork_jtask_ '\\html'
> >>>>>> |interface error: fork_jtask_
> >>>>>> | fork_jtask_'\\html'
> >>>>>>
> >>>>>> There is no indication of any error when the Windows fork_jtask_ fails.
> >>>>>>
> >>>>>> Finally, Windows provides the association mechanism and already
> >>>>>> maintains my
> >>>>>> preferred default browser information. I'm not sure I see the utility
> >>>>>> in having
> >>>>>> to manually maintain information about my default browser in J as well,
> >>>>>> especially when avoiding the use of ShellExecute in Windows decreases
> >>>>>> the
> >>>>>> intrinsic reliability of J. It's not as if there are not other places
> >>>>>> where J
> >>>>>> uses differing verbs for supporting OS functions on different OSes.
> >>>>>>
> >>>>>> On 1/21/2011 11:26, bill lam wrote:
> >>>>>>> That error information is helpful but only available in window
> >>>>>>> shellexecute
> >>>>>>> not linux, and also the Browser is manually set by user who should
> >>>>>>> have
> >>>>>>> some idea of the browser's full path name. There is not too many
> >>>>>>> possibilities
> >>>>>>> for failure and should be easy for track.
> >>>>>>>
> >>>>>>> Just my two cents.
> >>>>>>>
> >>>>>>> Птн, 21 Янв 2011, David Mitchell писал(а):
> >>>>>>>> I forgot that the config files were saved in the user J7 dir. I
> >>>>>>>> removed all j7
> >>>>>>>> dirs and reinstalled using the new install packages.
> >>>>>>>>
> >>>>>>>> I can confirm that the new installed config value for the base
> >>>>>>>> Browser is '' for
> >>>>>>>> Win on both J701_64 and J701_32.
> >>>>>>>>
> >>>>>>>> I agree that a pop up box would not be an appropriate way to handle
> >>>>>>>> an error
> >>>>>>>> with the browse verb. But, my changes do not generate a pop up box.
> >>>>>>>>
> >>>>>>>> Also, I still find the current behavior of no error response at all
> >>>>>>>> when the J7
> >>>>>>>> Browser configuration is misconfigured is not helpful and could be
> >>>>>>>> improved.
> >>>>>>>>
> >>>>>>>> As far as I can tell, my suggested changes work fine in both
> >>>>>>>> jconsole and gtkide
> >>>>>>>> and they do reduce the risks of using fork_jtask_.
> >>>>>>>>
> >>>>>>>> fork_jtask_, as far as I can see, in its current form, will never
> >>>>>>>> give any
> >>>>>>>> indication of failures.
> >>>>>>>>
> >>>>>>>> ShellExecute, on the other hand, does return useful values on a
> >>>>>>>> failure that
> >>>>>>>> could be used in any environment to at least give the user some
> >>>>>>>> notification of
> >>>>>>>> why the 'browse' is failing:
> >>>>>>>>
> >>>>>>>> cmd_j_=:'foo.exe'
> >>>>>>>>
> >>>>>>>> ShellExecute_j_(0;'open';cmd_j_;NULL_j_;NULL_j_;SW_SHOWNORMAL_j_)
> >>>>>>>> ┌─┬─┬────┬───────┬───┬───┬─┐
> >>>>>>>> │2│0│open│foo.exe│┌─┐│┌─┐│1│
> >>>>>>>> │ │ │ │ ││0│││0││ │
> >>>>>>>> │ │ │ │ │└─┘│└─┘│ │
> >>>>>>>> └─┴─┴────┴───────┴───┴───┴─┘
> >>>>>>>> cmd_j_=:'\\gabble'
> >>>>>>>>
> >>>>>>>> ShellExecute_j_(0;'open';cmd_j_;NULL_j_;NULL_j_;SW_SHOWNORMAL_j_)
> >>>>>>>> ┌─┬─┬────┬────────┬───┬───┬─┐
> >>>>>>>> │3│0│open│\\gabble│┌─┐│┌─┐│1│
> >>>>>>>> │ │ │ │ ││0│││0││ │
> >>>>>>>> │ │ │ │ │└─┘│└─┘│ │
> >>>>>>>> └─┴─┴────┴────────┴───┴───┴─┘
> >>>>>>>> cmd_j_=:'http://www.jsoftware.com/docs/help701/index.htm'
> >>>>>>>>
> >>>>>>>> ShellExecute_j_(0;'open';cmd_j_;NULL_j_;NULL_j_;SW_SHOWNORMAL_j_)
> >>>>>>>> ┌──┬─┬────┬───────────────────────────────────────────────┬───┬───┬─┐
> >>>>>>>> │42│0│open│http://www.jsoftware.com/docs/help701/index.htm│┌─┐│┌─┐│1│
> >>>>>>>> │ │ │ │ ││0│││0││ │
> >>>>>>>> │ │ │ │ │└─┘│└─┘│ │
> >>>>>>>> └──┴─┴────┴───────────────────────────────────────────────┴───┴───┴─┘
> >>>>>>>>
> >>>>>>>> Any return value greater than 32 is ok. Here are two of the errors
> >>>>>>>> that can be
> >>>>>>>> reported:
> >>>>>>>>
> >>>>>>>> #define ERROR_FILE_NOT_FOUND 2L
> >>>>>>>> #define ERROR_PATH_NOT_FOUND 3L
> >>>>>>>>
> >>>>>>>> The return value from ShellExecute could be used to either create a
> >>>>>>>> signal for
> >>>>>>>> an error or generate a return value for the browse verb that would
> >>>>>>>> indicate if
> >>>>>>>> it was successful or not, and, if not, why not.
> >>>>>>>>
> >>>>>>>> On 1/21/2011 8:49, bill lam wrote:
> >>>>>>>>> A fresh installation from a recent window installer probably unset
> >>>>>>>>> Browser in its default config so it should work out-of-box. The
> >>>>>>>>> verb browse
> >>>>>>>>> is shared by jconsole and gtkide so I didn't wish it to pop up a
> >>>>>>>>> message
> >>>>>>>>> box for warning information.
> >>>>>>>>>
> >>>>>>>>> Птн, 21 Янв 2011, David Mitchell писал(а):
> >>>>>>>>>> Hi Tikkanz,
> >>>>>>>>>>
> >>>>>>>>>> Yes, the problem I see only exists with J7_64. I just downloaded
> >>>>>>>>>> and installed
> >>>>>>>>>> new versions of J7_32 and J7_64 to make sure.
> >>>>>>>>>>
> >>>>>>>>>> This is what I found;
> >>>>>>>>>>
> >>>>>>>>>> JVERSION
> >>>>>>>>>> Engine: j701/2011-01-10/11:25
> >>>>>>>>>> Library: 7.01.033
> >>>>>>>>>> Platform: Win 32
> >>>>>>>>>> Installer: j701a_win.exe
> >>>>>>>>>> InstallPath: c:/users/me/j32_j701c/j701
> >>>>>>>>>> #Browser_j_
> >>>>>>>>>> 0
> >>>>>>>>>>
> >>>>>>>>>> JVERSION
> >>>>>>>>>> Engine: j701/2011-01-10/11:25
> >>>>>>>>>> Library: 7.01.033
> >>>>>>>>>> Platform: Win 64
> >>>>>>>>>> Installer: j701a_win64.exe
> >>>>>>>>>> InstallPath: c:/users/me/j64_j701c/j64-701
> >>>>>>>>>> Browser_j_
> >>>>>>>>>> 44
> >>>>>>>>>> Browser_j_
> >>>>>>>>>> c:/program files/mozilla firefox/firefox.exe
> >>>>>>>>>>
> >>>>>>>>>> My default browser is:
> >>>>>>>>>>
> >>>>>>>>>> C:/Program Files (x86)/Mozilla Firefox/firefox.exe
> >>>>>>>>>>
> >>>>>>>>>> So, the two versions of J7 have differing definitions of
> >>>>>>>>>> Browser_j_. The
> >>>>>>>>>> default Browser_j_ from base.cfg used in J7_64 does not point to a
> >>>>>>>>>> valid exe and
> >>>>>>>>>> attempting to use it in fork_jtask_ does not result in any message
> >>>>>>>>>> indicating
> >>>>>>>>>> what has happened.
> >>>>>>>>>>
> >>>>>>>>>> If you want to continue to use fork_jtask_, this will protect J
> >>>>>>>>>> from errant
> >>>>>>>>>> Browser settings:
> >>>>>>>>>>
> >>>>>>>>>> stdlib.ijs
> >>>>>>>>>>
> >>>>>>>>>> ...
> >>>>>>>>>> try. 1!:4<Browser_j_ catch. Browser_j_=:'' end.
> >>>>>>>>>> browser=. Browser_j_
> >>>>>>>>>> --
> >>>>>>>>>> Cheers,
> >>>>>>>>>> David
> >>>>>>>>>>
> >>>>>>>>>> On 1/21/2011 4:33, Tikkanz wrote:
> >>>>>>>>>>> Hi David,
> >>>>>>>>>>> The items on the Gtk IDE help menu seem to work ok for me without
> >>>>>>>>>>> any
> >>>>>>>>>>> Browser set on 32bit Win7.
> >>>>>>>>>>> The pages (online versions because I haven't downloaded the
> >>>>>>>>>>> docs/help
> >>>>>>>>>>> addon) open fine in my default browser (Firefox).
> >>>>>>>>>>> #Browser_j_
> >>>>>>>>>>> 0
> >>>>>>>>>>> JVERSION
> >>>>>>>>>>> Engine: j701/2011-01-07/14:33
> >>>>>>>>>>> Library: 7.01.037
> >>>>>>>>>>> Platform: Win 32
> >>>>>>>>>>> Installer: j701a_win.exe
> >>>>>>>>>>> InstallPath: c:/users/ric/j701
> >>>>>>>>>>>
> >>>>>>>>>>> The browse_j_ verb attempts to something similar to what you
> >>>>>>>>>>> describe below.
> >>>>>>>>>>>
> >>>>>>>>>>> On Fri, Jan 21, 2011 at 9:08 AM, David
> >>>>>>>>>>> Mitchell<[email protected]> wrote:
> >>>>>>>>>>>> I was puzzled when none of the 'help' menu options did anything
> >>>>>>>>>>>> in J7 GTK. I
> >>>>>>>>>>>> looked at the code and saw that I needed to configure a
> >>>>>>>>>>>> hard-coded path to my
> >>>>>>>>>>>> browser of choice.
> >>>>>>>>>>>>
> >>>>>>>>>>>> Being lazy, I offer this small change to stdlib.ijs that
> >>>>>>>>>>>> eliminates the need to
> >>>>>>>>>>>> specify a browser in J7 and allows J7 to use the Windows system
> >>>>>>>>>>>> file
> >>>>>>>>>>>> associations. I have tested it on Win7 and WinXP successfully.
> >>>>>>>>>>>>
> >>>>>>>>>>>> NB. Insert 1
> >>>>>>>>>>>> ShellExecute=: 'shell32 ShellExecuteA i i *c *c *c *c i'&cd
> >>>>>>>>>>>> SW_SHOWNORMAL=:1
> >>>>>>>>>>>> NULL=:<0
> >>>>>>>>>>>> NB. End Insert 1
> >>>>>>>>>>>> browse=: 3 : 0
> >>>>>>>>>>>> cmd=. deb y
> >>>>>>>>>>>> isURL=. 1 e. '://'&E.
> >>>>>>>>>>>> if. IFJHS do.
> >>>>>>>>>>>> cmd=. '/' (I. cmd='\') } cmd
> >>>>>>>>>>>> if. -. isURL cmd do.
> >>>>>>>>>>>> if. -.fexist cmd do. EMPTY return. end.
> >>>>>>>>>>>> cmd=. 'file://',cmd
> >>>>>>>>>>>> end.
> >>>>>>>>>>>> redirecturl_jijxm_=: cmd
> >>>>>>>>>>>> EMPTY return.
> >>>>>>>>>>>> end.
> >>>>>>>>>>>> NB. Insert 2
> >>>>>>>>>>>> if. IFWIN do.
> >>>>>>>>>>>> cmd=. '/' (I. cmd='\') } cmd
> >>>>>>>>>>>> if. -. isURL cmd do.
> >>>>>>>>>>>> if. -.fexist cmd do. EMPTY return. end.
> >>>>>>>>>>>> cmd=. 'file://',cmd
> >>>>>>>>>>>> end.
> >>>>>>>>>>>> ShellExecute(0;'open';cmd;NULL;NULL;SW_SHOWNORMAL)
> >>>>>>>>>>>> EMPTY return.
> >>>>>>>>>>>> end.
> >>>>>>>>>>>> NB. End Insert 2
> >>>>>>>>>>>> ----------------------------------------------------------------------
> >>>>>>>>>>>> For information about J forums see
> >>>>>>>>>>>> http://www.jsoftware.com/forums.htm
> >>>>>>>>>>>>
> >>>>>>>>>>> ----------------------------------------------------------------------
> >>>>>>>>>>> For information about J forums see
> >>>>>>>>>>> http://www.jsoftware.com/forums.htm
> >>>>>>>>>>>
> >>>>>>>>>> ----------------------------------------------------------------------
> >>>>>>>>>> For information about J forums see
> >>>>>>>>>> http://www.jsoftware.com/forums.htm
> >>>>>>>>>
> >>>>>>>> ----------------------------------------------------------------------
> >>>>>>>> For information about J forums see
> >>>>>>>> http://www.jsoftware.com/forums.htm
> >>>>>>>
> >>>>>> ----------------------------------------------------------------------
> >>>>>> For information about J forums see http://www.jsoftware.com/forums.htm
> >>>>>
> >>>> ----------------------------------------------------------------------
> >>>> For information about J forums see http://www.jsoftware.com/forums.htm
> >>>
> >> ----------------------------------------------------------------------
> >> For information about J forums see http://www.jsoftware.com/forums.htm
> >
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
--
regards,
====================================================
GPG key 1024D/4434BAB3 2008-08-24
gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm