Wednesday, September 14, 2011

Lynx: Associating filetypes with a program in Windows

After a few hours of trying and failing in lynx.cfg and searching the Internet, I found a reasonably good collection of ideas (kudos to Kenneth Kwok), which served me with inspiration for a working solution.

• The version of Lynx is 2.8.7rel1, unfortunately it doesn't support SSL (gonna work on getting Lynx with that some day...).
N., 15.09.2011. update: A fully functional and SSL-enabled, albeit an older, 2.8.5rel1, version of the browser is available at Claudio Santambrogio's (csant) website (beware that export and other restrictions may still apply to the downloader's country).

As I needed an SSL-based browser, then out of curiosity I started comparing both Lynx browsers' config files and to my great delight found that csant's external app configuration was more elegant than my previous discovery. Jump to a description of how to implement the better solution.

And yes, the options inspired by Kenneth Kwok are still valid, but there are now less scenarios to use them.
• The operating system is Windows xp SP3, other Windows operating systems may also apply, but exact instructions on how to change environment variables were gleaned from this version of Windows.

Unlike in the linked article, it turned out that I didn't need to use a .mailcap file to associate a helper app.

The interesting part is that Windows Lynx (still) requires batch files to send requests for an external application and a path to them must be set as a global or user environment variable.
  • Create a folder that will hold batch files. I created one in
    C:\Program Files\Lynx\Batches
  • Create an environment variable pointing to that path:

    In My Computer/System Properties > go to Advanced tab > click "Environment Variables" button > in the relevant window's "System variables" section > scroll down to Path, select it, click the Edit button;

    In the path editing window, the Path string is long, but you can add a semicolon to the end of the string (if it's missing), then right after the semicolon add

    C:\Program Files\Lynx\Batches

    and that's it. (No additional semicolon required.)

    Click OK to close the window, click OK in Environment Variables window — This will save and update the path in Windows xp (maybe 2000, too) or newer; click OK for System Properties window.

    You won't need to restart unless it's a Windows 9x OS, for which you'd need to edit autoexec.bat, enter a short-form path à la C:\PROGRA~1\Lynx\Batches and restart the system for changes to take effect.
  • Now, in the C:\Program Files\Lynx\Batches folder itself, assuming you only want an image viewer program to be associated, create paint.bat, edit it as follows:
    @ECHO OFF
    C:\WINDOWS\SYSTEM32\Mspaint.exe %1
    ^ In addition, you may wish to add %2 %3 %n — if you know that there may be more arguments passed from Lynx, but there's usually one.
    Save the batch file.
  • In lynx.cfg (opened either via WordPad or Notepad2 or something that supports both CR & LF newlines), go to a certain place in the file by searching for the image/png pattern. There, you will see which MIME types you must activate for each filetype suffix.

    I uncommented (deleted a hash # from the start of the line) all that were web images, such as those concerning .png, .gif, .jpg and .jpeg.
  • Then in lynx.cfg, go to part of the file using the VIEWER: search pattern. There, you will see a list of program commands associated with a particular MIME-type (they are short by default, because they're typically UNIX-specific).
    N., 15.09.2011.:
    Uncomment, or rather, copy, paste, and uncomment those for image formats, and modify the commands to look like this:
    VIEWER:image/gif:start mspaint %s
    VIEWER:image/png:start mspaint %s
    VIEWER:image/jpeg:start mspaint %s
    VIEWER:image/tiff:start gimp-2.6.exe %s #special case
    • The superb catch ^ is where one must use the start command to invoke a program that's located in the Windows Path environment variable.
    mspaint is the command-line name of the Windows Paint program, which is located in C:\WINDOWS\SYSTEM32 and that address is typically set as one of the locations in the Path environment variable.
    gimp-2.6.exe is a different case, where I separately had to include C:\Program Files\GIMP-2.0\bin in the Path environment variable to make it launch, as for some reason it was impossible to use the full program path in the Lynx config file.
    Uncomment, or rather, copy, paste, and uncomment those for image formats, and modify the commands to look like this:
    VIEWER:image/gif:paint.bat %s&:NON_XWINDOWS
    VIEWER:image/png:paint.bat %s&:NON_XWINDOWS
    VIEWER:image/tiff:gimp.bat %s&:NON_XWINDOWS
    VIEWER:image/jpeg:paint.bat %s&:NON_XWINDOWS
    • Up here ^, add paint.bat right after a colon that follows the mimetype;
    %s is the wildcard for the filename to be entered;
    • The ampersand & is there to leave the program in the background. It can be there in Windows, but it's useful in Unix-like systems.
    :NON_XWINDOWS [sic] basically specifies that the targetted application is not an X Window System program and this option can be there, too. In Windows it may mean that the batch program is not exactly a graphical program either.
  • Save the configuration file and I think you should be done.
    Launch Lynx, go to a page with an image file, then on it, press Enter/Return or the left key to activate.
Similar steps can be made for other filetypes and MIME-types (which can be added, btw, since the list in lynx.cfg is non-exhaustive) and you can add programs different than Paint for other filetypes. Above, I have setup a batch file to run The GIMP for the TIFF filetype.

No comments: