XVile Menus

The Motif and Athena widget versions of xvile automatically support user configurable menus.


If the environment variable XVILE_MENU is set, it contains the name of the rc file. Otherwise, the name ".vilemenu" is used. The name of the menu file is given in the variable "$menu-file". If it is not found, and is different from "vilemenu.rc", xvile looks for that file in the list of directories given in "$startup-path". The "vilemenu.rc" file is treated specially because it is the file installed from vile's distribution.


The file contains a series of lines whose first character denotes the type of entry, subsequent fields delimited by colon:

C – cascade (actually pulldown). One field only is recognized, the menu heading.
B – button (menu entry). The first field is the menu label. The second is the command which will be executed. If the command is a number, it is expanded into the vile command execute-macro-<number>.

Besides the normal vile commands, the menu implements the following

new_xvile – spawn a new copy of xvile.
edit_rc – switch to a buffer with ".vilerc".
parse_rc – source ".vilerc"
edit_mrc – switch to a buffer with the menu rc file which was found, e.g., "$menu-file" or "vilemenu.rc".

S – separator
L – list buffers. Each time you select this menu entry, vile constructs a current list of the buffers, allowing you to switch to any buffer by selecting it from the menu. It has to be at the end of a menu, and only one is allowed.

For the Motif version, the accelerators are constructed to correspond with the vile commands for switching buffers, e.g., _0, _1 ...

Lines beginning with '"' or ';' are ignored. character. Lines beginning with '#', or text after a tab also are ignored, but we may drop this feature at some point, to make it more consistent with vile's macro files.

The special keyword "cmd" tells the menu function to invoke the following keyword as a :-line command, so that commands which must solicit input will work properly.


A sample .vilemenu file:

      B:Edit .vilerc:edit_rc
      B:Parse .vilerc:parse_rc
      B:Edit .vilemenu:edit_mrc
      B:Apply Highlighting:cmd HighlightFilter
      B:Clear Highlighting (above):clear-attributes-til beginning-of-file
      B:Clear Highlighting (below):clear-attributes-til end-of-file
      B:Search Forward...:cmd search-forward
      B:Search Backward...:cmd search-reverse
      B:Reload File:cmd e!
      B:Rename Buffer:cmd rename-buffer
      B:Edit:cmd edit-file
      B:Rename File:cmd filename
      B:Manual for...:cmd ShowManpage
      B:Files:capture-command "ls -l"
      B:Processes:capture-command "ps"
      B:Users:capture-command "w"
      B:Show Current Only:delete-other-windows
      B:Toggle Show:toggle-buffer
      C:Fixed Fonts
      B:5x8:setv $font 5x8
      B:7x14:setv $font 7x14
      B:8x13:setv $font 8x13
      B:8x16:setv $font 8x16
      B:9x15:setv $font 9x15
      B:10x20:setv $font 10x20
      B:12x24:setv $font 12x24
      C:Nice Fonts
      B:10pt:setv $font "-*-lucidatypewriter-*-r-normal-sans-10-*-*-*-*-0-iso8859-1"
      B:12pt:setv $font "-*-lucidatypewriter-*-r-normal-sans-12-*-*-*-*-0-iso8859-1"
      B:14pt:setv $font "-*-lucidatypewriter-*-r-normal-sans-14-*-*-*-*-0-iso8859-1"
      B:16pt:setv $font "-*-lucidatypewriter-*-r-normal-sans-16-*-*-*-*-0-iso8859-1"
      B:18pt:setv $font "-*-lucidatypewriter-*-r-normal-sans-18-*-*-*-*-0-iso8859-1"
      B:20pt:setv $font "-*-lucidatypewriter-*-r-normal-sans-20-*-*-*-*-0-iso8859-1"
      B:Apropos...:cmd apropos
      B:On Function...:cmd describe-function
      B:On Key...:describe-key &gts
      B:Color Schemes:show-color-schemes


This was originally adapted from a description by Philippe Chassany in 1997.