fimrc(5) | File Formats Manual | fimrc(5) |
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 '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 '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} : this command is disabled. It shall be re-enabled in a future
version.
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.
The 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 image.
__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|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
_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; %k for the value of
i:_comment (comment description) variable in square brackets; %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 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_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 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.
_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-02-04 19:53:36 +0100 (Thu, 04 Feb 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 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 '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 caught 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¶
AUTHOR¶
Michele Martone <dezperado _CUT_ autistici _CUT_ org>
COPYRIGHT¶
See copyright notice in fim(1).
(c) 2011-2016 Michele Martone |