fimrc(5) | File Formats Manual | fimrc(5) |
fimrc - fim configuration file and language reference
~/.fimrc
/usr/local/etc/fimrc
fim --script-from-stdin [ {options} ] < {scriptfile}
fim --execute-script {scriptfile} [ {options} ]
fim --execute-commands {commands} [ {options} ]
fim --final-commands {commands} [ {options} ]
fim --write-scriptout {scriptfile} [ {options} ]
fim --write-scriptout /dev/stdout [ {options} ]
fim --chars-press :{commands} [ {options} ]
fim --chars-press :{commands} --chars-press '' [ {options} ]
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.
This section specifies the grammar of the fim language.
Language elements surrounded by a single quote ("'") are literals.
Warning: at the present state, this grammar has conflicts. A future release shall fix them.
program: %empty
| statement_list
statement_list: statement
| statement ';' statement_list
| non_atomic_statements_block statement_list
| statements_block
non_atomic_statements_block: '{' statement_list '}'
| INTEGER '{' statement_list '}'
| conditional_statement
statements_block: atomic_statements_block
| non_atomic_statements_block
conditional_statement: if_statement
| loop_statement
if_statement: 'if' '(' expression ')' statements_block
| 'if' '(' expression ')' statements_block 'else' statements_block
loop_statement: 'while' '(' expression ')' statements_block
| 'do' statements_block 'while' '(' expression ')'
atomic_statements_block: statement ';'
| statement ';' ';'
| statement ';' ';' ';'
statement: '!' arguments
| INTEGER ',' INTEGER IDENTIFIER
| INTEGER ',' INTEGER IDENTIFIER arguments
| INTEGER IDENTIFIER
| SLASH_AND_REGEXP
| '+' UNQUOTED_FLOAT '%'
| '+' QUOTED_FLOAT '%'
| '+' INTEGER '%'
| '*' UNQUOTED_FLOAT
| '*' QUOTED_FLOAT
| '*' INTEGER
| UNQUOTED_FLOAT '%'
| QUOTED_FLOAT '%'
| INTEGER '%'
| '-' UNQUOTED_FLOAT '%'
| '-' QUOTED_FLOAT '%'
| '-' INTEGER '%'
| INTEGER
| '-' INTEGER
| IDENTIFIER
| IDENTIFIER FILE_PATH
| IDENTIFIER arguments
| INTEGER IDENTIFIER arguments
| IDENTIFIER '=' expression
arguments: expression
| expression arguments
expression: '(' expression ')'
| expression '.' expression
| '!' expression
| expression '%' expression
| expression '+' expression
| expression '-' expression
| expression '*' expression
| expression '/' expression
| expression '<' expression
| expression '>' expression
| expression '||' expression
| expression BOR expression
| expression '&&' expression
| expression BAND expression
| expression '>=' expression
| expression '<=' expression
| expression '!=' expression
| expression '==' expression
| expression '=~' expression
| '-' expression
| IDENTIFIER
| INTEGER
| QUOTED_FLOAT
| UNQUOTED_FLOAT
| STRING
A STRING can be either a single quoted string or a double quoted string. A floating point number can be either unquoted (UNQUOTED_FLOAT) or quoted (QUOTED_FLOAT). A QUOTED_FLOAT is a floating point number, either single ("'") or double (""") quoted. An INTEGER shall be an unsigned integer number. An IDENTIFIER shall be one of the valid fim commands (see COMMANDS REFERENCE ) or a valid alias. A VARIABLE shall be an already declared or undeclared variable identifier (see VARIABLES REFERENCE ) or a valid alias, created using the alias command. The "=~" operator treats the right expression as a STRING, and uses it as a regular expression for matching purposes. The SLASH_AND_REGEXP is a slash ("/") followed by a STRING, interpreted as a regular expression. If 'INTEGER , INTEGER IDENTIFIER arguments' is encountered, command IDENTIFIER will be repeated on each file in the interval between the two INTEGERs, and substituting the given file name to any '{}' found in the commands arguments (which must be quoted in order to be treated as strings). See regex(1) for regular expression syntax.
The way some one-line statements are evaluated:
: enter command line mode :{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.* 2,4 stdout '{}' print three filenames to standard output. !{syscmd} executes the {syscmd} quoted string as an argument to the "system" fim command.
alias
alias [{identifier} [{commands} [{description}]]]
Without arguments, lists the current aliases.
With one, shows an identifier's assigned command.
With two, assigns to an identifier a user defined command or sequence of
commands.
With three, also assigns a help string.
align
align ['bottom'|'top'|'left'|right']: if image larger than drawing area, align
one side of the image to the border.
align 'center': align equally far from all sides.
align 'info': print internal alignment information.
autocmd
autocmd {event} {pattern} {commands}: manipulate autocommands (inspired from
Vim autocmd's).
Without arguments, list autocommands.
With arguments, specifies for which type of event and which current file open,
which commands to execute.
See the default built-in configuration files for examples.
autocmd_del
autocmd_del: specify autocommands to delete.
Usage: autocmd_del {event} {pattern} {commands}.
basename
basename {filename}: returns the basename of {filename} in the
'_last_cmd_output' variable.
bind
bind [{keysym} [{commands}]]: 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.
Use the '_verbose_keys' variable to discover (display device dependent) raw
keys.
Key binding is dynamical, so you can rebind keys even during program's
execution.
You can get a list of valid symbols (keysyms) by invoking dump_key_codes or in
the man page.
cd
cd {path}: change the current directory to {path}.
If {path} is a file, use its base directory name.
cd '-' 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.
color
color [desaturate]: desaturate the displayed image colors.
color [negate]: negate the displayed image colors.
color [colorblind|c|deuteranopia|d]: simulate a form of the deuteranopia color
vision deficiency (cvd).
color [protanopia|p]: simulate a form of the protanopia cvd.
color [tritanopia|t]: simulate a form of the tritanopia cvd.
color [daltonize|D]: if following a cvd specification, will attempt correcting
it.
color [identity]: populate the image with 'RGB identity' pixels.
To get back the original you will have to reload the image.
crop
crop: crop image to a centered rectangle, half the width and half the height.
crop {p}: crop image to the middle {p} horizontal percent and {p} vertical
percent of the image.
crop {w} {h}: crop image to the middle {w} horizontal percent and {h} vertical
percent of the image.
crop {x1} {y1} {x2} {y2}: crop image to the area between the upper left
({x1},{y1}) and lower right ({x2},{y2}) corner.
Units are intended as percentage (0 to 100).
Note: still experimental functionality.
desc
desc 'load' {filename} [{sepchar}]: load description file {filename}, using
the optional {sepchar} character as separator.
desc 'reload': load once again description files specified at the command line
with --load-image-descriptions-file, with respective separators.
desc ['-all'] ['-append'] ['-nooverw'] 'save' {filename} [{sepchar}]: save
current list descriptions to file {filename}, using the optional {sepchar}
character as separator, and if '-all' is present will save the variables,
and if '-append' is present, will only append, and if '-nooverw' is present,
will not overwrite existing files.
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
purposes).
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)}.
font
font 'scan' [{dirname}]: scan {dirname} or /usr/share/consolefonts looking for
fonts in the internal fonts list.
font 'load' {filename}: load font {filename}.
font 'next'/'prev': load next/previous font in the internal fonts list.
font 'info': print current font filename.
getenv
getenv {identifier}: create a variable with the same value as the
'{identifier}' environment variable, but with an identifier prefixed by
'ENV_'. So e.g. getenv 'DISPLAY' creates 'ENV_DISPLAY'. Nothing is being
printed; no variable is created if {identifier} is empty.
goto
goto {['+'|'-']{number}['%']['f'|'p'|'F'|'P']} | {/{regexp}/} | {?{filename}}
| {'+//'} | {'+/'|'-/'}[C] | {{'+'|'-'}{identifier}['+']}: jump to an image.
If {number} is given, and not surrounded by any specifier, 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 (same for 'F',
but accelerates if keep pressing).
The 'p' specifier asks for the jump to occur in terms of pages, within the
current file (same for 'P', but accelerates if keep pressing).
If /{regexp}/ is given, will jump to the first image matching the given
/{regexp}/ regular expression pattern.
If the argument starts with ?, jump to the filename following ?.
If given '+//', will jump to the first different image matching the last given
regular expression pattern.
With '+/'C or '-/'C will jump to next or previous file according to C: if 's'
if same directory, if 'd' if down the directory hierarchy, if 'u' if down
the directory hierarchy, if 'b' if same basename, if upper case match is
negative, if missing defaults to 'S' (jump to file in different dir).
If {identifier|identifier2...}] is encountered after a '+' or '-' sign, jump
to next or previous image having a different value for any corresponding
i:{identifier} (a trailing '+' will require a non empty value).
Match will occur on both file name and description, possibly loaded via desc
or --load-image-descriptions-file; see also '_lastgotodirection' and
'_re_search_opts'.
You can specify multiple arguments to goto: those after the first triggering
a jump will be ignored.
Executes autocommands for events PreGoto and PostGoto. Keeping pressed shall
accelerate images browsing.
help
help [{identifier}]: provide online help, assuming {identifier} is a variable,
alias, or command identifier.
If {identifier} begins with '/', 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 'else'.
info
info: display information about the current file.
limit
limit {'-list'|'-listall'} 'variable'|['-further'|'-merge'|'-subtract']
[{expression} |{variable} {value}]: A browsable file list filtering function
(like limiting in the 'mutt' program). Uses information loaded via
--load-image-descriptions-file.
If invoked with '-list'/'-listall' only, will list the current description
variable ids.
If invoked with '-list'/'-listall' 'id', will list set values for the
variable 'id'.
If '-further' is present, will start with the current list; if not, with the
full list.
If '-merge' is present, new matches will be merged in the existing list and
sorted.
If '-subtract' is present, sort and filter out matches.
If {variable} and {values} are provided, limit to files having property
{variable} set to {value}.
If {expression} is one exclamation point ('!'), will limit to the currently
marked files only.
If {expression} is '~!' will limit to files with unique basename.
if '~=', to files with duplicate basename.
if '~^', to the first of the files with duplicate basename.
if '~$', to the last of the files with duplicate basename.
On '~i' [MINIDX][-][MAXIDX], (each a number possibly followed by a multiplier
'K') will limit on filenames in position MINIDX to MAXIDX.
On '~z' will limit to files having the current file's size.
on '~z' [MINSIZE][-][MAXSIZE], (each a number possibly followed by a
multiplier among 'k','K','m','M') will limit on filesize within these
limits.
on '~d' will limit to files having the current file's date +- one day.
on '~d' [MINTIME][-][MAXTIME], (each the count of seconds since the Epoch
(First of Jan. of 1970) or a date as DD/MM/YYYY) will limit on file time
(struct stat's 'st_mtime', in seconds) within this interval.
For other values of {expression}, limit to files whose description string
matches {expression}.
Invoked with no arguments, the original browsable files list is restored.
list
list: display the files list.
list 'random_shuffle': randomly shuffle the file list.
list 'reverse': reverse the file list.
list 'clear': clear the file list.
list 'sort': sort the file list.
list 'sort_basename': sort the file list according to base name.
list 'sort_comment': sort the file list according to the value of the _comment
variable.
list 'sort_var' {var}: sort the file list according to the value of the
i:{var} variable.
list 'vars|variables': list variables in all i:* read from description file.
list 'sort_fsize': sort the file list according to file size.
list 'sort_mtime': sort the file list according to modification date.
list 'pop': remove the current file from the files list, and step back.
list 'remove' [{filename(s)}]: remove the current file, or the {filename(s)},
if specified.
list 'push' {filename(s)}: push {filename(s)} to the back of the files list.
list 'filesnum': display the number of files in the files list.
list 'mark' [{args}]: mark image file names for stdout printing at exit, with
{args} mark the ones matching according to the rules of the 'limit' command,
otherwise the current file.
list 'unmark' [{args}]: unmark marked image file names, with {args} unmark the
ones matching according to the rules of the 'limit' command, otherwise the
current file.
list 'marked': show which files have been marked so far.
list 'dumpmarked': dump to stdout the marked files (you will want usually to
'unmarkall' afterwards).
list 'markall': mark all the current list files.
list 'unmarkall': unmark all the marked files.
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|WEBP)$'.
list 'pushdirr' {dirname}: like pushdir, but will also push encountered
directory entries recursively.
list 'swap': will move the current image filename to the first in the list
(you'll have to invoke reload to see the effect).
Of the above commands, several will be temporarily non available for the
duration of a background load (enabled by --background-recursive), which
will last until _loading_in_background is 0.
load
load: load the image, if not yet loaded (see also 'reload').
Executes autocommands for events PreLoad and PostLoad.
pan
pan {vsteps}% {hsteps}%: pan the image to {vsteps} percentage steps from the
top and {hsteps} percentage steps from left.
pan {vsteps} {hsteps}: pan the image to {vsteps} pixels from the top and
{hsteps} pixels from left.
pan {'down'|'up'|'left'|'right'|'ne'|'nw'|'se'|'sw'}[+-] [{steps}['%']]: pan
the image {steps} pixels in the desired direction.
If the '%' specifier is present, {steps} 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.
A '+' or '-' sign at the end of the first argument will make jump to next or
prev if border is reached.
If present, the '_vsteps' variable will be considered for vertical panning.
The variables may be terminated by the '%' specifier.
Executes autocommands for events PrePan and PostPan.
popen
popen {syscmd}: pipe a command, invoking popen(): spawns a shell, invoking
'{syscmd}' and executing as fim commands the output of '{syscmd}'.
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.
Executes autocommands for events PrePrefetch and PostPrefetch.
See also the '_want_prefetch' variable.
pwd
pwd: print the current directory name, and updates the '_pwd' variable.
quit
quit [{number}]: terminate the program.
If {number} is specified, use it as the program return status.
Note that autocommand 'PostInteractiveCommand' does not trigger after this
command.
recording
recording 'start': start recording the executed commands.
recording 'stop': stop recording the executed commands.
recording 'dump': dump in the console the record buffer.
recording 'execute': execute the record buffer.
recording 'repeat_last': repeat the last performed action.
redisplay
redisplay: re-display the current file contents.
reload
reload [{arg}]: load the image into memory.
If {arg} is present, will force reloading, bypassing the cache (see also
'load').
Executes autocommands for events PreReload and PostReload.
rotate
rotate {number}: rotate the image the specified amount of degrees. If
unspecified, by one. If you are interested in orthogonal rotations, see
'_orientation' and related aliases.
Executes autocommands for events PreScale and PostScale.
scale
scale
{['+'|'-']{value}['%']|'*'{value}|'w'|'h'|'a'|'b'|'+[+-*/]'|['<'|'>']|'shadow'}:
scale the image according to a scale {value} (e.g.:
0.5,40%,'w','h','a','b').
If given '*' and a value, 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'.
If given '<' or '>', will shrink or magnify image using nearest mipmap
(cached pre-scaled version). If given 'shadow' as a parameter, search a
same-named file in one of the directories specified to --load-shadow-dir.
Executes autocommands for events PreScale and PostScale.
scroll
scroll: scroll down the image, going next when hitting the bottom.
scroll 'forward': scroll the image as we were reading left to right (see
'_scroll_skip_page_fraction' variable).
Executes autocommands for events PrePan and PostPan.
set
set: returns a list of variables which are set.
set {identifier}: returns the value of variable {identifier}.
set {identifier} {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.
stderr
stderr {args}: writes to stderr its arguments {args}.
stdout
stdout {args}: writes to stdout its arguments {args}.
system
system {syscmd}: get the output of executing the {syscmd} system command. Uses
the popen() system call. Usually popen invokes "/bin/sh -c
{syscmd}". This might not handle a multi-word command; in that case you
will have to put it into a script. See 'man popen' for more.
variables
variables: display the existing variables.
unalias
unalias {identifier} | '-a': delete the alias {identifier} or all aliases (use
'-a', not -a).
unbind
unbind {keysym}: unbind the action associated to a specified {keysym}
If {keysym} is at least two characters long and begins with 0 (zero), the
integer number after the 0 will be treated as a raw keycode to bind the
specified {keysym} to.
Use the '_verbose_keys' variable to discover (display device dependent) raw
keys.
while
while(expression){action;}: A conditional cycle construct.
May be interrupted by hitting the 'Esc' or the ':' key.
window
window {args}: this command is disabled.
" " "!" """ "#" "$" "%" "&" "'" "(" ")" "*" "+" "," "-" "." "/" "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" ":" ";" "<" "=" ">" "?" "@" "A" "Any" "B" "BackSpace" "Backspace" "C" "C-a" "C-b" "C-c" "C-d" "C-e" "C-f" "C-g" "C-h" "C-i" "C-j" "C-k" "C-l" "C-m" "C-n" "C-o" "C-p" "C-q" "C-r" "C-s" "C-t" "C-u" "C-v" "C-w" "C-x" "C-y" "C-z" "D" "Del" "Down" "E" "End" "Enter" "Esc" "F" "F1" "F10" "F11" "F12" "F2" "F3" "F4" "F5" "F6" "F7" "F8" "F9" "G" "H" "Home" "I" "Ins" "J" "K" "L" "Left" "M" "N" "O" "P" "PageDown" "PageUp" "Q" "R" "Right" "S" "T" "Tab" "U" "Up" "V" "W" "X" "Y" "Z" "[" "\" "]" "^" "_" "`" "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z" "{" "|" "}" "~"
Available autocommands are: PreScale, PostScale, PrePan, PostPan,
PreRedisplay, PostRedisplay, PreDisplay, PostDisplay, PrePrefetch,
PostPrefetch, PreReload, PostReload, PreLoad, PostLoad, PreGoto, PostGoto,
PreConfigLoading, PostConfigLoading, PreHardcodedConfigLoading,
PostHardcodedConfigLoading, PreUserConfigLoading, PostUserConfigLoading,
PreGlobalConfigLoading, PostGlobalConfigLoading, PreInteractiveCommand,
PostInteractiveCommand, PreExecutionCycle, PostExecutionCycle,
PreExecutionCycleArgs, PreWindow, PostWindow, and they are triggered on
actions as suggested by their name.
Those associated to actual commands are mentioned in the associated commands
reference.
If undeclared, a variable will evaluate to 0.
When assigning a variable to a string, use single or double quoting, otherwise it will be treated as a number.
The namespaces in which variables may exist are: current image, global. A namespace is specified by a prefix, which can be: 'i:', be prepended to the variable name. The global namespace is equivalent to the empty one:''. The special variable i:* expands to the collation of all the name-value pairs for the current image.
In the following, the [internal] variables are the ones referenced in the source code (not including the hardcoded configuration, which may be inspected and/or invalidated by the user at runtime).
_TERM [out,g:] the environment TERM variable.
__exif_flipped [out,i:] flipping information, read from the EXIF tags
of a given image.
__exif_mirrored [out,i:] mirroring information, read from the EXIF tags
of a given image.
__exif_orientation [out,i:] orientation information in the same format
of _orientation, read from the orientation EXIF tags (i:EXIF_Orientation).
_all_file_loaders [out,g:] space-separated list of hardcoded file
loaders usable with _file_loader.
_archive_files [in,g:] Regular expression matching filenames to be
treated as (multipage) archives. If empty,
".(RAR|ZIP|TAR|TAR.GZ|TGZ|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.
_buffered_in_tmpfile [out,i:] if an image has been temporarily
converted and decoded from a temporary file, its name is here.
_cache_control [in,g:] string for cache control. if it starts with 'm'
mipmaps will be cached; if it starts with 'M' then not. otherwise defaults
will apply.
_cache_status [out,g:] string with current information on cache status.
_cached_images [out,g:] the number of images currently cached.
_caption_over_image [in,g:] if set not to 0, will display a custom
comment string specified according to the value of_caption_over_image_fmt;
if larger than 1, with black background; if 3, image will be drawn possibly
below. It will take at most half of the screen.
_caption_over_image_fmt [in,g:] custom info format string, displayed in
a caption over the image; if unset: i:_comment; otherwise a custom format
string specified just as _info_fmt_str.
_command_expansion [in,g:] if 1, 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:] debugging option string for printing out . if
containing 'a', print out autocmd info; if containing 'c', print out each
command; if containing 'k', print out each pressed key; if containing 'j',
print interpreter internal steps; if containing 'B', clear screen and print
background loading files; if containing 'C', print cache activity.
_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.
_downscale_huge_at_load [in,g:] if 1, will downscale automatically huge
images at load time.
_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://".
_fbfont_as_screen_fraction [in,g:] The rendered text will be scaled at
least to this (integer) fraction of the screen. Disable font autoscaling
with -1. (Only enabled if configured with
--with-font-magnifying-factor=FACTOR, with FACTOR<1).
_fbfont_magnify_factor [in,g:] The rendered text will use a font
magnified by this (integer) factor. Maximal value is "16". (Only
enabled if configured with --with-font-magnifying-factor=FACTOR, with
FACTOR<1).
_fbfont_verbosity [in,g:] if > 0, verbose font loading
_file_load_time [out,i:] time taken to load the file and decode the
image, in seconds.
_file_loader [in,i:,g:] 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:] current image list length (number of visible
images).
_filename [out,i:] the current file name string.
_fim_bpp [out,g:] the bits per pixel count.
_fim_default_config_file_contents [out,g:] the contents of the default
(hardcoded) configuration file (executed after the minimal hardcoded
config).
_fim_default_grammar_file_contents [out,g:] the contents of the default
(hardcoded) grammar file.
_fim_scriptout_file [in,g:] the name of the file to write to when
recording sessions.
_fim_version [out,g:] fim version number; may be used for keeping
compatibility of fim scripts across evolving versions.
_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; %k for the value of
i:_comment (comment description) variable in square brackets; %l for current
image list length; %L for flip/mirror/orientation information; %P for page
information; %F for file size; %M for screen image memory size; %m for
memory used by mipmap; %C for memory used by cache; %T for total memory used
(approximation); %R for total max memory used (as detected by getrusage());
%n for the current file path name; %N for the current file path name
basename; ; %c for centering information; %v for the fim program/version
identifier string; %% for an ordinary %. A sequence like %?VAR?EXP? expands
to EXP if i:VAR is set; 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 the EXIF-set
variable EXIF_DateTimeOriginal (make sure you have libexif for this) will be
used only if present.
_inhibit_display [internal,g:] if 1, will inhibit display.
_last_cmd_output [out,experimental,g:] the last command output.
_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'.
_lastgotodirection [out,g:] the last file goto direction (either string
'+1' or string '-1').
_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.
_load_hidden_dirs [in,g:] if not 1, when pushing directories/files,
those whose name begins with a dot (.) will be skipped.
_loading_in_background [out,g:] 1 if program has been invoked with
--background-recursive and still loading in background.
_loop_only_once [internal,g:] if 1 and doing a --slideshow, do it once.
_lwidth [in,g:] if>0, will force the output console text width.
_magnify_factor [in,g:] the image scale multiplier used when magnifying
images size.
_max_cached_images [in,g:] the maximum number of images after which
evictions will be forced. Setting this to 0 (no limits) is ok provided
_max_cached_memory is set meaningfully.
_max_cached_memory [in,g:] the maximum amount of memory (in KiB) at
which images 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 [g:] the iteration limit for N in
"N[commandname]" iterated command invocations.
_min_cached_images [in,g:] the minimum number of images to keep from
eviction; if less than four can lead to inefficiencies: e.g. when jumping
between two images, each time an erase and a prefetch of neighboring images
would trigger. default value is 4.
_no_default_configuration [in,g:] if 0, a default, hardcoded
configuration 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'.
_pread_cmd [in,g:] a user-specified shell command emitting an image on
stdout, in a format readable by the convert utility. If the current filename
matches "^[/A-Za-z0-9_.][/A-Za-z0-9_.-]*$", it will be substituted
to any occurrence of '{}'.
_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). if 2, will also push hidden
files/directories, that is, ones whose names begin with a dot (.).
_pushdir_re [in] regular expression to match against when pushing files
from a directory or an archive. By default this is
".(JPG|PNG|GIF|BMP|TIFF|TIF|JPEG|JFIF|PPM|PGM|PBM|PCX|WEBP)$".
_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; see its documentation for possible values.
_screen_height [out] the screen height.
_screen_width [out,g:] the screen width.
_scroll_skip_page_fraction [int,g:] if >1, fraction of page which
will be skipped in when scrolling (e.g. 'scrollforward'); if 1, auto chosen;
if <1, disabled.
_seek_magic [optional,g:] will seek a 'magic' signature in the file
after opening it, and will try decoding it starting within the range of that
signature (use like this: fim -C '_seek_magic=MAGIC_STRING;push filename').
_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. If 2, will use every fourth source pixel instead of
averaging (good for photos, not for graphs).
_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; if 2 (and configured with --enable-cxx11) will
load in the background.
_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.
_want_wm_mouse_ctrl [in,g:] if at least 9 chars long, enable mouse
click/movement behaviour when in SDL mode; the 9 chars will correspond to a
3x3 screen clickable grid and the equivalent command keys; clicking middle
or right button will toggle on-screen usage info.
angle [in,out,i:] a floating point number specifying the rotation
angle, in degrees.
ascale [in,out,i:] the asymmetric scaling of the current image.
desaturated [out,i:] 1, if the image is desaturated.
flipped [out,i:] 1, if the image is flipped.
fresh [in,out,i:,experimental] 1 if the image was loaded, before all
autocommands (autocmd) execution.
height [out,i:] the current image original height.
mirrored [out,i:] 1, if the image is mirrored.
negated [out,i:] 1, if the image is negated.
page [out,experimental,g:] the current page.
pages [out,experimental,i:] the current number of pages of an image.
random [out] a pseudorandom number.
scale [in,i:] the scale of the current image.
sheight [out,i:] the current image scaled height.
swidth [out,i:] the current image scaled width.
width [out,i:] the current image original width.
Hardcoded aliases are:
alias "A" "'_autotop=1-_autotop;'"
alias "magnify" "scale '+'" # magnify the displayed
image by the _magnify_factor variable or {args}
alias "next" "goto '+1'" # go to the next page or
picture file
alias "next_file" "goto '+1f'" # go to the next
file in the list
alias "next_page" "goto '+1p'" # go to the next
page in the file
alias "prev" "goto '-1'" # go to the previous page
or picture file
alias "prev_file" "goto '-1f'" # go to the previous
file in the list
alias "prev_page" "goto '-1p'" # go to the previous
page in the file
alias "reduce" "scale '-'" # reduce the displayed
image by _reduce_factor or {args}
alias "scale_factor_decrease" "scale '+-'" #
subtract _scale_factor_delta to the scale factors _reduce_factor and
_magnify_factor
alias "scale_factor_grow" "scale '+*'" # multiply
the scale factors _reduce_factor and _magnify_factor by
_scale_factor_multiplier
alias "scale_factor_increase" "scale '++'" # add
_scale_factor_delta to the scale factors _reduce_factor and _magnify_factor
alias "scale_factor_shrink" "scale '+/'" # divide
the scale factors _reduce_factor and _magnify_factor by
_scale_factor_multiplier
They can be redefined with alias or deleted with the unalias
command.
Further default aliases are usually loaded at startup -- see the CONFIGURATION
FILE EXAMPLE section below.
# jump to the third image: 3; # jump to first image: ^; # jump to last image: $; # magnify the image two times: *2; # scale the image to the 30% of the original: 30%; # scale the image up by 30%: +30%; # scale the image down by 30%: -30%; # jump to the next image whose filename matches the ".*jpg" regular expression: /.*jpg; # executes the "date" system command !"date";
Part of the default configuration comes from the _fim_default_config_file_contents variable, shown here.
One can skip its loading by using the _no_default_configuration variable.
# $LastChangedDate: 2023-03-09 00:38:06 +0100 (Thu, 09 Mar 2023) $ # Contents of the default 'fimrc' file, hardcoded in the fim executable. # Read the documentation (man fimrc) to discover how to change this default hardcoded file and how to make your own. # Note that usually a ~/.fimrc file is read after these options take effect, so you could reset all of this with ease. # Lines beginning with a pound (#) are ignored by fim (they are treated as comments). # # Internal variables. # Some of these variables influence fim's behaviour (input variables), some are set by fim (output variables). # It is wise the input variables are set at the beginning of the file, so the bottom may issue commands correctly affected by them. if(_cache_control==''){_cache_control='m';} if(_debug_commands==''){_debug_commands='';} if(_command_expansion==''){_command_expansion=1;} if(_display_status==''){_display_status=0;} if(_max_cached_images==''){_max_cached_images=5;} if(_min_cached_images==''){_min_cached_images=4;} if(_max_cached_memory==''){_max_cached_memory=81920;} if(_max_iterated_commands==''){_max_iterated_commands=100;} if(_want_prefetch==''){_want_prefetch=1;} if(_no_external_loader_programs==''){_no_external_loader_programs=0;} if(_scale_style==''){_scale_style='b';} if(_save_fim_history==''){_save_fim_history=1;} if(_load_fim_history==''){_load_fim_history=1;} if(_verbose_keys==''){_verbose_keys=0;} if(_display_busy==''){_display_busy=1;} if(_ignorecase==''){_ignorecase=1;} if(_re_search_opts==''){_re_search_opts='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;} if(_downscale_huge_at_load==''){_downscale_huge_at_load=1;} if(_scroll_skip_page_fraction==''){_scroll_skip_page_fraction=0;} if(_want_wm_mouse_ctrl==''){_want_wm_mouse_ctrl="'pP+a-=nN";} # # External variables (not used internally). if(allow_round_scroll==''){allow_round_scroll=0;} if(console_scroll_n==''){console_scroll_n=3;} # alias "toggleautoflip" "_autoflip=1-_autoflip" ""; alias "toggleautonegate" "_autonegate=1-_autonegate" ""; alias "toggleflip" "i:flipped=1-i:flipped" "toggles flipped property on the current image"; alias "flip" "toggleflip;redisplay" "flip the current image along the horizontal axis"; alias "fliponce" "flip;toggleflip" "flip, but just for one display"; alias "toggleautomirror" "_automirror=1-_automirror" ""; alias "togglemirror" "i:mirrored=1-i:mirrored" "toggles mirrored property on the current image"; alias "mirror" "togglemirror;redisplay" "mirror the image along the vertical axis" ""; alias "mirroronce" "mirror;togglemirror" "mirror, but just for one display"; alias 'toggleLimitMarked' '__pre_limit_fileindex=_fileindex;_limit_mode=1-_limit_mode; if(_limit_mode==1){limit "!";} else { limit; } if(_filelistlen<1){_limit_mode=0;limit;goto __pre_limit_fileindex;} i:fresh=1;redisplay; ' "toggle between limiting file list to the marked files and the full list"; alias "unlimit" "limit" "calling limit with no arguments restores the original list"; # Warning : binding to C-s, C-z and C-c won't make effect, as these # codes are get caught by the console driver and will have no effect in fim. # Moreover, C-z will crash fim and C-c will terminate it. # Some other combinations (e.g.:C-l) may have similar problems in your console. bind 'f' "flip"; bind 'F' "fliponce"; bind 'm' "mirror"; bind 'M' "mirroronce"; bind 'q' "quit"; bind 'Esc' "quit"; #bind 'n' "next_file"; #bind 'n' "next"; bind 'C-h' "help"; #bind '?' "help"; # assigned to back-search #bind '/' "help"; # assigned to forward-search bind '=' "scale '100%'"; #bind 'p' "prev_file"; bind 'Del' "list 'remove';reload"; #bind 's' "list 'sort'"; bind ' ' "scroll 'forward'"; bind 'S' "toggleDisplayStatus"; bind 'I' "toggleautonegate"; bind 'i' "color 'negate';redisplay"; bind 'g' "color 'desaturate';redisplay"; bind '[' 'font_reduce;redisplay'; bind ']' 'font_magnify;redisplay'; bind '|' 'toggle_font_auto_scale;redisplay'; bind '{' 'font "prev";redisplay'; bind '}' 'font "next";redisplay'; bind 'G' "toggleDesaturate"; bind 'r' "rotate90"; bind 'R' "rotate270"; bind '+' "magnify"; bind 'a' "scale 'a'"; bind 'H' "scale 'H'"; bind 'Tab' "toggleVerbosity"; bind 'Menu' "toggleVerbosity"; bind 'v' "toggleDisplayStatus"; bind 'A' "A"; bind 'C-m' "list 'mark'"; bind 'u' "list 'unmark'"; bind 'Enter' "list 'mark';goto _lastgotodirection"; bind '-' "reduce"; bind "Up" "pan_up"; bind 'k' "pan_up"; bind "Right" "pan_right"; bind 'l' "pan_right"; bind "Down" "pan_down"; bind 'j' "pan_down"; bind "Left" "pan_left"; bind 'h' "pan_left"; bind 't' "align 'top'"; bind 'C-g' "system 'fbgrab' 'fim_'._device_string.'.png'"; # grab a screenshot #bind 'C-r' "recording 'start'"; bind 'C-r' "reload ''"; bind 'Q' "recording 'stop'"; bind 'D' "recording 'dump'"; bind 'E' "recording 'execute'"; bind 'C-e' "recording 'execute'"; bind 'C-x' "recording 'execute'"; bind '.' "recording 'repeat_last'"; bind '`' "toggleLimitMarked"; alias "toggleVerbosity" "_display_console=1-_display_console;i:fresh=1;redisplay" ""; alias "toggleKeyVerbosity" "_verbose_keys=1-_verbose_keys;redisplay" ""; alias "toggleDesaturate" "_autodesaturate=1-_autodesaturate;redisplay" ""; alias "idempotent_cmd" "goto ''"; # # Autocommands examples: #autocmd "PostInteractiveCommand" "fim.png" "echo '\nmatched an interactive command on fim.png\n'"; #autocmd "PostDisplay" ".*png" "echo 'this is a png file'"; #autocmd "PostDisplay" ".*jpg" "echo 'this is a jpg file'"; #autocmd "PostDisplay" "" "echo '\nthis is a file\n'"; #autocmd "PostGoto" "" "set_interactive_mode"; autocmd "PostGoto" "" "reload"; autocmd "PostWindow" "" "i:fresh=1;redisplay;"; autocmd "PreRedisplay" "" "i:_will_display=1"; autocmd "PreRedisplay" "" "if(_scale_style!='' && i:fresh){i:fresh=0;scale _scale_style ;i:fresh=0;}"; autocmd "PostRedisplay" "" "i:_will_display=0"; # Display device specific config alias "aalib_fix_do" "{if(aascale==''){ascale='2.0';}else{ascale=aascale;} i:fresh=1;display;if(_TERM=~'screen'){echo '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 "cacalib_fix_do" "{if(cacascale==''){ascale='1.18';}else{scale=cacascale;} i:fresh=1;display;if(_TERM=~'screen'){echo 'screen+cacalib?expect binding problems!'}}" "See cacalib_fix."; alias "cacalib_fix" "getenv 'DISPLAY';if(_device_string=='caca' && ENV_DISPLAY==''){cacalib_fix_do;scale 'a';}" "When using the libcaca (Coloured ASCII art) library we face a problem: glyph proportions are seldom square (as pixels are), and are tricky to detect; for this reason, we need to reshape the image with respect to the font ratio, but we have to make a guess in the scaling factor to compensate. If at runtime a better value is known for the terminal font height/with ratio, it may be fed in the 'cacascale' variable for an accurate scaling."; autocmd "PostReload" "" "aalib_fix"; autocmd "PostLoad" "" "aalib_fix"; autocmd "PostReload" "" "cacalib_fix"; autocmd "PostLoad" "" "cacalib_fix"; alias "refresh" "desc 'reload';redisplay;" "reloads and displays image description"; bind "F5" "refresh"; 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;}" "Toggles full screen. Will show mouse cursor in full screen."; autocmd "PostReload" "" "i:fresh=1" ; autocmd "PostScale" "" "if(0==i:_will_display){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>0){prefetch;}"; autocmd "PostInteractiveCommand" "" "if(_display_console==0 && i:fresh){redisplay;i:fresh=0;}"; autocmd "PostInteractiveCommand" "" "idempotent_cmd"; # Bug workaround: without it console scroll is broken. alias "next10" "i=0;while(i<10){i=i+1;next;display;sleep '1';}" "goes forward 10 images"; alias "prev10" "i=0;while(i<10){i=i+1;prev;display;sleep '1';}" "goes backward 10 images"; bind 'N' 'next10'; bind 'P' 'prev10'; bind 'C-n' "goto '+//'"; bind 'C-p' "goto '-//'"; bind 'C-b' "goto '-//'"; # Warning: many configurations cannot detect C-b. bind 'W' "display 'resize'" "if supported, resizes the window to match the current image pixels size"; #bind 'C-w' "scale '100%';display 'resize'" "if supported, scales the image to 100% and resizes the window to match its size (if fits)"; bind 'C-w' "if(_scale_style!='w'){_scale_style='w';scale 'w';}else{_scale_style='';scale '100%';}" "scale to width"; alias "endless_slideshow" "while(1){display;sleep '1';next;}" "performs an automated slideshow, endlessly"; alias "bookview" "while(1){display;sleep '2';scroll 'down';}" ""; alias "comicview" "while(1){display;sleep '1';scroll 'down';}" ""; alias "read" "while(1){display;sleep '1';scroll 'forward';}" ""; alias "slowread" "while(1){display;sleep '2';scroll 'forward';}" ""; alias "fastread" "while(1){display;scroll 'forward';}" "proceeds like in a book bug very fast"; alias "pornview" "echo 'press any key repeatedly to terminate' ;endless_slideshow" "enters an endless slideshow"; autocmd "PreExecutionCycle" "/fbps-" "_display_busy=0;_display_status=0" ; autocmd "PreExecutionCycle" "" "i:fresh=1;reload"; autocmd "PreExecutionCycle" "/fbps-.*ps001.png" "i:fresh=1;redisplay"; ## Example in imposing a file loader to an extension: #autocmd "PreReload" ".*mtx.gz" "_file_loader='MatrixMarket'"; #autocmd "PostReload" ".*mtx.gz" "_file_loader=''"; bind '*' "_display_console=0;toggleVerbosity;echo i:*"; bind 'w' "scale 'w'"; bind '<' "rotate10_ccw;display"; bind '>' "rotate10;display"; bind '_' "_scale_style='';scale '100%'"; bind ',' "_display_console=1;echo _last_system_output"; bind 'C-a' "if(_scale_style!='a'){_scale_style='a';scale 'a';}else{_scale_style='';scale '100%';}" "scale to height"; # alias "pan_nw" "pan 'nw'" "pans the image to the upper left"; alias "pan_ne" "pan 'ne'" "pans the image to the upper right"; alias "pan_se" "pan 'se'" "pans the image to the lower left"; alias "pan_sw" "pan 'sw'" "pans the image to the lower right"; alias "pan_down" "if(_display_console==0){pan 'down';}else{scd;}" "pans the image down / scrolls console down"; alias "pan_up" "if(_display_console==0){pan 'up' ;}else{scu;}" "pans the image up / scrolls console up"; alias "pan_left" "pan 'left'" "pans the image left"; alias "pan_right" "pan 'right'" "pans the image right"; alias "diagonal_nw" "pan_nw" "pans the image to the upper left"; alias "diagonal_ne" "pan_ne" "pans the image to the upper right"; alias "diagonal_se" "pan_se" "pans the image to the lower left"; alias "diagonal_sw" "pan_sw" "pans the image to the lower right"; bind 'd' "diagonal_nw"; bind 'D' "diagonal_se"; bind 'x' "diagonal_ne"; bind 'X' "diagonal_sw"; alias "toggleDisplayStatus" "_display_status=1-_display_status;redisplay" ""; alias "toggleDisplayBusy" "_display_busy=1-_display_busy" ""; alias "sort" "list 'sort'" "sorts the files list ordered"; bind 'o' "sort"; bind 'b' "prev"; bind 'B' "toggleDisplayBusy"; alias "random_slideshow" "while(1){goto random;}" "performs a shuffled slideshow"; alias "rotate90_ccw" "i:_orientation=i:_orientation+3;i:fresh=1;i:fresh=1;redisplay" "rotate 90 degrees counter clockwise"; alias "rotate90_cw" "i:_orientation=i:_orientation+1;i:fresh=1;i:fresh=1;redisplay" "rotate 90 degrees clockwise"; alias "rotate180" "i:_orientation=i:_orientation+2;i:fresh=1;i:fresh=1;redisplay" "rotate 180 degrees"; alias "rotate90" "rotate90_cw;display" "rotate 90 degrees clockwise"; alias "rotate270" "rotate90_ccw;display" "rotate 90 degrees counter clockwise"; alias "rotate10" "rotate '10';display" "rotate 10 degrees counter clockwise"; alias "rotate10_ccw" "rotate -10 ;display" "rotate 10 degrees clockwise"; bind 'K' 'if(_display_console==0){echo i:_filename.": ".i:_comment;toggleVerbosity}else{toggleVerbosity;}'; bind 'C-k' 'crop' # still experimental alias 'cache' 'echo _cache_status' "displays cached images status"; bind 'c' 'align "center"'; alias 'widen' 'i:ascale=i:ascale*"1.1";*1.0' "widen the current image"; alias 'narrow' 'i:ascale=i:ascale/"1.1";*1.0' "narrow the current image"; bind 'y' "widen" "widen horizontally the image"; bind 'Y' "narrow" "shrink horizontally the image"; alias 'console_scroll_up' 'if(_console_offset<_console_lines+console_scroll_n-_rows){_console_offset=_console_offset+console_scroll_n;}' "scrolls up the virtual console"; alias 'console_scroll_down' 'if(allow_round_scroll || (_console_offset>=console_scroll_n)){_console_offset=_console_offset-console_scroll_n;}' "scrolls down the virtual console"; alias 'console_scroll_reset' '{_console_offset=0;}'; alias 'scu' 'console_scroll_up' ""; alias 'scd' 'console_scroll_down' ""; alias 'scz' 'console_scroll_reset' ""; alias 'center' 'align "center"'; alias 'left' 'align "left"'; alias 'right' 'align "right"'; alias 'top' 'align "top"'; alias 'bottom' 'align "bottom"'; alias "font_magnify_auto" "if(_fbfont_as_screen_fraction>1){_fbfont_as_screen_fraction=_fbfont_as_screen_fraction-1;}else{_fbfont_as_screen_fraction=_screen_width/100+_screen_height/100;}" ""; alias "font_magnify_manual" "_fbfont_magnify_factor=_fbfont_magnify_factor+1" ""; alias "font_reduce_auto" "if(_fbfont_as_screen_fraction>1){_fbfont_as_screen_fraction=_fbfont_as_screen_fraction+1;}" ""; alias "font_reduce_manual" "_fbfont_magnify_factor=_fbfont_magnify_factor-1" ""; alias "toggle_font_auto_scale" "if(_fbfont_as_screen_fraction<0){_fbfont_as_screen_fraction=0;echo 'Auto font scaling on.';}else{_fbfont_as_screen_fraction=-1;echo 'Auto font scaling off.';}" "toggles between manual and auto font scaling control"; alias 'next_file_dir_same' "goto '+/s';" "go to next file in same dir"; alias 'next_file_dir_other' "goto '+/S';" "go to next file in other dir"; alias 'next_file_dir_up' "goto '+/u';" "go to next file up the dir hierarchy"; alias 'next_file_dir_down' "goto '+/d';" "go to next file down the dir hierarchy"; alias 'next_file_same_basename' "goto '+/b';" "go to next file with same basename"; alias 'prev_file_dir_same' "goto '-/s';" "go to prev file in same dir"; alias 'prev_file_dir_other' "goto '-/S';" "go to prev file in other dir"; alias 'prev_file_dir_up' "goto '-/u';" "go to prev file up the dir hierarchy"; alias 'prev_file_dir_down' "goto '-/d';" "go to prev file down the dir hierarchy"; alias 'prev_file_same_basename' "goto '-/b';" "go to prev file with same basename"; #alias "font_magnify" "if(_fbfont_as_screen_fraction<0) {font_magnify_manual;}else{font_magnify_auto;}" "increase font size (either relative or absolute)"; #alias "font_reduce" "if(_fbfont_as_screen_fraction<0) {font_reduce_manual;} else{font_reduce_auto;}" "increase font size (either relative or absolute)"; alias "font_magnify" "_fbfont_as_screen_fraction=-1;font_magnify_manual" "increase absolute font size and set manual font control"; alias "font_reduce" "_fbfont_as_screen_fraction=-1;font_reduce_manual" "decrease absolute font size and set manual font control"; bind "PageUp" "if(_display_console==0){prev;}else{scu;}"; bind "PageDown" "if(_display_console==0){next;}else{scd;}"; bind "Home" "0;"; bind "End" "$;"; bind "^" "0;"; bind "$" "$;"; #bind "Backspace" "prev"; # console code for C-h and Backspace is the same :-) bind "'" "goto _lastfileindex"; bind '"' "scale 'shadow';i:fresh=1;redisplay;"; bind '(' "goto '^p'"; bind ')' "goto '$p'"; bind 'Z' "sleep 1"; _display_status=1; # lower status line _want_wm_caption_status="fim:%N@%p%%%L[%i/%l]"; _info_fmt_str="%p%% %wx%h%L %i/%l%P %F %T %c"; # lower right line part #_display_status_fmt="%N:%k"; # _display_status_fmt="%N%?EXIF_DateTimeOriginal?[%:EXIF_DateTimeOriginal:]?%?EXIF_ExposureTime?[%:EXIF_ExposureTime:]?%?EXIF_FNumber?[%:EXIF_FNumber:]?%?EXIF_ApertureValue?[%:EXIF_ApertureValue:]?%?EXIF_ISOSpeedRatings?[ISO%:EXIF_ISOSpeedRatings:]?:%k"; # lower left line part #_fbfont_as_screen_fraction=-1; # disable auto font scaling echo "WELCOME: to switch to the command line interface press ':'"; # More examples: #alias "plisten" 'popen "nc -l -p 9999 "' "executes fim commands coming from port 9999 on this computer"; #alias "wlisten" "while(1){sleep;plisten;}" "listen to a pipe, endlessly"; #alias "musicplay" "system 'mpc' 'play'" ""; #alias "musicpause" "system 'mpc' 'pause'" ""; #alias "rdjpgcom" 'system "rdjpgcom" i:_filename'; # offsetscan usage : need a mechanism for popping all images before. #alias "offsetscan" "while(i:width<1){list 'push' 'blob.jpg';stdout _open_offset ;_open_offset=_open_offset+1;reload;}"; #alias "webcam" "pread 'vgrabbj -d /dev/video0'"; #alias "webcam_cycle" "while(1){webcam;reload;sleep 1;}"; # This is a FIM initialization file. # Without it FIM cannot work like it should. # Feel free to modify it, but with caution!
This manual page could be improved. Certain side effects of commands are not documented. Neither a formal description of the various commands. Interaction of commands and variables is also not completely documented.
The fim language shall be more liberal with quoting.
fim(1), fimgs(1), regex(1).
Michele Martone <dezperado _CUT_ autistici _CUT_ org>
See copyright notice in fim(1).
(c) 2011-2023 Michele Martone |