sections: top tutorials news screenshots documentation download man fim man fimrc man fimgs copyright license bugs

Welcome to the FIM (Fbi IMproved) image viewer program homepage

A screenshot of a regular (framebuffer) FIM run (SDL would look the same) A screenshot of an ASCII Art FIM run
FIM is a lightweight universal image viewer, mostly for Linux (but not only).  
FIM aims to be a highly customizable and scriptable image viewer for users who are comfortable with software like the VIM text editor (see this minitutorial) or the Mutt mail user agent (see this minitutorial).  
It has been developed with Linux in mind, but can be built to run on several Unix systems or even on MS-Windows.
 
It is lightweight: it depends on a relatively few libraries, it displays in full screen and you control it using the keyboard.
It is universal: it can open many file formats and it can display pictures in the following video modes:
The right video mode gets auto-detected or selected at runtime, and may be opted in/out before build at configure time, if desired.
 
FIM is free software (see licensing info) and it is richly documented (see the documentation section).
 
Its official web page is hosted on Savannah: http://savannah.nongnu.org/projects/fbi-improved/
 
The official mirror for stable releases is located on Savannah mirror network: http://download.savannah.nongnu.org/releases/fbi-improved
 
The official mailing list is at: http://savannah.nongnu.org/mail/?group=fbi-improved
 
FIM is an idea by Michele Martone, although inspiration has been drawn from other softwares as well as from certain science fiction movie scenes.  
FIM started as a fork of the Fbi image viewer by Gerd Hoffmann.
 
If you like FIM, consider: sending a "thank you" message to its author; supporting the Savannah project, whom network kindly hosts FIM repositories; donating to the Free Software Foundation Europe; donating to the Free Software Foundation.
 

sections: top tutorials news screenshots documentation download man fim man fimrc man fimgs copyright license bugs

Tutorials

We have the following tutorials:

Tutorial: Browsing through a photo collection with FIM

The very basics of FIM are opening files, e.g.: fim DSC_0001.JPG DSC_0002.JPG or a directory of files, e.g.: fim -R ~/Pictures/
... and browsing through them with the basic keys:
n (next file), p (previous file), + (magnify), - (reduce), r (rotate), m (mirror), f (flip), ...
(see documentation for the common defaults for keys and commands).

Starting with version 0.5, FIM has powerful features to browse through photo collections.
Say you have a collection of digital photographs, e.g. thousands of JPEG files:
$ ls
DSC_0001.JPG	
DSC_0002.JPG	
...
sample.jpg

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:
On the top of the screen you can see the Busto di Diana. Da Pompei, 1817... image description from the files.dsc file.
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

I assume you know how to use Mutt.
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

If you know the VI/VIM text editor shortcut based usage interface, then you know how to appreciate the comfort and speed of use it gives.
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 license bugs

News: What's new with FIM

(last update: 31/01/2016)
	
	FIM NEWS -- history of (main) user-visible changes in FIM.

                Version 0.5-rc1

 * fix: enabled concurrent make, e.g.: make -j 4
 * bug workaround: had no console scroll if no command executed on PostInteractiveCommand
 * fix: some systems don't have sys_errlist: using strerror there
 * fix: corrected the quiet mode (-q) to be quieter
 * fix: no zlib.h build time dependency (this will be reintroduced in the future)

                Version 0.5-rc0

 * -R / --recursive switch to turn on recursive push of command line specified directories
 * added --sort and --sort-basename to sort the images list
 * introduced mipmap mechanism (_use_mipmaps) for faster display/scaling of images
 * status bar customizable with _display_status_fmt and _info_fmt_str, which can be
   controlled by the use of special image variable specifiers ('expandos'):
    "%T" expando to get (and display) total memory used by the program 
    "%C" expando to get (and display) file/memory usage by image cache
    "%M" expando to get (and display) memory used by the current (displayed) image
    "%c" expando to get (and display) centering information
    "%m" expando to get (and display) current image mipmap occupation information
    "%k" expando to get (and display) current image i:_comment value
    "%?PRE?VAR?POST?" expando to get (and display) "PRE".i:VAR."POST"
    ...
 * search (and jump) on image descriptions via 'goto' and key '/'
 * when repeating search with 'repeat_last', will use last direction
 * '?' key is now assigned to backward search (goto '-//')
 * default 'C-p' key is now assigned to repeat last backward search (goto '-//')
 * image cache will remember alignment within viewport
 * jump back and forth from the last viewed image with the ' (single quote aka apostrophe)
   key and the _lastfileindex variable
 * added --load-image-descriptions-file (equivalent to 'desc' 'load') to populate 
   the i:_comment values of each loaded image file and set _caption_over_image=2
   (with it added also --image-descriptions-file-separator)
 * added the 'desc "load"' command to load a textual files comments description file
 * introduced a 'limit' command, with comment, file name, or marked file criteria
 * the ' key is bound to toggle limit'ing to the marked files list
 * introduced 'list "mark"' and 'list "unmark"' syntax styled as 'limit'
 * load i:_comment and i:var from description file, with forms:
   "filename comment" (to i:_comment),
   "#!fim:var=value" (to   set i:var=value on all all the files following)
   "#!fim:var="      (to unset i:var=value on all all the files following)
   "filename #!fim:=" (to i:_comment from the value read last)
   "filename #!fim:+comment" (similar, but will append the new comment)
   "filename #!fim:^comment" (similar, but will prepend the new comment)
   "filename #!fim:s/f/t" (similar, but replace string f with string t)
 * EXIF tags will be read with libexif and become i:EXIF_-prefixed variables
 * if _want_exif_orientation is set, images will be reoriented according to EXIF
   metadata (i:__exif_orientation, i:__exif_mirrored, i:__exif_flipped).
 * the 'help' command will search also in fim command options
 * will optionally use C++11 constructs with ./configure --enable-cxx11 (no user level impact)
 * scaling image code faster (thanks to __restrict__ pointers)
 * customizable SDL window caption line with _want_wm_caption_status
 * BMP format support is now optional
 * PCX format support (optional)
 * changed meaning of variable _ignorecase: now it affects autocommands
 * introduced variable _re_search_opts affecting regexp-based search
 * default key 'r' is bound to 'rotate90', key 'R' to 'rotate270'
 * can be invoked without stdin; e.g. from an X menu
 * added "display 'resize'" to resize the SDL window, eventually to image size
 * default SDL mode is windowed now
 * by default, the 'C-w' key will resize the SDL window to the original image size
 * by default, the 'W' key will resize the SDL window to the image size,
   and added an --autowindow switch to adapt window size to picture size
 * the 'help' command will search in help items if argument starts with /
 * special variable i:* expanding to all the variable name/value pairs of the current image
 * opening image files in archives (e.g. CBZ,CBR,RAR,TAR,fim-0.5-rc1.tar.gz,TBZ,7Z,ISO,...)
   with libarchive (experimental)
 * JPEG-2000 file support via JasPer (experimental)
 * added a ':- INTEGER' syntax, so one can specify the file in the list counting from the end
 * added an _archive_files variable to specify which file name types specify archives
 * added a 'list "pushdirr"' command, working like "pushdir" but recursively
 * the _fbfont variable will contain the current console font file string
 * mirror/flip are now being applied with respect to the viewport borders
 * stat() checking of files on load can be disabled with _push_checks
 * added --no-stat-push to set _push_checks=0 before initialization
 * added the _caption_over_image variable (which is 0 unless --load-image-descriptions-file)
 * 'Pause' and 'Menu' keys are now available in SDL (-o sdl) mode
 * added  'list' 'marked'  to show the list of marked files
 * key 'Del' bound to pop (delete) the current image from the list
 * i:_file loader will store the used loader string
 * switch --offset accepts a range now (using the new _open_offset_retry variable)
 * if an image has been opened with an offset, i:_open_offset will be set accordingly
 * variable i:pagecount is now replaced by i:pages
 * put aside (disabled) the v: b: and w: namespaces until they make more sense
 * panning on mouse movement in SDL mode
 * make fim goal has been deleted
 * changed librsb library detection: now it's e.g.:
   LIBS="librsb-config  --ldflags --extra_libs` " CXXFLAGS="`librsb-config --cflags ` \
   ./configure --enable-matrices-rendering
 * bugfix: in some situations fim -o fb was not clearing the screen before drawing the image
 * bugfix in the "list 'remove'" internals
 * --binary=1/--binary=24 will not pad tiny renderings to _preferred_rendering_width pixels

                Version 0.4

 * changed --random semantics and introduced --random-no-seed switch
 * customizable status bar file info string
 * introduced --as-text to render printable bytes as text
 * key r is bound to 'rotate90, key R to 'rotate270'
 * bug fixes for the g: namespace, SDL/X mode, "list 'pop'" command, 
   the --offset option, 'ascale' and rotation, documentation.

                Version 0.4-beta

 * interface to the GraphicsMagic library (more graphics formats supported)
 * introduced bitwise AND and OR operators
 * support for rendering "matrix market" numerical matrix files (with librsb)
 * X mode not anymore default in aalib, available at option 
 * libjpeg usage fixes
 * libpng usage fixes (support for PNG_LIBPNG_VER>=10209)
 * documentation improvements (e.g.: fim man page is auto-generated)
 * "imlib2" X-based output device support 
 * "sdl" output device improvements (fullscreen/mouse/windowed options, I/O, ..)
 * more default consolefont options (e.g.: hardcoded consolefonts support)
 * configure option to disable the fim history file
 * improvements to scale, goto, other commands
 * improved directories reading
 * introduced --no-commandline, --no-internal-config switches
 * aggregated some commands for clarity
 * output console can be disabled at configure time
 * important fbdev bug fixes 
 * autocompletion of variable identifiers

        	Version 0.3

 * minor strchr compilation problem on some systems
 * better consolefonts support  
 * much better SDL support (different color modes)
 * 'negate' feature
 * -S, or 'sanity-check' switch 

               Version 0.3-beta-prerelease

 * auto-generated documentation: more consistency 
 * grammar specification, in man fimrc
 * internal commands,variables,autocommands  reference man page, in man fimrc
 * better internal help mechanisms
 * more control (resolution change,windowed mode) in experimental sdl mode
 * new commands (pread,reverse,shuffle,...) 
 * (temporarily) disabled internal windows splitting 
 * pushing files from a directory
 * several minor and major bugfixes

        	Version 0.3-beta

 * full         support for AAlib (Ascii Art rendering) (-o aa)
 * experimental support for SDLlib (Simple Directmedia Layer) (-o sdl) (X!)
 * experimental PDF, PS, DJVU file support
 * history file support (~/.fim_history)
 * seamless caching and prefetching integration
 * viewing of any type files as bitmaps (unset bits black, set bits white)
 * viewing of any type files as pixmaps (as RGB triples)
 * framebuffer driver now can be disabled at compile time
 * colors inversion: saves a significant fraction of power when viewing documents 

        	Version 0.3-alpha

 * experimental support for AAlib (Ascii Art rendering) (-t)
 * reading image files (-i) and scripts (-p) from stdin
 * runs on the powerpc architecure
 * rewritten from scratch the debug console, now buffered and with scrolling
 * achieved speedup in magnifying pictures
 * achieved speedup in displaying dithered images
 * smarter quoting rules (looser quote checking) when "push"ing files
 * dumping to file execution logs as executable scripts (-W/--write-scriptout)
 * implemented regular expressions matching operator (=~)
 * new default key bindings for split windows control
 * could be compiled with no readline library (--disable-readline)

        	Version 0.2
 
 * internal windowing (with splitting, resizing, swapping) support
 * .xcf, .fig, .dia, .svg files now viewable via wrapper calls
 * introduced interactive command iteration ( in the [n] form )
 * fim will try to run under screen and over ssh now
 * custom framebuffer device, fonts and gamma are supported
 * enriched compile-time options via the ./configure script
 * vim-styled variable scoping g:,i:,v:,w: (local variables)
 * eradicated some bugs
 * introduced new variables, commands

        	Version 0.2-alpha
 
 * first windowing functionalities
 * bugs and subtle flaws handling
 * introduced new variables, commands

            	Version 0.1

 * regular expressions for filtering the viewed image list
 * vim-like autocommands
 * command line autocompletion
 * command line history
 * completely customizable key bindings
 * external/internal scriptability

 

sections: top tutorials news screenshots documentation download man fim man fimrc man fimgs copyright license bugs

Screenshots

A screenshot of a regular (framebuffer) FIM run (SDL would look the same)
A screenshot of an 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 a textual and HTML screenshots.

sections: top tutorials news screenshots documentation download man fim man fimrc man fimgs copyright 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:

sections: top tutorials news screenshots documentation download man fim man fimrc man fimgs copyright license bugs

Download and build instructions

You are welcome to download the latest (prerelease, dated 31/01/2016) snapshot of FIM:
 
fim-0.5-rc1.tar.gz ( 700656 bytes )
 
and the signature file:
 
fim-0.5-rc1.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.5-rc1.tar.gz
wget http://download.savannah.nongnu.org/releases/fbi-improved/fim-0.5-rc1.tar.gz.sig
gpg --search 'dezperado autistici org'
# import the key from a trusted keyserver by following on screen instructions
gpg --verify fim-0.5-rc1.tar.gz.sig

 
The typical sequence of actions to build FIM, which should suffice is
tar xzf fim-0.5-rc1.tar.gz 
cd fim-0.5-rc1 
./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 license bugs

man fim

fim

NAME
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

SYNOPSIS

fim [{options}] [--] {imagefile} [{imagefiles}]
... | fim [{options}] [--] [{imagefiles}] -
fim [{options}] [--] [{files}] - < {file_name_list_text_file}
fim --image-from-stdin [{options}] < {imagefile}
fim --script-from-stdin [{options}] < {scriptfile}

DESCRIPTION

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; it features an internal command language specialized to the image viewing purposes; it is capable of interacting with standard input and output; the internal command language is accessible via a command line capable of autocompletion and history; it features command recording, supports initialization files, customizable key bindings, internal variables and command aliases, vim-like autocommands, JPEG comments, EXIF tags display, EXIF rotation/orientation, and much more.

As a default, fim displays the specified file(s) on the detected graphical device (e.g. with SDL if X is detected, or the linux framebuffer device if not). JPEG,PNG,GIF,BMP,TIFF,PPM,PGM,PBM,PCX formats are supported. For ’XCF’ (Gimp’s) images, fim will try to use ’xcftopnm’. For ’.FIG’ vectorial images, fim will try to use ’fig2dev’. For ’.DIA’ vectorial images, fim will try to use ’dia’. For ’.SVG’ vectorial images, fim will try to use ’inkscape’. For other formats fim will try to use ImageMagick’s ’convert’ executable.

If {imagefile} is a directory, therein contained files of supported formats will be loaded. If {imagefile} contains a trailing slash (/), it will be treated as a directory; otherwise a check will be made using stat(2). To change this default, see description of the _pushdir_re variable and the --no-stat-push and --recursive options.

If configured at build time, fim will be capable of using SDL or aalib output.

This man page only describes the fim command line options. See man fimrc(5) for a full specification of the fim language, commands, variables, and an example configuration file.

USAGE

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. The full specification for these is accessible at runtime using the internal help system (typing :help).

OPTIONS

Accepted command line {options} :

--

The arguments before -- beginning with - will be treated as command line options. All arguments after -- will be treated as filenames regardlessly.

-a, --autozoom

Enable autozoom. fim will automagically pick a reasonable zoom factor when loading a new image (as in fbi).

-b, --binary[=24|1]

Display (any filetype) binary files contents as they were raw 24 or 1 bits per pixel pixelmaps. Will arrange the image by rows long as specified by the _preferred_rendering_width variable for the image width (unless a narrower image suffices). Regard this as an easter bunny option.

--as-text

Display (any filetype) files contents as they were text. Will only show printable characters. Regard this as an easter bunny option.

--cd-and-readdir

Step into the first loaded file directory and push other files.

-c {commands}, --execute-commands {commands}

The commands string will be executed before entering the interactive loop. Please note that if your commands are more complicated than a simple ’next’ or ’pornview’ command, they must be quoted and escaped in a manner suitable for your shell!

For example, -c ’*2;2pan_up;display;while(1){bottom_align;sleep "1" ; top_align}’ (with the single quotes) will tell fim to first double the displayed image size, then pan two times up, then display the image ; and then do an endless loop consisting of bottom and top aligning, alternated.

-C {commands}, --execute-commands-early {commands}

Just as the --execute-commands option, but commands will be executed before the loading of any config file.

For example, -C ’_scale_style=" "’ will make fim start with no auto-scaling.

-d {framebuffer device}, --device {framebuffer device}

Framebuffer device to use. Default is the one your vc is mapped to (as in fbi).

--dump-reference-help[=man].

Will dump to stdout the language reference help.

-D, --dump-default-fimrc

The default configuration (the one hardcoded in the fim executable) is dumped on standard output and fim exits.

-E {scriptfile}, --execute-script {scriptfile}

The scriptfile will be executed right after the default initialization file is executed.

-f {fimrc}, --etc-fimrc {fimrc}

Specify an alternative system wide initialization file (default: /usr/local/etc/fimrc), which will be executed prior to any other configuration file.

-F {commands}, --final-commands {commands}

The commands string will be executed after exiting the interactive loop of the program (right before terminating the program).

-h, --help[=s|d|l|m]

Print (short, descriptive, long, or complete man) program invocation help, and terminate.

--load-image-descriptions-file {filename}

Load image descriptions from {filename}. In {filename} each line is the name of an image file (its basename will be taken), then a Tab character (unless --image-descriptions-file-separator specifies otherwise), then the description text. Each description will be put in the _comment variable of the image at load time. Will override the comment eventually loaded from the file (e.g. JPEG, PNG or TIFF comment). Special comment lines like "#!fim:var=val" will lead i:var to be assigned value val (unquoted) at image loading time. Special description lines begin with markers: with "#!fim:=" the last description line to be used; with "#!fim:+" what follows + will be appended to the last description line; with "#!fim:^" what follows ^ will be prepended to the last description line; with "#!fim:s/f/t" the last description line will be used, but occurrences of string f will be substituted with string t (f and t can contain anything but not a /). If val is empty that variable will be 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 will be displayed over the image.

--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.

-i, --image-from-stdin

Will 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 will be displayed as "<STDIN>".

-m {vmode}, --mode {vmode}

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.

-N, --no-rc-file

No personal initialization file will be read (default is ~/.fimrc) at startup.

--no-etc-rc-file

No system wide initialization file will be read (default is /usr/local/etc/fimrc) at startup.

--no-internal-config

No internal default configuration at startup (uses internal variable _no_default_configuration). Will only provide a minimal working configuration.

--no-commandline

With internal command line mode disabled.

--no-history-save

Do not save execution history at finalization (uses internal variable _save_fim_history).

--no-history-load

Do not load execution history at startup.

--no-history

Do not load or save execution history at startup.

-p, --script-from-stdin

Will read commands from stdin prior to entering in interactive mode.

-o [fb|sdl|aa|dumb|imlib2], --output-device [fb|sdl|aa|dumb|imlib2]

Will use the specified device as fim video output device, overriding automatic checks.The available devices depend on the original configuration/compilation options, so you should get the list of available output devices issuing fim --version. The aa option may be specified as aa={[’w’]} ; the ’w’ character allows windowed mode in case of aalib running under X (otherwise, the DISPLAY environment variable will be unset for the current instance of fim). The sdl option may be specified as sdl={[’w’][’m’][’r’][’W’][’M’][’R’]width:height} , where width is and height are integer numbers specifying the desired resolution; the ’w’ character requests windowed mode; the ’m’ character requests mouse pointer display; the ’r’ character requests support for window resize; the same letters uppercase request explicit negation of the mentioned features.

--offset {bytes-offset[[:upper-offset]|+offset-range]}

Will use the specified offset (in bytes) for opening the specified files. If upper-offset is specified, further bytes will be probed, until upper-offset. If +offset-range is specified, so many further bytes will be probed. This is useful for viewing images on damaged file systems; however, since the internal variables representation is sizeof(int) bytes based, you have a limited offset range.

-P, --text-reading

Enable textreading mode. This has the effect that fim will display images scaled to the width of the screen, and aligned to the top. Useful if the images you are watching 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).

-s {value}, --scroll {value}

Set scroll steps for internal variable _steps (default is 20%).

--slideshow {number}

Interruptible slideshow mode; will wait for {number} of seconds (assigned to the _want_sleep_seconds variable after each loading; implemented by executing while(_fileindex<_filelistlen){sleep _want_sleep_seconds; next;} as a first command.

-S, --sanity-check

A quick sanity check before starting the interactive fim execution, but after the initialization.

-t, --no-framebuffer

Fim will not use the framebuffer but the aalib (ASCII art) driver instead (if you are curious, see (info aalib)). If aalib was not enabled at tompile time, fim will work without displaying images at all.

-T {terminal}, --vt {terminal}

The terminal will 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.

--sort

Sort files list before browsing according to full filename.

--sort-basename

Sort files list before browsing according to file basename’s.

-u, --random

Randomly shuffle the files list before browsing (seed depending on time() function).

--random-no-seed

Randomly shuffle the files list before browsing (no seeding).

-v, --verbose

Be verbose: show status bar.

-V, --version

Display program version, compile flags, enabled features, linked libraries information, supported filetypes/file loaders, and then terminate.

-w, --autowidth

Scale the image according to the screen width.

--no-auto-scale

Do not scale the images after loading (will set ’_scale_style=" "’;).

--autowindow

Will resize the window size (if supported) to the image size. Don’t use this with other image scaling options.

--no-stat-push

Sets _push_checks=0 before initialization, thus disabling file/dir existence checks with stat(2) at push push time (and speeding up startup).

-H, --autoheight

Scale the image according to the screen height.

-W {scriptfile}, --write-scriptout {scriptfile}

All the characters that you type are recorded in the file {scriptout}, 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 {scriptout} file exists, it will be not touched (as in Vim’s -w).

-, --read-from-stdin

Read file list from stdin: each line one file.

Note that these the three standard input reading functionalities (-i,-p and -) conflict : if two or more of them occur in fim invocation, fim will exit 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 <arg>

Specify an endline delimiter string for breaking lines read via -/--read-from-stdin. Line text before the delimiter will be treated as names of files to load; the text after will be ignored until a newline. This is useful e.g. to description files as filename list files.

-A, --autotop

Align images to the top (UNFINISHED).

-q, --quiet

Quiet mode. Sets _display_status=0;_display_busy=0;.

-r {resolution}, --resolution {resolution}

Set resolution (UNFINISHED).

-R, --recursive

Push files/directories to the files list recursively.

PROGRAM RETURN STATUS

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.

COMMON KEYS AND COMMANDS

The following keys and commands are hardcoded in the minimal configuration. These are working by default before any config loading, and before the hardcoded config loading (see variable _fim_default_config_file_contents).

n goto ’+1f’
p goto ’-1f’
+ magnify
- reduce
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
:{number} jump to {number}^th image in the list

:^

jump to first image in the list

:$

jump to last 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)

/{regexp}

entering the pattern {regexp} (with /) makes fim jump to the next image whose filename matches {regexp}

/*.png$

entering this pattern (with /) makes fim jump to the next image whose filename ends with ’png’

/png

a shortcut for /.*png.*

!{syscmd}

executes the {syscmd} quoted string as a "/bin/sh" shell 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.

AFFECTING ENVIRONMENT VARIABLES

FBFONT

(just like in fbi) a Linux consolefont font file.

If using a gzipped font, the zcat program will be used to uncompress it (via execvp(3)).
If not specified, the following files will be probed and the first existing will be selected:

/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 will be used.

FBGAMMA

(just like in fbi) gamma correction (applies to dithered 8 bit mode only). Default is 1.0.

FRAMEBUFFER

(just like in fbi) user set framebuffer device file (applies only to the fb mode).

If unset, fim will probe for /dev/fb0.

TERM

(only in fim) will influence the output device selection algorithm, especially if $TERM=="screen".

DISPLAY

If this variable is set, then the sdl driver will be probed by default.

COMMON PROBLEMS

fim 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 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 a pseudo tty (xterm, ssh, screen, ...) will not work.

INVOCATION EXAMPLES

fim media/
# Will load files from the directory media.

fim -R media/ --sort
# Will open files found by recursive traversal of directory media, then sorting the list.

find /mnt/media/ -name *.jpg | fim -
# Will make fim read the file list from standard input.

find /mnt/media/ -name *.jpg | shuf | fim -
# will make fim read the file list from standard input, randomly shuffled.

cat script.fim | fim -p images/*
# Will make fim read the script file script.fim from standard input prior to displaying files in the directory images

scanimage ... | tee scan.ppm | fim -i
# Will make fim read the image scanned from a flatbed scanner as soon as it is read

fim * > selection.txt
# Will output the file names marked interactively with the ’list "mark"’ command in fim to a file.

fim * | fim -
# will 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’
# will 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, will save 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;};’
# will display a sequence of images grabbed from a webcam; circa 1 per second.

NOTES

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. The SDL driver is quite inefficient, for a variety of reasons. In particular, its interaction with the readline library can be problematic (e.g.: when running in sdl mode without a terminal). This shall be fixed.

BUGS

fim has bugs. Please read the BUGS file shipped in the documentation directory to discover the known ones.

FILES

/usr/local/share/doc/fim

The directory with Fim documentation files.

/usr/local/etc/fimrc

The system wide Fim initialization file (executed at startup, after executing the hardcoded configuration).

~/.fimrc

The personal Fim initialization file (executed at startup, after the system wide initialization file).

~/.inputrc

If Fim is built with GNU readline support, it will be susceptible to chages in the user set ~/.inputrc configuration file contents. For details, see (man readline(3)).

SEE ALSO

Other Fim man pages: fimgs(1), fimrc(1).
Or related programs: fbset(1), con2fb(1), convert(1), vim(1), fb.modes(8), fbset(8), fbgrab(1), fbdev(4), setfont(8), xfs(1).

AUTHOR

Michele Martone <dezperado _CUT_ autistici _CUT_ org> is the author of fim, "fbi improved".

COPYRIGHT

Copyright (C) 2007-2016 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.



 

sections: top tutorials news screenshots documentation download man fim man fimrc man fimgs copyright license bugs

man fimrc

fimrc

NAME
SYNOPSIS
DESCRIPTION
FIM LANGUAGE GRAMMAR
COMMANDS REFERENCE
AUTOCOMMANDS REFERENCE
VARIABLES REFERENCE
COMMAND LINE USAGE EXAMPLES
CONFIGURATION FILE EXAMPLES
NOTES
BUGS
SEE ALSO
AUTHOR
COPYRIGHT

NAME

fimrc - fim configuration file and language reference

SYNOPSIS

~/.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} ]

DESCRIPTION

This page explains the fim 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 through the ":" key (or rather, the key code specified by 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.

FIM LANGUAGE GRAMMAR

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 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 FLOAT is a floating point number. 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 is as a regular expression for matching purposes. The SLASH_AND_REGEXP is a slash ("/") followed by a STRING, interpreted as a regular expression. See regex(1) for regular expression syntax.

The way some one-line statements are evaluated:

: enter command line mode
:{number} jump to {number}^th image in the list

:^

jump to first image in the list

:$

jump to last 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)

/{regexp}

entering the pattern {regexp} (with /) makes fim jump to the next image whose filename matches {regexp}

/*.png$

entering this pattern (with /) makes fim jump to the next image whose filename ends with ’png’

/png

a shortcut for /.*png.*

!{syscmd}

executes the {syscmd} quoted string as a "/bin/sh" shell command

COMMANDS REFERENCE

alias
alias [{identifier} [{commands} [{description}]]]

align
align bottom : align to the lower side the current image; align top : align to the upper side the current image;

autocmd
autocmd {event} {pattern} {commands} : manipulate auto commands

autocmd_del
autocmd_del : manipulate auto commands. usage: autocmd_del {event} {pattern} {commands}

basename
basename {filename} : returns the basename of {filename}

bind
bind [{keysym} [{commands}]] : bind a keyboard symbol/shortcut {keysym} to {commands}; 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. activate the _verbose_keys variable to discover (display device dependent) raw keys.; binding is dynamical, so you can rebind keys even during program’s execution

cd
cd {path}: change the current directory to {path}. cd - will change to the previous current directory (before the last ":cd {path}" command)

clear
clear : clear the virtual console

commands
commands : display the existing commands

desaturate
desaturate : desaturate the displayed image colors. To get back the original you will have to reload the image.

desc
desc ’load’ {filename} [{sepchar}] : load description file {filename}, using the optional {sepchar} character as separator. See documentation of --load-image-descriptions-file for the format of {filename}.

display
display [’reinit’ {string}]|’resize’ {w} {h}] : display the current file contents; if ’reinit’ switch is supplied, the ’{string}’ specifier will be used to reinitialize (e.g.: change resolution, window system options) the display device; see documentation for the --output-device command line switch for allowed values of {string}; if ’resize’ and no argument, will ask the window manager to size the window like the image; if ’resize’ and two arguments, these will be used as width and height of window, to set.

dump_key_codes
dump_key_codes : dump the active key codes (unescaped, for inspection)

echo
echo {args}: print the {args} on console

else
if(expression){action;}[’else’{action;}] : see else

eval
eval {args} : evaluate {args} as commands, executing them

exec
exec {filename(s)} : execute script {filename(s)}

getenv
getenv {identifier} : display the value of the {identifier} environment variable

goto
goto {[’+’|’-’]{number}[’%’][’f’|’p’]} | {/{regexp}/} | {’+//’}: jump to an image; if {number} is given, and not surrounded by any specifier, will go to image at index {number} ; if followed by ’%’, the effective index will be computed as a percentage to the current available images; if prepended by ’-’ or ’+’, the jump will be relative to the current index; the ’f’ specifier asks for the jump to occur within the files; the ’p’ specifier asks for the jump to occur in terms of pages, within the current file; if /{regexp}/ is given, will jump to the first image matching the given /{regexp}/ regular expression pattern; if given ’+//’, will jump to the first different image matching the last given regular expression pattern. Match will occur on both file name and description, eventually loaded via desc or --load-image-descriptions-file.

help
help [{identifier}] : provide online help, assuming {identifier} is a variable, alias, or command identifier. If {identifier} begins with /, the search will be on the help contents and a list of matching items will be given instead. A list of commands can be obtained simply invoking "commands"; a list of aliases with "alias"; a list of bindings with "bind".

if
if(expression){action;}[’else’{action;}] : see if

info
info : display information about the current file

limit
limit [{expression} |{variable} {value}] : A browsable file list filtering function (like limiting in the ’mutt’ program). Uses information loaded via --load-image-descriptions-file. If one argument only is provided, restrict to files whose description string matches {expression}. If two arguments are provided, restrict to files having property {variable} set to {value}. If invoked with one exclamation point (’!’) as argument will restrict to the currently marked files only. 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 the file base name; list ’pop’ : pop the last file from the files list; list ’remove’ [{filename(s)}] : remove the current file, or the {filename(s)}, if specified ; list {filename(s)} ’push’: 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 ’pushdir; {dirname}: will 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$; list ’pushdirr’ {dirname}: like pushdir, but will also push encountered directory entries recursively.

load
load : load the image, if not yet loaded (see also reload)

negate
negate : negate the displayed image colors.

pan
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} will be treated as a percentage of current screen dimensions; if {steps} is not specified, the "_steps" variable will be used; if present, the "_hsteps" variable will be considered for horizontal panning; if present, the "_vsteps" variable will be considered for vertical panning; the variables may be terminated by the ’%’ specifier

popen
popen {syscmd} : pipe a command, invoking popen(): spawns a shell, invoking {syscmd} and executing as fim commands the output of {syscmd}

pread
pread {args} : execute {args} as a shell command and read the output as an image file (using popen)

prefetch
prefetch : prefetch (read into the cache) the two nearby image files (next and previous), for a faster subsequent opening. 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

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, will force reloading, bypassing the cache (see also load)

rotate
rotate {number}: rotate the image the specified amount of degrees [undocumented]

scale
scale {[’+’|’-’]{value}[’%’]|’*’{value}|’w’|’h’|’a’|’b’|’+[+-*/]’} : scale the image according to a scale {value} (e.g.: 0.5,40%,’w’,’h’,’a’,’b’); if given ’*’ and a value, will multiply the current scale by that value; if given ’w’, will 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, will scale relatively to the original image width; if the number is followed by ’%’, the relative scale will be treated on a percent scale; if given ’++’(’+-’), will increment (decrement) the "_magnify_factor", "_reduce_factor" variables by "_scale_factor_delta"; if given ’+*’(’+/’), will multiply (divide) the "_magnify_factor", "_reduce_factor" variables by "_scale_factor_multiplier";

scrolldown
scrolldown : scroll down the image, going next if at bottom

scrollforward
scrollforward : scroll the image as it were reading it

set
set: returns a list of variables which are set; set {identifier}: returns the value of variable {identifier}; set {identifier} {commands}: sets variable {identifier} to value {commands};

set_commandline_mode
set_commandline_mode : set console mode

set_interactive_mode
set_interactive_mode : set interactive mode

sleep
sleep [{number}=1] : sleep for the specified (default 1) number of seconds

status
status : set the status line to the collation of the given arguments

stdout
stdout {args} : writes to stdout its arguments {args}

system
system {syscmd}: get the output of the shell command {syscmd}. (uses popen())

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. activate 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} : manipulates the window system windows; each value of {args} shall be one of [’split’ | ’hsplit’ | ’vsplit’ | ’normalize’ | ’enlarge’ | ’venlarge’ | ’henlarge’ | ’up’ | ’down’ | ’left’ | ’right’ | ’close’ | ’swap’]

AUTOCOMMANDS REFERENCE

Available autocommands are: PostScale, PreScale, PrePan, PostPan, PreRedisplay, PostRedisplay, PreDisplay, PostDisplay, PrePrefetch, PostPrefetch, PostReload, PreReload, PostLoad, PreLoad, PostGoto, PreGoto, PreConfigLoading, PostConfigLoading, PreHardcodedConfigLoading, PostHardcodedConfigLoading, PreUserConfigLoading, PostUserConfigLoading, PreGlobalConfigLoading, PostGlobalConfigLoading, PreInteractiveCommand, PostInteractiveCommand, PreExecutionCycle, PreExecutionCycleArgs, PostExecutionCycle, PreWindow, PostWindow, and they are triggered on actions as indicated by their name.

VARIABLES REFERENCE

If undeclared, a variable will evaluate to 0.

There namespaces in which variables may exist are: current image, global. A namespace is specified by a prefix, which is one of: ’i:’, which shall 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 imag.
__exif_orientation
[out,i:] orientation information in the same format of _orientation, read from the orientation EXIF tags (i:EXIF_Orientation).
_archive_files
[in,g:] Regular expression matching filenames to be treated as (multipage) archives. If empty, ".*(RAR|ZIP|TAR|TAR.GZ|fim-0.5-rc1.tar.gz|TAR.BZ2|TBZ|TBZ2|CBR|CBZ|LHA|7Z|XAR|ISO)$" will be used. Within each archive, only filenames matching the regular expression in the _pushdir_re variable will be considered for opening.
_autocmd_trace_stack
[in,g:] dump to stdout autocommands (autocmd) stack trace during their execution (for debugging purposes)
_autodesaturate
[in,g:] if 1, will desaturate images by default
_autoflip
[in,g:] if 1, will flip images by default
_automirror
[in,g:] if 1, will mirror images by default
_autonegate
[in,g:] if 1, will negate images by default
_autotop
[in,g:] if 1, will align to the top freshly loaded images
_cache_status
[out,g:] string with current information on cache status
_cached_images
[out,g:] the number of images currently cached.
_caption_over_image
[experimental,in,g:] if _caption_over_image is set not to 0, will display the contents of i:_comment as a caption over the image; if larger than 1, with black background.
_command_expansion
[in,g:] if 1, will 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 binding (an integer variable) for spawning the command line; will have precedence over any other binding
_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:] print out each command before its execution (for debugging purposes)
_device_string
[out,g:] the current display device string
_display_as_binary
[in,g:] will force loading of the specified files as pixelmaps (no image decoding will be performed); if 1, using one bit per pixel; if 24, using 24 bits per pixel; otherwise will load and decode the files as usual
_display_as_rendered_text
[in,g:] will force loading of the specified files as text files (no image decoding will be performed); if 1; otherwise will load and decode the files as usual
_display_busy
[in,g:] if 1, will display a message on the status bar when processing
_display_console
[in,g:] if 1, will display the output console
_display_status
[in,g:] if 1, will display the status bar
_display_status_bar
[in,g:] if 1, will 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, will execute a sanity check on startup
_exiftool_comment
[out,g:] comment extracted via the exiftool interface; see _use_exiftool.
_fbfont
[out,g:] The current console font file string. If the internal hardcoded font has been used, then its value is "fim://".
_file_loader
[in,i:,g:] if not empty, this string will force a file loader (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:] the length of the current image list
_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.
_hsteps
[in,g:] the default steps, in pixels, when panning images horizontally (overrides steps)
_ignorecase
[in,g:] if 1, will 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; %l for 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; EXP will be copied verbatim except for contained sequences of the form %:VAR:, which will be expanded to the value of variable i:VAR; this is meant to be used like in e.g. ’EXIF_DateTimeOriginal?[%:EXIF_DateTimeOriginal:]?’, where an EXIF-set variable (make sure you have libexif for this) will be used only if present.
_inhibit_display
[internal,g:] if 1, will inhibit display
_last_file_loader
[out,g:] after each image load, _last_file_loader will be set to 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. Useful for jumping back and forth easily between two images with ’goto _lastfileindex’.
_load_default_etc_fimrc
[in,g:] if 1 at startup, will load the system wide initialization file
_load_fim_history
[in,g:] if 1 on startup, will load the ~/.fim_history file on startup
_lwidth
[in,g:] if>0, will force the output console text width
_magnify_factor
[in,g:] the image scale multiplier used when magnifying images size
_max_cached_images
[in,experimental,g:] the maximum number of images after which evictions will be forced. Setting this to 0 (no limits) is ok provided _max_cached_memory is set meaningfully.
_max_cached_memory
[in,experimental,g:] the maximum amount of memory (in KiB) at which images will be continued being added to the cache. Setting this to 0 (no limit) will lead to a crash (there is no protection currently).
_max_iterated_commands
[experimental,g:] the iteration limit for N in "N[commandname]" iterated command invocations
_no_default_configuration
[in,g:] if 0, a default, hardcoded configuration will be executed at startup, after the minimal hardcoded one.
_no_external_loader_programs
[in,g:] if 1, no external loading programs will be tried for piping in an unsupported type image file
_no_rc_file
[in,g:] if 1, the ~/.fimrc file will not be loaded at startup
_open_offset
[in,optional,g:,i:] offset (specified in bytes) used when opening a file; [out] i:_open_offset will be 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 will apply; if it is 1, a single ( 90’) rotation will apply; if it is 2, a double (180’) rotation will apply; if it is 3, a triple (270’) rotation will apply. 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’.
_preferred_rendering_dpi
[in,optional,g:] if >0, pdf, ps, djvu rendering will use this value for a default document dpi (instead of a default value)
_preferred_rendering_width
[in,optional,g:] if >0, bit based rendering will use this value for a default document width (instead of a default value)
_push_checks
[in,experimental,g:] if 1 (default), will check with stat() 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 (/) will have to 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 will also accept and push directories (using pushdir)
_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$".
_pwd
[out,g:] the current working directory; will be updated at startup and whenever the working directory changes
_re_search_opts
[in,g:] affects regexp-based searches; if an empty string, defaults will apply; if contains ’i’ (’I’), case insensitive (sensitive) searches will occur; if contains ’b’, will match on basename, if contains ’f’ on full pathname.
_reduce_factor
[in,g:] the image scale multiplier used when reducing images size
_retry_loader_probe
[in,g:] if 1 and user specified a file loader and this fails, will probe for a different loader
_rows
[in,g:] if >0, will set the number of displayed text lines in the console
_save_fim_history
[in,g:] if 1 on exit, will 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, this string will be fed to the scale command
_screen_height
[out] the screen height
_screen_width
[out,g:] the screen width
_seek_magic
[optional,g:] will seek for a magic signature before opening a file (for now, use like this: fim -c ’_seek_magic=MAGIC_STRING;push file_to_seek_in.ext’ )
_status_line
[in,g:] if 1, will display the status bar
_steps
[in,g:] the default steps, in pixels, when panning images
_sys_rc_file
[in,g:] string with the global configuration file name
_use_exiftool
[in,g:] if >0 and supported, exiftool will be used to get additional information. if 1, this will be appened to _comment; if 2, will go to _exiftool_comment
_use_mipmaps
[in,g:] if >0, will use mipmaps to speed up downscaling of images (this has a memory overhead equivalent to one image copy); mipmaps will not be cached.
_verbose_errors
[in,g:] if 1, will display on stdout internal errors, while parsing commands
_verbose_keys
[in,g:] if 1, after each interactive mode key hit, the console will display the hit key raw keycode
_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, the image will be displayed centered
_want_exif_orientation
[in,g:] if 1, will reorient images using information from EXIF metadata (and stored in in __exif_orientation, __exif_mirrored, __exif_flipped ).
_want_prefetch
[in,g:] if 1, will prefetch further files just after display of the first file
_want_sleep_seconds
[in,g:] number of seconds of sleep during slideshow mode
_want_wm_caption_status
[in,g:] this works only if supported by the display device (currently only SDL). if set to a number that is not 0, will show the status (or command) line in the window manager caption; if set to a non-empty string, will interpret it just as a file info format string (see _info_fmt_str); if empty, will show the program version.
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

COMMAND LINE USAGE EXAMPLES

# 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;
# executes the "date" system command
!"date";

CONFIGURATION FILE EXAMPLES

This is the default configuration, as contained in the _fim_default_config_file_contents variable.

# $LastChangedDate: 2016-01-17 22:14:48 +0100 (Sun, 17 Jan 2016) $
# 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(_debug_commands==’’){_debug_commands=0;}
if(_command_expansion==’’){_command_expansion=1;}
if(_display_status==’’){_display_status=0;}
if(_max_cached_images==’’){_max_cached_images=5;}
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=’bi’;}
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;}
#
# 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;" "";
alias "flip" "toggleflip;redisplay;" "flip the current image along the horizontal axis";
alias "fliponce" "flip;toggleflip;" "";
alias "toggleautomirror" "_automirror=1-_automirror;" "";
alias "togglemirror" "i:mirrored=1-i:mirrored;" "";
alias "mirror" "togglemirror;redisplay;" "mirror the image along the vertical axis" "";
alias "mirroronce" "mirror;togglemirror;" "";
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";
# Warning : binding to C-s, C-z and C-c won’t make effect, as these
# codes are catched 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;";
bind ’Del’ "list ’pop’;reload;";
#bind ’s’ "list ’sort’";
bind ’s’ "scrollforward";
bind ’C-s’ "swap;redisplay;";
bind ’S’ "toggleDisplayStatus";
bind ’I’ "toggleautonegate";
bind ’i’ "negate;redisplay;";
bind ’g’ "desaturate;redisplay;";
bind ’G’ "toggleDesaturate;";
#bind ’R’ "reload";
#bind ’R’ "redisplay";
bind ’r’ "rotate90;";
bind ’R’ "rotate270;";
#bind ’R’ "rotate10;display;";
#bind ’r’ "rotate10_ccw;display;";
#bind ’r’ "reload;";
#bind ’C-d’ "display";
bind ’+’ "magnify";
#bind ’C-+’ "angle=angle+10.0;display;";
bind ’a’ "scale ’a’;";
bind ’H’ "scale ’H’;";
bind ’Tab’ "toggleVerbosity";
bind ’Menu’ "toggleVerbosity";
#bind ’C-k’ "_want_wm_caption_status=1-_want_wm_caption_status;status ’ ’";
bind ’v’ "toggleDisplayStatus";
bind ’A’ "A";
bind ’C-m’ "list ’mark’";
bind ’u’ "list ’unmark’";
bind ’Enter’ "list ’mark’;next";
bind ’-’ "reduce";
bind "Up" "pan_up";
bind ’k’ "pan_up";
#bind ’C-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 ’ ’ "scrolldown";
bind ’t’ "align ’top’;";
bind ’C-g’ "system ’fbgrab fim.png’";
bind ’C-r’ "recording ’start’;";
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 ’+0p’;";
#
# autocommands are essential to Fim’s automated behaviour
# 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" ".*gif" "echo ’this is a gif file’;";
#autocmd "PostDisplay" "" "echo ’\nthis is a file\n’";
#autocmd "PostGoto" "" "set_interactive_mode;";
autocmd "PostGoto" "" "reload;";
#autocmd "PostGoto" "" "load;";
#autocmd "PostDisplay" "" "i:fresh=1" ;
#autocmd "PreWindow" "" "";
autocmd "PostWindow" "" "display;";
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 ’screen+aalib?expect binding problems!’}}" "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 "exif_fix" "i:_orientation=exif_orientation;exif_orientation=’’;i:mirrored=exif_mirrored;exif_mirrored=’’;i:flipped=exif_flipped;exif_flipped=’’;" "";
#autocmd "PostReload" "" "aalib_fix;exif_fix;";
#autocmd "PostLoad" "" "aalib_fix;exif_fix;";
autocmd "PostReload" "" "aalib_fix;";
autocmd "PostLoad" "" "aalib_fix;";
bind "F11" "if(_device_string==’sdl’ && !_fullscreen){_old_sw=_screen_width;_old_sh=_screen_height;display ’reinit’ ’MW0:0’;_fullscreen=1;}else if(_device_string==’sdl’ && _old_sw*_old_sh*_fullscreen){display ’reinit’ ’rwm’._old_sw.’:’._old_sh;_fullscreen=0;}";

autocmd "PostReload" "" "i:fresh=1" ;
autocmd "PostScale" "" "if(0==i:_will_display){i:fresh=1;display;}" ;
#autocmd "PostScale" "" "{i:fresh=1;display;}" ;
autocmd "PostPan" "" "{i:fresh=1;display;}" ;
autocmd "PostReload" "" "if(i:fresh){redisplay;}";
autocmd "PostInteractiveCommand" "" "if(i:fresh){display;i:fresh=0;}";
autocmd "PostInteractiveCommand" "" "if(_want_prefetch){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.

alias "next10" "i=0;while(i<10){i=i+1;next;display;sleep ’1’;};" "goes forward 10 images";
bind ’N’ ’next10’;
bind ’P’ ’prev10’;
bind ’C-n’ "goto ’+//’";
bind ’C-p’ "goto ’-//’";
bind ’C-b’ "goto ’-//’"; # Warning: C-b cannot be detected on many configurations.
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)";
alias "endless_slideshow" "while(1){display;sleep ’1’;next;};" "performs an automated slideshow, endlessly";
alias "bookview" "while(1){display;sleep ’2’;scrolldown;};" "";
alias "comicview" "while(1){display;sleep ’1’;scrolldown;};" "";
alias "read" "while(1){display;sleep ’1’;scrollforward;};" "";
alias "slowread" "while(1){display;sleep ’2’;scrollforward;};" "";
alias "fastread" "while(1){display;scrollforward;};" "";
alias "pornview" "echo ’press any key repeatedly to terminate’ ;endless_slideshow;" "";
#bind "C-p" "pornview";
#bind "C-b" "bookview";
autocmd "PreExecutionCycle" "/fbps-" "_display_busy=0;_display_status=0;" ;
autocmd "PreExecutionCycle" "" "i:fresh=1;reload;";
#autocmd "PreExecutionCycle" "" "redisplay;";
autocmd "PreExecutionCycle" "/fbps-.*ps001.png" "i:fresh=1;redisplay;";
#autocmd "PostInteractiveCommand" "" "i:fresh=0;";
#autocmd "PostInteractiveCommand" "" "prefetch;";
bind ’*’ "scale ’100%’";
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%’;}";
#bind ’h’ "scale ’h’";
#
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" "pan ’down’;" "pans the image down";
alias "pan_up" "pan ’up’;" "pans the image 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;" "";
alias "toggleDisplayBusy" "_display_busy=1-_display_busy;" "";
alias "sort" "list ’sort’" "sorts the files list ordered";
#toggleVerbosity;
#bind ’f’ "next;display;";
#bind ’b’ "prev;display;";
bind ’o’ "sort";
bind ’b’ "prev;";
bind ’B’ "toggleDisplayBusy";
alias "random_slideshow" "while(1){goto random;}" "performs a shuffled slideshow";
alias "rotate90_ccw" "i:_orientation=i:_orientation+3;i:fresh=1;i:fresh=1;redisplay;" "";
alias "rotate90_cw" "i:_orientation=i:_orientation+1;i:fresh=1;i:fresh=1;redisplay;" "";
alias "rotate180" "i:_orientation=i:_orientation+2;i:fresh=1;i:fresh=1;redisplay;" "";
alias "rotate90" "rotate90_cw;display;" "";
alias "rotate270" "rotate90_ccw;display;" "";
alias "rotate10" "rotate ’10’;display;" "";
alias "rotate10_ccw" "rotate -10;display;" "";

# window related aliases and commands
alias "wu" "window ’up’" "selects the window upwards the current";
alias "wd" "window ’down’" "selects the window under the current";
alias "wl" "window ’left’" "selects the window at left of the current";
alias "wr" "window ’right’" "selects the window at right of the current";
#bind ’K’ "wu";
bind ’K’ ’if(_display_console==0){echo i:_filename.": ".i:_comment;toggleVerbosity}else{toggleVerbosity;}’;
# Note : on many consoles C-j is by default equivalent to Enter.. so this may not work :)
#bind ’C-j’ "wd";
#bind ’J’ "wd";
#bind ’H’ "wl";
#bind ’L’ "wr";
#alias "split" "window ’split’" "split the current window horizontally";
#alias "vsplit" "window ’vsplit’" "split the current window vertically";
#alias "swap" "window ’swap’" "swap the enclosing window subwindows";
#alias "ws " "window ’swap’" "see swap";
#bind ’T’ "split;redisplay;";
##don’t use C-s : it will be usually catched by the console driver, and fim won’t get it!
##bind ’C-s’ "split;";
#bind ’V’ "vsplit;redisplay;";
#bind ’U’ "swap;redisplay;";
#alias ’venlarge’ ’window "venlarge"’ "";
#alias ’henlarge’ ’window "henlarge"’ "";
#alias ’wnormalize’ ’window "normalize"’ "";
#alias ’wclose’ ’window "close"’ "";
#alias ’wc’ ’window "close"’ "closes the current window";
#bind ’C’ "wc;redisplay;";

alias ’cache’ ’echo _cache_status;’ "displays cached images status";
#bind ’c’ ’cache;’;
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";
alias ’contract’ ’narrow’;
bind ’y’ "widen" "widens horizontally the image";
bind ’Y’ "narrow" "shrinks horizontally the image";
#alias ’scu’ ’scroll_console_up;’ "";
#alias ’scd’ ’scroll_console_down;’ "";
#alias ’console_scroll_up’ ’if(_console_offset<_console_lines){_console_offset=_console_offset+1;}’;
#alias ’console_scroll_down’ ’if(_console_offset>0){_console_offset=_console_offset-1;}’;
alias ’console_scroll_up’ ’if(_console_offset<_console_lines+console_scroll_n-_rows){_console_offset=_console_offset+console_scroll_n;}’;
alias ’console_scroll_down’ ’if(allow_round_scroll || (_console_offset>=console_scroll_n)){_console_offset=_console_offset-console_scroll_n;}’;
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"’;
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;";
bind "’" "goto _lastfileindex";
_display_status=1;
_want_wm_caption_status="fim:%N@%p%%%L[%i/%l]";
_info_fmt_str="%p%% %wx%h%L %i/%l%P %F %T %c";
_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:]?:%k";
#_display_status_fmt="%N:%k"; #
#_use_exiftool=0;
echo "WELCOME : to switch to the command line interface press ’:’ ";
# Some 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’ offimage;_open_offset=_open_offset+1;reload;}";
#alias "offsetscan" "while(i:width<1){list ’push’ ’/home/dez/mostro.jpg’;stdout _open_offset ;_open_offset=_open_offset+1;reload;}";
#alias "webcam" "pread ’vgrabbj -d /dev/video0’;";
#alias "webcam_cycle" "while(1){webcam;reload;sleep 1;};";
#This is a FIM initialization file.
#Without one of these FIM is nothing.
#So feel free to modify it, but with caution!

NOTES

This manual page is incomplete: a number of topics, as type conversions, or operator precedence, or exact command usage is left unspecified. The conditions for autocommands triggering are not specified as they should. A formal description of the various one-line commands, as well a more extensive example list is needed. Many of the listed variables are only valid within a namespace, and this shall be documented clearly.

BUGS

The fim language has a number of problems that shall be first documented, then fixed.

SEE ALSO

fim(1), fimgs(1), regex(1).

AUTHOR

Michele Martone <dezperado _CUT_ autistici _CUT_ org>

COPYRIGHT

See copyright notice in fim(1).



 

sections: top tutorials news screenshots documentation download man fim man fimrc man fimgs copyright license bugs

man fimgs

fimgs

NAME
SYNOPSIS
DESCRIPTION
OPTIONS
SEE ALSO
AUTHOR

NAME

fimgs - poor man’s [http://]PostScript/pdf/dvi/cbr/rar/cbz/zip viewer for the linux framebuffer console

SYNOPSIS

fimgs [ {fimgs-options} ] file [-- [{fim-options}]]

DESCRIPTION

fimgs is a simple 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 latter 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 is taken from the $TMPDIR environment variable.

OPTIONS

To pass through options to fim, you may specify them after "--".

-r {resolution} Specify resolution for the ’gs’ -r option (e.g.: 96x96; default 120x120).

-m

Dump a man page for fimgs.

-p {password}

Specify password for the ’gs’ -p (password) option.

-h

Will display a help message.

SEE ALSO

fim(1), fimrc(1), gs(1), fbi(1), fbgs(1), bash(1)

AUTHOR

Michele Martone <dezperado _ GUESS _ autistici.org>.



 

sections: top tutorials news screenshots documentation download man fim man fimrc man fimgs copyright license bugs

Copyright and Thanks

FIM is copyright (C) 2007-2015 Michele Martone and derives from the Fbi image viewer by Gerd Hoffmann. See the README.TXT file for more licensing info.
	Thanks go to (in temporal order, newer to older):

Mohammed Isam, for having provided PCX reading support
Matthieu Crapet, for enabling out-of-tree builds
Marco Barbàra, for testing and critiques
Vitaly Minko, for testing and debugging on ARM
Damiano Biagioli, for early testing
Marta Carbone, for early testing and debugging

sections: top tutorials news screenshots documentation download man fim man fimrc man fimgs copyright license bugs

License

FIM is free software, licensed under the terms of the GNU Public License version 2 (GPLv2) or later.
You find a FAQ about the GPL here.

sections: top tutorials news screenshots documentation download man fim man fimrc man fimgs copyright license bugs

Bugs

There are notes about documented bugs in the BUGS.html (BUGS) file.
 
You are welcome to report bugs and propose patches only after reading the documentation.

sections: top tutorials news screenshots documentation download man fim man fimrc man fimgs copyright license bugs