Changes between Initial Version and Version 1 of UserGuide

Show
Ignore:
Timestamp:
03/22/09 10:46:10 (8 years ago)
Author:
tooar (IP: 79.194.36.250)
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • UserGuide

    v1 v1  
     1= User Guide = 
     2 
     3This document records advice, tips, answers to questions etc that might assist emelFM2 (e2) users. The content is work-in-progress. If you identify anything to usefully add here, please go ahead and add it. 
     4 
     5== STARTUP == 
     6 
     7Various command-line switches can be used, to determine aspects of the way an e2 session operates: 
     8Program options: 
     9 * -1,–one=DIR           set 1st pane’s start directory to DIR 
     10 * -2,–two=DIR           set 2nd pane’s start directory to DIR 
     11 * -c,–config=DIR        set config directory to DIR (default: ~/.config/emelfm2) 
     12 * -e,–encoding          set filesystem coding (include “ascii” or “ASCII” in this, to omit file path/name conversions) 
     13 * -f,–fallback-encoding set fallback encoding (default: ISO-8859-1) 
     14 * -i,–ignore-problems   ignore encoding/locale problems (at your own risk!) 
     15 * -l,–log-all           maximise scope of error logging (relevant only when built without debugging-support) 
     16 
     17If the program has not been built with debugging-support enabled (compiled without make-option DEBUG=1): 
     18(note that this option must be used if you wish emelFM2 to nicely respond to shutdown, save-yourself etc requests by your desktop session-manager) 
     19 * -m,–daemon         detach emelfm2 session from its controlling terminal, and run as a daemon 
     20 
     21 * -r,–run-at-start      command to run immediatly after start 
     22 * -s,–set-option        set configuration parameter (one-line argument in config file format) 
     23 * -t,–trash=DIR         set trash directory to DIR (default: ~/.local/share/Trash/files) 
     24Help options: 
     25 * -h,–help              show this help message 
     26 * -u,–usage             display brief usage messsage 
     27 * -v,–version           display version and build info 
     28 
     29If the program has been built with debugging-support enabled (compiled with make-option DEBUG=1): 
     30 * -d,–debug=[1-5]       set debug messages level from 1 (lowest) to 5 (highest) 
     31 * -x,–verbose           display time/location info in debug messages 
     32 
     33== USER INTERFACE == 
     34 
     35The core elements of the UI are: 
     36 * lists showing information about the items in two directories (or one, if the pair show the same directory); 
     37 * a place where e2 messages, output from commands etc is shown; and 
     38 * four toolbars. 
     39 
     40The directory lists and message area generally referred to here as “panes”, and in particular, “file panes” or “output pane”. 
     41 
     42The file panes can be tiled side-by-side, or top-to-bottom. “Pane 1” is on the left, if the file panes are tiled side-by-side, or on the top, if the panes are tiled top-to-bottom. “Pane 2” is on the right, if the file panes are tiled side-by-side, or on the bottom, if the panes are tiled top-to-bottom. 
     43 
     44At any time, one of the two file panes will be ‘active’ (have focus). The active pane is normally indicated by changed color of the column headers in the pane. However re-coloring does not work with some Gtk themes. If that applies to you, change the relevant setting on the ‘panes’ page of the configuration dialog (see the CONFIGURATION section, below), to enable bold column titles, as an alternative indicator. 
     45 
     46The file panes can re-sized, or hidden, by dragging the separator or clicking a relevant toolbar button. The output pane can be resized, up to the full window size, or hidden, likewise by dragging or clicking. 
     47 
     48You can change the order of columns displayed in either file pane. Press the mouse left-button while the mouse cursor is on the header of the column you want to move. Then drag it to where you want. Such change will be remembered between sessions. 
     49 
     50You can change the width of any column by dragging the relevant column-separator. (There is a minimum size, related to the size of the column label.) You can hide any column by un-checking the corresponding column on the ‘columns’ page of the configuration dialog. Such changes will be remembered between sessions. 
     51 
     52You can sort a file list according to the data in any column, by left-clicking on the column’s header. Repeated clicks toggle the sort-order. The actual order that results depends on the user’s locale settings. The result might be different from the ‘traditional’ way. 
     53 
     54You can display only items which match specified name(s), date and/or permissions criteria, by setting filter(s) for the pane in question. Do that via dialogs initiated from a toolbar filters button. Directories can be included in the filtering. One or more filters can be used simultaneously. To filter items by name, you provide a string with one or more patterns, each with wildcard(s) “*” and/or “?”, in general. (NOTE: there can be no ‘[…]’ character ranges in a pattern, and “*” and “?” cannot be escaped to include them literally in a pattern). If more than one pattern is used, they must be separated by a “,”. Any pattern(s) can have “!” prepended, which will cause a matched item to be excluded from the display. To include items whose name begins with “!”, prepend “” to that pattern.  As a convenience, the effect of every pattern in the string can be toggled, by checking the “inverted” box. 
     55 
     56Right-clicking on a file pane or output pane will pop up a menu of things you may wish to do, there. For the file panes, a sub-menu can be opened by pressing a <shift> or <ctrl> button before right-clicking. 
     57 
     58The toolbars are referred to as “pane1 bar”, “pane2 bar”, “task bar” and “command bar”. The pane1 bar is by default at the top of pane 1. The pane2 bar is by default shown at the top of pane 2. The task bar is by default shown between the file panes. The command bar is by default shown near the bottom of the window. 
     59 
     60Pane1 bar and pane2 bar typically have the same items in them, in mirrored order (more or less). Commands initiated by the items in those bars apply to the respective pane. Task bar items mostly relate to the active pane. (By default it includes a ‘refresh’ button which updates both panes.) Command bar items relate to the output pane, or other miscellaneous commands. 
     61 
     62Both pane1 bar and pane2 bar typically have a combo box where the user can enter or select a directory to be shown in the corresponding pane (referred to a a “directory line”). In addition to normal choice, clicking the middle mouse button in a directory line, or pressing <Ctrl>Tab while a directory line is ‘focused’, will open a directory-selection dialog. 
     63 
     64A “navigation” window for the active pane can be displayed, and used to select the directory to show in the corresponding file pane. By default, <Shift>F9 will open this window. Activating (by mouse double-click or <Enter> keypress) any of the listed directories will cause that directory to be opened. Directories which cannot be accessed are shown in the ‘negative’ text color (typically, red). Note that the content of such windows is not refreshed dynamically. A context-menu includes capability to manually refresh, among other things. 
     65 
     66By default, toolbar buttons will show tooltips, for those of us less familiar with the icons. You can change the button style to include labels, if you wish. Right-click on a toolbar to see its context menu, which includes settings which can be changed. Or open the configuration dialog, and on the relevant bar’s ‘options’ page, change the ‘button-style’ option. 
     67 
     68The output pane is more than a simple terminal window, it is also intended to be a tool. 
     69 
     70You may have as many different output text buffers (aka tabs) as desired. They can be added or removed using the output pane context menu. If more than one tab is in use, numerical tab-titles are shown, for selecting the tab of interest at any time. 
     71 
     72Selected text in a tab can be saved, using the relevant context-menu item. The text can be edited, again using the relevant menu item. Not that editing per se is so important, but in particular the editor has the ability to find text, and save the whole buffer. See comments below on EDITING. 
     73 
     74Text selected in a tab can be “activated” by a double-click or a <Ctrl>-click, if that text names an item that belongs to a recognised filetype. The named item will be opened just as if it had been in a filelist. Any filepath in the selection is handled, or if there is no filepath, the directory displayed in the active file pane will be assumed. 
     75 
     76If selected text describes a recognised filetype, and the output pane context-menu is opened by a right-click on the selection, then menu will include a sub-menu of operations for that filetype, the same menu as for a selected item of that type in a file-list context-menu. 
     77 
     78A <Ctrl>-click, or right-click to open a context-menu, will also operate on non-selected text in the output pane, as described above. As there is no selection, space characters define the text that is used. 
     79 
     80== FINDING ITEMS == 
     81 
     82Typing, while a filepane is focussed, will select the first item whose name begins with the typed characters (not case sensitive). That item might be before or after the current position. A small window pops open near the bottom of the pane, showing the characters typed sofar. 
     83 
     84By default the keys <Ctrl>f & F3, and a button on the command bar, will allow you to find an item in the active pane by entering into a dialog any part of the item’s name. Wildcards may be entered. When scanning, this action loops round from either end of the filelist to the other end. 
     85 
     86A find plugin allows heavy-duty searching, with that you can find item(s) anywhere, and by many attributes. 
     87 
     88== ENTRY COMPLETION == 
     89 
     90By default, the Tab key is bound to an action (see KEY BINDINGS section, below) which “completes” entries in directory lines or the command line, as follows. 
     91 
     92When entering a path into a directory line, pressing the Tab key will complete that entry, if there is only one valid completion. If there is more than one such completion, they will be listed in the output pane. (Note also that pressing <Ctrl>Tab will open a directory-selection dialog.) 
     93 
     94In general, when entering text into the command line, pressing the Tab key will complete the “word” that is being entered. If the entered string starts with “./”, the word will be completed using the matching item-name from the active pane. If the entered string does not start with “./”, the word will be completed using the matching item-name from all directories specified in the $PATH environment variable. If there is more than 1 item which could validly complete the word, those items will be listed in the output pane. 
     95 
     96The exception to the previous paragraph is when the entered command is “mount” or “umount”. A “mount” command will be completed with a valid mount point, a “umount” command will be completed with a valid unmountable partition. Again, if there is more than one possible completion, they will be listed in the output pane. Note that this form of completion is permission-depenant, so in many instances, there will be nothing valis to show. 
     97 
     98== KEY BINDINGS == 
     99 
     100Various keys are assigned specific tasks within e2. 
     101 
     102To get a listing of the current e2 key bindings, enter the command ‘keys’ on the command line. You can also type ‘keys panes’, ‘keys command line’ or ‘keys directory lines’ to see the subset of bindings relevant to those places.  (Note ‘keys’ in this context is a default alias, and should be translated, and may be changed by the user.) 
     103 
     104Any key can be assigned to more than one thing, by including the key in a binding more than once. 
     105 
     106Pressing any ‘unbound’ key while the focus is on a file pane opens a small window in which you can continue typing a name, and an item whose name matches what you type will be selected. Note that that window will intercept any “Enter” keypress (and the window will then close) so that if you wish to ‘activate’ the matched item by pressing Enter, you must wait (about 2 seconds) until the window closes, or otherwise, press Enter twice. 
     107 
     108The “comboboxes” (entry fields with drop-down history list) used throughout the application have hard-coded key bindings <Shift><Delete> which clears the contents of the entry from the cursor position to the end, <Alt><Delete> which clears the current entry and any matching history entry(ies), and <Shift><Alt><Delete> which clears the entire history. 
     109 
     110== SELECTION == 
     111 
     112In general, things may be selected in accordance with gtk’s normal method for doing so. For example, selecting items in a file-pane is done by combinations of left-burron-clicks, ctrl-key+left-clicks (which toggle selection-state of the clicked item) and shift-key+left-click (which select the range from previously-selected item to the clicked item). 
     113 
     114As a special case, e2 (except 0.1.0 to 0.1.2) also supports selection of file-pane items by dragging. The protocol for this is: press left mouse button when the cursor is on an item, then press a control key, then drag the mouse cursor over item(s) to be selected. (A bit complex, so as to not interfere with gtk’s normal selection and DnD processes.) 
     115 
     116== DRAG & DROP == 
     117 
     118Drag and drop can be performed in the standard gtk fashion, i.e. by selecting the item(s) you want to process (see SELECTION above), then dragging to a location in either of the file lists, or to any other compatible application. When dragging by left-button, the default operation is to copy the selected item(s) to the drop-target but the action will be different if ‘modifer’ key(s) are pressed at the time of the drop. As usual, if the Shift key is presssed while dropping, the selection will be moved; or if both Shift and Control are pressed, the selection will be linked; or if the Alt key is pressed, a menu will prompt you for the operation you want to perform (the menu allows copy/move/link/cancel). To prevent gtk from treating the process as something other than a drag, the modifier key(s) need to be pressed after the drag has started. 
     119 
     120You may instead perform a drag with the middle-button, which behaves the same as left-plus-Alt i.e. always pops up that action menu. Note that there is an option to make middle-button clicks open the parent directory of the one where the click occurred, and it that option is in force, it may interfere with dragging by middle-button. 
     121 
     122If you drop ONto a directory (other than one that’s part of the selection being dropped), the selected item(s) will be copied/moved/linked INto that directory. This means you can copy/move/link any item into a subdirectory without opening that directory in the other pane. 
     123 
     124If you don’t drop onto a directory, the item(s) will be copied/moved/linked to the directory whose contents are displayed in that pane (if it’s not the same as the source directory, of course) 
     125 
     126It is also possible to drag and drop between different instances of emelFM2 and between emelFM2 and some other gtk-based applications like nautilus, Gnome Midnight Commander and GQView. In some cases it might work in only one direction. 
     127 
     128== TRASH == 
     129 
     130When e2 puts something into trash, it will first try to use a folder named ‘.Trash’ in the directory the item(s) come from i.e. the one shown in the active pane. If such a folder doesn’t exist, fallback choices are: ‘.Trash’ in the user’s home directory, then finally, ‘.emelfm2/Trash’ in the user’s  home directory. The last of these will be created if it didn’t exist already. 
     131 
     132There is no over-write checking for trashed items. Any item with the same name, already in the trash, will simply be erased. 
     133 
     134== OPERATIONS ON FILES AND DIRECTORIES == 
     135 
     136Operations (copy, move etc) on item(s) in the active file pane are performed on the selected items, as would be expected. If a selected item is a directory, the operation applies to the directory as a whole (with its contents), NOT just to the contents of the directory. This means that if, say, a directory is moved, and in so doing over-writes another directory of the same name (usually after the user’s confirmation), then the destination directory and all its contents will be replaced by the source directory and all its contents. The effect of this is that all of the contents of the destination directory are lost. Just like all the contents of a file are lost if it is over-written. 
     137 
     138If you want to operate only on the contents of a directory, you must open the directory and select the contents explicitly. 
     139 
     140Most such operations are added to a queue, and performed when they reach the head of that queue. This allows such operations to be initiated and performed without blocking the user-interface, when the operation takes some time to complete. Some operations – info, view, view again, edit, edit again, open, open with – are performed independently of the queue. 
     141 
     142You can directly rename any allowed item by clicking on its name in a filelist, when the item’s row is not selected. In this case, the rename action is not queued. 
     143 
     144Actions and keybindings are provided to respectively list the finished, active, and waiting members of that queue. 
     145 
     146== BOOKMARKS == 
     147 
     148As you would expect, these are a mechanism for opening a particular directory with minimal effort. 
     149 
     150By default, the pane1 bar and pane2 bar, and the file pane context menu, include a bookmarks sub-menu. Actually, they are a bit more complex than a standard sub-menu – each includes its own context menu (yes, we know, peculiar UI design ..)  with items for adding the currently-displayed to, or removing it from, the recorded bookmarks. This is a quick alternative to opening the configuration dialog to re-arrange bookmarks. 
     151 
     152Though accessible by these several menus, there is only one bookmarks list, which applies to both panes. 
     153 
     154== TEXT FILE VIEWING == 
     155 
     156A simple text-file viewer is included in emelFM2. By default, the F3 key is bound to open that. Alernatively, a specified external viewer may be used, if the relevant config option is set. 
     157 
     158The internal text file viewer handles several different protocols for line-ends (UNIX, DOS etc), and tries to interpret and convert various character-encodings. Even so, encoding may get the better of it, in which case, the file can’t be viewed, or at least, it may contain un-recognizable content. An external encoding-converter can be used instead, if the relevant config option is set, and a converter command is provided there. Such command must convert text to UTF-8 and send that converted text to stdout, and the text will be read by emelFM2 directly into memory. If the converter-command requires that the file encoding be specified, then obviously you will need to discover that before opening the file. Some european candidates are: 
     159 * belarussian: CP1251 IBM866 ISO-8859-5 KOI8-UNI maccyr IBM855 
     160 * bulgarian: CP1251 ISO-8859-5 IBM855 maccyr ECMA-113 
     161 * czech: ISO-8859-2 CP1250 IBM852 KEYBCS2 macce KOI-8_CS_2 CORK 
     162 * estonian: ISO-8859-4 CP1257 IBM775 ISO-8859-13 macce baltic 
     163 * croatian: CP1250 ISO-8859-2 IBM852 macce CORK 
     164 * hungarian: ISO-8859-2 CP1250 IBM852 macce CORK 
     165 * lithuanian: CP1257 ISO-8859-4 IBM775 ISO-8859-13 macce baltic 
     166 * latvian: CP1257 ISO-8859-4 IBM775 ISO-8859-13 macce baltic 
     167 * polish: ISO-8859-2 CP1250 IBM852 macce ISO-8859-13 ISO-8859-16 baltic CORK 
     168 * russian: KOI8-R CP1251 ISO-8859-5 IBM866 maccyr 
     169 * slovak: CP1250 ISO-8859-2 IBM852 KEYBCS2 macce KOI-8_CS_2 CORK 
     170 * slovene: ISO-8859-2 CP1250 IBM852 macce CORK 
     171 * ukrainian: CP1251 IBM855 ISO-8859-5 CP1125 KOI8-U maccyr 
     172 
     173When the ‘find’ function is initiated, a bar of search-related options will be shown near the bottom of the window (and it can be dragged away from there). Of course the bar includes the a place to enter the text sought. That works incrementally, trying to match whatever is entered sofar. There are also options for searching backwards instead of forwards, for ignoring the case of the text sought, and for looping around from either end to the other end, if the search proceeds that far. 
     174 
     175Finding can be initiated from the keyboard or a mouse button. The ‘Enter’ key has been given special privileges: by itself causes the next search, with <Control> it finds the first or (if searching backwards) the last match, and with <Shift> changes the search direction temporarily. Other than that, keys the same as the default button mnemonics may be used, with <Control> or <Alt>. As a special case, <Control>g or <Alt>g will perform a ‘find’. 
     176 
     177The viewer supports the key bindings of a gtk textview widget, other than the ones relating to editing: 
     178 * Right  Move cursor one character towards end of file 
     179 * Left  Move cursor one character towards start of file 
     180 * <Control>Right  Move cursor one word towards end of file 
     181 * <Control>Left  Move cursor one word towards start of file 
     182 * Up  Move cursor up one line 
     183 * Down  Move cursor down one line 
     184 * <Control>Up  Move cursor one paragraph towards start of file 
     185 * <Control>Down Move cursor one paragrpah towards end of file 
     186 * Home   Move cursor to start of line 
     187 * End  Move cursor to end of line 
     188 * <Control>Home Move cursor to start of file 
     189 * <Control>End  Move cursor to end of line 
     190 * Page_Up  Move display up one “page” 
     191 * Page_Down  Move display down one “page” 
     192 * <Control>Page_Up  Move display left one “page” 
     193 * <Control>Page_Down  Move display rigth one “page” 
     194 * BackSpace  Delete character before cursor 
     195 * <Control>BackSpace Delete word before cursor 
     196 * <Control>a   Select all 
     197 * <Control>/  Select all 
     198 * <Control>   Unselect all 
     199 * <Control>c  Copy selected text to clipboard 
     200 * <Control>Insert  Copy selected text to clipboard 
     201 * <Control>Tab  Move focus forward 
     202 * <Shift><Control>Tab Move focus backard 
     203 
     204There is a minimal context menu for changing default configuration. 
     205 
     206When done with searching, the bar can be hidden again. 
     207 
     208Entered search parameters are remembered for the duration of the current session, but not between sessions. 
     209 
     210An action is bound to the key <Shift>F3 to view a file again (re-view), starting at the last-viewed spot in that file. This appies only to the internal viewer. 
     211 
     212== TEXT FILE EDITING == 
     213 
     214A “tiny” text-editor is available. By default, the F4 key is bound to open that. Alernatively, a specified external editor may be used, if the relevant config option is set. 
     215 
     216The internal editor is quite basic, intended for those little jobs that are hardly worth loading another application. Functions are: find, replace, cut/copy/paste, undo, save, save as, save selection. Selected text can be dragged to another spot. No printing. 
     217 
     218Most of these functions can be initiated from the keyboard, and the rest of them from the context menu and/or by button-click. Keyboard bindings set by emelFM2 are the same as the respective mnemonics for buttons and/or context-menu items. As a special case, <Control>z will perform an ‘undo’.  The editor also supports the key bindings of a gtk textview widget: 
     219 * Those listed above under TEXT FILE VIEWING 
     220 * Delete  Delete character at the cursor position 
     221 * BackSpace  Delete character before the cursor position 
     222 * <Shift>BackSpace  Same as Backspace, to help with mis-typing 
     223 * <Control>Delete  Delete characters from cursor position to end of word 
     224 * <Control>BackSpace  Delete characters from before cursor position to start of word 
     225 * <Control>x  Cut selected text to clipboard 
     226 * <Control>v  Paste from clipboard to cursor position 
     227 * <Shift>Delete  Cut selected text to clipboard 
     228 * <Shift>Insert  Paste from clipboard to cursor position 
     229 * Insert  Toggle insert-overwrite mode 
     230 
     231See comments above about searching. Replacement choices are made via a similar interface. When active, the bar is stacked below the search options bar. 
     232 
     233See comments above about character encoding. The same applies to the editor. 
     234 
     235An action is bound to the key <Shift>F4 to re-edit a file, starting at the last-viewed spot in that file. This appies only to the internal editor. 
     236 
     237== PLUGINS == 
     238 
     239These are effectively chunks of code that provide optional, additional capability for e2. Any of them may be cofigured to load (i.e. be ready to run) or not, depending on the user’s expected need for it. (With a big, fast computer, just load them all and get on with life …) Descriptions of the current plugins are provided in the respecitive tooltips, which can be displayed in the plugins context-sub-menu, or the plugins page of the configuration dialog. The view plugin always runs the internal viewer for text files, and so it is useful only if your default file viewer is set to be some external viewer. 
     240 
     241Any plugin might only be needed for a key binding, or a toolbar button action, for example. So a loaded plugin may be configured to appear in the plugins context menu, or not. Plugin configuration settings are preserved until changed by the user. 
     242 
     243If all goes according to plan, more plugins are coming ! 
     244 
     245Now, some specific notes: 
     246 
     247=== access control list plugin === 
     248 
     249ACL’s enable application of a superset of most of the “normal” permissions, to an item in a filesystem. Fine-tuning of *NIX read (r), write (w) and/or traverse|execute (x) permission is possible for particular users and/or particular groups. As such, ACL’s are mainly relevant in contexts where there are various users, such as corporate systems. 
     250 
     251Not all *NIX operating systems and file systems support ACL’s. If support is present, not all items (or none at all) in the filesystem need actually have an ACL. Any item in a supporting filesystem may have an “access-ACL” that determines the effective r, w, and/or x permission(s) of the item.  On a system where _POSIX_ACL_EXTENDED is defined, any directory may also or instead have a “default-ACL” that governs the initial access-ACL for items created within that directory. 
     252 
     253Two standard formats are used for human-readable ACL display. 
     254 
     255This is an example of one ACL in the long text form: 
     256 . user::rw- 
     257 . user:lisa:rw-         #effective:r– 
     258 . group::r– 
     259 . group:444:rw-     #effective:r– 
     260 . mask::r– 
     261 . other::r– 
     262 
     263These are two examples of the short text form: 
     264 . u::rw-,u:lisa:rw-,g::r–,g:444:rw-,m::r–,o::r– 
     265 . g:444:rw,u:lisa:rw,u::wr,g::r,o::r,m::r 
     266 
     267An ACL consists of a series of ACL-entries. In the above examples, each line (in the long-form) and each comma-separated block (in the short-form) represents an ACL-entry. An ACL-entry contains 
     268 * an entry tag type, largely represented by the first part of the entry (user, g, mask, o etc) (see below for a description of these types), 
     269 * for two types of entry tag, a “qualifier”, represented by the second part of the entry (a UID or GID – lisa, 444), and 
     270 * a set of permissions represented by the third part of the entry (r w x). 
     271 
     272There are 6 types of enties, as described below. If an ACL exists, 3 of the 6 will always be present – these correspond to the usual user/group/other permissions which apply generally. The other 3 types provide the extra flexibility which justifies using an ACL. There are rules about how these may be used, of course. 
     273 
     274The ACL_USER_OBJ entry denotes access rights for the item’s owner. A valid ACL contains exactly one such entry. Typically, the “normal” rwx permissions defined for the item’s owner would be used for the permissions of the ACL_USER_OBJ entry. 
     275 
     276The ACL_GROUP_OBJ entry denotes default access rights for members of the item’s group. A valid ACL contains exactly one such entry. Typically, the “normal” rwx permissions defined for the item’s group would be used for the permissions of the ACL_GROUP_OBJ entry. If the ACL has no ACL_MASK entry, then the permissions defined for the item’s group correspond to the permissions of the ACL_GROUP_OBJ entry. If the ACL does have an ACL_MASK entry, then the permissions defined for the item’s group correspond to the permissions of the [ACL_GROUP_OBJ entry masked by (and’ed with) that?] ACL_MASK entry. 
     277 
     278The ACL_OTHER entry denotes access rights for processes that do not match any other entry in the ACL. The “normal” “other” rwx permissions defined for the item would typically be used for the permissions of the ACL_OTHER entry. A valid ACL contains exactly one such entry. 
     279 
     280ACL_USER entries denote the maximum access rights for the user identified by the entry’s qualifier. This type of entry may appear zero or more times in an ACL. This type of entry has a qualifier denoting the identifier of a user (UID as a name or number). The actual permissions defined for the user correspond to the permissions of the ACL_USER entry masked by (and’ed with) the ACL_MASK entry. 
     281 
     282ACL_GROUP entries denote access the maximum rights for groups identified by the entry’s qualifier. This type of entry may appear zero or more times in an ACL. This type of entry has a qualifier denoting the identifier of a group (GID as a name or number). The actual permissions defined for the group correspond to the permissions of the ACL_GROUP entry masked by (and’ed with) the ACL_MASK entry. 
     283 
     284An ACL_MASK entry denotes the maximum access rights that can be granted by entries of type ACL_USER, ACL_GROUP_OBJ, or ACL_GROUP. An ACL that contains entry(ies) of ACL_USER or ACL_GROUP tag types must contain exactly one entry of the ACL_MASK tag type. If an ACL contains no entries of ACL_USER or ACL_GROUP tag types, then an ACL_MASK entry is optional. 
     285 
     286A qualifier denotes the identifier of a user or a group (UID or GID as a name or number), for entries with tag types of ACL_USER or ACL_GROUP, respectively. All user-ID qualifiers must be unique among all entries of ACL_USER tag type, and all group-ID qualifiers must be unique among all entries of ACL_GROUP tag type. Entries with tag types other than ACL_USER or ACL_GROUP have no defined qualifiers, and in human-readable form, their respective qualifiers are empty or blank. 
     287 
     288You might get some further useful insight from the likes of: 
     289 . www.vanemery.com/Linux/ACL/linux-acl.html 
     290 . rofi.roger-ferrer.org/eiciel/doc 
     291 
     292Whew !!! 
     293 
     294First, a caveat. Not all operating systems (or more particularly their libraries used to manage ACL’s) support the same level of functionality. This plugin assumes reasonably-full functionality, more-or-less the full capability of the aborted POSIX standard for ACL’s. Linux meets this requirement, others will just have to experiment. 
     295 
     296There is a lot of ways that changes can be made using this plugin. You can add ACL(s) to any item that has none, and change any existing ACL in many ways, but (because the file system doesn’t allow it) you can’t entirely remove an existing ACL from an item. You can’t add and remove things at the same time – you’d need to run the process twice to achieve that effect. 
     297 
     298ACL entries for the current item are represented on separate lines in the dialog. Entries can be added or removed using the buttons at the bottom of the dialog, and can be edited in place. 
     299 
     300What is the whole-flag for? In some cases (ACL_USER, ACL_GROUP, ACL_MASK) you can add that entire entry to, or remove that entire entry from, the ACL, or (if the entry exists already for an item being processed) you can just add to or remove from that entry’s permissions. So we need to distinguish what is intended. If the entry’s WHOLE setting is in effect, then as you’d expect, the specified change(s) for that entry apply to it as a whole, not just to its permissions. For other types of entries, the whole-flag is ignored, when setting or adding at least. A global whole-flag (below the displayed ACL), if set, has the same effect as setting each relevant whole-flag for all the entries in the ACL (at implementation-time, and whether or not the individual entries’ whole-flags are set). 
     301 
     302Among other things, this arrangement means you will want to set the whole-flag for entries being added to an ACL. 
     303 
     304A common error when first adding ACL_USER or ACL_GROUP entry(ies) – a ACL_MASK entry must also be added. 
     305 
     306If the item currently being processed is a directory, you may choose to apply changes recursively. In that case, you may choose to apply changes to directories or to non-directories or to everything. Any changes to a directory (whether or not recursion is in effect) may be to its access-ACL and/or to its default-ACL, or to neither of those ACL’s, depending on what has been selected. Remember – to apply changes to directories, you need to activate _all_ the relevant options. 
     307 
     308This is how the change-process works in the plugin: 
     309 
     310Each entry in the proposed new ACL is processed in turn. A WHOLE setting is deternined by whether the global whole-flag is set, or othewise, whether a whole-flag is set for the specific entry. 
     311 
     312After all WHOLE settings are known, the ACL (if any) of the item being updated is interrogated. 
     313 
     314If the chosen action is SET: 
     315 * if a WHOLE setting is in effect: 
     316   * if a matching existing entry is found, replace its permissions 
     317   * if no matching existing entry is found, and if valid to do so, add this entry and its permissions 
     318   * if no matching existing entry found, and not valid to add it, continue 
     319 * if a WHOLE setting is NOT in effect: 
     320   * if a matching existing entryis found, replace its permissions 
     321   * if no matching existing entry is found, continue 
     322 
     323If the chosen action is ADD: 
     324 * if a WHOLE setting is in effect: 
     325   * if matching existing entry is found, add specified permissions to it 
     326   * if no matching existing entry is found, and if valid to do so, add this entry and its permissions 
     327   * if no matching existing entry is found, and not valid to add it, continue 
     328 * if a WHOLE setting is NOT in effect: 
     329   * if matching existing entry is found, add permissions to it 
     330   * if no matching existing entry is found, continue 
     331 
     332If the chosen action is REMOVE: 
     333 * if a WHOLE setting is in effect: 
     334   * if matching existing entry is found, and if valid to do so, remove it 
     335   * if matching existing entry is found, and if not valid to remove it entirely, remove specified permissions 
     336   * if no matching existing entry is found, continue 
     337 * if a WHOLE setting is NOT in effect: 
     338   * if matching existing entry is found, remove specified permissions from it 
     339   * if no matching existing entry is found, continue 
     340 
     341=== clone plugin === 
     342 
     343Copies selected item(s), each with new name as entered by the user, to the current directory. 
     344 
     345=== copy plugin === 
     346 
     347This offers the possibiitiy of pausing the copy process. Any such pause begins at the completion of the item currently being copied. If that’s a directory, all its decendants will be competed before the pause. 
     348 
     349=== crypt plugin === 
     350 
     351Encrypt or decrypts selected files. Encryption is performed using an algorithm based on ARC4 (the same algorithm as used by tinycrypt). Recursion into directories is possible, if the corresponding option is selected. 
     352 
     353The files may optionally be compressed too, as part of the encryption process (compression of a small file might make it a bit larger). For compression, the plugin uses external libraries – first it tries to find an LZO library (which has less compression but is fastest) or if that’s not available, then it tries to find and use zlib, and lastly, it will try for bzip2 (most compression, but slowest). When decryptiong, decompression will be performed automatically, provided the corresponding compression library is still available. 
     354 
     355The conversion process requires that the file being processed fits entirely into available memory, and [de]compression roughly doubles that memory-space requirement. So this plugin is not suitable for large files. 
     356 
     357The contents of password entry(ies) may be rendered visible (by pressing <Ctrl>p in an entry) or re-hidden (by <Ctrl>h) or (for gtk >= 2.10) partially and temporarily visible (by <Ctrl>t). 
     358 
     359Several file naming options are provided, anything more complex will need to be done in the rename plugin afterwards. Existing properties of an encrypted file can optionally be stored in the file, and then optionally re-applied after de-cryption. 
     360 
     361Each processed file can be retained as is after processing, if so desired. This is probably wise, until you are comfortable with the way the plugin is operating. Any file not kept is thoroughly wiped, not just deleted. 
     362 
     363=== disk usage plugin === 
     364 
     365Calculates the ‘apparent’ disk usage of selected item(s). ‘Apparent’ in the sense that any ‘holes’ in the file data which are artefacts of the filesystem are not counted in the size, even though they’re not avaiable for other purposes. 
     366 
     367=== directory compare plugin === 
     368 
     369Selects items which match items in the other pane. Where relevant, md5 sums are used for the comparison. After selection, items can of course be moved, copied etc, or their names copied, using that plugin. As always, selections can be inverted by pressing Ctrl-i, before processing. 
     370 
     371=== find plugin === 
     372 
     373The choices made for the various buttons and text-entry strings shown in this dialog are remembered for at least the duration of the current emelFM2 session. If the plugin is still loaded at the end of a session, then the choices will be saved, and available to be re-loaded next time. 
     374 
     375History lists for text-entry strings can be cleared by pressing <Alt>Delete when the entry in question is focused. 
     376 
     377==== find by name ==== 
     378Here you can enter the name of the file you want to match. The e2 macros %f or %F can be used instead of explicit name(s). 
     379 
     380If the “is” option is selected, the find will match any file of that name, which may include wildcard characters: 
     381 .* will match any or no characters. For example, the pattern “*.txt” will match files named foo.txt and .txt, but not foo.text. 
     382 .? will match any one character.  For example, “wibble.?” will match files named wibble.c and wibble.s, but not wibble. or foo.c. 
     383The “is like” option will match any file whose name contains the string you enter.  For example, the string “.txt” will match the files foo.txt and bar.txt, but not the file baz.text. Again, wildcard characters can be used. 
     384If the “regular expression” button is selected, all of the regex capabilities of the shell “find” command may be used. In this case, don’t search for %f or %F if more than one item is selected. 
     385 
     386==== find by content ==== 
     387You may enter a string of characters to search for in files to be matched. For example, to match all files containing “linux” you could either select the “this” option and enter “linux”, or select the “like this” option and enter the pattern “*linux*”. Regular expression searching is conducted by the shell “grep” command, for which there is extensive documentation elsewhere. 
     388 
     389==== find by mime ==== 
     390You may enter a string of characters which are all or part of the string representing the mimetype of files to be matched. For example, “pdf” or “application/pdf” would match files in Adobe’s PDF format. The string is case-sensitive. 
     391 
     392==== find by mtime ==== 
     393These options allow you to find files according to their modification time. That is the last time that the file was saved to disk storage. You can choose whether you want to match files with times earlier than, equal to, <b>and/or</b> later than the time you have entered. 
     394 
     395==== find by atime ==== 
     396These options allow you to find files according to their access time. That is the last time that the file was read or executed. You can choose whether you want to match files with times earlier than, equal to, <b>and/or</b> later than the time you have entered.” 
     397 
     398==== find by ctime ==== 
     399These options allow you to find files according to their inode time. That time is updated whenever a linux file is created, when its atime or mtime is changed, when its mode is changed, and other times too. You can choose whether you want to match files with times earlier than, equal to, and/or later than the time you have entered. 
     400 
     401==== find by size ==== 
     402You may enter the size (in bytes, kilobytes or megabytes) of files to be matched. For kb or MB, the size may be like “1.23”. You can choose whether you want to match files sized smaller than, equal to, and/or bigger than the size you have entered. 
     403 
     404==== find by permission ==== 
     405These options allow you to find files according to their permissions (a.k.a “mode”). You can match against multiple permissions. The ones selected need not be the only ones that apply to matched files. 
     406 
     407==== find by owner ==== 
     408These options allow matching files according to their owner and/or group. You can choose to match against the name/group of the logged-in user and/or another specified user or group, or to ignore the user/group. You can also match files without a known user or group by selecting the “Match unknown users” or “Match unknown groups” toggle buttons. 
     409 
     410==== find by type ==== 
     411These options allow you to find files according to their type. You can match against multiple types. 
     412 
     413=== foreach plugin === 
     414 
     415Executes an entered command on each selected item separately. 
     416 
     417NOTE the action-name for this plugin is (in english) file.foreach. If this action is run from the command line, it needs to have a “!” prepended e.g. !file.foreach echo %f. (This is to prevent any %f or %p macro in the command from being expanded by the command-interpreter. Such expansion needs to be performed by the plugin, instead.) 
     418 
     419=== glob plugin === 
     420 
     421Selects items whose name matches specified pattern(s). The selection criteria are the same as filelist filtering criteria. 
     422 
     423=== move plugin === 
     424 
     425This offers the possibiitiy of pausing the move process. Any such pause begins at the completion of the item currently being moved. If that’s a directory, all its decendants will be competed before the pause. 
     426 
     427=== names copy plugin === 
     428 
     429This normally copies the name(s) of selected item(s) to the clipboard. 
     430If a <Shift> key is pressed when the plugin is activated, the full path of each item will be copied, instead of just its name. 
     431If a <Control> key is pressed when the plugin is activated, copied item paths or names will be separated by a “newline” character, instead of a space. 
     432 
     433=== pack plugin === 
     434 
     435Archives of these sorts are supported: 
     436   ..tar.gz 
     437   ..tar.bz2 
     438   ..tar 
     439   ..zip 
     440   ..7z 
     441   ..rar 
     442   ..arj 
     443   ..zoo 
     444 
     445=== rename plugin === 
     446 
     447Items to be processed can be located in any specified filesystem directory, and optionally, in any descendant directory of the starting point. 
     448 
     449Items to be processed can be those selected (in either displayed filelist), or all items which match a specific name, or match a name-pattern with wildcard character(s) “?” and/or “*”, or a match a name-pattern with regular-expression syntax. Note that internally, regular-expression matching is always used. Regular expressions are “greedy” and this can produce unexpected results. For example, using a wildcard pattern “*-*”, when renaming an item “12-34-56”, the first “*” will match “12-34”, not “12”. 
     450 
     451Replacement names can be made all lower-case or all upper-case, and/or a pattern which contains wildcard characters, or “back-reference(s)” to regular-expression-group(s) in the search pattern. 
     452 
     453Documentation on regular expressions can be found by running the shell command “man 7 regex” or “man grep” or from www.regular-expressions.info/reference.html, or many other places. 
     454 
     455In brief: these are the special characters: 
     456 * ^ match the beginning of the line 
     457 * $ match the end of line 
     458 * ignore the special meaning of the next character 
     459 * \ a literal “” 
     460 * – indicates a range when not in the first/last position when specifying ranges with “[” and “]” (see below about LISTs) 
     461 * | union of regular expressions 
     462 * [LIST] match a single character specified inside the brackets e.g. [a-z] 
     463 * [^LIST] do not match a single character specified in the brackets e.g. [^0-9] 
     464 * match any single character (including non-printable ones) 
     465 * * repeat the previous regular expression 0 or more times 
     466 * + repeat the previous regular expression 1 or more times 
     467 * ? repeat the previous regular expression 0 or 1 times 
     468 * (EXP) groups the expression inside the brackets 
     469 
     470This means, for example, that “.*” is needed where a wildcard “*” might have been used, and “.” for a literal “.” 
     471Your installed software may only support ‘basic’ regular expressions, in which case any ? + {  |   (  ) needs to be preceded by a  “”. 
     472 
     473Groups like (EXP) may be referred to in a replacement name-pattern by 1, 2 … in order of their occurrence. 
     474 
     475The whole of any matching item name may be referred to in a replacement name-pattern by (This is an emelFM2 extension, not standard regular expresssion syntax.) 
     476 
     477The replacement name-pattern may include up to 4 counter macros (see macros section below, for details). In this context, initial value defaults to 1 if not explicitly provided. If more than one counter is included, the respective i and w parameters are independent of those in the other counters. A normal “%c” in the name-pattern must be escaped as “%c”. 
     478 
     479It is generally wise to apply the confirmation option, so that each replacement name can be checked before it is applied. 
     480 
     481=== sort-by-extension plugin === 
     482 
     483This is now effectively redundant, as the same functionality is available by clicking the filename column header when a <Control> key is pressed. 
     484 
     485When extension sorting is active, the column-header arrow changes to point right (for ascending order) or left (for descending order). 
     486 
     487=== thumbnails plugin === 
     488 
     489This opens a dialog window showing thumbnails of all recognised images in the active-pane directory. More than one such dialog may be opened, for either or both filepanes. 
     490 
     491Images whose maximum dimension is less than 32 pixels are scaled up. Images whose maximum dimension is more than 128 pixels are scaled down. 
     492 
     493No file operations (copy, delete etc) may be performed directly on items in this dialog. However, selections are normally echoed back to the associated filelist, and operations may be performed from there. Sorting of the images using the normal fields is possible via a menu opened when the Sort button is clicked. 
     494 
     495The dialog has a context-menu which enables manual refreshes of the view contents, un-selecting all items in the view, rotating or flipping the selected items, and changing whether to replicate all [de]selections in the dialog back to the associated filelist. Any rotation or flip is for display only, the original file is not altered. 
     496 
     497This plugin uses functions in libgimpthumb to manage thumbnail-cacheing in accordance with freedesktop.org specification. 
     498 
     499=== timeset plugin === 
     500 
     501Replacement date(s) and/or time(s) may be separately set. If a new date or time is not provided, then the current value will be used. Formats of entered strings should be appropriate for the user’s locale. 
     502 
     503By way of confirmation, the corresponding ‘set’ box must be checked, to implement the change. 
     504 
     505Ony the privileged user (‘root’) is able to vary the ‘ctime’ (inode change time) of any item(s). Changing ctime requires temporary changes to the system clock. That is normally unwise, as typically, other things rely on system time. 
     506 
     507Any replacement date/time can be applied recursively if the item is a directory. If multiple selected items are being processed, the replacement date/time can be applied to all remaining unprocessed items. All selected items can be conformed by simply checking a ‘set’ box and applying the change to all. 
     508 
     509=== tracker plugin === 
     510 
     511At least until the tracker (a.k.a metatracker) information-indexer (see www.gnome.org/~jamiemcc/tracker) is further developed and better-documented, this plugin merely provides a simple listing of indexed items which match specified criteria. 
     512 
     513Tracker (currently) works with a small number of categories of item (in tracker terms, “services”) e.g. documents, videos, music, or it works with mimetypes (sometimes fake mimetypes like ‘system-file-manager’?). When searching by service, it’s possible to also specify some content. (NOTE not yet sure how this content works – probably the specified words are AND’ed.) 
     514 
     515Tracker can also run pre-defined queries (called “rdf queries”, expressed in small XML-ish files with “.rdf” extension). Rdf started as a standard on top of XML for encoding metadata and has evolved into a means for encoding information about, and relations between, things. See, for example, www.w3.org/RDF and www.xml.com/pub/a/2001/01/24/rdf.html. 
     516 
     517To find items by service, select the corresponding radio button, and the service type. Any desired content may be added in the entry field at the bottom. 
     518 
     519To find items by mimetype, select the corresponding radio button, and add one or more mimetypes into the entry field at the bottom. If more than one type, separate them with a space character. 
     520 
     521To use an rdf query, select the corresponding radio button, and enter or choose the path of the query file. 
     522 
     523The tracker package includes utilities “tracker-files”, “tracker-search” and “tracker-query”. The plugin expects those to be executable by name-only (i.e. located somewhere in the search-path). Tracker itself does not have any gnome dependency, but it may be built with a simple GUI that does rely on gnome. 
     524 
     525=== unpack plugin === 
     526 
     527Archives of these sorts are supported: 
     528  ..tar.gz 
     529  ..tar.bz2 
     530  ..tar 
     531  ..zip 
     532  ..7z 
     533  ..rar 
     534  ..arj 
     535  ..zoo 
     536 
     537Compressed single-items (i.e. no tar, and usually named like “somename.ext.bz2” or “othername.ext.gz”) are not supported. They can be readily unpacked by a simple command like ‘bzip2 -d %f’ or ‘unzip %f’ 
     538 
     539=== view plugin === 
     540 
     541This opens the first selected item with the internal text-file viewer. It is intended to be used when the default view action is configured to use an external viewer. 
     542 
     543== CONFIGURATION == 
     544 
     545Most things about the e2 user-interface can be changed, if you wish. Hopefully the default settings are such that changes, if any, will be rare. 
     546 
     547Settings can be viewed or changed in the configuration dialog. Open that by clicking the relevant button near the right-end of the command bar, or by pressing the F11 key (unless you’ve already changed the configuration of those things ..) 
     548 
     549A separate document titled CONFIGURATION gives more specific guidance about e2 settings and how to change them. 
     550 
     551e2 configuration data are saved, between sessions, in 2 files: one (‘cache’) stores data related to run-time detals the user did not  specifically set e.g. window size, history lists for visited directories. The other (‘config’) stores the various parameters set in the configuration dialog. Both those files are by default saved in the directory ~/.emelfm2. If either or both is deleted, e2 will simply revert to default settings for the missing data. 
     552 
     553Note that emelfm2 can (and by default does) watch for and respond to changes to the file ‘config’. Some file-alteration-monitors that may be in use do not (or at least assert that they do not) follow links, so it is bad practice to make ‘config’ a link to some other file. 
     554 
     555== COMMANDS == 
     556 
     557Commands used in the emelFM2 (e2) command-line, or associated with a key binding, filetype, alias, are normal shell commands except as set out here. 
     558 
     559Multiple commands may be joined by ‘;’, as for normal shells. 
     560 
     561In the following, surrounding parentheses ‘ ‘ are not part of the actual command. 
     562 
     563=== INTERNAL COMMANDS === 
     564 
     565Names of e2 internal commands (a.k.a. actions) are of the form ‘string1.string2’, e.g. ‘file.copy’. 
     566 
     567Actions may be executed just like an external command, by entering the action name. You may add argument(s) for an action, with whitespace character(s) between the action name and the first argument, e.g.’file.view mydocument’. 
     568 
     569A detailed description of actions and their arguments is provided in the document ACTIONS. A list of the actions can be found in the configuration dialog, e.g. by clicking on the action column on the ‘key bindings’ page. 
     570 
     571Much like shell environment variables, internal variables may be defined and used e.g. for communication between actions or commands. As in the case of an environment variable, an internal variable can be stored by a command of the form ‘NAME=VALUE’, retrieved by ‘$NAME’, and cleared by ‘NAME=’. In addition, a command ‘=VALUE’ will list the name of any variable with that value, and just ‘=’ will list all internal variables with their values. Whitespace surrounding the “=” in any variable-related command is ignored. 
     572 
     573=== COMMAND MODIFIERS === 
     574 
     575There are several ways to influence how e2 runs a command (action or external command). One or more of the following may be applied: 
     576 
     577* adding ‘>’ to the beginning of an external command will cause it to run in a separate shell, i.e. bash, zsh, korn, sh etc. This is necessary if you want extra functionality like pipes, re-direction, fancy variable processing. Commands which include any of ‘|<>’ are automatically run in a separate shell. 
     578 
     579* adding ‘>>’ to the beginning of a “joined” external command will cause it to run as a single command in a separate shell, i.e. bash, zsh, korn, sh etc. This is necessary if you do not want the individual components of the joined command to be indivually sent to the shell. 
     580 
     581* adding ‘|’ to the beginning of a command will cause it to ‘block’. This means nothing else will happen until the command is completed.  (For commands applied to selected items, any ‘|’ will be ignored, as a configuration setting takes precedence) 
     582 
     583* adding ‘!’ to the beginning of a command will suppress macro expansion. (See below for macros description). This means things like ‘%f’ will be treated literally. 
     584 
     585* adding ‘&’ to the end of a command will run it in the background, and all output other than standard error is suppressed. (For commands applied to selected items, any ‘&’ will be ignored, as a configuration setting takes precedence) 
     586 
     587=== MACROS === 
     588 
     589 * %f = substitute (space-separated series of) quoted itemname(s), to (each) selected item in the active pane 
     590 * %F = substitute (space-separated series of) quoted pathname(s), to (each) selected item in the inactive pane 
     591 * %d = substitute the active directory path, quoted 
     592 * %D = substitute the inactive directory path, quoted 
     593 * %p = substitute (space-separated series of) quoted pathname(s), to (each) selected item in the active pane 
     594 * %P = same as %F, for convenience 
     595 
     596Prepending an extra ‘%’ to the above produces the same result but without quotes 
     597 
     598 * %c[i][,w] = substitute decimal number string. i and w are optional numbers >= 0. If present, i will set the value to be shown in the counter, or if not present, the (last-used counter-macro-value + 1) will be used. If present, w must be  preceded by a ‘,’ and sets the minimum width of the counter field, which will be padded with leading 0’s as required. No spaces are allowed surrounding the ‘,’. Width defaults to 1 if not explicitly provided.  Examples: %c  %c0 %c10,2 %c,3 
     599 
     600 * %t = substitute absolute path of a unique sub-directory in the default temp directory 
     601 
     602 * %{“Prompt:”} = open a dialog seeking user input, with prompt ‘Prompt:’, and substitute the entered string 
     603 * %{(cachename)@”Prompt:”} = open a dialog seeking user input, with prompt ‘Prompt:’ and history list that ws cached as “cachename”, and substitute the entered string 
     604 * %{*@”Prompt:”} = open a dialog seeking a password, with prompt ‘Prompt:’, and substitute the entered string 
     605(If there is no “(cachename)@” or “*@” in a %{} macro, and the prompt is to include “@”, any such character must be escaped as “@” in the prompt string.) Any string enterted via the dialog may contain other macro(s). 
     606 
     607 * %$prefix$ = prepend the string between the $$’s to anything that follows e.g. %$file://$%%p will result in a series of absolute unquoted path strings, each preceded by “file://”. The string between the $$’s may contain other macro(s). 
     608 
     609Any other ‘%’ inside a command is simply treated as part of the command. 
     610 
     611=== ALIASES === 
     612 
     613e2 aliases are a mechanism for replacing part or all of a command string entered into the main command line. The process works pretty much like aliases for command line interfaces generally. Before any command is executed by e2, the recorded aliases are scanned and if a match is found, it will be substituted. 
     614 
     615As many command aliases as you wish may be recorded in the e2 configuration  data. By default ‘x’ will run the default terminal application, and ‘keys’ will list in the output pane the current key bindings. The full list can be reviewed on the ‘aliases’ page of the configuration dialog. 
     616 
     617An alias can only be matched at the start of the entered command. 
     618 
     619Alias strings may include posix extended regular expressions. 
     620 
     621A replacement string for an alias may contain 1 or 2. The alias itself will be substituted for 1. The part of the entered command after the alias will be substituted for 2. This means you can, for example, enter a command like ‘do this’ and have it actually run something like ‘do-the-real-command more options that always apply this’, or like ‘do this and that’. 
     622 
     623=== OTHER SUBSITITUTION === 
     624 
     625‘$$’ will be replaced by the path of the active directory, very much like %d, except that in this case there is no trailing “/”. Sometimes needed for path comparisons. 
     626 
     627‘$VAR’ or ‘${VAR}’ will be replaced by the value of the environment variable ‘VAR’, if that exists. However such replacement will NOT happen if the $VAR or ${VAR} is part or all of a string inside parentheses, e.g. ‘string with $VAR’ (here, the ‘ ‘ are actually part of the string). If the variable is part of a longer string, the ${} form should be used. 
     628 
     629‘$[OPT]’ will be replaced by the current value of the e2 configuration option ‘OPT’ if it exists. The various option names can be found in the ‘config’  file, in lines like ‘list-font=Sans 10’, where ‘OPT’ is ‘list-font’ 
     630 
     631Any ‘~’ that is at the start of a command or command-argument, and is followed by a ‘/’, or which is the only content of an argument, will be replaced with the current user’s home directory. 
     632 
     633Any un-escaped ‘*’ or ‘?’ in a command argument will be assumed to be part of a wildcard filename, and the argument in question will be expanded into a series of matching filenames (if any) 
     634 
     635=== COMMUNICATION WITH CHILD PROCESSES === 
     636 
     637A command of the form ‘pid:message’ will pipe ‘message’ to the process with process id ‘pid’ (the process has to be a child of e2). The piped message will be encoded as utf-8. 
     638 
     639You can set ‘pid’ to 0 to send ‘message’ to the last-started child. This provides a mechanism to pass input to an application which has been started from the command line, and is waiting for input from the user. 
     640 
     641There is no mechanism to send a message to a child of a command which is running in a separate shell (“grand-child”?). 
     642 
     643There is no path for getting messages back from child processes, other than for display in the output pane. 
     644 
     645=== EXAMPLES === 
     646 
     647  diff -c %f %F > %{Filename for patch:} 
     648 
     649This runs the diff command to create a patch between the selected files, prompting for the filename for the patch. 
     650 
     651  tar xzvf %f -C %D & 
     652 
     653This unpacks a selected tarball from the active directory into the inactive directory. Because of the ‘&’ at the end, e2 will not list the output. 
     654 
     655  su rpm -Uvh %f 
     656 
     657This opens the default terminal application and su’s to root, prompting for the root password. Then it executes the RPM update command. 
     658 
     659  >rpm -qlip %f | less 
     660 
     661This executes an rpm query command and pipes the output to ‘less’.