FIM – Linux framebuffer image viewer
You can maintain textual descriptions of them and have them displayed in FIM.
To do so, first produce a text description file, say with: ls | sed 's/$/\t/g' > files.dsc, containing: # This is a FIM images description file. # A line beginning with a pound (#) is treated as a comment. # Each line consists of the file name, a Tab character and a textual description of the given picture: DSC_0001.JPG A big dog. DSC_0002.JPG A statue. # ... sample.jpg Busto di Diana. Da Pompei, 1817, rinvenuto presso i portici occidentali del santuario di Apollo. Bronzo, II s.a.C. MANN, inv. 4895. # The file can be long as you wish.
Then invoking e.g. fim --load-image-descriptions-file files.dsc sample.jpg ... will additionally display each image description on screen, just like in the following screenshot:
But one can display more information about the image.
In the status line (lower side) of the screenshot there is additional information, which can be customized via the _display_status_fmt and _info_fmt_str variables of your ~/.fimrc file.
The _info_fmt_str variable controls the information in the lower right corner, e.g.: # This is a sample custom ~/.fimrc file. # A line beginning with a pound (#) is treated as a comment. # The other lines are treated as fim commands and need to end with a ; (semicolon). # _info_fmt_str is set to display current scale percentage, width, height, ... _info_fmt_str="%p%% %wx%h%L %i/%l%P img:%M cache:%C tot:%T %c"; # See man fimrc for a reference on the fim language commands.
In the left side of the status line of the screenshot there is additional information: [1/15 sec.][f/4.0][ISO400].
These are respectively exposure time, aperture and ISO Speed rating.
FIM extracts this information from the EXIF section of the JPEG file at load time.
EXIF information usually pertains the camera, the shot and the digitized image, and can be camera and vendor specific.
Each piece of such information is called EXIF tag and has a name.
FIM does not know about all possible EXIF tag names, but it loads into variables associated to each loaded image each EXIF tag it encounters.
In the above case, the status line displays the values of three variables corresponding to EXIF tags: i:EXIF_ExposureTime, i:EXIF_FNumber, i:EXIF_ISOSpeedRatings.
If you don't know in advance the names of the EXIF tags your camera produces, then load a photograph file, enter in console mode by typing :. and print the list of variables loaded with the image: echo i:*.
In the example above, the _display_status_fmt has been customized as e.g.: # This is a sample custom ~/.fimrc file. # A command can span multiple lines, and long strings can be composed by substrings joined by a dot (.). # The following info format string pertains the lower # left part of the status line. # Assuming these are set, it uses each of the values # in EXIF_ExposureTime, EXIF_FNumber, EXIF_ISOSpeedRatings. _display_status_fmt= "%?EXIF_ExposureTime?[%:EXIF_ExposureTime:]?". "%?EXIF_FNumber?[%:EXIF_FNumber:]?". "%?EXIF_ISOSpeedRatings?[ISO%:EXIF_ISOSpeedRatings:]?:%k"; # Above, the dot (.) has been used to break the declaration of a long string. # See man fimrc for a reference on the fim language commands.
The mechanism of displaying per-image variables can be used also in the following way.
Assuming an image has the i:city variable set to a certain value, this might be displayed in the status line by having e.g;:
_display_status_fmt="%?city?[%:city:]?"; One can use this in conjunction with the following description file syntax: # This is files.dsc # Lines starting with '!fim:varname=varvalue' are not comments: they set variable varname to varvalue for the images following. #!fim:city=Rome DSC_0001.JPG A big dog. #!fim:city=Naples DSC_0002.JPG A statue. # ... sample.jpg Busto di Diana. Da Pompei, 1817, rinvenuto presso i portici occidentali del santuario di Apollo. Bronzo, II s.a.C. MANN, inv. 4895. #!fim:city= unknown.jpg Unknown city.
This syntax will ensure that e.g. DSC_0001.JPG will have i:city="Rome" while DSC_0002.JPG, sample.jpg will have i:city="Naples" and unknown.jpg will have the value i:city="" (unset).
This mechanism can be brought further with the new limit command. Given a long list of files, entering the limit "city" "Naples" command will temporarily restrict the browsable files list to the files having i:city=="Naples".
This is useful when restricting the research in an archive down to a few pictures.
Entering limit again will reset the list.
Even more can be achieved using the file marking mechanism. This mechanism allows to build up a list of file names to be printed out on the standard output when FIM terminates.
Assume you want to browse your big pictures collection to select the ones you want to send to a friend.
You can browse the pictures list and mark one by typing key Enter each time you think it is worth sending.
Once you have marked many of them you wish to re-check them. By entering limit "!" only the marked files will be displayed. Then you can eventually unmark (u) some pictures, and when exiting, fim will print out to standard output only the ones effectively marked.
The examples above are just a small fraction of what you can do with FIM; see the documentation for more.
Tutorial: How to display attached images in Mutt using FIM
One can instruct Mutt to open attachments or multimedia files using specific programs.
This is obviously possible also with FIM and images.
All you have to do is to edit the ~/.mailcap file, which is used by Mutt when you open an attachment.
The following suffices for a minimal integration:
image/*; fim %s
You can also instruct FIM to use ASCII art if we are working over an SSH connection: image/*;( [ "$SSH_CLIENT" != "" ] && fim -o aa %s ) || ( fim %s ) If you have configured FIM properly, this will work seamlessly in the Linux framebuffer, in X and through SSH.
Finally, if you wish to use the fimgs wrapper script (installed automatically when you install fim) to convert transparently with different programs, and then display with FIM, you can do it like here: image/*;( [ "$SSH_CLIENT" != "" ] && fim -o aa %s ) || ( fim %s ) # Use evince, and if not, fimgs: application/pdf;( [ "$DISPLAY" != "" ] && evince %s ) || fimgs %s # Use gv, and if not, fimgs: application/ps;( [ "$DISPLAY" != "" ] && gv %s ) || fimgs %s application/postscript;( [ "$DISPLAY" != "" ] && gv %s ) || fimgs %s # Use xdvi, and if not, fimgs: application/x-dvi;( [ "$DISPLAY" != "" ] && xdvi %s ) || fimgs %s # The following two examples are more funny than useful. # Display each bit as a pixel: application/octet-stream; fim --binary=1 %s # Display a text file rendered: application/vnd.openxmlformats-officedocument.wordprocessingml.document; docx2txt < %s | fim --as-text -i -q
Tutorial: VI/VIM-like feel in FIM
FIM offers a few features aimed at VI/VIM users, like:
- The motion keys: j (like 'down' arrow), k (like 'up' arrow), h (like 'left' arrow), l (like 'right' arrow),
-
Repeat any interactive command by prepending it by a number.
E.g.: magnify two times in a row by pressing 2+ -
Filename based search.
E.g.: jump to a file containing 'dog' in its name by pressing: / and entering dog then Enter.
- Search backwards using ? instead of /.
- Repeat the last action by pressing ..
- Jump to the first file by pressing ^ or to the last file by pressing $.
- Enter in command line mode by pressing : and Enter to go back in interactive mode.
-
When in command line mode
- type any command, like e.g. help and execute it after pressing Enter.
- type a number and then Enter to jump to the image with that index in the list.
- use the up and down arrows to navigate the history (via the GNU history library).
- if using the framebuffer, GNU Emacs-like (via GNU readline, just as in BASH) command line editing is possible.
- Execute a command after startup: fim -c command.
-
Read an image via standard input, e.g.:
cat image.jpg | fim -i
(note the difference: in VIM it's-, not -i).
This is meant to be used with converters, e.g.: convert image.pic ppm:- | fim -i. - Set autocommands with the autocmd command.
sections: top tutorials news screenshots documentation download man fim man fimrc man fimgs copyright contact author license bugs
News: What's new with FIM
(last update: 23/05/2024)
sections: top tutorials news screenshots documentation download man fim man fimrc man fimgs copyright contact author license bugs
Screenshots
A screenshot of a regular (framebuffer) FIM run (SDL would look the same)
A screenshot of a color ASCII Art FIM run:
A screenshot of a monochrome ASCII Art FIM run:
Both screenshots taken with the fbgrab program using the trunk version of FIM.
The top textual line was taken from the
JPEG
comment contained in the file;
EXIF
metadata is being displayed in the bottom textual line.
If you are curious, there are also
textual and HTML renderings of the monochrome screenshots,
and
textual and HTML renderings of the coloured screenshots.
sections: top tutorials news screenshots documentation download man fim man fimrc man fimgs copyright contact author license bugs
Links to documentation
If you wish to get an idea of FIM in action see these tutorials first.
If you consider building/installing by yourself then look at the README.html, (README) file.
Then there are
the FIM man documentation
(also on single page),
the FIM language man documentation,
(also on single page),
the fimgs script man page
(also on single page),
and the doc/FIM.TXT documentation file (slightly outdated but still interesting --- look in the man pages first).
Here links to some relevant sections:
-
first steps in FIM (in the old tutorial)
-
the Linux Framebuffer (in the old tutorial)
-
FIM usage examples (man page)
-
FIM language grammar
-
FIM commands reference
-
FIM variables reference
-
FIM language usage examples (man page)
-
the Frequently Asked Questions (FAQ) (in the old tutorial)
sections: top tutorials news screenshots documentation download man fim man fimrc man fimgs copyright contact author license bugs
Download and build instructions
You are welcome to download the latest (prerelease, dated 23/05/2024) snapshot of FIM:
fim-0.7.1.tar.gz
( 1007619 bytes )
and the signature file:
fim-0.7.1.tar.gz.sig .
If you want to be sure of the files authenticity, you should at least follow these steps:
wget http://download.savannah.nongnu.org/releases/fbi-improved/fim-0.7.1.tar.gz
wget http://download.savannah.nongnu.org/releases/fbi-improved/fim-0.7.1.tar.gz.sig
# Alternative A: import the key from a trusted keyserver by following on screen instructions:
gpg --search 0xE0E669C8EF1258B8
# Alternative B: import the key from FIM's website:
wget -O- https://www.nongnu.org/fbi-improved/0xE0E669C8EF1258B8.asc | gpg --import -
gpg --verify fim-0.7.1.tar.gz.sig
The typical sequence of actions to build FIM, which should suffice is
tar xzf fim-0.7.1.tar.gz cd fim-0.7.1 ./configure --help=short # read the ./configure --help=short output: you can give options to ./configure ./configure make su -c "make install"Read the documentation in order to properly install the dependencies.
If you are interested in compiling the freshest repository version,
typing
svn export http://svn.savannah.nongnu.org/svn/fbi-improved/trunk fim
at the command prompt will export the freshest (possibly unstable) version of FIM in a directory named fim, and ready for compilation (see the documentation for details).
sections: top tutorials news screenshots documentation download man fim man fimrc man fimgs copyright contact author license bugs
man fim
SYNOPSIS
DESCRIPTION
USAGE
OPTIONS
PROGRAM RETURN STATUS
COMMON KEYS AND COMMANDS
AFFECTING ENVIRONMENT VARIABLES
COMMON PROBLEMS
INVOCATION EXAMPLES
NOTES
BUGS
FILES
SEE ALSO
AUTHOR
COPYRIGHT
NAME
fim - Fbi (linux framebuffer imageviewer) IMproved, an universal image viewer
fim
[{options}] [--] {imagepath}
[{imagepaths}]
fim --output-device
[fb|sdl|gtk|ca|aa|dumb][={gfxopts}]
... | fim [{options}] [--] [{imagepaths}]
-
fim [{options}] [--] [{files}] - <
{file_name_list_text_file}
fim --image-from-stdin [{options}] <
{imagefile}
fim --script-from-stdin [{options}] <
{scriptfile}
fim --help[=s|d|l|m] [{help-item} ...]
fim is a ’swiss army knife’ for displaying image files. It is capable of displaying image files using different graphical devices while offering a uniform look and feel. Key bindings are customizable and specified in an initialization file. Interaction with standard input and output is possible, especially in shell scripts. An internal scripting language specialized for image viewing allows image navigation, scaling, manipulation of internal variables, command aliases, and Vim-like autocommands. The internal language can be interacted with via a command line mode capable of autocompletion and history (the readline mode). Further features are display of EXIF tags, JPEG comments, EXIF rotation/orientation, load of "description files", faster load via image caching, command recording, and much more.
As a default, fim displays the specified file(s) on the detected, most convenient graphical device. This can be with SDL if running under X, an ASCII-art driver (aalib or libcaca) if running behind ssh without X forwarding, or the linux framebuffer device. Graphical file formats BMP, PCX are supported natively, while JPEG, PNG, GIF, TIFF, PPM, PGM, PBM, QOI, AVIF, WEBP are supported via third party libraries. Further formats are supported via external converters. For XCF (Gimp’s) images, ’xcftopnm’ or ’xcf2pnm’ is used. For FIG vectorial images, ’fig2dev’ is used. For DIA vectorial images, ’dia’ is used. For NEF raw camera images, ’dcraw’ is used. For SVG vectorial images, ’inkscape’ is used. For other formats ImageMagick’s ’convert’ is used. The converter is given 15 seconds for the conversion before a timeout.
If {imagepath} is a file, its format is guessed not by its name but by its contents. See the _file_loader variable to change this default.
If {imagepath} is a directory, load files of supported formats contained there. If {imagepath} contains a trailing slash (/), it is treated as a directory; otherwise that is checked via stat(2). To change this default, see description of the _pushdir_re variable and the --no-stat-push and --recursive options.
This man page describes fim command line options and usage. See man fimrc(5) for a full specification of the fim language, commands, keysyms, autocommands, variables, aliases, examples for a configuration file and readline usage samples.
You may invoke fim from an interactive shell and control it with the keyboard, as you would do with any image viewer with reasonable key bindings.
fim is keyboard oriented: there are no user menus or buttons available. If you need some feature or setting which is not accessible from the default keyboard configuration, you probably need a custom configuration or simply need to type a custom command. For these, you can use the internal command and configuration language.
See options --read-from-stdin, --script-from-stdin, and --image-from-stdin for more script-oriented usages.
The full commands specification is also accessible at runtime using the internal help system (typing :help).
Accepted command line {options}:
Treat arguments after -- as filenames. Treat arguments before -- as command line options if these begin with -, and as filenames otherwise.
Enable autozoom. Automagically pick a reasonable zoom factor when displaying a new image (as in fbi).
Display contents of binary files (of any filetype) as these were raw 24 or 1 bits per pixel pixelmaps. The width of this image will not exceed the value of the _preferred_rendering_width variable. Regard this as an easter bunny option.
Display contents of files (of any filetype) as these were text. The width of this image will not exceed the value of the _preferred_rendering_width variable. Non-printable characters are then displayed as " ". Regard this as another easter bunny option.
Step in the directory of the first file to be loaded, push other files from that directory, and jump back to the first file. Useful when invoking from a desktop environment.
-c {commands}, --execute-commands {commands}
Execute {commands} after reading the initialization file, just before entering the interactive mode. No semicolon (;) is required at the end of {commands}. Do not forget quoting {commands} in a manner suitable to your shell. So -c next is fine as it is. A more complicated example, with quotings: -c ’*2;2pan_up;display;while(1){align "bottom";sleep "1" ; align "top"}’ (with the single quotes) tells fim to: double the displayed image size, pan twice up, display the image, and finally do an endless loop consisting of bottom and top aligning, alternated.
-C {commands}, --execute-commands-early {commands}
Similar to the --execute-commands option, but execute {commands} earlier, just before reading the initialization file. If {commands} takes the special ’early’ form =var=val, it assigns value val to variable var immediately, before the interpreter is started, and with no value quoting needed.
For example, -C ’_scale_style=" "’ starts fim no auto-scaling; the equivalent early form is: -C ’=_scale_style= ’.
Framebuffer device to use. Default is the one your vc is mapped to (as in fbi).
Dump to stdout language reference help and quit.
Dump default configuration (the one hardcoded in the fim executable) to standard output and quit.
-E {scriptfile}, --execute-script {scriptfile}
Execute {scriptfile} after the default initialization file is read, and before executing --execute-commands commands.
-f {fimrc}, --etc-fimrc {fimrc}
Specify an alternative system-wide initialization file (default: /usr/local/etc/fimrc), to be read prior to any other configuration file. See also --no-etc-fimrc-file.
-F {commands}, --final-commands {commands}
Similar to the --execute-commands option, but execute {commands} after exiting the interactive mode, just before terminating the program.
Print program invocation help, and exit. Depending on the option, output can be: short, descriptive, long from man, or complete man. For each further argument {help-item} passed to fim, an individual help message is shown. If {help-item} starts with a /, it is treated as a search string (not a regexp, though).
-k {keysym}, --keysym-press {keysym}
Execute any command bound (via the bind command) to a specified keysym at startup. A keysym can be prefixed by a repetition count number. You can specify the option multiple times to simulate multiple keystrokes. Presses entered via --keysym-press are processed with the same priority as those entered via --chars-press, that is, as they appear. See man fimrc(5) for a list of keysyms and the use of bind.
-K {chars}, --chars-press {chars}
Input one or more keyboard characters at program startup (simulate keyboard presses). This option can be specified multiple times. Each additional time (or if the string is empty), a press of Enter (ASCII code 0x0D) key is prepended. Examples: -K ’’ simulates press of an Enter; -K ’:next;’ activates the command line and enter "next;" without executing it; -K ":next;" -K "next" executes "next", stays in the command line and enter keys "next"; -K ":next;" -K "" -K "next" executes "next", leaves the command line, and executes in sequence any command bound to keys ’n’, ’e’, ’x’, ’t’. Presses entered via --chars-press are processed with the same priority as those entered via --keysym-press, that is, as they appear.
-D {filename}, --load-image-descriptions-file {filename}
Load image descriptions from file {filename}. Each line begins with the basename of an image file, followed by a Tab character (or a different character if specified via --image-descriptions-file-separator), then the description text. The description text is copied into the i:_comment variable of the image at load time, overriding the comment possibly loaded from the file (e.g. JPEG, PNG or TIFF comment). If a ’@’ followed by an identifier {identifier} is encountered, and i:{var} is set, its value is substituted here. If "@#" is encountered, the remainder of the description line is ignored. Special comment lines like "#!fim:{var}={val}" lead i:{var} to be assigned value {val} (unquoted) at image loading time (cached variable), unless {var} starts with an underscore (’_’). Special comment lines like "#!fim:@{var}={val}" create a variable {var} that are only valid in expanding @{var} in comments. Special comment lines like "#!fim:{var}@={val}" or "#!fim:@{var}@={val} (notice @ before =) also expand whatever @{identifier} encountered in {val} . Special comment lines like "#!fim:+={val}" add {val} to current description. Special comment lines like "#!fim:^={val}" set {val} to be the base of each description. Special comment lines like "#!fim:!=" reset all cached variables. Special comment lines like "#!fim:/={dir}" prepend {dir} to each file’s basename. Special comment lines like "#!fim:\={dir}" prepend {dir} to each file’s name. Special description text (to be associated to an image) begins with markers: with "#!fim:=", the last description line is reused; with "#!fim:+", what follows is appended to the last description line; with "#!fim:^", what follows is prepended to the last description line; with "#!fim:s/{f}/{t}", the last description line is used and substituted substring {t} to occurrences of substring {f} ({f} and {t} cannot contain newlines or a ’/’). If {val} is empty that variable is unset. These variables are stored also in an internal index used by the limit command. This option sets _caption_over_image=2, so that a caption is displayed over the image. A description file beginning with "#!fim:desc" can be loaded without specifying this switch.
-S {sepchar}, --image-descriptions-file-separator {sepchar}
A character to be used as a separator between the filename and the description part of lines specified just before a --load-image-descriptions-file.
Read one single image from the standard input (the image data, not the filename). May not work with all supported file formats. In the image list, this image takes the special name "<STDIN>".
--mark-from-image-descriptions-file {filename}
Set those files specified in {filename} (see --load-image-descriptions-file for the file format) as marked (see the list command).
Name of the video mode to use video mode (must be listed in /etc/fb.modes). Default is not to change the video mode. In the past, the XF86 config file (/etc/X11/XF86Config) used to contain Modeline information, which could be fed to the modeline2fb perl script (distributed with fbset). On many modern xorg based systems, there is no direct way to obtain a fb.modes file from the xorg.conf file. So instead one could obtain useful fb.modes info by using the (fbmodes (no man page AFAIK)) tool, written by bisqwit. An unsupported mode should make fim exit with failure. But it is possible the kernel could trick fim and set a supported mode automatically, thus ignoring the user set mode.
No personal initialization file is read (default is ~/.fimrc) at startup.
No system-wide initialization file is read (default is /usr/local/etc/fimrc) at startup. See also --etc-fimrc.
No internal default configuration at startup (uses internal variable _no_default_configuration). Will only provide a minimal working configuration.
With internal command line mode disabled.
Do not save execution history at finalization (uses internal variable _save_fim_history).
Do not load execution history at startup.
Do not load or save execution history at startup.
Read commands from stdin before entering in interactive mode.
-o
[fb|sdl|gtk|ca|aa|dumb][={gfxopts}],
--output-device
[fb|sdl|gtk|ca|aa|dumb][={gfxopts}]
Use the specified device
(one among fb|sdl|gtk|ca|aa|dumb) as fim video output
device, overriding automatic checks. If the device is
empty and followed by {gfxopts}, it will be selected
automatically. The available devices depend on the current
environment and on the configuration and compilation
options. You can get the list of available output devices
issuing fim --version. The possible values to
{gfxopts} that we describe here can also be passed as
"display ’reinit’ {gfxopts}" --
see man fimrc for this. The device name with options
(perhaps with modifications due to auto-detection) is stored
in variable _device_string. The fb option
selects the Linux framebuffer. Presence of {gfxopts}
with value ’S’ (e.g.
’fb=S’) makes framebuffer initialization
more picky: it does not tolerate running in a screen
session. The ca option (coloured ASCII-art) can be
specified as
ca[={[’w’][’h’][’H’][’d:’DITHERMODE]}]
; if supplied, ’w’ selects windowed mode,
provided libcaca is running under X; by default (or with
’W’), windowed mode is being turned off
internally during initialization by unsetting the DISPLAY
environment variable. If ’d:’ is present,
the DITHERMODE following it will be passed as dither
algorithm string (alternatively, it can be a non-negative
number, too). The aa (monochrome ASCII-art) option
can be specified as
aa[={[’w’|’W’]}]; if
supplied, ’w’ selects windowed mode,
provided aalib is running under X; by default (or with
’W’), windowed mode is being turned off
internally during initialization by unsetting the DISPLAY
environment variable. Please note that the readline
(internal command line) functionality in ca and
aa modes is limited. If the graphical windowed mode
is sdl or gtk it can be followed by
={[’w’][’m’][’r’][’h’][’W’][’M’][’R’][’H’][width[:height]][’%’]},
where width and height are integer numbers
specifying the desired resolution (if height not
specified, it takes the value of width); the
’w’ character requests windowed mode
(instead of ’W’ for fullscreen); the
’m’ character requests mouse pointer
display; the ’h’ character requests help
grid map draw (can be repeated for variants); the
’r’ character requests support for window
resize; the ’%’ character requests to
treat width and height as percentage of
possible window resolution. The same letters uppercase
request explicit negation of the mentioned features.
Additionally, in gtk mode: ’b’
hides the menu bar, ’e’ starts with empty
menus, ’f’ rebuilds the menus, and
’D’ removes the menus. Note: the
gtk mode is a recent addition and may have defects.
The sdl mode works best with libsdl-2; libsdl-1.2
support is being discontinued.
The imlib2 option requests imlib2 and is unfinished:
do not use it.
The dumb test mode is there only for test purposes
and is not interactive.
--offset {bytes-offset[{:upper-offset}|{+offset-range}]}
Use the specified offset (in bytes) for opening the specified files. If :upper-offset is specified, further bytes until upper-offset are probed. If +offset-range is specified instead, that many additional bytes are to be probed. Use this option to search damaged file systems for image files. Appending a modifier among ’K’,’M’,’G’ (case irrelevant) to an offset number changes the unit to be respectively 2^10, 2^20, or 2^30 bytes.
--pread-cmd {cmd-filter-pipeline}
Specify a shell command with {cmd-filter-pipeline}. If the current filename matches "^[/A-Za-z0-9_.][/A-Za-z0-9_.-]*$", it is be substituted to any occurrence of ’{}’. The resulting command output is assumed to be file data, which is read, decoded, and displayed. This works by setting the internal _pread_cmd variable (empty by default).
Enable textreading mode. This has the effect that fim displays images scaled to the width of the screen, and aligned to the top. If the images you are watching are text pages, all you have to do to get the next piece of text is to press space (in the default key configuration, of course).
Set scroll steps for internal variable _steps (default is "20%").
Interruptible slideshow mode. Wait for {number} of seconds (can have a decimal part, and is assigned to the _slideshow_sleep_time variable) after each image. Implemented by executing reload; i:fresh=1; while(_fileindex <= _filelistlen-_loop_only_once){sleep _slideshow_sleep_time; next;} _loop_only_once=0; sleep _slideshow_sleep_time; as a first command. Can be interrupted by : or Esc. The other keys execute accordingly to their function but do not interrupt the slideshow. Like in fbi, this cycles forever, unless --once is specified.
Perform a quick sanity check, just after the initialization, and terminate.
fim Use an ASCII Art driver. If present, use either of libcaca (coloured), or aalib (monochrome). For more, see (man fimrc), (info aalib) or (apropos caca)). If no ASCII Art driver had been enabled at compile time, fim does not display any image at all.
The {terminal} is to be used as virtual terminal device file (as in fbi). See (chvt (1)), (openvt (1)) for more info about this. Use (con2fb (1)) to map a terminal to a framebuffer device.
Reverse files list before browsing (can be combined with the other sorting options).
Sort files list before browsing according to full filename.
Sort files list before browsing according to file basename’s.
Sort files list before browsing according to file modification time.
Sort files list before browsing according to file size.
Randomly shuffle the files list before browsing (seed depending on time() function).
Pseudo-random shuffle the files list before browsing (no seeding).
Load files verbosely (repeat option to increase verbosity).
Load font verbosely (sets _fbfont_verbosity).
Execute interpreter verbosely (Sets immediately _debug_commands="ackCm" if specified once, _debug_commands="ackCmmi" if specified twice).
Print to stdout program version, compile flags, enabled features, linked libraries information, supported filetypes/file loaders, and then exit.
Scale the image according to the screen width.
Do not scale the images after loading (sets ’_scale_style=" "’;).
Resize the window size (if supported by the video mode) to the image size. Don’t use this with other image scaling options.
Sets _push_checks=0 before initialization, thus disabling file/dir existence checks with stat(2) at push push time (and speeding up startup).
Scale the image according to the screen height.
-W {scriptfile}, --write-scriptout {scriptfile}
All the characters that you type are recorded in the file {scriptfile}, until you exit fim. This is useful if you want to create a script file to be used with "fim -c" or ":exec" (analogous to Vim’s -s and ":source!"). If the {scriptfile} file exists, it is not touched (as in Vim’s -w).
-L {fileslistfile}, --read-from-file {fileslistfile}
Read file list from a file: each line one file to load (similar to --read-from-stdin; use --read-from-stdin-elds to control line breaking).
Read file list from stdin: each line one file to load; use with --read-from-stdin-elds to control line breaking).
Note that these three standard input reading functionalities (-i,-p and -) conflict : if two or more of them occur in fim invocation, fim exits with an error and warn about the ambiguity.
See the section INVOCATION EXAMPLES below to read some useful (and unique) ways of employing fim.
--read-from-stdin-elds {delimiter-char}
Specify an endline delimiter character for breaking lines read via -/--read-from-stdin/--read-from-file (which shall be specified after this). Line text before the delimiter are be treated as names of files to load; the text after is ignored. This is also useful e.g. to load description files (see --load-image-descriptions-file) as filename list files. Default is the newline character (0x0A); to specify an ASCII NUL byte (0x00) use ’’.
Align images to the top border (by setting ’_autotop=1’ after initialization).
Quiet execution mode. Sets _display_status=0;_display_busy=0;.
-r
{{width:height}|’fullscreen’},
--resolution
{{width:height}|’fullscreen’}
Set resolution specification in pixels dimensions. Supported only by GTK and SDL. Will be appended to the argument to --output-device. Shorthand value ’fullscreen’ is translated as ’W’.
Push files/directories to the files list recursively. The expression in variable _pushdir_re (default: ".(JPG|PNG|GIF|BMP|TIFF|TIF|JPEG|JFIF|PPM|PGM|PBM|PCX|QOI|AVIF|WEBP)$") lists extensions of filenames which are loaded in the list. You can overwrite its value by optionally passing an expression {exp} here as argument. If starting with ’+’ or ’|’, the expression following is to be appended to it.
Do not load via external converter programs: only use built-in file decoders.
Push files/directories to the files list recursively, in background during program execution. Any sorting options are ignored. Experimental feature, unfinished.
--load-shadow-directory {dirname}
Add {dirname} to the shadow directory list. Then ’scale "shadow"’ temporarily substitutes the image being displayed with that of the first same-named file located under a shadow directory. Useful to browse low-res images, but still being able to quickly view the hi-res original residing in a shadow directory. This works as intended as long as unique filenames are involved.
After startup jump to pattern; short for -c ’/’ {pattern}.
After startup jump to pattern; as -c ’/’{pattern} but with search on the full path (with _re_search_opts="f").
If running --slideshow, loop only once (as in fbi).
The program
return status is 0 on correct operation; 252 on unsupported
device specification; 248 on bad input; 255 on a generic
error; 42 on a signal-triggered program exit; or a different
value in case of an another error.
The return status may be controlled by the use of the quit
command.
The following keys and commands are default hardcoded in the minimal configuration. These are working by default before any configuration file loading, and before the hardcoded config loading (see variable _fim_default_config_file_contents).
n goto
’+1f’
p goto ’-1f’
+ scale ’+’
- scale ’-’
h pan ’left’
l pan ’right’
k pan ’up-’
j pan ’down+’
q quit
You can type a number before a command binding to iterate
the assigned command:
3k 3pan ’up-’
: enter command
line mode (here one can use readline bindings as C-r, C-s,
M-b, M-f, ...)
:{number} jump to {number}^th image in the
list
jump to first image in the list
:*{factor} scale the
image by {factor}
:{scale}% scale the image to the desired
{scale}
:+{scale}% scale the image up to the desired
percentage {scale} (relatively to the original)
:-{scale}% scale the image down to the desired
percentage {scale} (relatively to the original)
entering the pattern {regexp} (with ’/’) makes fim jump to the next image whose filename matches {regexp}
entering this pattern (with ’/’) makes fim jump to the next image whose filename ends with ’png’
a shortcut for ’/.*png.*’
print three filenames to standard output.
executes the {syscmd} quoted string as an argument to the "system" fim command.
You can
visualize all of the default bindings invoking fim
--dump-default-fimrc | grep bind .
You can visualize all of the default aliases invoking fim
--dump-default-fimrc | grep alias .
The Return vs. Space key thing can be used to create a file list while reviewing the images and use the list for batch processing later on.
All of the key bindings are reconfigurable; see the default fimrc file for examples on this, or read the complete manual: the FIM.TXT file distributed with fim.
(just like in fbi) a Linux consolefont font file.
If using a gzipped font file,
the zcat program is used to uncompress it (via
execvp(3)).
If FBFONT is unset, the following files are probed and the
first existing one is selected:
/usr/share/kbd/consolefonts/cp866-8x16.psf.gz
/usr/share/consolefonts/Uni3-TerminusBoldVGA14.psf.gz
/usr/lib/kbd/consolefonts/lat9-16.psf.gz
/usr/share/consolefonts/lat1-16.psf
/usr/share/consolefonts/lat1-16.psf.gz
/usr/share/consolefonts/lat1-16.psfu.gz
/usr/share/kbd/consolefonts/lat1-16.psf
/usr/share/kbd/consolefonts/lat1-16.psf.gz
/usr/share/kbd/consolefonts/lat1-16.psfu.gz
/usr/lib/kbd/consolefonts/lat1-16.psf
/usr/lib/kbd/consolefonts/lat1-16.psf.gz
/usr/lib/kbd/consolefonts/lat1-16.psfu.gz
/lib/kbd/consolefonts/lat1-16.psf
/lib/kbd/consolefonts/lat1-16.psf.gz
/lib/kbd/consolefonts/lat1-16.psfu.gz
/lib/kbd/consolefonts/Lat2-VGA14.psf.gz
/lib/kbd/consolefonts/Lat2-VGA16.psf.gz
/lib/kbd/consolefonts/Lat2-VGA8.psf.gz
/lib/kbd/consolefonts/Uni2-VGA16.psf.gz
/usr/share/consolefonts/default8x16.psf.gz
/usr/share/consolefonts/default8x9.psf.gz
/usr/share/consolefonts/Lat15-Fixed16.psf.gz
/usr/share/consolefonts/default.psf.gz
fim://
If the special fim:// string is specified, a hardcoded font is used.
(just like in fbi) gamma correction (applies to dithered 8 bit mode only). Default is 1.0.
(just like in fbi) user set framebuffer device file (applies only to the fb mode).
If unset, fim probes for /dev/fb0.
(only in fim) influences the output device selection algorithm, especially if $TERM=="screen".
if set and no output device specified, assume we’re over ssh, and give precedence to ca, then aa (if present).
if set and no output device specified, assume we’re over termux, and give precedence to ca, then aa (if present).
if set and no output device specified, assume we’re over Wayland, and give precedence to gtk, then sdl, then ca, then aa (if present).
If this variable is set, then the gtk driver has precedence, then sdl.
fim -o fb needs read-write access to the framebuffer devices (/dev/fbN or /dev/fb/N), i.e you (our your admin) have to make sure fim can open the devices in rw mode. The IMHO most elegant way is to use pam_console (see /etc/security/console.perms) to chown the devices to the user logged in on the console. Another way is to create some group, chown the special files to that group and put the users which are allowed to use the framebuffer device into the group. You can also make the special files world writable, but be aware of the security implications this has. On a private box it might be fine to handle it this way through.
If using udev,
you can edit: /etc/udev/permissions.d/50-udev.permissions
and set these lines like here:
# fb devices
fb:root:root:0600
fb[0-9]*:root:root:0600
fb/*:root:root:0600
fim -o fb also needs access to the linux console (i.e. /dev/ttyN) for sane console switch handling. That is obviously no problem for console logins, but any kind of pseudo tty (xterm, ssh, screen, ...) will not work.
fim --help
-R -B
# get help for options -R and -B
fim
media/
# load files from the directory media/
fim -R
media/ --sort
# open files found by recursive traversal of directory
media, then sorting the list
find
/mnt/media/ -name *.jpg | fim -
# read input files list from standard input
find
/mnt/media/ -name *.jpg | shuf | fim -
# read input files list from standard input, randomly
shuffled
cat
script.fim | fim -p images/*
# read a script file script.fim from standard input
before displaying files in the directory images
scanimage
... | tee scan.ppm | fim -i
# read the image scanned from a flatbed scanner as soon as
it is read
h5topng -x 1
-y 2 dataset.hdf -o /dev/stdout | fim -i
# visualize a slice from an HDF5 dataset file
fim * >
selection.txt
# output the file names marked interactively with the
’list "mark"’ command in fim to a
file
fim * | fim
-
# output the file names marked with ’m’ in fim
to a second instance of fim, in which these could be marked
again
fim -c
’pread "vgrabbj -d /dev/video0 -o
png";reload’
# display an image grabbed from a webcam
fim -o
aa -c ’pread "vgrabbj -d /dev/video0 -o
png";reload;system "fbgrab"
"asciime.png"’
# if running in framebuffer mode, saves a png screenshot
with an ASCII rendering of an image grabbed from a
webcam
fim -c ’while(1){pread "vgrabbj -d /dev/video0 -o png";reload;sleep 1;};’
# display a sequence of images grabbed from a webcam; circa 1 per second
This manual page is neither accurate nor complete. In particular, issues related to driver selection shall be described more accurately. Also the accurate sequence of autocommands execution, variables application is critical to understanding fim, and should be documented. The filename "<STDIN>" is reserved for images read from standard input (view this as a limitation), and thus handling files with such name may incur in limitations.
fim has bugs. Please read the BUGS file shipped in the documentation directory to discover the known ones. There are also inconsistencies in the way the internal command line works across the different graphical devices.
The directory with fim documentation files.
The system-wide fim initialization file (executed at startup, after executing the hardcoded configuration).
The personal fim initialization file (executed at startup, after the system-wide initialization file).
File where to load from or save command history. See (man fimrc(5), man readline(3)).
If fim is built with GNU readline support, it is susceptible to changes in the user set ~/.inputrc configuration file contents. For details, see (man readline(3)).
Other
fim man pages: fimgs(1), fimrc(1).
Conversion programs: convert(1), dia(1),
xcftopnm(1), fig2dev(1), inkscape(1).
Related programs: fbset(1), con2fb(1),
vim(1), mutt(1), exiftool(1),
exiftags(1), exiftime(1), exifcom(1),
fbi(1), fbida(1), feh(1),
qiv(1), sxiv(1), fbgrab(1).
Related documentation: fbdev(4), vcs(4),
fb.modes(8), fbset(8), setfont(8).
Michele Martone <dezperado _CUT_ autistici _CUT_ org> is the author of fim, "Fbi IMproved".
Copyright (C)
2007-2024 Michele Martone <dezperado _CUT_ autistici
_CUT_ org> (author of fim)
Copyright (C) 1999-2004 Gerd Hoffmann <kraxel _CUT_
bytesex.org> is the author of "fbi", upon which
fim was originally based.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
fimrc - fim configuration file and language reference
~/.fimrc
/usr/local/etc/fimrc
fim --script-from-stdin [ {options} ] <
{scriptfile}
fim --execute-script {scriptfile} [
{options} ]
fim --execute-commands {commands} [
{options} ]
fim --final-commands {commands} [
{options} ]
fim --write-scriptout {scriptfile} [
{options} ]
fim --write-scriptout /dev/stdout [ {options} ]
fim --chars-press :{commands} [ {options}
]
fim --chars-press :{commands} --chars-press
’’ [ {options} ]
fim --keysym-press {keysym} [ {options}
]
This page explains the fim scripting language, which is used for the fimrc configuration files, {scriptfile}s, or {commands} passed via command line {options}. This language can be used to issue commands (or programs) from the internal program command line accessed interactively by default through the ":" key (which can be customized via the "_console_key" variable). One may exit from command line mode by pressing the Enter key on an empty line (a non empty command line would be submitted for execution), or the Esc key (only in SDL mode). The general form of a fim command/program is shown in the next section.
This section specifies the grammar of the fim language.
Language elements surrounded by a single quote ("’") are literals.
Warning: at the present state, this grammar has conflicts. A future release shall fix them.
program: %empty
| statement_list
statement_list:
statement
| statement ’;’ statement_list
| non_atomic_statements_block statement_list
| statements_block
non_atomic_statements_block:
’{’ statement_list ’}’
| INTEGER ’{’ statement_list ’}’
| conditional_statement
statements_block:
atomic_statements_block
| non_atomic_statements_block
conditional_statement:
if_statement
| loop_statement
if_statement:
’if’ ’(’ expression ’)’
statements_block
| ’if’ ’(’ expression
’)’ statements_block ’else’
statements_block
loop_statement:
’while’ ’(’ expression
’)’ statements_block
| ’do’ statements_block ’while’
’(’ expression ’)’
atomic_statements_block:
statement ’;’
| statement ’;’ ’;’
| statement ’;’ ’;’
’;’
statement:
’!’ arguments
| INTEGER ’,’ INTEGER IDENTIFIER
| INTEGER ’,’ INTEGER IDENTIFIER arguments
| INTEGER IDENTIFIER
| SLASH_AND_REGEXP
| ’+’ UNQUOTED_FLOAT ’%’
| ’+’ QUOTED_FLOAT ’%’
| ’+’ INTEGER ’%’
| ’*’ UNQUOTED_FLOAT
| ’*’ QUOTED_FLOAT
| ’*’ INTEGER
| UNQUOTED_FLOAT ’%’
| QUOTED_FLOAT ’%’
| INTEGER ’%’
| ’-’ UNQUOTED_FLOAT ’%’
| ’-’ QUOTED_FLOAT ’%’
| ’-’ INTEGER ’%’
| INTEGER
| ’-’ INTEGER
| IDENTIFIER
| IDENTIFIER FILE_PATH
| IDENTIFIER arguments
| INTEGER IDENTIFIER arguments
| IDENTIFIER ’=’ expression
arguments:
expression
| expression arguments
expression:
’(’ expression ’)’
| expression ’.’ expression
| ’!’ expression
| expression ’%’ expression
| expression ’+’ expression
| expression ’-’ expression
| expression ’*’ expression
| expression ’/’ expression
| expression ’<’ expression
| expression ’>’ expression
| expression ’||’ expression
| expression BOR expression
| expression ’&&’ expression
| expression BAND expression
| expression ’>=’ expression
| expression ’<=’ expression
| expression ’!=’ expression
| expression ’==’ expression
| expression ’=~’ expression
| ’-’ expression
| IDENTIFIER
| INTEGER
| QUOTED_FLOAT
| UNQUOTED_FLOAT
| STRING
A STRING can be either a single quoted string or a double quoted string. A floating point number can be either unquoted (UNQUOTED_FLOAT) or quoted (QUOTED_FLOAT). A QUOTED_FLOAT is a floating point number, either single ("’") or double (""") quoted. An INTEGER shall be an unsigned integer number. An IDENTIFIER shall be one of the valid fim commands (see COMMANDS REFERENCE ) or a valid alias. A VARIABLE shall be an already declared or undeclared variable identifier (see VARIABLES REFERENCE ) or a valid alias, created using the alias command. The "=~" operator treats the right expression as a STRING, and uses it as a regular expression for matching purposes. The SLASH_AND_REGEXP is a slash ("/") followed by a STRING, interpreted as a regular expression. If ’INTEGER , INTEGER IDENTIFIER arguments’ is encountered, command IDENTIFIER will be repeated on each file in the interval between the two INTEGERs, and substituting the given file name to any ’{}’ found in the commands arguments (which must be quoted in order to be treated as strings). See regex(1) for regular expression syntax.
The way some one-line statements are evaluated:
: enter command
line mode (here one can use readline bindings as C-r, C-s,
M-b, M-f, ...)
:{number} jump to {number}^th image in the
list
jump to first image in the list
:*{factor} scale the
image by {factor}
:{scale}% scale the image to the desired
{scale}
:+{scale}% scale the image up to the desired
percentage {scale} (relatively to the original)
:-{scale}% scale the image down to the desired
percentage {scale} (relatively to the original)
entering the pattern {regexp} (with ’/’) makes fim jump to the next image whose filename matches {regexp}
entering this pattern (with ’/’) makes fim jump to the next image whose filename ends with ’png’
a shortcut for ’/.*png.*’
print three filenames to standard output.
executes the {syscmd} quoted string as an argument to the "system" fim command.
alias
alias [{identifier} [{commands}
[{description}]]]
Without arguments, lists the current aliases.
With one, shows an identifier’s assigned command.
With two, assigns to an identifier a user defined command or
sequence of commands.
With three, also assigns a help string.
align
align
[’bottom’|’top’|’left’|right’]:
if image larger than drawing area, align one side of the
image to the border.
align ’center’: align equally far from all
sides.
align ’info’: print internal alignment
information.
autocmd
autocmd {event} {pattern} {commands}: manipulate
autocommands (inspired from Vim autocmd’s).
Without arguments, list autocommands.
With arguments, specifies for which type of event and which
current file open, which commands to execute.
See the default built-in configuration files for
examples.
autocmd_del
autocmd_del: specify autocommands to delete.
Usage: autocmd_del {event} {pattern} {commands}.
basename
basename {filename}: returns the basename of
{filename} in the ’_last_cmd_output’
variable.
bind
bind [{keysym} [{commands}
[{description}]]]: bind a key {keysym} to
{commands}.
Optional {description} specifies a documentation
string.
If {keysym} is at least two characters long and
begins with 0 (zero), the integer number after the 0 will be
treated as a raw keycode to bind the specified
{keysym} to.
Use the ’_verbose_keys’ variable to discover
(display device dependent) raw keys.
Key binding is dynamical, so you can bind keys even during
program’s execution.
You can get a list of valid symbols (keysyms) by invoking
dump_key_codes or in the man page.
cd
cd {path}: change the current directory to
{path}.
If {path} is a file, use its base directory name.
cd ’-’ changes to the previous current directory
(before the last ’:cd {path}’
command).
clear
clear: clear the virtual console.
commands
commands: display the existing commands.
color
color [’desaturate’]: desaturate the displayed
image colors.
color [’negate’]: negate the displayed image
colors.
color
[’colorblind’|’c’|’deuteranopia’|’d’]:
simulate a form of the deuteranopia color vision deficiency
(cvd).
color [’protanopia’|’p’]: simulate a
form of the protanopia cvd.
color [’tritanopia’|’t’]: simulate a
form of the tritanopia cvd.
color [’daltonize’|’D’]: if
following a cvd specification, attempts correcting it.
color [’identity’]: populate the image with
’RGB identity’ pixels.
To get back the original, you have to reload the image.
crop
crop: crop image to a centered rectangle, half the width and
half the height.
crop {p}: crop image to the middle {p}
horizontal percent and {p} vertical percent of the
image.
crop {w} {h}: crop image to the middle {w}
horizontal percent and {h} vertical percent of the
image.
crop {x1} {y1} {x2} {y2}: crop image to the area
between the upper left ({x1},{y1}) and lower
right ({x2},{y2}) corner.
Units are intended as percentage (0 to 100).
Note: still experimental functionality.
desc
desc ’load’ {filename}
[{sepchar}]: load description file {filename},
using the optional {sepchar} character as separator.
desc ’reload’: load once again description files
specified at the command line with
--load-image-descriptions-file, with respective separators.
desc [’-all’] [’-append’]
[’-nooverw’] ’save’
{filename} [{sepchar}]: save current list
descriptions to file {filename}, using the optional
{sepchar} character as separator, and if
’-all’ is present then save the variables, and
if ’-append’ is present then only append, and if
’-nooverw’ is present then do not overwrite
existing files.
See documentation of --load-image-descriptions-file for the
format of {filename}.
display
display [’reinit’ {string} |
’resize’ {w} {h} | [’menuadd’
{menuspec}|’menudel’|’v’|’V’]
]: display the current file contents or change display
settings.
If ’reinit’ switch is supplied, the
{string} specifier is used to reinitialize the
display device parameters like e.g. resolution, window
system options; see the --output-device command line switch
for allowed values.
If ’resize’ and no argument, ask the window
manager to resize the window like the image.
If ’resize’ and two arguments, these are used to
reset width and height of the current window.
In the ’menuadd’ case, use {menuspec} as
GTK window menu specification. This specification string
argument can be repeated. Each argument has form M/S. M is a
slash-separated submenu location, with optional
’_’ (underscore) before a GTK accelerator
character (e.g. "File", "_File",
"View/Scale", "_View/Scale"). M cannot
be empty and must be followed by a ’/’. S can
specify a simple entry, a toggle entry, or radio buttons. If
a simple entry, it consists of one to three sections
separated by " " (two spaces). If M begins with
two non-alphanumeric symbols, these will be used as
separators, instead of the two spaces. The first section is
the name of the menu entry (a label), the second is a
command specification, the third is a shortcut character.
The following labels are special and if followed by
’/’, they create custom menus: FimMenuLimit
(pre-categorized "limit"-based commands based on
actual "desc" command data), FimMenuCommands (with
commands), FimMenuAliases (with aliases), FimMenuKeyBindings
(with bindings), FimMenuVariables (with variables’
values), FimMenuCommandsHelp (commands help),
FimMenuAliasesHelp (aliases help), FimMenuKeyBindingsHelp
(bindings help), FimMenuVariablesHelp (variables’
help). A toggle button specification can take the form
’toggle__’{identifier}’__’{value}’__’{value}
and starts the toggle button with the second {value}
(which has to be different). Actually, between
’toggle’ and the second value, instead of
’__’ you can use any two same punctuation signs
or Tab characters consistently. E.g. "menu/label
toggle___v__1__2 " or "menu/label toggle::_v::1::2
" are ok, but "menu/label toggle___v__1__1 "
or "menu/label toggle___v::1::2 " are not. A radio
buttons specification has as many sections as radio buttons,
separated internally by double spaces, and consisting each
by a string, two spaces, an assignment
{identifier}={value} (notice no quotes are
necessary around {value}, and repetitions are
illegal), two spaces, and an optional accelerator character
(e.g. "m/first: v=1 a second: v=2 b third: v=3 c"
is ok, but "m/first: v=1 a second: v=2 b third: v=2
c" is not).
Option ’menudel’ removes all menus.
Note: ’menuadd’ and ’menudel’ are
only valid for the gtk mode and are experimental. In
particular, currently there are limitations on which
characters are allowed in menu command specifications; the
recommended workaround is to use aliases.
Experimental option ’v’ increases internal
verbosity for some graphical outputs; experimental option
’V’ decreases it.
See also the ’_debug_commands’ variable.
dump_key_codes
dump_key_codes: dump the active key codes (unescaped, for
inspection purposes).
echo
echo {args}: print the {args} on console.
else
if(expression){action;}[’else’{action;}]:
see if.
eval
eval {args}: evaluate {args} as commands,
executing them.
exec
exec {filename(s)}: execute script
{filename(s)}.
font
font ’scan’ [{dirname}]: scan
{dirname} or /usr/share/consolefonts looking for
fonts in the internal fonts list.
font ’load’ {filename}: load font
{filename}.
font {’next’|’prev’}: load next or
previous font from the internal fonts list.
font ’info’: print current font filename.
getenv
getenv {identifier}: create a variable with the same
value as the ’{identifier}’ environment
variable, but with an identifier prefixed by
’ENV_’. So e.g. getenv ’DISPLAY’
creates ’ENV_DISPLAY’. Nothing is being printed;
no variable is created if {identifier} is empty.
goto
goto
{[’+’|’-’]{number}[’%’][’f’|’p’|’F’|’P’]}+
| {/{regexp}/} | {?{filename}} |
{’+//’} |
{’+/’|’-/’}[C] |
{{’+’|’-’}{identifier}[’+’]}:
jump to an image.
If {number} is given, and not surrounded by any
specifier, go to image at index {number}.
If followed by ’%’, the effective index is
computed as a percentage to the current available images.
If prepended by ’-’ or ’+’, the jump
is relative to the current index.
The ’f’ specifier asks for the jump to occur
within the files (same for ’F’, but accelerates
if keep pressing).
The ’p’ specifier asks for the jump to occur in
terms of pages, within the current file (same for
’P’, but accelerates if keep pressing).
If there’s only one file in the list and no
’f’ specified, a ’p’ will be
implied, for a page jump.
The above form can be concatenated several times, but only
the last occurrence of either file or page goto will be
effective.
If /{regexp}/ is given, jump to the first image
matching the given /{regexp}/ regular expression
pattern.
If the argument starts with ?, jump to the filename
following ?.
If given ’+//’, jump to the first different
image matching the last given regular expression pattern.
With ’+/’C or ’-/’C,
jump to the next or the previous file according to C:
if ’s’ if same directory, if ’d’ if
down the directory hierarchy, if ’u’ if down the
directory hierarchy, if ’b’ if same basename, if
upper case match is negative, if missing defaults to
’S’ (jump to file in different dir).
If {identifier|identifier2...}] is encountered after
a ’+’ or ’-’ sign, jump to the next
or the previous image having a different value for any
corresponding i:{identifier} (a trailing
’+’ requires a non empty value).
Matching can occur on both file name and description,
possibly loaded via desc or --load-image-descriptions-file;
see also ’_lastgotodirection’ and
’_re_search_opts’.
You can specify multiple arguments to goto: those after the
first one triggering a jump are ignored.
Executes autocommands for events PreGoto and PostGoto.
Keeping pressed shall accelerate images browsing.
help
help [{identifier}]: provide online help, assuming
{identifier} is a variable, alias, or command
identifier.
If {identifier} begins with ’/’, search
on the help contents, and show a list of matching items.
A list of commands can be obtained simply invoking
’commands’; a list of aliases with
’alias’; a list of bindings with
’bind’; a list of variables with
’variables’.
if
if(expression){action;}[’else’{action;}]:
see ’else’.
info
info: display information about the current file.
limit
limit {’-list’|’-listall’}
’variable’|[’-further’|’-merge’|’-subtract’]
[{expression} |{variable} {value}]: A
browsable file list filtering function (like limiting in the
’mutt’ program). Uses information loaded via
--load-image-descriptions-file.
If invoked with ’-list’/’-listall’
only, will list the current description variable ids.
If invoked with ’-list’/’-listall’
’id’, will list set values for the variable
’id’.
If ’-further’ is present, will start with the
current list; if not, with the full list.
If ’-merge’ is present, new matches will be
merged in the existing list and sorted.
If ’-subtract’ is present, sort and filter out
matches.
If {variable} and {value} are provided, limit to
files having property {variable} set to
{value}.
If {expression} is one exclamation point
(’!’), will limit to the currently marked files
only.
If {expression} is ’~!’ will limit to
files with unique basename.
if ’~=’, to files with duplicate basename.
if ’~^’, to the first of the files with
duplicate basename.
if ’~$’, to the last of the files with duplicate
basename.
On ’~i’ [MINIDX][-][MAXIDX], (each
a number possibly followed by a multiplier ’K’)
will limit on filenames in position MINIDX to
MAXIDX.
On ’~z’ will limit to files having the current
file’s size.
on ’~z’ [MINSIZE][-][MAXSIZE],
(each a number possibly followed by a multiplier among
’k’,’K’,’m’,’M’)
will limit on filesize within these limits.
on ’~d’ will limit to files having the current
file’s date +- one day.
on ’~d’ [MINTIME][-][MAXTIME],
(each the count of seconds since the Epoch (First of Jan. of
1970) or a date as DD/MM/YYYY) will
limit on file time (struct stat’s
’st_mtime’, in seconds) within this interval.
For other values of {expression}, limit to files
whose description string matches {expression}.
Invoked with no arguments, the original browsable files list
is restored.
list
list: display the files list.
list ’random_shuffle’: randomly shuffle the file
list.
list ’reverse’: reverse the file list.
list ’clear’: clear the file list.
list ’sort’: sort the file list.
list ’sort_basename’: sort the file list
according to base name.
list ’sort_comment’: sort the file list
according to the value of the _comment variable.
list ’sort_var’ {var}: sort the file list
according to the value of the i:{var} variable.
list ’vars’|’variables’: list
variables in all i:* read from description file.
list ’sort_fsize’: sort the file list according
to file size.
list ’sort_mtime’: sort the file list according
to modification date.
list ’pop’: remove the current file from the
files list, and step back.
list ’remove’ [{filename(s)}]: remove the
current file, or the {filename(s)}, if specified.
list ’push’ {filename(s)}: push
{filename(s)} to the back of the files list.
list ’filesnum’: display the number of files in
the files list.
list ’mark’ [{args}]: mark image file
names for stdout printing at exit, with {args} mark
the ones matching according to the rules of the
’limit’ command, otherwise the current file.
list ’unmark’ [{args}]: unmark marked
image file names, with {args} unmark the ones
matching according to the rules of the ’limit’
command, otherwise the current file.
list ’marked’: show which files have been marked
so far.
list ’dumpmarked’: dump to stdout the marked
files (you usually want to ’unmarkall’
afterwards).
list ’markall’: mark all the current list files.
list ’unmarkall’: unmark all the marked files.
list ’pushdir’ {dirname}: push all the
files in {dirname}, when matching the regular
expression in variable _pushdir_re or, if empty, from
constant regular expression
’.(JPG|PNG|GIF|BMP|TIFF|TIF|JPEG|JFIF|PPM|PGM|PBM|PCX|QOI|AVIF|WEBP)$’.
list ’pushdirr’ {dirname}: like pushdir,
but also push encountered directory entries recursively.
list ’swap’: move the current image filename to
the first in the list (you’ll have to invoke reload to
see the effect).
Of the above commands, several are temporarily not available
for the duration of a background load (enabled by
--background-recursive), which lasts until
_loading_in_background is 0.
load
load: load the image, if not yet loaded (see also
’reload’).
Executes autocommands for events PreLoad and PostLoad.
pan
pan {vsteps}% {hsteps}%: pan the image to
{vsteps} percentage steps from the top and
{hsteps} percentage steps from left.
pan {vsteps} {hsteps}: pan the image to
{vsteps} pixels from the top and {hsteps}
pixels from left.
pan
{’down’|’up’|’left’|’right’|’ne’|’nw’|’se’|’sw’}[+-]
[{steps}[’%’]]: pan the image
{steps} pixels in the desired direction.
If the ’%’ specifier is present, {steps}
is treated as a percentage of current screen dimensions.
If {steps} is not specified, the ’_steps’
variable is used.
If present, the ’_hsteps’ variable is considered
for horizontal panning.
A ’+’ (or ’-’) sign at the end of
the first argument jumps to next (or previous) if border is
reached.
If present, the ’_vsteps’ variable is considered
for vertical panning.
The variables may be terminated by the ’%’
specifier.
Executes autocommands for events PrePan and PostPan.
popen
popen {syscmd}: pipe a command, invoking popen():
spawns a shell, invoking ’{syscmd}’ and
executing as fim commands the output of
’{syscmd}’. Can be disabled at configure
time with --disable-system.
pread
pread {args}: execute {args} as a shell
command and read the output as an image file (using
’popen’). Can be disabled at configure time with
--disable-system.
prefetch
prefetch: prefetch (read into the cache) the two nearby
image files (next and previous), for a faster subsequent
opening.
Executes autocommands for events PrePrefetch and
PostPrefetch.
See also the ’_want_prefetch’ variable.
pwd
pwd: print the current directory name, and updates the
’_pwd’ variable.
quit
quit [{number}]: terminate the program.
If {number} is specified, use it as the program
return status.
Note that autocommand ’PostInteractiveCommand’
does not trigger after this command.
recording
recording ’start’: start recording the executed
commands.
recording ’stop’: stop recording the executed
commands.
recording ’dump’: dump in the console the record
buffer.
recording ’execute’: execute the record buffer.
recording ’repeat_last’: repeat the last
performed action.
redisplay
redisplay: re-display the current file contents.
reload
reload [{arg}]: load the image into memory.
If {arg} is present, force reloading, bypassing the
cache (see also ’load’).
Executes autocommands for events PreReload and
PostReload.
rotate
rotate {number}: rotate the image the specified
amount of degrees. If unspecified, by one. If you are
interested in orthogonal rotations, see
’_orientation’ and related aliases.
Executes autocommands for events PreScale and PostScale.
scale
scale
{[’+’|’-’]{value}[’%’]|’*’{value}|’w’|’h’|’a’|’b’|’+[+-*/]’|[’<’|’>’]|’shadow’}:
scale the image according to a scale {value} (e.g.:
0.5,40%,’w’,’h’,’a’,’b’).
If given ’*’ and a value, multiply the current
scale by that value.
If given ’w’, scale according to the screen
width.
If given ’h’, scale to the screen height.
If given ’a’, to the minimum of ’w’
and ’h’.
If given ’b’, like ’a’, provided
that the image width exceeds ’w’ or
’h’.
If {value} is a number, scale relatively to the
original image width.
If the number is followed by ’%’, the relative
scale is treated as a percentage.
If given ’++’(’+-’), increment
(decrement) the ’_magnify_factor’,
’_reduce_factor’ variables by
’_scale_factor_delta’.
If given ’+*’(’+/’), multiply
(divide) the ’_magnify_factor’,
’_reduce_factor’ variables by
’_scale_factor_multiplier’.
If given ’<’ (or ’>’), shrink
(or magnify) image using nearest mipmap (cached pre-scaled
version). If given ’shadow’ as a parameter,
search a same-named file in one of the directories specified
to --load-shadow-dir.
Executes autocommands for events PreScale and PostScale.
scroll
scroll: scroll down the image, going next when hitting the
bottom.
scroll ’forward’: scroll the image as we were
reading left to right (see
’_scroll_skip_page_fraction’ variable).
Executes autocommands for events PrePan and PostPan.
set
set: returns a list of variables which are set.
set {identifier}: returns the value of variable
{identifier}.
set {identifier} {value}: sets variable
{identifier} to value {value}.
set_commandline_mode
set_commandline_mode: set console mode. Note that the mode
will change only after the current block of commands is
evaluated.
set_interactive_mode
set_interactive_mode: set interactive mode. Note that the
mode will change only after the current block of commands is
evaluated.
sleep
sleep [{number}]: sleep for the specified number of
seconds (or 1, if unspecified).
status
status: set the status line to the collation of the given
arguments.
stderr
stderr {args}: writes to stderr its arguments
{args}.
stdout
stdout {args}: writes to stdout its arguments
{args}.
system
system {syscmd}: get the output of executing the
{syscmd} system command. Uses the popen() system
call. Usually popen invokes "/bin/sh -c
{syscmd}". This might not handle a multi-word
command; in that case you have to put it into a script. See
’man popen’ for more. Can be disabled at
configure time with --disable-system.
variables
variables: display the existing variables.
unalias
unalias {identifier} | ’-a’: delete the
alias {identifier} or all aliases (use
’-a’, not -a).
unbind
unbind {keysym}: unbind the action associated to a
specified {keysym}
If {keysym} is at least two characters long and
begins with 0 (zero), the integer number after the 0 will be
treated as a raw keycode to bind the specified
{keysym} to.
Use the ’_verbose_keys’ variable to discover
(display device dependent) raw keys.
while
while(expression){action;}: A conditional
cycle construct.
May be interrupted by hitting the ’Esc’ or the
’:’ key.
window
window {args}: this command is disabled.
" " "!" ’"’ "#" "$" "%" "&" "’" "(" ")" "*" "+" "," "-" "." "/" "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" ":" ";" "<" "=" ">" "?" "@" "A" "Any" "B" "Backspace" "C" "C-a" "C-b" "C-c" "C-d" "C-e" "C-f" "C-g" "C-h" "C-i" "C-j" "C-k" "C-l" "C-m" "C-n" "C-o" "C-p" "C-q" "C-r" "C-s" "C-t" "C-u" "C-v" "C-w" "C-x" "C-y" "C-z" "D" "Del" "Down" "E" "End" "Enter" "Esc" "F" "F1" "F10" "F11" "F12" "F2" "F3" "F4" "F5" "F6" "F7" "F8" "F9" "G" "H" "Home" "I" "Ins" "J" "K" "L" "Left" "M" "N" "O" "P" "PageDown" "PageUp" "Q" "R" "Right" "S" "T" "Tab" "U" "Up" "V" "W" "X" "Y" "Z" "[" "\" "]" "^" "_" "’" "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z" "{" "|" "}" "~"
Available
autocommands are: PreScale, PostScale, PrePan, PostPan,
PreRedisplay, PostRedisplay, PreDisplay, PostDisplay,
PrePrefetch, PostPrefetch, PreReload, PostReload, PreLoad,
PostLoad, PreGoto, PostGoto, PreConfigLoading,
PostConfigLoading, PreHardcodedConfigLoading,
PostHardcodedConfigLoading, PreUserConfigLoading,
PostUserConfigLoading, PreGlobalConfigLoading,
PostGlobalConfigLoading, PreInteractiveCommand,
PostInteractiveCommand, PreExecutionCycle,
PostExecutionCycle, PreExecutionCycleArgs, PreWindow,
PostWindow, and they are triggered on actions as suggested
by their name.
Those associated to actual commands are mentioned in the
associated commands reference.
If undeclared, a variable will evaluate to 0.
When assigning a variable to a string, use single or double quoting, otherwise it will be treated as a number.
The namespaces in which variables may exist are: current image, global. A namespace is specified by a prefix, which can be: ’i:’, be prepended to the variable name. The global namespace is equivalent to the empty one:’’. The special variable i:* expands to the collation of all the name-value pairs for the current image.
In the following, the [internal] variables are the ones referenced in the source code (not including the hardcoded configuration, which may be inspected and/or invalidated by the user at runtime).
_TERM
[out,g:] the environment TERM variable.
__exif_flipped [out,i:] flipping information, read from
the EXIF tags of a given image.
__exif_mirrored [out,i:] mirroring information, read
from the EXIF tags of a given image.
_all_file_loaders [out,g:] space-separated list of
hardcoded file loaders usable with _file_loader.
_archive_files [in,g:] If non-empty, a regular
expression matching the filenames to be treated as archives
(multipage files). If empty,
".(RAR|ZIP|TAR|TAR.GZ|fim-0.7.1.tar.gz|TAR.BZ2|TBZ|TBZ2|CBR|CBZ|LHA|7Z|XAR|ISO)$"
is used. Within each archive, only filenames matching the
regular expression in the _pushdir_re variable are
considered for loading.
_autocmd_trace_stack [in,g:] dump to stdout autocommands
(autocmd) stack trace during their execution (for debugging
purposes).
_autodesaturate [in,g:] if 1, desaturate all images.
_autoflip [in,g:] if 1, flip all images.
_automirror [in,g:] if 1, mirror all images.
_autonegate [in,g:] if 1, negate all images.
_autotop [in,g:] if 1, align to the top freshly loaded
images.
_buffered_in_tmpfile [out,i:] if an image has been
temporarily converted and decoded from a temporary file, its
name is here.
_cache_control [in,g:] string for cache control. If it
starts with ’m’, cache mipmaps; if it starts
with ’M’ then do not not cache them. Otherwise
defaults apply.
_cache_status [out,g:] string with current information
on cache status.
_cached_images [out,g:] the number of images currently
cached.
_caption_over_image [in,g:] if set to a value different
than 0, display a custom comment string specified according
to the value of _caption_over_image_fmt; if larger than 1,
with black background; if 3, draw above the image, with no
overlap. Occupies at most half of the screen.
_caption_over_image_fmt [in,g:] custom info format
string, displayed in a caption over the image; if unset:
i:_comment; otherwise a custom format string specified just
as _info_fmt_str.
_command_expansion [in,g:] if 1, enable autocompletion
(on execution) of alias and command strings.
_comment [i:,out] the image comment, extracted from the
image file (if any).
_console_buffer_free [out,g:] amount of unused memory in
the output console buffer.
_console_buffer_total [out,g:] amount of memory
allocated for the output console buffer.
_console_buffer_used [out,g:] amount of used memory in
the output console buffer.
_console_key [in,g:] the key bound (an integer variable)
to spawn the command line; overrides any other binding.
It’s set -1 if command line disabled.
_console_lines [out,g:] the number of buffered output
console text lines.
_console_offset [in,out,g:] position of the text
beginning in the output console, expressed in lines.
_debug_commands [in,g:] debugging option string for
printing out . if containing ’a’, print out
autocmd info; if containing ’c’, print out each
command; if containing ’k’, print out each
pressed key in command line mode; if containing
’i’, print interpreter internal steps; if
containing ’B’, clear screen and print
background loading files; if containing ’C’,
print cache activity; if containing ’m’, gtk
mode menus tooltips will contain also specification strings;
if containing ’mm’, gtk mode menu building will
also be very verbose.
_device_string [out,g:] the current display device
string, in the form
[fb|sdl|gtk|ca|aa|dumb][={gfxopts}]. See option
--output-device for a description.
_display_as_binary [in,g:] force loading files as
pixelmaps (no image decoding is performed); if 1, using one
bit per pixel; if 24, using 24 bits per pixel. If empty,
load and decode the files as usual.
_display_as_rendered_text [in,g:] if 1, force loading
specified files as text files (no image decoding is
performed); otherwise load and decode the files as usual.
_display_busy [in,g:] if 1, display a message on the
status bar when processing.
_display_console [in,g:] if 1, display the output
console.
_display_status [in,g:] if 1, display the status bar.
_display_status_bar [in,g:] if 1, display the status
bar.
_display_status_fmt [in,g:] custom info format string,
displayed in the lower left corner of the status bar; if
unset: full pathname; otherwise a custom format string
specified just as _info_fmt_str.
_do_sanity_check [in,experimental,g:] if 1, execute a
sanity check on startup.
_downscale_huge_at_load [in,g:] if 1, downscale at load
time huge images (that is, ones exceeding by 1.5 times the
screen size).
_exif_orientation [out,i:] orientation information in
the same format of _orientation, read from the orientation
EXIF tags (i:EXIF_Orientation).
_exiftool_comment [out,g:] comment extracted via the
exiftool interface; see _use_exiftool.
_external_decoder_program [out,i:] if an image has been
decoded via an external program, its name is here.
_fbfont [out,g:] The current console font file string.
If the internal hardcoded font has been used, then its value
is "fim://".
_fbfont_as_screen_fraction [in,g:] Scale the rendered
text to at least this (integer) fraction of the screen.
Disable font autoscaling with -1. (Only enabled if
configured with --with-font-magnifying-factor=FACTOR, with
FACTOR<1).
_fbfont_magnify_factor [in,g:] For the rendered text use
a font magnified by this (integer) factor. Maximal value is
"16". (Only enabled if configured with
--with-font-magnifying-factor=FACTOR, with FACTOR<1).
_fbfont_verbosity [in,g:] if > 0, verbose font
loading
_file_load_time [out,i:] time taken to load the file and
decode the image, in seconds.
_file_loader [in,i:,g:] specify a file loader to use
(among the ones listed in the -V switch output); [out]
i:_file_loader stores the loader of the current image.
_fileindex [out,g:] the current image numeric index.
_filelistlen [out,g:] current image list length (number
of visible images).
_filename [out,i:] the current file name string.
_fim_bpp [out,g:] the bits per pixel count.
_fim_default_config_file_contents [out,g:] the contents
of the default (hardcoded) configuration file (executed
after the minimal hardcoded config).
_fim_default_grammar_file_contents [out,g:] the contents
of the default (hardcoded) grammar file.
_fim_scriptout_file [in,g:] the name of the file to
write to when recording sessions.
_fim_version [out,g:] fim version number; may be used
for keeping compatibility of fim scripts across evolving
versions.
_hide_gtk_menus [out,g:] internal
_hsteps [in,g:] the default steps, in pixels, when
panning images horizontally (overrides steps).
_ignorecase [in,g:] if 1, allow for case-insensitive
regexp-based match in autocommands (autocmd).
_info_fmt_str [in,g:] custom info format string,
displayed in the lower right corner of the status bar; may
contain ordinary text and special ’expando’
sequences. These are: %p for current scale, in percentage;
%w for width; %h for height; %i for image index in list; %k
for the value of i:_comment (comment description) variable
in square brackets (if non empty); %l for current image list
length; %L for flip/mirror/orientation information; %P for
page information; %F for file size; %M for screen image
memory size; %m for memory used by mipmap; %C for memory
used by cache; %T for total memory used (approximation); %R
for total max memory used (as detected by getrusage()); %n
for the current file path name; %N for the current file path
name basename; ; %c for centering information; %v for the
fim program/version identifier string; %% for an ordinary %.
A sequence like %?VAR?EXP? expands to EXP if i:VAR is set
(or, otherwise, if VAR); EXP is copied verbatim except for
contained sequences of the form %:VAR:, which expand to the
value of variable i:VAR (or, if unset, VAR); this is meant
to be used like in e.g.
’%?EXIF_DateTimeOriginal?[%:EXIF_DateTimeOriginal:]?’,
where the EXIF-set variable EXIF_DateTimeOriginal (make sure
you have libexif for this) are used only if present.
_inhibit_display [internal,g:] if 1, inhibit display.
_last_cmd_output [out,experimental,g:] the last command
output.
_last_file_loader [out,g:] set to the name of the last
file loader used.
_last_system_output [out,experimental,g:] the standard
output of the last call to the system command.
_lastfileindex [out,g:] the last visited image numeric
index (different than _fileindex). Useful for jumping back
and forth easily between two images with ’goto
_lastfileindex’.
_lastgotodirection [out,g:] the last file goto direction
(either string ’+1’ or string ’-1’).
_lastpageindex [out,g:] the last visited file page
index.
_load_default_etc_fimrc [in,g:] if 1 at startup, load
the system wide initialization file.
_load_fim_history [in,g:] if 1 on startup, load the
~/.fim_history file on startup.
_load_hidden_dirs [in,g:] if not 1, when pushing
directories/files, those with name beginning with a dot (.)
are skipped.
_loading_in_background [out,g:] 1 if program has been
invoked with --background-recursive and still loading in
background.
_loop_only_once [internal,g:] if 1 and doing a
--slideshow, do it once.
_lwidth [in,g:] if>0, force the output console text
width.
_magnify_factor [in,g:] the image scale multiplier used
when magnifying images size.
_max_cached_images [in,g:] the maximum number of images
after which forcing evictions. Setting this to 0 (no limits)
is ok provided _max_cached_memory is set meaningfully.
_max_cached_memory [in,g:] the maximum amount of memory
(in KiB) at which images continue being added to the cache.
Setting this to 0 (no limit) leads to a crash (there is no
protection currently).
_max_iterated_commands [g:] the iteration limit for N in
"N[commandname]" iterated command invocations.
_min_cached_images [in,g:] the minimum number of images
to keep from eviction; if less than four can lead to
inefficiencies: e.g. when jumping between two images, each
time an erase and a prefetch of neighboring images would
trigger. default value is 4.
_no_default_configuration [in,g:] if 0, a default,
hardcoded configuration is loaded at startup, after the
minimal hardcoded one.
_no_external_loader_programs [in,g:] if 1, do not
attempt using external programs to decode a file of an
unknown format.
_no_rc_file [in,g:] if 1, do not load the ~/.fimrc
configuration file at startup.
_open_offset [in,optional,g:,i:] offset (specified in
bytes) used when opening a file; [out] i:_open_offset is
assigned to images opened at a nonzero offset.
_open_offset_retry [in,optional,g:] number of adjacent
bytes to probe in opening the file.
_orientation [internal,i:] Orthogonal clockwise rotation
(orientation) is controlled by:
’i:_orientation’, ’g:_orientation’
and applied on a per-image basis. In particular, the values
of the three variables are summed up and the sum is
interpreted as the image orientation. If the sum is 0, no
rotation applies; if it is 1, a single ( 90’) rotation
applies; if it is 2, a double (180’) rotation applies;
if it is 3, a triple (270’) rotation applies. If the
sum is not one of 0,1,2,3, the value of the sum modulo 4 is
considered. Therefore, ":i:_orientation=1" and
":i:_orientation=5" are equivalent: they rotate
the image one time by 90’.
_pread_cmd [in,g:] a user-specified shell command
emitting an image on stdout, in a format readable by the
convert utility. If the current filename matches
"^[/A-Za-z0-9_.][/A-Za-z0-9_.-]*$", substitute it
to any occurrence of ’{}’.
_preferred_rendering_dpi [in,optional,g:] if >0,
rendering of pdf, ps, djvu use this value for a default
document dpi; if unset, use an internal default value.
_preferred_rendering_width [in,optional,g:] if >0,
bit-based (see _display_as_binary) rendering uses this value
for a default document width (instead of a default value).
_push_checks [in,experimental,g:] if 1 (default), check
with stat() the existence of input files before
push’ing them (set this to 0 to speed up loading very
long file lists; in these cases a trailing slash (/) must be
used to tell fim a pathname is a directory). This only works
after initialization (thus, after command line files have
been push’ed); use --no-stat-push if you wish to set
this to 0 at command line files specification.
_push_pushes_dirs [in,g:] if 1, the push command also
accepts and pushes directories (using pushdir). if 2, also
push hidden files/directories, that is, ones whose names
begin with a dot (.).
_pushdir_re [in] regular expression to match against
when pushing files from a directory or an archive. By
default this is
".(JPG|PNG|GIF|BMP|TIFF|TIF|JPEG|JFIF|PPM|PGM|PBM|PCX|QOI|AVIF|WEBP)$".
_pwd [out,g:] the current working directory; variable
updated at startup and whenever the working directory
changes.
_re_search_opts [in,g:] affects regexp-based searches;
if an empty string, defaults apply; if it contains
’i’ (’I’), case insensitive
(sensitive) searches occur; if it contains ’b’,
match on basename, if contains ’f’ on full
pathname; if it contains ’D’, match on
description.
_reduce_factor [in,g:] the image scale multiplier used
when reducing images size.
_retry_loader_probe [in,g:] if set to 1 and a
user-specified file loader fails, probe for a different
loader.
_rows [in,g:] if >0, set the number of text lines in
the console to be displayed .
_save_fim_history [in,g:] if 1 on exit, save the
~/.fim_history file on exit.
_scale_factor_delta [in,g:] value used for
incrementing/decrementing the scaling factors.
_scale_factor_multiplier [in,g:] value used for scaling
up/down the scaling factors.
_scale_style [in,g:] if non empty, pass it to the scale
command; see its documentation for possible values.
_screen_height [out] the screen height.
_screen_width [out,g:] the screen width.
_scroll_skip_page_fraction [int,g:] if >1, fraction
of page to skip when scrolling (e.g.
’scrollforward’); if 1, auto chosen; if <1,
disabled.
_seek_magic [optional,g:] seek a ’magic’
signature in the file after opening it, and try decoding it
starting within the range of that signature (use like this:
fim -C ’_seek_magic=MAGIC_STRING;push
filename’).
_slideshow_sleep_time [in,g:] number of seconds of sleep
during slideshow mode.
_status_line [in,g:] if 1, display the status bar.
_steps [in,g:] the default steps, in pixels, when
panning images.
_stop_slideshow [internal,g:] if it becomes 1 during a
slideshow, stop it; gets unset before each
’while’.
_sys_rc_file [in,g:] string with the global
configuration file name.
_use_exiftool [in,g:] if >0 and supported, use
exiftool to get additional information. If 1, append this
information to _comment; if 2, to _exiftool_comment.
_use_mipmaps [in,g:] if >0, use mipmaps to speed up
downscaling of images (this has a memory overhead equivalent
to one image copy); mipmaps are not cached. If 2, use every
fourth source pixel instead of averaging (good for photos,
not for graphs).
_verbose_errors [in,g:] if 1, display on stdout internal
errors, while parsing commands.
_verbose_keys [in,g:] if 1, display on the console the
raw keycode of each key hit interactively.
_verbosity [in,experimental,g:] program verbosity.
_vsteps [in,g:] the default steps, in pixels, when
panning images vertically (overrides steps).
_want_autocenter [in,g:] if 1, center the image when
displayed.
_want_exif_orientation [in,g:] if 1, reorient images
using information from EXIF metadata (and stored in in
_exif_orientation, __exif_mirrored, __exif_flipped ).
_want_prefetch [in,g:] if 1, prefetch further files just
after displaying the first file; if 2 (and configured with
--enable-cxx11) load in the background.
_want_wm_caption_status [in,g:] this works only if
supported by the display device. If set to a number that is
not 0, show the status (or command) line in the window
manager caption; if set to a non-empty string, interpret it
just as a file info format string (see _info_fmt_str); if
empty, show the program version.
_want_wm_mouse_ctrl [in,g:] if at least 9 chars long,
enable mouse click/movement behaviour when in GTK, SDL or
libcaca mode; the 9 chars correspond to a 3x3 screen
clickable grid and the equivalent command keys; clicking
middle or right button toggle on-screen usage info.
angle [in,out,i:] a floating point number specifying the
rotation angle, in degrees.
ascale [in,out,i:] the asymmetric scaling of the current
image.
desaturated [out,i:] 1, if the image is desaturated.
flipped [out,i:] 1, if the image is flipped.
fresh [in,out,i:,experimental] 1 if the image was
loaded, before all autocommands (autocmd) execution.
height [out,i:] the current image original height.
mirrored [out,i:] 1, if the image is mirrored.
negated [out,i:] 1, if the image is negated.
page [out,experimental,g:] the current page.
pages [out,experimental,i:] the current number of pages
of an image.
random [out] a pseudorandom number.
scale [in,i:] the scale of the current image.
sheight [out,i:] the current image scaled height.
swidth [out,i:] the current image scaled width.
width [out,i:] the current image original width.
alias
"A" "_autotop=1-_autotop;"
alias "magnify" "scale
’+’" # magnify the displayed image by the
_magnify_factor variable or {args}
alias "next" "goto
’+1’" # go to the next page or file
alias "next_file" "goto
’+1f’" # go to the next file in the list
alias "next_page" "goto
’+1p’" # go to the next page in the file
alias "prev" "goto
’-1’" # go to the previous page or file
alias "prev_file" "goto
’-1f’" # go to the previous file in the
list
alias "prev_page" "goto
’-1p’" # go to the previous page in the
file
alias "reduce" "scale
’-’" # reduce the displayed image by
_reduce_factor or {args}
alias "scale_factor_decrease" "scale
’+-’" # subtract _scale_factor_delta to the
scale factors _reduce_factor and _magnify_factor
alias "scale_factor_grow" "scale
’+*’" # multiply the scale factors
_reduce_factor and _magnify_factor by
_scale_factor_multiplier
alias "scale_factor_increase" "scale
’++’" # add _scale_factor_delta to the
scale factors _reduce_factor and _magnify_factor
alias "scale_factor_shrink" "scale
’+/’" # divide the scale factors
_reduce_factor and _magnify_factor by
_scale_factor_multiplier
They can be
redefined with alias or deleted with the
unalias command.
Further default aliases are usually loaded at startup -- see
the CONFIGURATION FILE EXAMPLE section below.
# jump to the
third image:
3;
# jump to first image:
^;
# jump to last image:
$;
# magnify the image two times:
*2;
# scale the image to the 30% of the original:
30%;
# scale the image up by 30%:
+30%;
# scale the image down by 30%:
-30%;
# jump to the next image whose filename matches the
".*jpg" regular expression:
/.*jpg;
# execute the "date" system command
!"date";
Part of the
default configuration comes from the
_fim_default_config_file_contents variable, shown
here.
One can skip its loading by using the
_no_default_configuration variable.
#
$LastChangedDate: 2024-05-15 01:34:42 +0200 (Wed, 15 May
2024) $
# Contents of the default ’fimrc’ file,
hardcoded in the fim executable.
# Read the documentation (man fimrc) to discover how to
change this default hardcoded file and how to make your own.
# Note that usually a ~/.fimrc file is read after these
options take effect, so you could reset all of this with
ease.
# Lines beginning with a pound (#) are ignored by fim (they
are treated as comments).
#
# Internal variables.
# Some of these variables influence fim’s behaviour
(input variables), some are set by fim (output variables).
# It is wise the input variables are set at the beginning of
the file, so the bottom may issue commands correctly
affected by them.
if(_cache_control==’’){_cache_control=’m’;}
if(_debug_commands==’’){_debug_commands=’’;}
if(_command_expansion==’’){_command_expansion=1;}
if(_display_status==’’){_display_status=0;}
if(_max_cached_images==’’){_max_cached_images=5;}
if(_min_cached_images==’’){_min_cached_images=4;}
if(_max_cached_memory==’’){_max_cached_memory=81920;}
if(_max_iterated_commands==’’){_max_iterated_commands=100;}
if(_want_prefetch==’’){_want_prefetch=1;}
if(_no_external_loader_programs==’’){_no_external_loader_programs=0;}
if(_scale_style==’’){_scale_style=’b’;}
if(_save_fim_history==’’){_save_fim_history=1;}
if(_load_fim_history==’’){_load_fim_history=1;}
if(_verbose_keys==’’){_verbose_keys=0;}
if(_display_busy==’’){_display_busy=1;}
if(_ignorecase==’’){_ignorecase=1;}
if(_re_search_opts==’’){_re_search_opts=’biD’;}
if(_console_offset==’’){_console_offset=0;}
if(_console_key==’’){_console_key=58;}
if(_display_as_binary==’’){_display_as_binary=0;}
if(_push_checks==’’){_push_checks=1;}
#if(_want_wm_caption_status==’’){_want_wm_caption_status=0;}
if(_want_exif_orientation==’’){_want_exif_orientation=1;}
if(ascale==’’){ascale="1.0";}
if(_use_mipmaps==’’){_use_mipmaps=1;}
if(_downscale_huge_at_load==’’){_downscale_huge_at_load=1;}
if(_scroll_skip_page_fraction==’’){_scroll_skip_page_fraction=0;}
if(_want_wm_mouse_ctrl==’’){_want_wm_mouse_ctrl="’pP+a-=nN";}
if(_slideshow_sleep_time==’’){_slideshow_sleep_time=1;}
#
# External variables (not used internally).
if(allow_round_scroll==’’){allow_round_scroll=0;}
if(console_scroll_n==’’){console_scroll_n=3;}
#
alias "toggleautoflip"
"_autoflip=1-_autoflip" "";
alias "toggleautonegate"
"_autonegate=1-_autonegate" "";
alias "toggleflip"
"i:flipped=1-i:flipped" "toggles flipped
property on the current image";
alias "flip" "toggleflip;redisplay"
"flip the current image along the horizontal
axis";
alias "fliponce" "flip;toggleflip"
"flip, but just for one display";
alias "toggleautomirror"
"_automirror=1-_automirror" "";
alias "togglemirror"
"i:mirrored=1-i:mirrored" "toggles mirrored
property on the current image";
alias "mirror" "togglemirror;redisplay"
"mirror the image along the vertical axis"
"";
alias "mirroronce" "mirror;togglemirror"
"mirror, but just for one display";
alias ’toggleLimitMarked’
’__pre_limit_fileindex=_fileindex;_limit_mode=1-_limit_mode;
if(_limit_mode==1){limit "!";} else { limit; }
if(_filelistlen<1){_limit_mode=0;limit;goto
__pre_limit_fileindex;} i:fresh=1;redisplay; ’
"toggle between limiting file list to the marked files
and the full list";
alias "unlimit"
"limit;i:fresh=1;reload;redisplay" "calling
limit with no arguments restores the original list";
#alias ’mark_current_file’
’_markedfile=i:_filename’;
#alias ’goto_marked_file’ ’goto
"?"._markedfile’;
alias ’mark_current_file’
’_markedfile=_fileindex’; # Note: temporary;
_markedfile undocumented.
alias ’goto_marked_file’ ’goto
_markedfile’; # Note: temporary.
# Warning : binding to C-s, C-z and C-c won’t make
effect, as these
# codes are get caught by the console driver and will have
no effect in fim.
# Moreover, C-z will crash fim and C-c will terminate it.
# Some other combinations (e.g.:C-l) may have similar
problems in your console.
bind ’f’ "flip";
bind ’F’ "fliponce";
bind ’m’ "mirror";
bind ’M’ "mirroronce";
bind ’q’ "quit";
bind ’Esc’ "quit";
#bind ’n’ "next_file";
#bind ’n’ "next";
bind ’C-h’ "help";
#bind ’?’ "help"; # assigned to
back-search
#bind ’/’ "help"; # assigned to
forward-search
bind ’=’ "scale ’100%’";
#bind ’p’ "prev_file";
#alias ’list_remove_and_reload’ "list
’remove’;reload"; # once menus commands can
support ;, remove this
bind ’Del’ "list
’remove’;reload"; # no quit on last file
#bind ’Del’ "list_remove_and_reload";
# no quit on last file
#bind ’Del’ "if(_filelistlen<2)quit;list
’remove’;reload;"; # quit if no files left
#bind ’s’ "list ’sort’";
bind ’ ’ "scroll
’forward’";
bind ’S’ "toggleDisplayStatus";
bind ’I’ "toggleautonegate";
bind ’i’ "color
’negate’;redisplay";
bind ’g’ "color
’desaturate’;redisplay";
bind ’[’ ’font_reduce;redisplay’;
bind ’]’ ’font_magnify;redisplay’;
bind ’|’
’toggle_font_auto_scale;redisplay’;
bind ’{’ ’font
"prev";redisplay’;
bind ’}’ ’font
"next";redisplay’;
bind ’G’ "toggleDesaturate";
bind ’r’ "rotate90";
bind ’R’ "rotate270";
bind ’+’ "magnify";
bind ’a’ "scale ’a’";
bind ’H’ "scale ’H’";
bind ’Tab’ "toggleVerbosity";
bind ’Menu’ "toggleVerbosity";
bind ’v’ "toggleDisplayStatus";
bind ’A’ "A";
#bind ’C-m’ "list ’mark’";
bind ’C-m’ "mark_current_file";
bind ’C-j’ "goto_marked_file";
bind ’u’ "list ’unmark’";
bind ’Enter’ "list ’mark’;goto
_lastgotodirection";
bind ’-’ "reduce";
bind "Up" "pan_up";
bind ’k’ "pan_up";
bind "Right" "pan_right";
bind ’l’ "pan_right";
bind "Down" "pan_down";
bind ’j’ "pan_down";
bind "Left" "pan_left";
bind ’h’ "pan_left";
bind ’t’ "align ’top’";
bind ’C-g’ "system ’fbgrab’
’fim_’._device_string.’.png’";
# grab a screenshot
#bind ’C-r’ "recording
’start’";
bind ’C-r’ "reload ’’";
bind ’Q’ "recording
’stop’";
bind ’D’ "recording
’dump’";
bind ’E’ "recording
’execute’";
bind ’C-e’ "recording
’execute’";
bind ’C-x’ "recording
’execute’";
bind ’.’ "recording
’repeat_last’";
bind ’’’ "toggleLimitMarked";
alias "toggleVerbosity"
"_display_console=1-_display_console;i:fresh=1;redisplay"
"";
alias "toggleKeyVerbosity"
"_verbose_keys=1-_verbose_keys;redisplay"
"";
alias "toggleDesaturate"
"_autodesaturate=1-_autodesaturate;redisplay"
"";
alias "idempotent_cmd" "goto
’’";
#
# Autocommands examples:
#autocmd "PostInteractiveCommand"
"fim.png" "echo ’\nmatched an
interactive command on fim.png\n’";
#autocmd "PostDisplay" ".*png"
"echo ’this is a png file’";
#autocmd "PostDisplay" ".*jpg"
"echo ’this is a jpg file’";
#autocmd "PostDisplay" "" "echo
’\nthis is a file\n’";
#autocmd "PostGoto" ""
"set_interactive_mode";
autocmd "PostGoto" ""
"reload";
autocmd "PostWindow" ""
"i:fresh=1;redisplay;";
autocmd "PreRedisplay" ""
"i:_will_display=1";
autocmd "PreRedisplay" ""
"if(_scale_style!=’’ &&
i:fresh){i:fresh=0;scale _scale_style ;i:fresh=0;}";
autocmd "PostRedisplay" ""
"i:_will_display=0";
# Display device specific config
alias "aalib_fix_do"
"{if(aascale==’’){ascale=’2.0’;}else{ascale=aascale;}
i:fresh=1;display;if(_TERM=~’screen’){echo
’Detected screen+aalib: key bindings may not work as
intended.’}}" "See aalib_fix.";
alias "aalib_fix"
"if(_device_string=~’^aa’){aalib_fix_do;scale
’a’;}" "When using the aalib (ASCII
art) library we face a problem: glyph proportions are seldom
square (as pixels are), and are tricky to detect; for this
reason, we need to reshape the image with respect to the
font ratio, but we have to make a guess in the scaling
factor to compensate. If at runtime a better value is known
for the terminal font height/with ratio, it may be fed in
the ’aascale’ variable for an accurate
scaling.";
alias "cacalib_fix_do"
"{if(cacascale==’’){ascale=’1.18’;}else{scale=cacascale;}
i:fresh=1;display;if(_TERM=~’screen’){echo
’Detected screen+cacalib: key bindings may not work as
intended.’}}" "See cacalib_fix.";
alias "cacalib_fix" "getenv
’DISPLAY’;if(_device_string=~’^ca’
&& ENV_DISPLAY==’’){cacalib_fix_do;scale
’a’;}" "When using the libcaca
(Coloured ASCII art) library we face a problem: glyph
proportions are seldom square (as pixels are), and are
tricky to detect; for this reason, we need to reshape the
image with respect to the font ratio, but we have to make a
guess in the scaling factor to compensate. If at runtime a
better value is known for the terminal font height/with
ratio, it may be fed in the ’cacascale’ variable
for an accurate scaling.";
autocmd "PostReload" ""
"aalib_fix";
autocmd "PostLoad" ""
"aalib_fix";
autocmd "PostReload" ""
"cacalib_fix";
autocmd "PostLoad" ""
"cacalib_fix";
alias "refresh" "desc
’reload’;redisplay;" "reloads and
displays image description";
bind "F5" "refresh";
alias "toggle_fullscreen" "if(
(_device_string=~’^sdl’ ||
_device_string=~’^gtk’ ) &&
!_fullscreen){_old_sw=_screen_width;_old_sh=_screen_height;display
’reinit’ ’mW0:0’;_fullscreen=1;}else
if( (_device_string=~’^sdl’ ||
_device_string=~’^gtk’ ) &&
_old_sw*_old_sh*_fullscreen){display ’reinit’
’rwm’._old_sw.’:’._old_sh;_fullscreen=0;}_gtk_fullscreen=_fullscreen;"
"Toggles full screen. Will show mouse cursor in full
screen.";
alias "_gtk_check_for_toggle_fullscreen" "if(
_device_string=~’^gtk’ &&
_gtk_fullscreen != _fullscreen){toggle_fullscreen;}";
alias "_gtk_check_for_toggle_gtk_menus"
"if(_device_string=~’^gtk’){if(_hide_gtk_menus){display
’reinit’ ’b’;}else{display
’reinit’ ’B’;}}";
bind "F11" "toggle_fullscreen";
autocmd
"PostReload" "" "i:fresh=1" ;
autocmd "PostScale" ""
"if(0==i:_will_display){i:fresh=1;display;}" ;
autocmd "PostPan" ""
"{i:fresh=1;display;}" ;
#autocmd "PostReload" "pdf|ps|djvu|dvi"
"scale ’w’;align ’top’";
autocmd "PostReload" ""
"if(i:fresh){redisplay;}";
autocmd "PostInteractiveCommand" ""
"if(i:fresh){display;i:fresh=0;}";
autocmd "PostInteractiveCommand" ""
"if(_want_prefetch>0){prefetch;}";
autocmd "PostInteractiveCommand" ""
"if(_display_console==0 &&
i:fresh){redisplay;i:fresh=0;}";
autocmd "PostInteractiveCommand" ""
"idempotent_cmd"; # Bug workaround: without it
console scroll is broken.
autocmd "PostInteractiveCommand" ""
"_gtk_check_for_toggle_gtk_menus;_gtk_check_for_toggle_fullscreen";
#alias
"next10"
"i=0;while(i<10){i=i+1;next;display;sleep
’1’;}" "goes forward 10 images";
#alias "prev10"
"i=0;while(i<10){i=i+1;prev;display;sleep
’1’;}" "goes backward 10 images";
bind ’N’ "goto ’+1p’
’+museum|series|city|category|artist+’
’+/S’ ’+10’;" "goto by
jump or category or directory or just ahead";
bind ’P’ "goto ’-1p’
’-museum|series|city|category|artist+’
’-/S’ ’-10’;" "goto by
jump or category or directory or just back ";
bind ’C-n’ "goto ’+//’";
bind ’C-p’ "goto ’-//’";
bind ’C-b’ "goto ’-//’"; #
Warning: many configurations cannot detect C-b.
bind ’W’ "display
’resize’" "if supported, resizes the
window to match the current image pixels size";
#bind ’C-w’ "scale
’100%’;display ’resize’"
"if supported, scales the image to 100% and resizes the
window to match its size (if fits)";
bind ’C-w’
"if(_scale_style!=’w’){_scale_style=’w’;scale
’w’;}else{_scale_style=’’;scale
’100%’;}" "scale to width";
alias "endless_slideshow"
"while(1){display;sleep
_slideshow_sleep_time;next;}" "performs an
automated slideshow, endlessly";
alias "bookview" "while(1){display;sleep
’2’;scroll ’down’;}"
"";
alias "comicview" "while(1){display;sleep
’2’;scroll ’down’;}"
"";
alias "read" "while(1){display;sleep
’2’;scroll ’forward’;}"
"";
alias "slowread"
"while(_fileindex<=_filelistlen-1){display;sleep
’2’;scroll ’forward’;}"
"loop once slowly";
alias "fastread"
"while(_fileindex<=_filelistlen-1){display;sleep
’0.1’;scroll ’forward’;}"
"proceeds like in a book but very fast, once";
alias "pornview" "echo ’press any key
repeatedly to terminate’ ;endless_slideshow"
"enters an endless slideshow (alias name from an actual
image viewer)";
autocmd "PreExecutionCycle" "/fbps-"
"_display_busy=0;_display_status=0" ;
autocmd "PreExecutionCycle" ""
"i:fresh=1;reload";
autocmd "PreExecutionCycle"
"/fbps-.*ps001.png"
"i:fresh=1;redisplay";
## Example in imposing a file loader to an extension:
#autocmd "PreReload" ".*mtx.gz"
"_file_loader=’MatrixMarket’";
#autocmd "PostReload" ".*mtx.gz"
"_file_loader=’’";
bind ’*’
"_display_console=0;toggleVerbosity;echo i:*";
bind ’w’ "scale ’w’";
bind ’<’ "rotate10_ccw;display";
bind ’>’ "rotate10;display";
bind ’_’ "_scale_style=’’;scale
’100%’";
bind ’,’ "_display_console=1;echo
_last_system_output";
bind ’C-a’
"if(_scale_style!=’a’){_scale_style=’a’;scale
’a’;}else{_scale_style=’’;scale
’100%’;}" "scale to height";
#
alias "pan_nw" "pan ’nw’"
"pans the image to the upper left";
alias "pan_ne" "pan ’ne’"
"pans the image to the upper right";
alias "pan_se" "pan ’se’"
"pans the image to the lower left";
alias "pan_sw" "pan ’sw’"
"pans the image to the lower right";
alias "pan_down" "if(_display_console==0){pan
’down’;}else{scd;}" "pans the image
down / scrolls console down";
alias "pan_up" "if(_display_console==0){pan
’up’ ;}else{scu;}" "pans the image up
/ scrolls console up";
alias "pan_left" "pan
’left’" "pans the image left";
alias "pan_right" "pan
’right’" "pans the image right";
alias "diagonal_nw" "pan_nw" "pans
the image to the upper left";
alias "diagonal_ne" "pan_ne" "pans
the image to the upper right";
alias "diagonal_se" "pan_se" "pans
the image to the lower left";
alias "diagonal_sw" "pan_sw" "pans
the image to the lower right";
bind ’d’ "diagonal_nw";
bind ’D’ "diagonal_se";
bind ’x’ "diagonal_ne";
bind ’X’ "diagonal_sw";
alias "toggleDisplayStatus"
"_display_status=1-_display_status;redisplay"
"";
alias "toggleDisplayBusy"
"_display_busy=1-_display_busy" "";
alias "sort" "list ’sort’"
"sorts the files list ordered";
bind ’o’ "sort";
bind ’b’ "prev";
bind ’B’ "toggleDisplayBusy";
alias "random_slideshow"
"while(1){display;sleep _slideshow_sleep_time; eval
’r=random’;goto r;}" "performs a
shuffled slideshow, endlessly";
alias "rotate90_ccw"
"i:_orientation=i:_orientation+3;i:fresh=1;redisplay"
"rotate 90 degrees counter clockwise";
alias "rotate90_cw"
"i:_orientation=i:_orientation+1;i:fresh=1;redisplay"
"rotate 90 degrees clockwise";
alias "rotate180"
"i:_orientation=i:_orientation+2;i:fresh=1;redisplay"
"rotate 180 degrees";
alias "rotate90" "rotate90_cw;display"
"rotate 90 degrees clockwise";
alias "rotate270" "rotate90_ccw;display"
"rotate 90 degrees counter clockwise";
alias "rotate10" "rotate
’10’;display" "rotate 10 degrees
counter clockwise";
alias "rotate10_ccw" "rotate -10
;display" "rotate 10 degrees clockwise";
bind
’K’ ’if(_display_console==0){echo
i:_filename.":
".i:_comment;toggleVerbosity}else{toggleVerbosity;}’;
bind ’C-k’ ’crop’ # still
experimental
alias
’cache’ ’echo _cache_status’
"displays cached images status";
bind ’c’ ’align "center"’;
alias ’widen’
’i:ascale=i:ascale*"1.1";*1.0’
"widen the current image";
alias ’narrow’
’i:ascale=i:ascale/"1.1";*1.0’
"narrow the current image";
bind ’y’ "widen" "widen
horizontally the image";
bind ’Y’ "narrow" "shrink
horizontally the image";
alias ’console_scroll_up’
’if(_console_offset<_console_lines+console_scroll_n-_rows){_console_offset=_console_offset+console_scroll_n;}’
"scrolls up the virtual console";
alias ’console_scroll_down’
’if(allow_round_scroll ||
(_console_offset>=console_scroll_n)){_console_offset=_console_offset-console_scroll_n;}’
"scrolls down the virtual console";
alias ’console_scroll_reset’
’{_console_offset=0;}’;
alias ’scu’ ’console_scroll_up’
"";
alias ’scd’ ’console_scroll_down’
"";
alias ’scz’ ’console_scroll_reset’
"";
alias ’center’ ’align
"center"’;
alias ’left’ ’align
"left"’;
alias ’right’ ’align
"right"’;
alias ’top’ ’align "top"’;
alias ’bottom’ ’align
"bottom"’;
alias "font_magnify_auto"
"if(_fbfont_as_screen_fraction>1){_fbfont_as_screen_fraction=_fbfont_as_screen_fraction-1;}else{_fbfont_as_screen_fraction=_screen_width/100+_screen_height/100;}"
"";
alias "font_magnify_manual"
"_fbfont_magnify_factor=_fbfont_magnify_factor+1"
"";
alias "font_reduce_auto"
"if(_fbfont_as_screen_fraction>1){_fbfont_as_screen_fraction=_fbfont_as_screen_fraction+1;}"
"";
alias "font_reduce_manual"
"_fbfont_magnify_factor=_fbfont_magnify_factor-1"
"";
alias "toggle_font_auto_scale"
"if(_fbfont_as_screen_fraction<0){_fbfont_as_screen_fraction=0;echo
’Auto font scaling
on.’;}else{_fbfont_as_screen_fraction=-1;echo
’Auto font scaling off.’;}" "toggles
between manual and auto font scaling control";
alias ’next_file_same_search’ "goto
’+//’;" "go to next file with same
search criteria";
alias ’next_file_dir_same’ "goto
’+/s’;" "go to next file in same
dir";
alias ’next_file_dir_other’ "goto
’+/S’;" "go to next file in other
dir";
alias ’next_file_dir_up’ "goto
’+/u’;" "go to next file up the dir
hierarchy";
alias ’next_file_dir_down’ "goto
’+/d’;" "go to next file down the dir
hierarchy";
alias ’next_file_same_basename’ "goto
’+/b’;" "go to next file with same
basename";
alias ’prev_file_dir_same’ "goto
’-/s’;" "go to prev file in same
dir";
alias ’prev_file_dir_other’ "goto
’-/S’;" "go to prev file in other
dir";
alias ’prev_file_dir_up’ "goto
’-/u’;" "go to prev file up the dir
hierarchy";
alias ’prev_file_dir_down’ "goto
’-/d’;" "go to prev file down the dir
hierarchy";
alias ’prev_file_same_basename’ "goto
’-/b’;" "go to prev file with same
basename";
#alias "font_magnify"
"if(_fbfont_as_screen_fraction<0)
{font_magnify_manual;}else{font_magnify_auto;}"
"increase font size (either relative or
absolute)";
#alias "font_reduce"
"if(_fbfont_as_screen_fraction<0)
{font_reduce_manual;} else{font_reduce_auto;}"
"increase font size (either relative or
absolute)";
alias "font_magnify"
"_fbfont_as_screen_fraction=-1;font_magnify_manual"
"increase absolute font size and set manual font
control";
alias "font_reduce"
"_fbfont_as_screen_fraction=-1;font_reduce_manual"
"decrease absolute font size and set manual font
control";
bind "PageUp"
"if(_display_console==0){prev;}else{scu;}";
bind "PageDown"
"if(_display_console==0){next;}else{scd;}";
bind "Home" "0;";
bind "End" "$;";
bind "^" "0;";
bind "$" "$;";
#bind "Backspace" "prev"; # console code
for C-h and Backspace is the same :-)
bind "’" "goto
_lastfileindex.’f’.(_lastpageindex+1).’p’";
bind ’"’ "scale
’shadow’;i:fresh=1;redisplay;";
bind ’(’ "goto ’^p’";
bind ’)’ "goto ’$p’";
bind ’Z’ "sleep 1";
_display_status=1; # lower status line
_want_wm_caption_status="fim:%N@%p%%%L[%i/%l]";
_caption_over_image_fmt="%?_comment?%:_comment:?";
_info_fmt_str="%p%% %wx%h%L %i/%l%P %F %T %c"; #
lower right line part
#_display_status_fmt="%N:%k"; #
_display_status_fmt="%N%?EXIF_DateTimeOriginal?[%:EXIF_DateTimeOriginal:]?%?EXIF_ExposureTime?[%:EXIF_ExposureTime:]?%?EXIF_FNumber?[%:EXIF_FNumber:]?%?EXIF_ApertureValue?[%:EXIF_ApertureValue:]?%?EXIF_ISOSpeedRatings?[ISO%:EXIF_ISOSpeedRatings:]?%?_markedfile?[mark
on %:_markedfile:]?:%k"; # lower left line part
# funny aliases:
alias "webcam" "pread ’vgrabbj -d
/dev/video0’;$" "say cheese";
alias ’espeak’ ’system
\’espeak\’ i:_filename."
".i:_comment’ ’say something’;
#_fbfont_as_screen_fraction=-1; # disable auto font scaling
if( _device_string=~’^gtk[^e]*$’ ) {
alias "man_fim" "system ’man’ ’fim’; _display_console=0;toggleVerbosity;";
alias "man_fimrc" "system ’man’ ’fimrc’;_display_console=0;toggleVerbosity;";
alias ’_rebuild_menus’ ’display "reinit" "f";’;
alias ’_rebuild_quieter_menus’ ’_debug_commands=_debug_commands-"m";display "reinit" "fV";’; # remove "m" occurrences from _debug_commands and rebuild
alias ’_rebuild_verboser_menus’ ’_debug_commands=_debug_commands."m";_rebuild_menus;’;
alias ’_rebuild_verbosest_menus’ ’_debug_commands=_debug_commands."mm";_rebuild_menus;’;
alias ’toggle_gtk_menus’ ’if(!_hide_gtk_menus){_hide_gtk_menus=1;}else{_hide_gtk_menus=0;}’;
autocmd "PreInteractiveCommand" "" "if(__internal_state_changed){_rebuild_menus;__internal_state_changed=0;}";
autocmd "PostInteractiveCommand" "" "if(__internal_state_changed){_rebuild_menus;__internal_state_changed=0;}";
autocmd "PreExecutionCycle" "" "if(__internal_state_changed){_rebuild_menus;__internal_state_changed=0;}";
"_File/_Open file open C-o"
"_File/Open _directory open_dir "
"_File/_Next file or page next "
"_File/_Next file next_file "
"_File/_Next in other directory next_file_dir_other"
"_File/_Next in this directory next_file_dir_same"
"_File/_Next as last search goto + " # Note that slashes are not supported currently.
"_File/_Next as last search next_file_same_search "
"_File/_Go back to last file goto _lastfileindex "
"_File/_Previous in list prev p"
"_File/Remove from list list ’pop’"
"_File/Remove from list list_remove_and_reload "
"_File/Remove from list list ’remove’;reload "
"_File/Mark list ’mark’"
"_File/Unmark list ’unmark’"
"_List/_Limit FimMenuLimit/"
"_List/Limit to.../files sized as current one limit ’~z’" #
"_List/Limit to.../files dated as current one limit ’~d’"
"_List/Limit to.../files with duplicate basename limit ’~=’"
"_List/_Unlimit list (reset) unlimit u"
"_List/Reverse list ’reverse’ "
"_List/Sort by name list ’sort’ "
"_List/Sort by size list ’sort_fsize’ "
"_List/Sort by time list ’sort_mtime’ "
"_List/Shuffle randomly list ’random_shuffle’ "
"_List/Mark all list ’markall’ "
"_List/Slideshow/Random random_slideshow "
"_List/Slideshow/Endless endless_slideshow "
"_List/Slideshow/Slideshow time: 0 s _slideshow_sleep_time=0 0.5 s _slideshow_sleep_time=0.5 1 s _slideshow_sleep_time=1 2 s _slideshow_sleep_time=2 3 s _slideshow_sleep_time=3 "
"_List/Slideshow/Stop _stop_slideshow=1 "
"_List/Slideshow/Slow read slowread "
"_List/Slideshow/Fast read fastread "
"_View/ Automirror toggle||_automirror||1||0 " # ’ ’ as external separator, || as internal separator
"_View/||Autoflip||toggle.._autoflip..1..0||" # || as external separator, .. as internal separator
"_View/Scale: _auto _scale_style=a a Scale: by _hand (manual) _scale_style=m m Scale: by _width _scale_style=w w Scale: by _height _scale_style=h h"
"_View/**Scale: 1x**_scale_style= ** **Scale: _auto**_scale_style=a**a**Scale: _auto (till 100%)**_scale_style=b**b**Scale: by _hand (manual)**_scale_style=m**m**Scale: by window _width**_scale_style=w**w**Scale: by window _height**_scale_style=h**h"
"_View/Orientation: normal _orientation=0 Orientation: 90’right _orientation=1 Orientation: upside down _orientation=2 Orientation: 90’ left _orientation=3 "
"_View/Desaturate toggle___autodesaturate__1__0 "
"_View/Autonegate toggle___autonegate__1__0 "
"_View/Vertical scroll/** Default steps: auto**_vsteps=****10%**_vsteps=10%****20%**_vsteps=20%****50%**_vsteps=50%****100%**_vsteps=100%**"
"_View/Vertical scroll/** Skip page fraction if smaller than ...auto**_scroll_skip_page_fraction=****disabled**_scroll_skip_page_fraction=-1****1/8**_scroll_skip_page_fraction=8****1/16**_scroll_skip_page_fraction=16**"
"_View/Refresh description & co refresh "
"_View/||Apply EXIF Orientation||toggle.._want_exif_orientation..1..0||"
"_Image/_Mirror toggle__i:mirrored__1__0 m"
"_Image/_Flip toggle&&i:flipped&&1&&0 f" # && as internal separator
"_Image Extras/_Let’s Flip again toggle&&i:flipped&&1&&0 f" # && as internal separator
"_Image/Orientation: normal i:_orientation=0 Orientation: 90’right i:_orientation=1 Orientation: upside down i:_orientation=2 Orientation: 90’ left i:_orientation=3 "
"_Image/EXIF Orientation: normal i:_exif_orientation=0 EXIF Orientation: 90’right i:_exif_orientation=1 EXIF Orientation: upside down i:_exif_orientation=2 EXIF Orientation: 90’ left i:_exif_orientation=3 " # previously __exif_orientation but renamed for the double-symbol-separator convention
"_Window/_Fullscreen toggle**_gtk_fullscreen**1**0 F11"
"_Window/Hide the menu bar (press mouse button to restore) toggle_gtk_menus"
"_Window/Hide menu bar (press mouse button to restore) toggle||_hide_gtk_menus||0||1" # not yet ready to replace toggle_gtk_menus
"_Window/Resize window to image size display ’resize’"
"_Window/Text size reduce font_reduce"
"_Window/Text size magnify font_magnify"
"_Window/Text font: next font ’next’"
"_Window/Text font: prev font ’prev’"
"_Window/Show status line toggle||_display_status||1||0 "
"_Window/Caption over image: None _caption_over_image=0 Caption over image: No background _caption_over_image=1 Caption over image: Black background _caption_over_image=2 Caption over image: Above image, no overlap _caption_over_image=3 "
"_Window/Window caption: minimal _want_wm_caption_status=FIM Window caption: reasonable _want_wm_caption_status=fim:[%i/%l] Window caption: rich _want_wm_caption_status=fim:%N@%p%%%L[%i/%l]%?EXIF_DateTimeOriginal?[%:EXIF_DateTimeOriginal:]? "
"_Window/Mouse click help grid: default _want_wm_mouse_ctrl=’pP+a-=nN Mouse click help grid: simplified _want_wm_mouse_ctrl=ppp+a-nnn "
"_Advanced/Show output console (then hide with Tab) toggleVerbosity v"
"_Advanced/Verbose keys toggle___verbose_keys__1__0 "
"_Advanced/Low execution verbosity _debug_commands=0 Intermediate execution verbosity _debug_commands=ackCm High execution verbosity _debug_commands=ackCmmi "
"_Advanced/Rebuild menus with no verbosity _rebuild_quieter_menus"
"_Advanced/Rebuild menus with tooltips _rebuild_verboser_menus"
"_Advanced/Rebuild menus very verbosely _rebuild_verbosest_menus"
"_Advanced/Verbose menu toggle||_display_busy||1||0"
"_Advanced/Downscale huge images on load toggle||_downscale_huge_at_load||1||0"
"_Advanced/Background prefetch _want_prefetch=2 Foreground prefetch _want_prefetch=1 No prefetch _want_prefetch=0 "
"_Custom actions/_Mark current file mark_current_file"
"_Custom actions/_Go to marked file goto_marked_file"
"_Custom actions/Webcam shot (needs vgrabbj) webcam"
"_Custom actions/Say something (needs espeak) espeak"
"_Custom actions/Max cached memory: 256MiB _max_cached_memory=262144 unlimited _max_cached_memory=0 very little _max_cached_memory=1 80MiB _max_cached_memory=81920 "
"_Custom actions/Max cached images: unlimited _max_cached_images=0 5 _max_cached_images=5 10 _max_cached_images=10 100 _max_cached_images=100 "
"_All actions/_Commands FimMenuCommands/"
"_All actions/_Aliases FimMenuAliases/"
"_All actions/_Key Bindings FimMenuKeyBindings/"
"_All actions/_Variables FimMenuVariables/"
"_Help/_Commands FimMenuCommandsHelp/"
"_Help/_Aliases FimMenuAliasesHelp/"
"_Help/_Key Bindings FimMenuKeyBindingsHelp/"
"_Help/_Variables FimMenuVariablesHelp/"
"_Help/_man FIM man_fim"
"_Help/_man fimrc man_fimrc";
#"_Custom actions/scaling: _auto _scale_style=a a scaling: _auto to original _scale_style=b b scaling: manual _scale_style=m m scaling: by _width _scale_style=w w" # copy for demo purposes
#"_Custom actions/_Toggle flipped flag toggle__i:flipped__1__0 f"
#"_Custom actions/_Submenu/_Frobnicate unmapped_cmd /"
#"_Custom actions/_Submenu/_Defrobnicate unmapped_cmd u"
#"_Custom actions/_Submenu/FimMenuLimit FimMenuLimit/"
#"_Custom actions/_Submenu/_Do-frobnicate unmapped_cmd *" # bad specification
#"_Custom actions/_Submenu/_Fribnikate frobnicate unmapped_cmd *" # bad specification
#"_Custom actions/_Submenu/_Next next *" # bad specification
#"_Custom actions/_Add menu... menu_dialog"
#"_Custom actions/_Toggle full screen view toggle
if (_last_cmd_output!="") quit -1;
}
help ’’; # WELCOME...
# More examples:
#alias "plisten" ’popen "nc -l -p 9999
"’ "executes fim commands coming from port
9999 on this computer";
#alias "wlisten"
"while(1){sleep;plisten;}" "listen to a pipe,
endlessly";
#alias "musicplay" "system ’mpc’
’play’" "";
#alias "musicpause" "system ’mpc’
’pause’" "";
#alias "rdjpgcom" ’system
"rdjpgcom" i:_filename’;
# offsetscan usage : need a mechanism for popping all images
before.
#alias "offsetscan" "while(i:width<1){list
’push’ ’blob.jpg’;stdout
_open_offset ;_open_offset=_open_offset+1;reload;}";
#alias "webcam_cycle"
"while(1){webcam;reload;sleep 1;}";
# This is a FIM initialization file.
# Without it FIM cannot work like it should.
# Feel free to modify it, but with caution!
This manual page could be improved. Certain side effects of commands are not documented. Neither a formal description of the various commands. Interaction of commands and variables is also not completely documented.
The fim language shall be more liberal with quoting.
Michele Martone <dezperado _CUT_ autistici _CUT_ org>
See copyright notice in fim(1).
fimgs - poor man’s [http://]PostScript/pdf/dvi/cbr/rar/cbz/zip viewer based on fim
fimgs [ {fimgs-options} ] file [-- [{fim-options}]]
fimgs is a wrapper script which takes a PostScript or pdf or .cbr or .rar or .cbz or .zip or .dvi or any of the above prefixed with http:// or https:// or ssh: as input, renders the pages using ghostscript into a temporary directory and finally calls fim to display them.
In case of compressed archives (in ZIP or RAR formats), the images are decompressed into a directory and displayed using fim. In this case, only images contained in the archive will be displayed (no nested archives or pdf’s or ps’s or dvi’s).
The temporary directory name will be of the form $TMPDIR/fbps-$$. If the $TMPDIR environment variable is unset, /dev/shm and /var/tmp will be checked for existence and permissions. The $$ above is the script process ID. The script deletes the temporary directory when fim terminates.
In order to uncompress RAR archives, fimgs will use ’unrar-nonfree’ or ’rar’ or ’unrar-free’.
In order to uncompress ZIP archives, fimgs will use ’zip’.
In order to uncompress BZ2 files, ’bunzip2’ will be used, if present.
In order to uncompress TAR.GZ or TAR.BZ2 or TAR.XZ archives, fimgs will use ’tar’.
In order to fetch http:// or https:// prefixed URLS, ’wget’ will be used, if present.
In order to fetch ssh: prefixed host:path locations, ’scp’ will be used.
In case of a CBZ, CBR, PDF, PS, or DVI file, will invoke fim with ’--autotop --autowidth’.
To pass through options to fim, you may specify them after "--".
Default options are ’--autozoom’.
-r {resolution} Specify resolution for the ’gs’ -r option (e.g.: 96x96; default 120x120).
Specify password for the ’gs’ -p (password) option.
fim(1), fimrc(1), gs(1), fbi(1), fbgs(1), bash(1) ,zip(1), rar(1), rar-free(1), unrar-free(1), tar(1), gzip(1)
Michele Martone <dezperado _ GUESS _ autistici.org>.
Схожі новини
Germany's crime figures: Comparing apples to oranges?
Germany's crime figures: Comparing apples to oranges?
This UK Nation Has Britain’s 3 Most Gorgeous Beaches