Introduction

File Commander/L V2.50

File Commander/L is a text mode style file manager and shell that allows you to locate, copy, move, delete, view, edit and execute your files in a quick, convenient and customizable manner.

It's main display provides dual directory view panels that may serve as source and destination of a copy or move operation or just two different views of your files. A panel may also be used to view a directory tree, drive statistics or may be turned off altogether, making visible the output of previously executed commands.

A command line is also provided and operates in conjuction with the directory panels to make it much more powerful than a regular CLI including pasting file names from the panel, a command history recall window and command completion from history.


Features

The following are some of the major features of File Commander/L:


Software license

File Commander/L is copyrighted software. However, you are encouraged to copy and share the software with others according to the following requirements:

File Commander/L may be freely copied and shared with others, so long as no charge is made for the software, and it is unmodified and copied in its entirety, including program documentation. It may be distributed by electronic means (modem, ftp etc), provided that all files are transmitted (archived) together.

You may NOT charge anyone for a copy of this software other than a small copying fee. You may NOT include this software with any commercial software without the consent of the author.

This software is supplied WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

In no event shall the author be liable to you for any consequential, special incidental or indirect damages of any kind arising out of the performance or use of the software, even if the author has been advised of the possibility of such damages. By using the software, you agree to these terms.


Where to find FC/L

To find the latest version of File Commander/L, try the following places:

File Commander/L home http://silk.apana.org.au/fc.html


Online Help

FC/L has an online help facility that may be called up using the F1 key. For it to work, you must have the file fcl.fch in the /usr/share/filecommander/ directory. The text called up will depend on what state FC/L is in when F1 is pressed. There are separate help texts for the following:

When there is more text than will fit in the window, you can use the Up / Down arrow, Page Up, Page Down, Home and End keys to move around or you can click the mouse in the top or bottom thirds of the window to scroll it (like in the Internal Viewer).


The File Panels

The file panels are central to most operations in FC/L. They allow you to browse through the files on your drives, copy, move, rename and delete files you select from them as well as view, edit or execute any file.

Normally, one panel will be active and the other will be inactive. The active panel is indicated by having its title highlighted. To change the active panel, press the TAB key or click the mouse on the panel you wish to become active.

At any time, either or both panels can be hidden, allowing you to view the screen behind which will contain the output of any programs you've run. Press Ctrl-O to hide / re-display all visible panels or Ctrl-F1/F2 to switch the Left/Right panel on or off.

If you feel that the information in a panel is no longer up to date, you can press Ctrl-R to re-read the information displayed in the panel. Note that this may take some time for Tree view panels if you have a large number of directories on your drive.


Panel View Modes

The panels can display a list of files in several different ways. To change the style of view, select it via the Menu (Left or Right, depending on which panel you wish to change). You have the choice of:

Brief
Displays three columns of file names with no details. The status line at the bottom of the panel displays the details as in Full view for the current file.
Full
Displays file names with their size and the date and time of last modification. The status line is devoted entirely to displaying as much of the file name as possible allowing you to see more of a long file name than in the main section of the panel.
Wide
Displays file names with their size, providing much more space for the file name. This mode is most useful when viewing directories with many long file names.
Brief-Wide
Like Brief view in that it has no details but divides the panel into only 2 columns instead of 3, providing more space for long file names.
Unix
Similar to Full but instead of date and time, the unix permissions, owner and group are displayed. The status line shows the size, date & time;
Tree
Views the overall directory structure of the current drive of the opposite panel. Unlike in the above modes, when a panel is in tree mode, it is linked to the opposite panel in that selecting a directory on the tree and pressing ENTER causes the opposite panel to view that directory.
Info
The Info panel displays drive summary information for the current drive of the opposite panel. Details listed include total space, free space, label, file system and serial number. In addition, if the drive is mapped to network server or a peer share then the mapping of the drive is shown. If the opposite panel is viewing the contents of an archive, the panel shows total uncompressed size, total compressed size and compression ratio instead. You can quickly activate an Info panel using Ctrl-L. While the Info panel is active the label can be edited by pressing Alt-L.

The lower section of the panel displays "Dir Info" if any exists. This is just the contents of a file called dirinfo in the directory of the opposite panel and is intended to contains a description of the directory. The contents can be edited by pressing F4 or double clicking the Dir Info area.

Changing between views can also be achieved using the quick keys

Alt-Shift-F1
Brief
Alt-Shift-F2
Full
Alt-Shift-F3
Wide
Alt-Shift-F4
Brief-Wide
Alt-Shift-F5
Unix

Directory colourization

The file listing type panels (Brief/Full/Wide/Brief-Wide) can be configured to display user defined classes of file using special colours. To define a class of file you need to add a line to your fcl.ini in the [Colours] section (this can be done most easily by selecting Edit Associations from the Commands menu) that looks like

expression : [colour] [ON colour]

where expression is any valid Boolean expression and colour is one of

and can have an optional "bright" in front of it. If you don't specify the background colour the default will be used. The same applies to the foreground colour. Only the first three characters of a colour name is significant so you can write green as just gre.

E.G. to make executable file names appear in bright white on the standard background

%perm=x : bright white

To make read-only files appear in dull white

%attrib=r : white

To make archives appear on a black background, without affecting the foreground colour

*.{zip,arj,rar,lzh,ace} : on black

Colourization of directory names is configured in a separate section starting with [Directory Colours] using the same syntax as the [Colours] section.


Moving Around the Current Directory

When you have a list of files showing (which is most of the time) you can move around the list using the following keys:

Up Arrow
Move up one file name.
Down Arrow
Move down one file name.
Page Up
Move up one screenful of file names.
Page Down
Move down one screenful of files names.
Home
Move to the first file name
End
Move to the last file name.
Alt-[printable char]
Move to the first file starting with [printable char]. If you continue to type printable characters, FC/L will look for a file starting with the string you've typed. Your typing is displayed in the status line of the current panel.
Shift-TAB
After using the above, Shift-TAB will complete the seek text from the available file names.
EG if you had the following files in the current panel:

afile.txt
bfile.txt
cfile1.txt
cfile2.txt
cfile3.txt
cfile4.txt
dfile.txt


You could seek to cfile3.txt by typing Alt-C, Shift-TAB, 3.
Alt-Up/Down
These keys serve two functions. If the cursor has just been moved using the above function, they move to the previous/next file name matching the partial name displayed in the status line. Otherwise they move to the first tagged file above/below the current position.

When the current panel is in Brief mode, The left and right arrow keys move across one column.


Navigating around your drives

You can move around your directories by moving the cursor to a directory you want to change into and pressing ENTER. Selecting ".." moves to the parent of the current directory. Moving the cursor around the list of files in the current directory is achieved using the Up / Down arrows, Page Up, Page Down, Home and End. Double clicking the mouse on a directory name has will also change into that directory. The full path of the current directory is always shown on the top line of the panel.

You can also choose to navigate the local network using UNC style paths. On the drive change dialog, press the backslash key or choose \\ in the drive list to view the list of available servers in the file panel. Selecting one of these (using Enter or mouse double click) will display a list of shares on that server. Selecting a share will display files & directories in the normal way. Note that until you reach this point many operations are not possible. EG using F5 to copy a server doesn't make any sense.

Other useful keys for navigating around your drive are:

Ctrl-\
Move to the root directory of the current drive.
Alt-Home
Move to the user home directory, as determined by the HOME environment variable.
Ctrl-Shift-\
Change to the same directory as the opposite panel.
Ctrl '-'
Move back to the previously viewed directory. Note that this is only for the '-' on the main keyboard, not the numeric keypad (which has its own function).
Ctrl-Page Up
Move to the parent of the current directory (same as selecting "..").
Ctrl-Page Down
Move into the currently highlighted directory (same as pressing ENTER except that the contents of the command line is ignored).
Ctrl-G
Go to a symbolic link's target.
Ctrl-M
Choose a mount point. This pop-up displays a list of currently mounted file systems, giving their device, mount point, size and free space. Selecting a file system with ENTER will change the current panel to show the root of that file system. Alt-E can be used to eject removable devices.

A number of other methods can be used to find the directory you want, including:


Change Directory Tree

The Change Directory Tree can be used to quickly locate and display the directory you're looking for. To activate it, press Alt-F10 or select it from the Commands Menu. You can then either browse through the tree structure using the same keys as used to browse through a file panel, or you can start typing the name of the directory you are looking for.

As you type, the view will jump to the first directory name matching what you have typed so far. You can either keep typing until the directory you're looking for is located or you can use Ctrl-Enter to find the next match of what you've typed.

Alt-Up/Down can be used to jump to the previous/next directory at the same level, skipping all child directories in between.

When you've found the directory you want, press ENTER to make it the current directory of the current panel. You can exit the Change Directory Tree at any time by pressing ESC.

If you have not previously viewed the tree of the current drive it must be read and this may take some time on a large drive. Once it has been read, the tree structure for the drive is saved to a file for future reference. Normally this file (fc2tree.dat) is written to the root directory of the drive the file describes. If you don't like this or if it's not possible (eg CD-ROM drives) you can make FC/L store all tree data files in one directory of your choice. To do this, change the Tree Data Directory setting in Options/Configuration to specify the directory where you want the data files.

If at any time you believe the tree being shown is not correct, you can re-read the tree structure by pressing Ctrl-R.

By default, the entire tree is shown but parts of the tree can be collapsed and expanded by using the following keys:

Grey +
Expand the current tree node.
Grey -
Collapse the current tree node.
Ctrl-Grey +
Expand the current tree node and all sub-nodes.
Ctrl-Grey -
Collapse the current tree node and all sub-nodes.

Directory History

The Directory History pop-up allows you to change the current panel to a directory that has been viewed recently. To activate it press Alt-\, Shift-Alt-F8 or select 'Directory History' from the Commands menu. You will then be presented with a list of recently visited directories in oldest to newest order. Pressing ENTER or double clicking an entry will cause the current panel to change to the selected directory.

Up to 100 directories visited by both panels are listed with duplicate entries removed, leaving just the most recent occurrence of a particular path. The entries are not persistent so are lost when you exit FC/L.


File Find

The File Find function can be used to search for a particular file. To activate it, press Alt-F7 or select it from the Commands Menu.

There are six controls on the File Find dialog that you can use to control the search. Use TAB to jump between control groups and the arrow keys to move between the individual controls. These are:

File(s) to Find
The name of the file you're looking for. The name can contain any of the wildcard characters and boolean operators described in File Mask Boolean Expressions.
Containing
A text string that a file must contain in order to be considered a match. It will also be the "From" string when doing a Multi-File Search & Replace.
CP
Code Page to use when searching non-unicode files for the text string in the "Containing" field.
Case Sensitive
Normally files are searched for the Containing text without matching case. Check this option to make the search case sensitive.
Whole Word
Makes the Containing test match Whole Words only.
Expand Matches
Show a search result for every occurrence of the search string in the file.
Start at Root
If this option is checked (default) the file search will begin at the root of the current drive. If not, it will begin in the current directory of the panel that was active when File Find was activated.
Scan Subdirectories
When checked, the search will recurse into the subdirectories of the starting directory, otherwise only the starting directory is searched.
Depth
When Scan Subdirectories is enabled, this option specifies a limit on the depth of subdirectories to recuse into. Blank or 0 means unlimited.
Follow Directory Symlinks
When checked, the search for files will follow symbolic links to directories and search the link's target directory.

The File(s) to Find and Containing fields have a history recall facility to save retyping commonly used values.

Use TAB / Shift-TAB and Cursor Up/Down to move between these fields entering your search data, then press ENTER or click Find to begin the search. As matches are found, they are listed with their full path in the top section of the File Find window. You can stop the search at any time by pressing ESC. You can do this to save time if the file you're looking for has been located but much of the drive has yet to be searched.

Once there are some matches showing you can navigate the list using the Up / Down arrows, Page Up/Down, Home/End or clicking with the mouse. Pressing ENTER or double clicking the mouse on a file name will return to the file panel with its current directory changed to that of the selected file and with the selected file highlighted.

You can also view or edit a file from the list using F3 or F4 respectively. If you used the Containing field and you use FC/L's internal viewer or editor, the starting position will be that of the first match. If the search hasn't yet finished it will continue in the background while you are viewing or editing.

A file in the list can be deleted using F8 or all files in the list can be deleted using Shift-F8. Note that this doesn't just remove it from the list but deletes the actual file. This can be handy if you are using File Find to locate junk files that you want to remove. If you just want to remove a file from the list, this can be done by pressing Delete.

Once the search has finished the status line under the results list will display Search Complete with a summary of the files found. Alternatively if you stopped the search with ESC it will display Search Stopped. The list can be resorted by pressing Ctrl-F3..F6 to sort by name, extension, time or size.

The files in the list can be copied or moved using F5/F6. The default target is that of the non-current file panel, just like if you'd used F5/F6 from the current file panel.

The name of file in the list can be copied to the clipboard with Ctrl-Shift-J for just the name or Ctrl-Shift-F for the full path.

If you do not want to see any of the files found you can press ESC to exit File Find (or click Cancel). To start a new search, change the appropriate fields then press ENTER.

Whichever way you exit the File Find dialog, you can recall the list of files found by the last search by pressing Shift-Alt-F7. This can be very handy if you wish to examine each matched file in turn.


Multi-File Search and Replace

This is a function of the File Find dialog, activated by pressing Ctrl-R (for Replace). After searching for files using a value in the Containing field, press Ctrl-R and enter the replacement text. Once confirmed, all occurrances of the value in the Containing field will be replaced with the given replacement text in all files listed in the search results. The Case Sensitive and Whole Word options from the File Find dialog will apply during the search and replace. BE CAREFUL as this function can potentially ruin many files if you ask it to do the wrong thing and there is no undo.


Storing and retrieving Paths

To speed up access to your most frequently used directories you can store the current directory path in one of ten 'slots'. At a later point in time you may recall the directory which causes the current panel to instantly move to the stored directory.

If you forget which directories you've assigned to which keys, you can view the contents of the slots using Alt-F5. This lists all ten stored paths from which you can select one to change to using the Up / Down arrow keys and ENTER, clicking on one with the mouse or pressing a number from 0-9. You can also set one of the entries to the current directory using Insert or clear an entry using Delete.

If you do a Save Setup before exiting FC/L, the directories you've stored will be remembered the next time you start it up.


Copying, Moving and Deleting Files

These three operations are all performed in a similar way. All can be performed on either a single file or a group of files. To operate on a single file, simply move the highlight bar to the file you want to copy/move/delete using the keys described in Moving Around the Current Directory and press F5 to copy, F6 to move and F8 to delete. These keys (along with the rest of the function keys) are listed at the bottom of the screen so you don't have to memorize them.

If you want to operate on a number of files at once, you should tag the files you wish to be affected (See Tagging). It's also possible to use Shift-F8 to delete a single arbitrary file.

If you select copy or move, you will next be presented with a dialog box that allows you to specify the destination directory and file name. The default destination is the directory showing in the opposite panel. If this is what you want, just press ENTER to proceed, otherwise use the arrow keys, Delete, Backspace etc., to alter the path to what you want. You can also change the file name if you wish. The target directory can also be chosen from either a Directory Tree using F10 or from the Directory History using Alt-\.

You can also use Shift-F5/F6 if you want to copy a file to the same directory with a minor name change or if you want to rename a file in place without turning off the opposite panel. The only difference with the Shifted variation of F5/F6 is that the default target doesn't include the path of the opposite panel. If you realize that you wanted this function but have already pressed F5 or F6 you can get the same result by pressing the same function key again while the Copy / Move dialog is showing.

You can rename several files at once using wild card characters '*' and '?'. For example, to change the extension of several files to .bak you would specify the destination file as '*.bak'. The wildcard characters represent characters taken from the source file name.

If you select delete, you will be prompted with a confirmation dialog. If you're sure you want to go ahead with the delete, press Enter, 'y' or click 'OK'. To back out, press ESC, 'n' or click 'Cancel'. If there are files tagged you will be warned and asked a second time to confirm the delete. This is to make sure you haven't forgotten that some files are tagged which can happen if the tagged files have been scrolled off the panel. Either or both of these confirmations can be disabled if you wish (See Confirmations).

All of the above operations can be stopped mid-process by pressing ESC.


Deleting a single arbitrary file.

You can delete any single file, regardless of the state of the current panel, using Shift-F8. This displays a dialog that allows you to enter the full or relative path of any single file or directory that you want deleted. The default name is that of the file the panel cursor is currently on, allowing easy deletion of a single file in the current panel when in the middle of tagging a number of files for some other operation.


Tagging Files

There are several commands available to tag files. These are:

Insert
Pressing the Insert key toggles the tag for the currently highlighted file and moves the highlight down to the next file allowing you to repeatedly press Insert to tag multiple files.
Grey +
Pressing the '+' key on the numeric key pad pops up a dialog into which you can enter a file name mask to specify which files should be tagged, as described in File Mask Boolean Expressions.
Grey -
This is just like Grey + except that it untags files that match the file mask.
Grey *
Invert tagging. All untagged files become tagged and all tagged files become untagged.
Ctrl-Grey +
Tag all files.
Ctrl-Grey -
Untag all files.
Compare directories
Selecting Compare Directories from the Commands Menu or pressing Ctrl-K tags files based on differences between the two panels.
Restore Selection
Selecting Restore Sel'n from the Files menu or pressing Alt-Grey-+ returns the current panel to the state of tagging as it was before the last F5-Copy command. This allows you to re-copy or perform some other operation on the same set of files as was just copied.
Mouse
Clicking the right mouse button on a file name toggles the tagging for that file. Holding the right button down and moving the mouse will tag / untag all files touched.

If the Tag Directories option is not set, only Insert and Mouse allow you to tag directories. The other tagging methods ignore directories. When the Tag Directories option is set, all the above commands except Compare directories affect directory tagging.

The effect of the Tag Directories option can be overridden by combining Shift with any of the mass tagging commands above. It can also be toggled inside the Grey + dialog using Alt-D but will only affect that one tagging operation, allowing you to chose if you want directories included while entering the file name mask.

When any files are tagged, a summary of the tagged files is shown on the status line of the panel. This shows the number of files tagged and their total size.


File Mask Boolean Expressions

File Commander/L provides a boolean expression parser that allows you to select files using powerful expressions. A file name mask is made up of regular characters and any of the following wildcards.

*
Substitutes for zero or more characters of any value.
?
Substitutes for one character of any value.
[a-d]
Substitutes for one character of value a, b, c or d.
[^a-d]
Substitutes for one character of any value except a, b, c or d.
[a-d^c]
Substitutes for a, b or d.
{fred,joe,foo}
Substitutes for any one of the comma separated strings.

If the file name mask needs to include any of the operator characters described below it should be quoted with double quotes. EG "foo(*).txt".

Multiple file name masks can be combined using the following operators.

|
The OR operator, give a match if either of the expressions given match. IE "*.cpp | *.h" will match all .CPP and all .H files, and is equivalent to "*.{cpp,h}".
&
The AND operator, give a match if both expressions match. IE "*x* & *y*" will match any file that contains both an X and a Y. The AND operator has higher priority than the OR operator, so "a* & *b | c* & *d" is equivalent to "(a* & *b) | (c* & *d)".
!
The NOT operator, reverses the match / no match result of any expression. "!*x*" will match any file that doesn't contain an X.
( )
Brackets can be used to force order of operations override, as in mathematical expressions.

Also available are a number of operators that can be used to select files by criteria other than their names. These are used by writing an expression that consists of the file operator (listed below), a logical comparitor ( one of <, >, =, !=, >= or <= ) and a value. The value can have a single letter suffix to specify the units it's in.

%age
Represents the amount of time between the file's last modification and the present. Value is in seconds by default or can be followed by a suffix to specify minutes, hours or days.
%attrib
Represents the file's attributes. Use of the = operator actually means has the attribute. The != operator can also be used to mean doesn't have the attribute. The value can be any combination of the letters R,H,S,A,D.
%date
Represents the file last modification date. The comparison value is a date in your local date format. The year may be given as either 2 or 4 digits. A year of less than 70 will be interpreted as 21st century.
%size
Represents the file size. The comparison value is in bytes unless followed by a suffix kilobytes, megabytes or gigabytes.
%owner
Represents the unix owner name of the file.
%group
Represents the unix group name of the file.
%perm
Tests if you have permission to read, write or execute a file/directory. The test takes into account the file's permissions, the user's id and the groups the user belongs to. Use of the = operator actually means has the permission. The != operator can also be used to mean doesn't have the permission. The value can be any combination of the letters R,W,X.

Examples

*.bak & %age > 30d
Match backup files that are older than 30 days.
*.{exe,cmd,bat,com}
Match only executable files.
*.doc & %date >= 1/5/98 & %date <= 31/5/98
Match documents last modified in May 1998 (in date format used in Australia).
%attrib = RH
Match files that are both read-only and hidden.
%perm = X
Match files that you have permission to execute.
%perm != R
Match files that you don't have permission to read.

Compare Directories

The Compare Directories function provides a way to detect and, if desired, eliminate differences between two similar directories. The uses of this function are many but the most common use is synchronizing two copies of a set of files.

When selected, FC/L identifies differences in the file lists of the left and right panels, tagging files according to the options selected. Most of the options are used to decide which files are tagged if a file name appears in both file lists.

Date/Time
Determines if the older, newer, both or neither copies of the file are tagged if the dates on them are different.
Size
Determines if the larger, smaller, both or neither copies of the file are tagged if the size of them are different.
Tag Unmatched
If a file name appears in one panel but not the other, this option causes it to be tagged.
Compare Contents
This is the brute force method. The two copies are compared byte for byte to check if there is any difference. If there is, both will be tagged.
Mask
Only files that match by this File Mask will be considered for tagging. The default value is "*" which matches all files.

Creating a Directory

To create a subdirectory in the current directory, press F7 and enter the name of the subdirectory you want to create into the dialog. If the current panel is in tree view mode, the directory will be created in the directory the highlight is currently on.


Directory Size Calculation

If you want to get an idea of what's taking up your precious disk space it's often useful to calculate how much space is used by a particular directory and all its sub-directories. File Commander/L allows you to do this for one or more of the directories showing in a file panel.

To calculate the size of a directory, move the highlght on to the directory you wish to know the size of and press Ctrl-Q. This may take some time if there are a large number of files or sub-directories in the directory being calculated. When the directory has been scanned its total size is displayed in the same field as where a file's size is displayed instead of the word SUBDIR.

If you want several of the directories in the panel to be calculated, tag them before pressing Ctrl-Q and all will be calculated. Calculating all of the directories provides a useful breakdown of where your disk space is being used.

If you decide that the calculation is taking too long you can cancel it at any time by pressing ESC.

Normally, the result of the size calculation is discarded when you change to another directory. If you want to browse through the directories that were calculated while retaining the calculated size display, set the Retain Dir Count option on the Options Menu.


File Information

Detailed file meta-data can be displayed by pressing Ctrl-I or selecting "File Information" from the Files menu. Details displayed are:


Creating an Archive

To create a new archive from a selection of files, press Shift-F7. You will be prompted for the path and name of the archive to be created as well as the type of the archive. The default path is that of the opposite panel. The default name is that of the file that the cursor is currently on without its extension. When you select OK, FC/L will call the selected archiver program to create the archive.


Running Other Programs

There are several ways to start a program using FC/L.

  1. Move the highlight bar to an executable file and press ENTER.
  2. Move the highlight bar to a file which matches a defined Association and press ENTER.
  3. Select a program from the User Menu.
  4. Enter the program name on the Command Line.

With all these methods, except the User Menu, you can start the program in a separate session by pressing Alt-Enter instead of just Enter.

After the program has finished, its output can be viewed by turning off the panels if necessary with Ctrl-O (or Esc if ESC Panel Switch option is turned on). If there was more output than will fit in the window, you can scroll back using Ctrl-B. This activates the output browser which can be controlled using the up/down arrows, Page Up, Page Down, Home and End keys. Esc exits the browser.

The way FC/L goes about starting the program depends on what type of executable it is. The following types are recognized:

Terminal
Started within the FC/L session unless Alt-Enter was used.
X Windows GUI
X Windows GUI apps are automatically started detached so there is no need to use Alt-Enter to make sure you can still use FC/L while the program is running. You can force the program to stay attached to FC/L, allowing you to see any text output on standard out/error by prefixing the command with a #.

FC/L will invoke a command interpreter (as specified by $SHELL) to run the program.


Environment

When FC/L starts another program the environment variables passed to it will normally be the same as FC/L inherrited from its parent process. The enviromnet passed to programs started by FC/L can be altered in two ways.


Associations

An association is used to link data files to the program that uses them. To create an association, add a line of the following form:

mask : program

to your fcl.ini file using the Commands/Edit Associations menu option. The mask can be any valid Boolean expression.

You can also use the following when specifying the command to be run:

!
Name of current file.
!x
Name of current file without its extension.
!p
Path of current panel.
!P
Path of opposite panel.
!f
Name of current file with full path.
!F
Name of current file in the opposite panel with full path.
!s
Path of current panel with trailing '\'
!S
Path of opposite panel with trailing '\'
!n
Nothing, but prevents automatic appending of current file name
!!
A literal, single !

If none of the above are used, the name of the current file is appended.

EG

*.dsk:
loaddskf ! a:
*.inf:
view
*.ico:
iconedit
*.cpp:
make !x.exe
*.{gif,jpg,bmp}|os2logo:
pmview

Scripting

FC/L has a built in scripting language that you can use to automate tasks that would be tedious to do manually. The language is C-like in its core syntax but more like Javascript in the way it deals with data values. Variables are dynamically typed and implicitly defined.

Scripts have an extension of .fcs (for File Commander Script) and will be run automatically by FC/L when you press ENTER on one. You can type a script name on the command line, in user menu items and associations. The PATH will be searched for the named script just like any other executable type.

FC/L can be invoked just to run a script using the -s switch followed by the script file name.

A variable or expression value can be one of the following types.

There is no "main" function so the simplest script can consist of a single line of code. EG

println( "Hello world!" );

is a valid script.

Looping and Conditional Execution

The common if/else and looping constructs are supported. The break keyword can be used to terminate any loop.


Expressions

The following operators are supported.

,
The comma operator separates a number of expressions and returns the value of the last one.
=
The assignment operator stores the value of the right hand side expression in the left variable or other assignable expression, including map or list items.
+= -= *= /=
These versions of the assignment operator combine a mathematical operation with the assignment. EG a += b is equivalent to a = a + b. If the left hand side is a list, the += operator will add an item to the end of the list.
? :
The conditional operator selects between two values. It takes 3 values in the form a ? b : c. If a is true, b is returned, else c.
|
Logical OR operator.
&
Logical AND operator.
==
Logical equality operator.
!=
Logical not equals.
<
Less than comparision.
<=
Less than or equal comparision.
<
Greater than comparision.
<=
Greater than or equal comparision.
+
Addition.
-
Subtraction.
*
Multiplication.
/
Division.
%
Modulus.
^
Exponentiation.
!
Logical negation.
[]
List/Map item access.
.
Alternate syntax for map item access. m.foo is equivalent to m["foo"].
()
Mathematical expression grouping to override precedence rules.
++
C style Pre/Post increment
--
C style Pre/Post decrement

Literal values

bool
The keywords true and false.
int
A regular base 10 value is just a string of decimal digits. A hexadecimal number can be specified with a 0x prefix followed by a string of hexadecimal digits.
real
A string of decimal digits with a single decimal point somewhere. Must start with a digit.
string
A string of Unicode characters surrounded by double quotes. Backslash is the escape character so double quote can be included in the string by preceding them with a backslash. Other escape sequences supported are \n (line feed), \r (carriage return), \t (TAB).
timestamp
No literal values supported.
list
A list of values surrounded by square brackets and separated by commas.
map
A list of key/value pairs, surrounded by curly brackets and separated by commas. The key and value are separated from each other by a colon.
EG aMap = { 4 : "four", 5 : "five", 6 : "six" };

Built-in functions

askConfirm( string title, [string|list] question )
Prompt the user with a question with OK & Cancel options. Returns true if the user selects OK. The second parameter may be either a single string or a list. If a list is provided, each list element will be a line in the dialog, converted to a string if it isn't already a string.
cd( string directory )
Change the current panel's working directory to the provided directory. The directory parameter can be relative or absolute and is similar to running a cd command on the command line except that it won't do a tree search if the directory isn't found.
colour( int fg [, int bg] )
Set the colour for text output by print/println functions. The colour values are numbers between 0 and 15 which map to FC/L's set of 16 colours.
contains( string str, string searchFor )
Returns true if str contains the sub-string searchFor.
containsNc( string str, string searchFor )
Returns true if str contains the sub-string searchFor, case insensitive.
copy( string target[, list options] )
Perform a copy operation, similar to the F5-Copy function. Tagged files will be copied to the specified target directory. The optional list of options can be used to specify any of the following: OverwriteAll, OverwriteNone, OverwriteAllOlder, DerefSymLinks.
copyFile( string fromName, string toName [, list options] )
Copy a single file to the specified file name. toName should be a file name, with path if needed, but should not be just a target directory. Supported options are "Overwrite", "NoOverwrite" and "OverwriteOlder". If none of these are specifed and the target file exists, an overwrite confirmation prompt will be displayed. The return value is a virtual type that behaves like a bool that is true if the operation succeeded, but can be passed to the getMessage() function to provide an error message that describes the reason for a failure.
createText( string fileName )
Create a text file for writing. The return value is a virtual list which, when appended to with the += operator, will write a line of text to the file.
deleteFile( string fileName )
Deletes the named file. The return value is a virtual type that behaves like a bool that is true if the operation succeeded, but can be passed to the getMessage() function to provide an error message that describes the reason for a failure.
dirExists( string dirName )
Returns true if the named directory exists.
edit( string fileName[, int offset ] )
Launches the internal editor.
endsWith( string str, string searchFor )
Returns true if str ends with the sub-string searchFor.
exec( string command )
Executes a child process and returns its output as a list of strings, one per line of output. If the process fails to launch, the return value is a boolean false.
exists( string fileName )
Returns true if the named file system object exists. It may be a file, directory or anything else the OS allows to be stored in the file system.
expandTimestamp( timestamp ts )
Expands the time stamp into its components. The return value is a map containing integer values with the keys day, month, year, hour, minute, second, nanosecond, weekday.
fileExists( string fileName )
Returns true if the named file exists.
fileFind( string searchExpression, map options )
Performs a File Find, like Alt-F7, returning a virtual file list similar to the files() function. searchExpression is the boolean expression describing the file name pattern to look for. The options map specifies the options available in the File Find dialog. The map keys are
containing
string, default none, a string to search for in the file.
startAtRoot
bool, default false, enables searching from the root.
scanSubdirectories
bool, default true, enables recursive searching.
depth
int, default 0, specifies a limit on the depth of subdirectories to recurse into. 0 means unlimited.
followDirectorySymlinks
bool, default false, enables following directory symbolic links when recursing.
caseSensitive
bool, default false, enables case sensitive matching of the containing string.
wholeWord
bool, default false, enables whole word matching of the containing string.
EG

foundList = fileFind( "*.fcs", { "containing": "fileFind", "caseSensitive": true } );

for ( f : foundList ) {
  println( f["name"] );
}

files()
Returns a virtual list that represents the list of files in the current panel. Each element in the list is a virtual map that has a fixed list of keys, the values of which provide details of the file panel entry. The keys provided are: name, size, mtime, directory & tagged. The directory map item is a boolean, true if the entry is a directory, false otherwise. The tagged map item can be set to true to tag that panel entry.
free( variable )
Releases the value referenced by the variable. This can be used to close a file handle as returned by openText() or createText(). It can also be used to explicitly free memory used by a complex data structure.
getClip()
Returns a string of the clipboard's current contents.
getCurrentDir()
Returns the current panel's working directory.
getEnvVar( string varName )
Gets an environment variable.
getMessage( returnCode )
Returns an error message describing the reason for a low level file operation's failure. The returnCode parameter must be a value returned from one of the low level file functions like copyFile().
getStoredPath( int position )
Returns the stored path (as in Alt-F5) in the given position.
keys( map aMap )
Returns a virtual list containing the keys of the provided map.
left( string str, int length )
Returns a string consisting of the left length characters of str. If str is no more than length characters long, str is returned unchanged.
len( string | list | map value )
Returns the number of elements in the passed value.
lowerCase( string str )
Returns str with all characters converted to lower case.
lpad( string str, int length )
Returns a string padded with spaces on the left to bring it up to length characters long. If str is longer than length, it will be truncated to length characters.
ltrim( string str )
Returns str with all whitespace stripped from the left of the string.
mid( string str, int offset[, int length] )
Returns a sub-string of str, starting at offset characters from the start and length characters long. If length is not provided, the entire remander of the string will be returned.
mixedCase( string str )
Returns str with mixed case. Uses the same logic as the "File Case" function in mixed mode.
moveFile( string fromName, string toName [, list options] )
Move a single file to the specified file name. toName should be a file name, with path if needed, but should not be just a target directory. Supported options are "Overwrite", "NoOverwrite" and "OverwriteOlder". If none of these are specifed and the target file exists, an overwrite confirmation prompt will be displayed. The return value is a virtual type that behaves like a bool that is true if the operation succeeded, but can be passed to the getMessage() function to provide an error message that describes the reason for a failure.
now()
Returns a timestamp of the current date/time.
openText( string filename )
Opens an existing text file for reading. The return value is a virtual list with each element being a line of text. The file can be read by iterating the returned virtual list with a for loop.
pad( string str, int length )
Returns a string padded with spaces on the right to bring it up to length characters long. If str is longer than length, it will be truncated to length characters.
pathSplit( string filename )
Splits a file path into its components. Returns a map containing the following elements:
path
The full path of the directory containing filename.
fileName
Just the name of the file, not including any directory path.
fullName
The full absolute path of filename. If filename is already an absolute path, fullName will be the same but if it is relative, fullName will be the resolved full path.
extension
The part of the file name after the last dot.
extensions
The part of the file name after the first dot.
pick( list | map pickList [, map options] )
Presents a pick list to the user. The list can be either a map or a list. If a list is provided, the pick list displays the string representation of each list item. If a map is provided, the pick list displays the string representation of each map value. If the user chooses an item, the return value is either the list item value or the map key of the chosen item. The optional second parameter can provide some options for the pick list. The options supported are:
title
A string that will be displayed at the top of the pick list.
allowedKeys
A string that contains a list of characters that, besides ENTER, can be used to select an item. The key pressed by the user is stored in the options map as the value of the "keyPressed" key.
pos( string str, string searchFor )
Returns an integer offset of where the sub-string searchFor appears in str, or -1 if it does not.
posNc( string str, string searchFor )
Returns an integer offset of where the sub-string searchFor appears in str, or -1 if it does not, case insensitive.
print( value{, value} )
Prints one or more values as text to the console. Any value that is not already a string will be converted to a string so any type can be passed.
println( value{, value} )
Just like print execept that a new line is output after all the values.
putClip( string str )
Store the provided str on the clipboard.
right( string str, int length )
Returns the right length characters of str. If str is no longer than length characters, str is returned unchanged.
rtrim( string str )
Returns str with all whitespace stripped from the right of the string.
run( string command )
Executes the provided command, just like if entered on FC/L's command line.
saveSetup()
Saves the current settings, IE Shift-F9.
setEnvVar( string varName, string value )
Sets an environment variable.
setStoredPath( int position, string path )
Sets the stored path (as in Alt-F5) in the given position.
sleep( real seconds )
Stops and waits for the specified number of seconds.
split( string str, string separator )
Splits a string str into parts separated by separator. Returns a list of strings.
startsWith( string str, string searchFor )
Returns true if str starts with the sub-string searchFor.
subst( string str, string from, string to )
Replaces all occurances of from in str with to and returns the result.
synchronize( string sourceDir, string targetDir, list options [, string fileFilter [, dirFilter]] )
Initiate a Synchronize operation with the provided criteria. The analysis of differences is performed immediately but the list of operations will still be presented for confirmation before being acted on. The supported options are: CopyMissing, UpdateOlder, RevertNewer, DeleteExtra, UpdateSmaller, UpdateLarger.
tag( string expression )
Tags the files in the current panel that match the provided expression. This works just like the Grey + tag function.
toInt( value )
Converts value to an integer type. How this is done depends on the type of value which must be a simple type. A string is parsed and converted to an integer. A bool will be converted to a 0 or 1. A timestamp converts to the unix time (seconds since 1/1/1970). A real is truncated to make an integer.
toReal( value )
Converts value to a real type. Just like toInt except that strings can contain a fractional part.
trim( string str )
Returns str with all whitespace stripped from the left and right of the string.
typeOf( value )
Returns the name of the passed value's type.
untag( string expression )
Untags the files in the current panel that match the provided expression. This works just like the Grey - untag function.
upperCase( string str )
Returns str with all characters converted to upper case.
values( map aMap )
Returns a virtual list containing the values of the map, in their key order.
view( string fileName[, int offset ] )
Launches the internal viewer.

User functions

You can define your own functions with the func keyword using the following syntax:

func functionName( [argType] argName{, [argType] argName } ) {
  // Function body
  return returnValue;
}

The function definition can specify zero or more parameters, each with an optional type specifier. If a parameter has a type specifier and the value provided by the caller is of a different type, the value will be converted if possible, otherwise an error is reported. The type specifier keywords are bool, int, real, string, timestamp, map & list.

Parameters are passed by reference if possible so if the caller passes a plain variable name as a parameter, the called function can alter that variable's contents, allowing more than one value to be passed back to the caller.

A function always has a single return value although the return statement is optional. If no return value is specified, the function returns an undefined value. A function can have any number of return statements which can be used to return from the function at any point.

EG

func squareAndInc( int x ) {
  square = x * x;
  x++;
  return square;
}

for( c = 1; c <= 5; ) {
  println( squareAndInc( c ) );
}

This script will print the numbers 1,4,9,16,25.


Lambda functions

A Lambda function is an anonymous function which can be passed as a parameter to another function or assigned to a variable. When executed, it runs in the scope of the function that defined the lambda funciton rather than in a new scope. EG

func forEach( list l, func op ) {
  for ( item : l ) {
    op( item );
  }
}

list1 = [ "The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog" ];
threeLetterWords = 0;

forEach( list1,
  func( string word ) {
    println( "Word is " + word );

    if ( len( word ) == 3 ) {
      threeLetterWords++;
    }
  }
);
println( "There were ", threeLetterWords, " three letter words" );


Other language features

A script can include code from another file using the #include statement which has a single string parameter, the name of the file to be included. EG

#include "myFunctionLib.fcs"

The file will first be looked for relative to the script including it. If not found there, the Script Path will be searched. This can be configured in the Configuration dialog.

Redirection of standard input and output are supported on the script command line using the standard < and > syntax allowing reading from and / or writing to files specified on the command line. Redirected input is available in the script using the predefined variable stdin. This is a virtual list of strings, like that returned by openText(). If standard output is redirected, any text written with print() or println() functions will go to that file instead of the console.

The predefined variable args is a list of strings containing any command line parameters.

A script can be embedded in a user menu entry using the $script command. All lines in a user menu entry after the $script line are treated as script lines up until the line that marks the next user menu item or a line containing an $endscript command. All script lines must be indented at least 1 space so as not to be mistaken for the next user menu item's start line. The $script line can contain an argument list, including ! operators so you can pass values to the script. EG

F1: List tagged files
	$script !t
	println( args[0] );
	$endscript
	echo Script is done

F2: List tagged files another way
	@script !l
	for ( a : args ) {
	  println( a );
	}


Command Line

The command line provided by FC/L operates in much the same way as your normal command prompt with a few extra features. The following keys are used to operate the FC/L command line:


History

Command history is used to save you re-typing a command that is the same or similar to a command you've entered before. It is preserved between sessions in the file fcl.hst so that closing and restarting FC/L won't lose the command history. If you use the same command more than once, only the last occurrence will appear in the history.

There are several ways to locate the command you wish to repeat:

Ctrl-E or Ctrl-Up
Recall previously entered command. Repeated use steps through command history from newest entry to oldest entry.
Ctrl-X or Ctrl-Down
Steps forwards through command history. Useful if you overshoot using Ctrl-E
Ctrl-J or Ctrl-Enter
Recall previously entered command that matches the text to the left of the cursor. Can be used repeatedly to find successive matches. Note that this function only operates when the character to the left of the cursor is alphanumeric, otherwise a file name paste occurs as described in Command Line.
Shift-Ctrl-J or Shift-Ctrl-Enter
As above but searches in the reverse direction. Handy if you overshoot the entry you're after.
Alt-F8
Displays a window containing a list of previously entered commands from which you can choose. You can navigate the list using the cursor keys, Page Up/Down, Home, End or the mouse. You can also:
F7
Search for a string in the command list. Note that the search starts at the bottom of the current page and searches upwards to give a newest to oldest search.
Shift-F7
Search again.
Alt-F7
Search again backwards.
Delete
Remove an entry from history. This is useful if you want to clear incorrect commands or commands containing sensitive information (EG passwords) from history.

Once you've highlighted the command you want you can press:

Enter
Re-execute command now.
Alt-Enter
Re-execute command now in a separate session.
Ctrl-Enter
Place command on the command line for editing.

Menu

FC/L includes a menu system to provide easy access to a range of functions. Most of the functions on the menu can be activated by short-cut keys which are listed on the menus. The menu system can be operated by keyboard, mouse or a combination of both if you like.

Keyboard

  1. Activate the menu bar by pressing F9 or Ctrl-N. Also, Shift-F10 activates the menu with the cursor positioned on the last used function.
  2. Select which menu you want by pressing the first letter of its title or by using the Left / Right arrows and pressing Enter.
  3. Use the Up / Down arrows to select the menu item you want and press Enter to activate it. Alternatively, you can press the key that is highlighted in the menu item's name.
  4. You can press Esc to back out.

Mouse

  1. Activate the menu bar by clicking the right mouse button on the top line.
  2. Click on the title of the menu you want to use.
  3. Click on the menu item you want to activate.
  4. To dismiss the menu, click anywhere away from the menus.

These should be taken as examples only. The menus operate in much the same way as GUI menus.


Left / Right Menu

The Left and Right menus contain exactly the same functions but apply them to the appropriate panel.

Brief
Set panel to view files in Brief mode.
Full
Set panel to view files in Full mode.
Wide
Set panel to view files in Wide mode.
Brief-Wide
Set panel to view files in Brief-Wide mode.
Unix detail
Set panel to view files in Unix detail mode.
Info
Set panel to show drive summary information.
Tree
Set panel to view directories as a Tree.
On/Off
Toggle the visibility of the panel. Turning a panel off allows you to see the output of previously executed commands.
Name
Sort panel by file name
Extension
Sort panel by file name extension. The extension of a file name is from the last '.' onwards. Files with the same extension are ordered by name.
Time
Sort panel by file modification time and date. Files are listed from newest to oldest.
Size
Sort panel by file size. Files are listed from largest to smallest. Files of the same size are ordered by name.
Unsorted
Files are listed in the order provided by the file system.
Reverse
Reverses the order in which files are listed.
Re-Read
Refresh the contents of the panel. Useful if another process has modified the contents of the panel's directory or if removable media has been changed.
Filter
Display a dialog that allows you to modify the file name Filter
Drive
Change the drive being viewed. A small dialog is displayed showing the currently available drives from which you can choose.

Filters

The file name filter can be used to define which files you want to see and which files you don't. It is specified by a boolean expression. If you want all files to show the filter should be set to just a single * (which is the default value). This field has a history recall facility.

EG

*.{exe,com,cmd,bat}
Show only executable files
!*.obj
Show all files except object files.
!*.obj | foo*
Show all files except object files unless they start with foo.

If the value for the filter is anything other than * the panel's heading will show the current directory's path with a trailing \? to remind you that a filter is in effect.


Files Menu

Manual
View User Manual.
User Menu
Display the User Menu.
View
View the current file.
Edit
Edit the current file.
Copy
Copy Files.
Rename or Move
Move Files.
Make Directory
Create a Directory.
Delete
Delete Files.
File Attributes
Display a dialog to alter File Attributes.
File Case
Modify a file or group of tagged files' names to be upper, lower or mixed case. This is only useful on case preserving file systems.
File Date/Time
Modify a file or group of tagged files' date stamp (last modified date).
File Information
Show the File Information dialog containing detailed file meta-data.
Select Group
Tag a group of files by file name mask.
Unselect Group
Untag a group of files by file name mask.
Invert Selection
Toggle the Tagging status of all files in the current panel.
Restore Selection
Restore tagging status to the way it was before the last copy operation.
Quit
Exit File Commander/L.

File Attributes

The File Attributes dialog allows you to modify the unix permissions, owner and group of a file or a group of files. To activate it select it from the Files Menu or press Ctrl-A.

If no files are tagged, you'll be presented with a dialog displaying the attributes of the currently highlighted file. You can use the Up / Down arrow to move the cursor and Space to toggle the attribute the cursor is on or you can click on the check boxes with the mouse.

If you have any files tagged, you'll be presented with a slightly different dialog. For each attribute, you can set, clear or leave alone that attribute for all the tagged files. The dialog looks similar to the one used for a single file but the check boxes are 3 state instead of 2. The three states are:

[z]
Don't change attribute (default)
[ ]
Reset attribute
[X]
Set attribute

A number of hot keys are available to make using the dialog more efficient.

0-7
Set the current permission group to the octal value of the key pressed and advance to the next group. This makes it easy to set all permissions for a file with just a few key strokes if you're familiar with the standard mapping of octal values to unix file permissions.
R,W,X,S
Toggle the Read, Write, Execute, and SetUID/Sticky check box for the current permission group. Use Shift to toggle the attribute for all groups.

The User and Group fields can be used to change these attributes of the file. When files are tagged, these can be left empty to indicate no change to the user or group attributes of the files.

When you've set all the check boxes the way you want them, press Enter (or click OK) to proceed or ESC (or click Cancel) to exit without changing anything.


Commands Menu

Tree
Pop up the Change Directory Tree.
File Find
Locate a file using File Find dialog.
History
View the Command Line History.
EGA Lines
Toggle 50 line mode.
Directory History
Activate Directory History dialog.
Swap Panels
Swaps the positions of the left and right panels.
Panels On/Off
Removes or replaces the panels allowing you to view the output of previously executed programs.
Compare Directories
Tags files according to the differences between the two panels. See Compare Directories for details.
Calculate Dir Size
Totals the size of all the files the currently highlighted diretory or currently tagged directories and displays the result(s) on the file panel in the field that normally says '>SUBDIR<'
Open Gnome Window
Causes Gnome to open a window corresponding to the directory that FC/L is currently displaying.
Edit Associations
Starts the internal editor on your fcl.ini file. Any changes you make to associations will become active immediately.
Edit User Menu
Starts the internal editor on your main fcl.mnu file.

Options Menu

Configuration
Display the Configuration dialog allowing you to alter a number of options.
Colours
Edit the Colour Scheme used by FC/L.
Confirmations
Display a dialog that allows you to disable some of the Confirmations.
Hidden Files
Toggles whether files with their hidden attribute set will be shown on the file panels or not. When hidden files are displayed, they are denoted by a '0' character.
Path Prompt
Toggles the display of the current path on FC/L's command line prompt.
Full Screen
Toggles whether the panels occupy the full screen length or just half the screen.
Clock
Toggles whether a clock will be shown in the top right hand corner or not.
Tag Directories
Enables the mass tagging commands to tag directories also. See Tagging Files for more details.
Thousand Separator
Toggles the use of a thousand separator in the file size column of Full and Wide modes. This reduces the number of significant digits that can be displayed but can increase readability.
Retain Dir Count
When set, the results of a Ctrl-Q Directory Size Count are retained when changing directory. This makes it easier to track down directories that are hogging a lot of disk space. Note that the directory sizes displayed are only as up to date as the last count.
Save Setup
Saves all current settings to the file fcl.ini so that all FC/L options will be set the same the next time you start it up. This can be performed automatically on exit if you wish by setting the autosave option (See Configuration).

Configuration

To view the configuration options, select 'Configuration' from the Options Menu. Any options you change take effect as soon as you click OK (or press Enter when OK is the default button). If you use Cancel, all changes you've made are forgotten.

To select an option to change either click on it with the mouse or use the TAB, Shift-TAB, Up & Down arrow keys to move to it. The current option is indicated buy a flashing cursor.

If you want the changes to still be in effect the next time you start FC/L you need to select 'Save Setup' from the Options Menu otherwise the changes will be lost when you exit. Alternatively, you can switch on 'Autosave Setup' seen below.

The options are:

Viewer
The file name (with full path if not in a directory on your PATH) of the file viewer to be used when you press F3. All the '!' substitutions described in Associations can be used when specifying a viewer or an editor. If this field is left blank, the Internal Viewer will be used.
Alternate Viewer
As for Viewer but specifies the viewer used when Alt-F3 is pressed.
Editor
Similar to Viewer but specifies the editor used when F4 is pressed. If left empty, the Internal Editor will be used.
Alternate Editor
As for Editor but specifies the editor used when Alt-F4 is pressed.
Left Startup Directory
The directory the left panel will display on start up. If left blank, the current directory for the session will be shown. This can be overridden by a /l dirname command line parameter.
Right Startup Directory
The directory the right panel will display on start up. If left blank, the current directory for the session will be shown. This can be overridden by a /r dirname command line parameter.
Separate Session Prefix
String added at the start of a command that causes it to be executed in a separate session. Default value is gnome-terminal -x ! &.
Tree Data Directory
The directory where tree data is stored. If left blank, tree data will be written to the .fcl directory in $HOME as "fctree.dat". The data stored is a representation of the directory structure of a drive and is used to avoid re-scanning the drive.
Case Filter File Systems
A list of file system names (as displayed on the Info panel) that are not case preserving and so need file names to be converted to lower case for easier reading. If not listed here, file names will be displayed as provided by the file system.
Path Extension
A list of directories, separated by colons, that are to be searched for executables in addition to those specified in the PATH environment variable.
Script Path
A list of directories, separated by colons, that are to be searched when a File Commander Script uses a #include directive.
Auto Save
Switching Autosave on causes FC/L to automatically perform a 'Save Setup' just before exiting the program.
Use X Clipboard
When on, FC/L's internal editor will use the system clipboard when performing Copy/Cut/Paste operations allowing it to share clipboard data with other programs. When this option is turned off, FC/L uses its private clipboard which operates somewhat faster.
ESC Panel Switch
Enables the use of ESC as a quick key for switching panels off/on when the command line is empty.
Size Count Pause
If enabled, FC/L will pause at the end of a directory size count activated by Ctrl-Q, allowing you to view the total file and directory counts. Pressing any key dismisses the dialog.
Lines
Sets the number of lines on screen or in window. Can be any number supported by your video card for full screen sessions or any value of at least 25 for a windowed session. Using a number that is not supported by your card in a full screen session will result in the number of lines being set to the next possible value up.
Scroll Delay
The time (in milliseconds) that FC/L waits between scrolling each line when the mouse has been used to scroll a panel or window. Use of this option stops the text flying past before you've had a chance to see what it is.
Time Mode
The type of time display used on the clock and when file time stamps are viewed in the files panel (Full mode).

Colours

The Colours dialog allows you to alter the colour scheme used by FC/L. To activate it, select 'Colours' from the Options Menu

You will be presented with a list of items in the colour scheme. Use the up & down arrow keys to move to the item you wish to change and then use F to cycle through forground colours and to cycle through background colours. Holding SHIFT at the same time will cycle backwards. There are a total of 16 colours to choose from for both foreground & background.

When you're done, choose OK to use the changes you've made or ESC to forget them. Note that the changes will only be remembered for next time if you use 'Save Setup' or have Autosave enabled.


Confirmations

Before doing anything significantly destructive, FC/L will ask for confirmation from the user to prevent accidental loss of data. If you are confident in your use of FC/L and don't want to be asked for confirmation all the time, you can disable some of the more common confirmation prompts by selecting 'Confirmations' from the Options Menu.

A dialog displaying a list of confirmation types is then displayed with a check box next to each one. An 'X' in a check box indicates that the confirmation is enabled. To disable a confirmation, click its check box with the mouse and click OK. The keyboard can also be used (Up / Down arrows and Space, Enter when done).

The confirmations you can alter are:

Delete File/Empty Directory
The first prompt you see after pressing F8.
Delete Tagged Files
The second prompt you see after pressing F8 when there are files tagged.
Delete Non-empty Directory
The prompt that asks you to type "YES" before doing a tree delete.
Quit FC/L
The prompt shown when you press F10. With this disabled, F10 causes immediate exit.
"YES" prompt for Non-Empty Directory
Similar to Delete Non-empty Directory but instead of disabling the "YES" prompt altogether, it is replaced by an OK / Cancel / All choice, the default being Cancel so anyone blindly pressing ENTER won't get caught.

Viewing / Editing Files

FC/L allows you to view the current file with a choice of two standard viewers or to edit the current file with a choice of two standard editors. You can also configure any number of specialized viewers and editors via associations. To view a file, use F3 or Alt-F3. To edit a file, use F4 or Alt-F4. You can also use Shift-F3/F4 instead of Alt-F3/F4 if your window manager traps these.

When you press F3 or F4, FC/L will look for an association that matches the current file and if it finds one it will use the program given. If there's no matching association the standard program will be used. The standard programs are specified in the Configuration dialog. If these are left empty, the built in Viewer and the built in Editor are used for F3 and F4 respectively.

View and Edit associations are specified in the same way as execute associations but are added in fcl.ini under section headings [Viewer Associations] and [Editor Associations]. These headings will be created automatically when you first use Save Setup.

If you wish to specify the file to view or edit by typing its file name, use Shift-F3 for view or Shift-F4 for edit. If you specify a file to edit that does not exist, you will be given the option to create it.

The viewer or editor can be invoked directly when starting FC/L using the command line switches -v or -e followed by the name of the file to be viewed or edited. This allows other programs to call FC/L to view or edit files for them.


The Internal Viewer

The file viewer built into FC/L is a basic text viewer that is ideal for taking a quick look at your text files. You can use the mouse or keyboard to scroll the text up and down (Keys: Cursor-Up/Down, Page Up/Down, Home, End).

To scroll the text using the mouse, click the mouse in the top or bottom thirds of the screen. Using the right mouse button pages up or down. When the mouse is being used to scroll the text, the speed of scrolling is determined by the Scroll Delay Configuration directive.

If a line is longer than the width of the viewer it will be chopped off at that length and the remainder placed one the next line unless you use F2 to select Unwrap mode. With the text unwrapped, you can use the Left / Right arrows to scroll the text horizontally. Ctrl-Left/Right scrolls in a much larger step (40 columns). Also, the mouse can be used to scroll horizontally by clicking the mouse in the centre third of the screen on the left or right side. ie


The Internal Editor

The built in editor is a simple text editor that allows you to make quick changes to any plain text file.

The following keys operate in the editor:

Left/Right/Up/Down
As you'd expect.
Backspace
Delete character left of the cursor.
Ctrl-Backspace
Delete word left of the cursor.
Alt-Backspace
Undo.
Alt-Shift-Backspace
Redo.
Delete
Delete character under the cursor or, if any text is selected, deletes selected text.
Ctrl-Delete
Delete the word to the right of the cursor or, if some text is selected, deletes selected text.
Home
Go to the start of the line.
End
Go to the end of the line.
Page Up/Down
Up/Down one page.
Ctrl-Home
Top of screen.
Ctrl-End
Bottom of screen.
Ctrl-Page Up/Down
Start/End of file.
Alt-[ / Alt-M
Jump to matching bracket. Recognizes round, curly, square and angle brackets.
Ctrl-Y
Erase line.
Ctrl-Space
Copy a single character from the line above.
Ctrl-Alt-Space
Copy the remainder of the line above.
Ctrl-Insert / Ctrl-C
Copy selected text to clipboard.
Shift-Ctrl-Insert / Shift-Ctrl-C
Append selected text to clipboard.
Shift-Insert / Ctrl-V
Paste from clipboard.
Shift-Delete / Ctrl-X
Cut selected text and place on the clipboard.
Ctrl-W
Copy the word the cursor is currently on to the clipboard.
Ctrl-Shift-U/L/M
Change case of selection to upper/lower/mixed.
Alt-Left/Right
(Un)indent block.
ESC or F10
Exit editor (prompts to save if changes made).
Shift-F10
Save and exit.
F2
Save now without exiting.
F3
Save now with prompt to change file name.
F7
Search for a word in the text. Case sensitivity is optional as is the direction of the search. A Whole Word option is also available. The text field has a history recall facility to save retyping recently used values.
Shift-F7
Search for the same word again.
Alt-F7
Search for the same word again in the opposite direction to that selected when F7 was used.
F8
Search and Replace. Similar to the search function (F7) but allows a replacement string to be specified. When a match is found you are given the choice of replacing, skipping, cancelling or replacing all matches.
Alt-Comma
Jump to the previous occurance of the word the cursor is on.
Alt-Dot
Jump to the next occurance of the word the cursor is on.
Ctrl-Q
Quote next character. This enables you to enter control character into the file that would normally be rejected. For example, pressing Ctrl-Q ESC would insert the ESC character into the text.
Insert
Toggle Insert/Overstrike mode. When in overstrike mode the cursor becomes a block instead of an underline.
Alt-[1-8]
Change TAB size to that of the number pressed.
Alt-C
Sets one or more file code pages to use as the text code page. More than one value can be specified, separated by commas, and Alt-T will switch between them.
Alt-E
Select the encoding type of the loaded file. Note that this option changes the way the existing file data is interpreted so requires reloading the file from disk. If you've made any changes to the text, they will be discarded after a confirmation. If you only want to change the encoding used to save the text, use the F2-Save As function instead.
Alt-H
Toggle Syntax Highlighting (on by default for supported file types).
Alt-I
Toggle Auto Indent mode. When this mode is on (indicated by an 'I' on the status line) Pressing ENTER will start a new line with the same indentation as the line above. This is most useful when editing program source files.
Alt-L
Used to jump to a given line number.
Alt-T
Alt-T Switches the file code page between the values specified via Alt-C and the standard code page.
Alt-U
Toggle type line terminators. When this mode is on (indicated by a 'U' on the status line), saving the file will cause it to be written using a LF as the line termiator instead of the usual CR/LF pair. This can be used to convert a text file between PC and text formats. When the editor is started, this mode will automatically turn on if the file being opened only contains LF terminated lines.
Bookmarks
The bookmark functions allow you to store & recall up to 10 positions within a file. The keys used are the same as for Stored paths in the file panels (Shift-Ctrl-Numpad-[0-9] to store, Ctrl-Numpad-[0-9] to recall). The positions are remembered between edits of the file but are lost when FC/L is closed.

To select text, hold down Shift and use the above cursor movement keys to move over the text you want to select. You can also drag the mouse over the text. The mouse can also be used to perform a page up or down by clicking the right mouse button in the top or bottom third of the screen.

The states of the Insert/Overwrite, Auto Indent, Tab Size and Code Page settings are retained between edits and will be saved in fcl.ini if Save Setup is used.


Syntax Highlighting

The FC/L Internal Editor supports customisable syntax highlighting. The syntax definitions are in the file fclsyntax.ini which is included in the distribution ZIP file. You can use this file as is or customise it to suit your own preferences.

The standard fclsyntax.ini is installed as /usr/share/filecommander/fclsyntax.ini which may be copied to your ~/.fcl directory and customised there. FC/L looks for a fclsyntax.ini in ~/.fcl before using the standard one.

If you want to keep your syntax definitions in multiple files you can use the !include directive to bring in the contents of another file.

It consists of a number of sections. The first section starts with [Colour Classes] and defines a mapping between a syntactic meaning and an actual colour. It enables a consistent colour scheme for multiple languages without having to repeat the same literal colour names in each language definition.

There is then a section for each supported language. The section heading is in the format

[language Name : filename filter]

and is followed by a number of syntax definition commands. The suported commands are:
words[/i] : colour : word list
Defines a list of words that are to be coloured colour. If the /i is included, the words will be compared case-insensitively. Each word in the list is separated by a space. Multiple lines can be used to specify the word list by ending each line but the last with a line continuation indicator, a backslash. Mulitple sets of words may be defined by using multiple words statements and each may use a different colour.
wordchars : character list
Allows additional characters to be considered part of a word. By default, all letters and numbers are considered to be word characters. Use wordchars to add characters that the language allows to be part of symbol names. EG in C/C++, underscore is allowed in symbol names.
symbols : colour : symbol list
Defines a list of symbols that are to appear in the specified colour. These will typically be symbols that are significant in the language being defined.
linecomment : colour : marker
Defines a string that indicates the start of a comment that will last until the end of the line.
blockcomment : colour : start marker : end marker
Defines the format of a comment block that starts with start marker and ends with end marker and may span multiple lines.
string : colour : open character : close character
Defines the format for a literal string. Between the open character and close character all characters will be coloured colour and the usual syntax highlighting will not occur.
number : colour
Defines the colour of any word that begins with a digit.
escape : escape character
Defines the character that, if used in a literal string immediately before a string close character, will cause that character to be treated as part of the literal string rather than closing the string. The escape command will only affect string commands that follow it.
state[/ilw] : colour : state name : start marker : end marker
Defines a custom state (see below). While in this state, all text will be coloured colour. start marker and end marker define the strings that begin and end this state. The options that can be specified after a / are:
statechange[/i] : colour : marker : push|pop|swap : new_state
Defines a transition between states. This allows more flexibility than the state command alone. new_state must be defined by a state command though its start and end markers may be empty if statechange commands are used to change to & from that state.

States

In some languages it is necessary to use multiple states to correctly highlight the text. For example, in HTML the word table should be highlighted as a keyword when inside a tag but not when in regular text between tags. By default, the highlighter has a few predefined states: normal, string, linecomment, blockcomment. All of the commands above will only act when the current state is normal. This can be changed by specifying the required state immediately after the command in brackets. EG

state : tagcolour : tag : < : >
words(tag)/i : keyword : html title head body table


More than one state can be specified as a comma separated list. In that case, the command will operate in any of the listed states. The normal state is specified as an empty string.

The User Menu

The user menu is a list of functions defined by you to help you carry out common tasks. It is activated by pressing F2 and then using the Up/Down arrows and Home/End to choose an item and Enter to select or ESC to cancel. The mouse or the entry's hot key may also be used to select a user menu choice.

To create a user menu you need to create a plain text file (using an editor like FC/L's internal editor) named fcl.mnu containing your list of menu functions in the ~/.fcl directory. This can be done most easily by selecting Edit User Menu from the Commands menu. Here is an example user menu file:

E: Editor
	gedit

F: Firefox
	firefox

Z:Zip tagged files
        zip -r !i"Name of Zip?" -@ < !@

U: Unzip to opposite panel
        cd !P
        unzip !f
        cd !p

A line that starts in the first column is a description line. The key used to activate the function is first and may be any single letter or number or one of the function keys F1-F12. Function keys may be prefixed with S, C or A to indicate Shift, Ctrl or Alt. After a separating colon comes the description that will appear in the menu when it is displayed.

Any line that starts with a space or tab is a command and will be executed when the preceding description is chosen from the menu. It may contain the same '!' substitutions as Associations with the addition of the following:

!t
Substitutes for the name of a file and causes the command to be executed once for each tagged file. If no files are tagged, !t is just like !. May be followed by an x to give the name without its extenstion, or by an f to give the full path.
!l
Substitutes for a list of all tagged files, space separated. The command line length will not be allowed to grow beyond 1000 characters so if many files are tagged, some might not make it. If this happens, the files that were not included remain tagged after the command is executed. Can be followed by an 'f', IE !lf, to use full paths for the file list.
!L
Same as above but for the opposite panel.
!@
Substitutes for the name of a temporary file that contains a list of tagged files, one per line. Can be followed by an 'f' if full paths are required.
!i"Question"
Substitutes for a value input from the user. This causes a small dialog to appear displaying the supplied question and an input field. If ESC is pressed during input the user menu command is terminated. If a !i appears on the same line as a !t, the question is asked only once even though the command may be executed multiple times.

A submenu can be created by following the key:label line with a set of commands enclosed in curly brackets. The curly brackets must be in column 1. EG

S: SubMenu
{
1: Sub-option 1
        Command1

2: Sub-option 2
        Command2
}

Menu entries from another file can be included using the !include directive. This allows you to break large complex menus into multiple files for easier management. It also lets you share menu items between multiple local menus (see below) or to include the main menu in a local menu.

Local User Menus

In addition to the main user menu, you may create additional special purpose user menus by creating an fcl.mnu file in directories other than the one containing the main fcl.mnu. When you press F2 to activate the user menu, FC/L first looks in the current directory for a local user menu and displays it if found. If no fcl.mnu is found in the current directory, all parent directories will be checked for a local menu until one is found or the root is reached. If no local menu file is found the main user menu is displayed.

You can force the main user menu to show by pressing Shift-F2 instead of F2.


Archives

File Commander/L provides support for archive files (ZIP, ARJ, LZH, RAR, ACE, HA, GZIP, TAR, 7ZIP and BZIP2 types are currently supported) that makes these files behave in a similar way to normal subdirectories. To view the contents of an archive you simply press ENTER when the cursor is located on the archive file. It's possible to navigate any subdirectories inside the archive just as you would a normal directory tree.

When a panel is showing the contents of an archive its top line, showing the current path, changes colour so you won't forget that you're not looking at a real subdirectory. While the majority of functions are available inside an archive, some restrictions do apply.

After reading all that you may be wondering what does work. The answer (as far as I'm aware) is everything else. This includes, but is not limited to:

You can configure the way FC/L calls archiver programs in fcl.ini under the section headings [Archiver:xxx] where xxx is the archive type. The following settings are provided:

Compress
Command used to add files to an archiver or create a new archive.
CompressListfileSwitch
If the archiver given in Compress supports a list file as input, this is the prefix used to specify that the following name is a list file.
Extract
Command used to extract files/directories when using F5 or F6.
ExtractListfileSwitch
Same as CompressListfileSwitch but for Extract command.
Delete
Command used to delete files/directories with F8-Delete
CompressDirSpec
Configures the way directories are given to the compressing archive program so that the archiver will include a whole directory tree. A ! character represents the directory name. Most archivers require a suffix of \*.
ExtractDirSpec
As above but for extracting from an archive.

Using the Mouse

You can use the mouse to perform the following operations:


Notes, Hints and Tips


Obscure Options

The following miscellaneous options can only be changed by directly editing your fcl.ini file. Note that it's possible to use multiple INI files by specifying the name of an alternate INI file as a parameter to fcl. If the specified file doesn't yet exist, the default INI file will be loaded but the specified file will be written when settings are saved. Running fcl -h displays all command line parameters.

BriefWordRight [ON|Off]
The behaviour of all 'word right' movement is altered by this option. If this option is on (which is the default) the cursor will move to the end of the current word or, if it is already at the end of a word, to the end of the next word. When off, the cursor will always move to the beginning of the next word.
CmdChar
This is the character that is interpreted as FC/L's command character for the substitutions listed in Associations and User Menu. As these substitutions are also applied to commands entered on the command line, changing this options may be useful if you have a lot of files with a ! in their name. Default is !
CodePage
Sets the codepage that FC/L will use. A value of 0 (the default) means use the current codepage.
DisableInvert [On|OFF]
Disables the Invert Selection function of the Grey * key, allowing it to resume its normal function of typing a *. This is provided for people who's keyboards make it a chore to get the other * (Shift-8 on a normal US keyboard). The Invert Selection function can still be used by selecting it from the Files menu.
IndentWidth
Sets indent size of the editor's block indent function. Default is 1.
KeepExtVisible
When a file name is too long to fit in the panel's column, keep the extension visible when truncating the file name to fit. Default is ON.
MaxHist
The number of command history entries to keep. Default is 500.
Shadows [ON|Off]
Enables window shadows. Default is ON.
StickyAlt [ON|Off]
Affects the behavior of file name seeking using Alt-[letter] combinations. If this option is off you need to keep the ALT key held down for the whole seek string. This has the advantage of allowing you to start typing a command as soon as ALT is released.
TextCodePage
Overrides the default code page used for text files. If this is 0 (its default value) then the default code page for text files will be 819, also known as ISO-8859-1.

Remote Control

File Commander has the ability to run remotely, where an instance on the local machine runs an instance on a remote machine via an SSH link and provides the user interface for the remote instance. This allows you to administer a remote machine as if you were sitting in front of that remote machine and running FC/L. This is functionally similar to using a remote shell to run a console based file manager.

This facility is best suited to administering remote Unix-like operating systems that commonly have an SSH server running. However, it is possible to use with a remote server running Windows or OS/2 if suitable SSH server software is installed. I've successfully tested a Windows remote using Bitvise WinSSHD.

The protocol used to communicate between the local and remote instances of File Commander is OS independent so any local OS can connect to any remote OS. This protocol consists of high level console API commands so is much more efficient than a graphical remote desktop protocol like RDP or VNC.

To set it up you need to have the following in place:

To start a remote session, run FC/L with a -h hostname switch. The hostname is passed verbatim to the ssh client that FC/L uses to establish the connection to the remote server so can include a user name in the form user@hostname.com.


Contacting the Author

If you have any comments, questions, suggestions or bug reports, please feel free to contact me by any of the following means:

Email
brian.havard@gmail.com
Web
http://silk.apana.org.au/fc.html

Users of PGP public key encryption may wish to use my PGP Public key


Release History


Version 1.51

First release of Win32 version. The version number is started at 1.51 to stay in alignment with the OS/2 version.


Version 2.0

New Features

Minor Enhancements

Bug Fixes


Version 2.01

Bug Fixes


Version 2.10

New Features

Minor Enhancements

Bug Fixes


Version 2.11

Bug Fixes


Version 2.12

Minor Enhancements

Bug Fixes


Version 2.20

New Features

Minor Enhancements

Bug Fixes


Version 2.30

New Features

Minor Enhancements

Bug Fixes


Version 2.40

New Features

Minor Enhancements

Bug Fixes