Provided by: fim_0.5.3-2build1_amd64 bug

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

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

AUTHOR

       Michele Martone <dezperado _CUT_ autistici _CUT_ org>

COPYRIGHT

       See copyright notice in fim(1).

                                  (c) 2011-2016 Michele Martone                          fimrc(5)