FreeBSD Manual Pages
CLIFM(1) Clifm Manual CLIFM(1) NAME clifm - The Command Line File Manager SYNOPSIS clifm [OPTION]... [PATH] INDEX 1. Getting help 2. Description 3. Parameters . Positional parameters . Options 4. Commands 5. File Filters (by filename, file type, and MIME type) 6. Keyboard shortcuts 7. Theming 8. Builtin expansions 9. File opener (third-party openers are also supported) 10. Shotgun, a builtin files previewer 11. Auto-suggestions (including a warning prompt for invalid command names) 12. Shell functions 13. Plugins 14. Autocommands 15. File tags 16. Virtual directories 17. Note on speed 18. Kangaroo frecency algorithm 19. Environment 20. Security 21. Miscellaneous notes 22. Files 23. Examples 1. GETTING HELP There are several ways of getting help in clifm. Once in the program, enter ? or help for some basic usage examples, or press F1 to access this manpage, F2 to go to the COMMANDS section of this very manpage, or F3 to jump to the KEYBOARD SHORTCUTS section. To get help about some specific topic, type help <TAB> to get a list of available help topics. Choose the topic you want and then press Enter. For a list of available commands and a brief description type cmd<TAB>. Help for all internal commands can be accessed via the -h or --help flags. For example, to get help about the selection function, s -h or s --help. A convenient way of getting full information about clifm commands is via the ih action, bound by default to the interactive help plugin (ihelp.sh). Enter ih to run the plugin (it depends on fzf(1)) and se- lect the command you want to obtain information about. For a quick introduction jump to the EXAMPLES section at the bottom of this document. 2. DESCRIPTION Clifm is a Command Line Interface File Manager. This is its main fea- ture and strength: all input and interacion is performed via commands typed in a prompt. In other words, clifm is a REPL, since it's basic structure is simply this: Read (user input via a command line), Evalu- ate/Execute the command, Print the results, Loop (start all over again). Unlike most terminal file managers out there, indeed, clifm replaces the traditional TUI interface (also known as curses or text-menu based interface) by a simple command-line interface (REPL). In this sense, it is a file manager, but also a shell extension: search for files, copy, rename, and trash some of them, but, at the same time, update/upgrade your system, add some cronjob, stop a service, and run nano (or vi, or emacs, if you like). Simply put, with clifm the command-line is still there, never hidden, but enriched with file management oriented functionalities. 3. PARAMETERS POSITIONAL PARAMETERS If the first non-option parameter is a directory, clifm will start in this directory (for example, the command clifm /etc instructs clifm to start in the directory /etc). If not specified, the first workspace is used. To start in a different workspace use the -w option (for instance, clifm -w4 /etc). If no positional parameter, and the -w option is not used, clifm starts by default in the last visited directory (and in the last active work- space). To disable this behavior use --no-restore-last-path (see be- low). OPTIONS Note: If compiled in POSIX mode, the following list of options does not apply. In this case, run clifm -h to get the actual list of options. (To make sure run clifm -v: if compiled in POSIX mode the version num- ber is followed by "-POSIX"). -a, --show-hidden do not ignore entries starting with . -A, --no-hidden ignore entries starting with . -b, --bookmarks-file=FILE set an alternative bookmarks file -c, --config-file=FILE set an alternative configuration file -D, --config-dir=DIR set an alternative configuration directory (if configuration files do not exist already, they will be created in DIR). -e, --no-eln do not print ELNs (entry list number) at the left of filenames. Bear in mind, however, that though ELNs are not printed, they are still there and can be used as always. -E, --eln-use-workspace-color ELNs use the current workspace color -f, --dirs-first list directories first -F, --no-dirs-first do not list directories first -g, --pager enable Mas, the builtin pager for file listing -G, --no-pager disable the files pager -h, --help show this help and exit -H, --horizontal-list list files horizontally (instead of vertically) -i, --no-case-sensitive ignore case distinctions when listing files -I, --case-sensitive do not ignore case distinctions when listing files -k, --keybindings-file=FILE set an alternative keybindings file -l, --long-view print file extended metadata next to filenames. Displayed fields can be customized via --prop-fields (PropFields in the configu- ration file). Set a custom time/date format using --time-style (TimeStyle in the configuration file). -L, --follow-symlinks-long when running in long view, show information for the file sym- bolic links reference rather than for the symbolic links them- selves -m, --dirhist-map enable the directory history map to keep in view previous, cur- rent, and next entries in the directory history list -o, --autols the cd command changes directory and lists files automatically -O, --no-autols the internal cd command works like the shell cd command: change directory but do not list files automatically -P, --profile=PROFILE use PROFILE as profile. If PROFILE does not exist, it will be created. The default profile is default. -r, --no-refresh-on-empty-line do not refresh the current list of files when pressing Enter on an empty line -s, --splash enable the splash screen -S, --stealth-mode in stealth mode (also known as incognito or private mode) no trace is left on the host system. Nothing is read from files nor any file is created: all settings are set to the default values. However, most settings can still be controlled via command line options and dedicated environment variables (see the ENVIRONMENT section below). Take a look as well to the history command and the --no-history command line switch. -t, --disk-usage-analyzer run in disk usage analyzer mode. Equivalent to --sort=size --long-view --full-dir-size --no-dirs-first. The total size of the current directory will be printed after the list of files. Press Ctrl-Alt-i (or Alt-TAB) to toggle this mode on/off in-place. -T, --trash-dir=DIR set an alternative trash directory -v, --version show version details and exit -w, --workspace=NUM start in workspace NUM. By default, clifm will recover the last visited directory for each workspace. However, you can override this behaviour using positional parameters to start in workspace NUM and in path PATH. E.g.: clifm -w4 /etc. -x, --no-ext-cmds disallow the use of external (shell) commands -y, --light-mode enable the light mode to speed up clifm. See the NOTE ON SPEED section below. -z, --sort=METHOD sort files by METHOD, where METHOD is one of: 0 = none, 1 = name, 2 = size, 3 = atime, 4 = btime, 5 = ctime, 6 = mtime, 7 = version, 8 = extension, 9 = inode, 10 = owner, 11 = group, 12 = blocks, 13 = links, or 14 = type. Both numbers and names are al- lowed. E.g: --sort=9 or --sort=inode. --bell=TYPE set the terminal bell type, where TYPE is: 0 = none, 1 = audi- ble, 2 = visible (requires readline >= 8.1), and 3 = flash. De- faults to 1 (visible), and, if not available, 0 (none). Only numbers are allowed. --case-sens-dirjump do not ignore case when consulting the jump database (via the j command) --case-sens-path-comp enable case sensitive path completion --cd-on-quit write the last visited directory to $XDG_CONFIG_HOME/clifm/.last to be later accessed by the corresponding shell function at pro- gram exit. Consult the SHELL FUNCTIONS section below for more information. --color-scheme=NAME use the color scheme named NAME --color-links-as-target colorize symbolic links using the target file color --cwd-in-title print the current working directory in the terminal window title (otherwise, only the program name is printed) --data-dir=DIR load data files, such as plugins, color schemes, and default configuration files, from DIR --desktop-notifications enable desktop notifications. Enter help desktop-notifications in clifm for more information. --disk-usage show disk usage for the filesystem where the current directory resides (in the form free/total (free-percentage) fs-type dev- name) --full-dir-size when running in long view, print the full (or total) size of di- rectories --fuzzy-algo=VER fuzzy matching algorithm, where VER is either 1 (faster, but not Unicode aware), or 2 (slower, Unicode aware). Bear in mind how- ever that the second algorithm will fallback to the first one (because it's faster) whenever the query string contains only ASCII characters, to minimize thus the performance penalty. --fuzzy-matching enable fuzzy matches for filename/path completions and sugges- tions --fzfpreview-hidden enable file previews for tab completion (fzf mode only) with the preview window hidden (toggle it via Alt-p) --fzftab use fzf to display completion matches --fnftab use fnf to display completion matches --icons enable icons --icons-use-file-color instead of a specific color, icons take the color of the corre- sponding filename (specified either via file type or file exten- sion). Useful when building custom color schemes. This option implies --icons. Only if compiled with support for either icons-in-terminal or Nerdfonts. The default build is compiled with emoji-icons support, in which case this option is ignored (Unicode icons have their own color builtin) --int-vars allow the use of internal variables (e.g.: VAR=/bin; cd $VAR) --list-and-quit list files and quit. Useful in conjunction with positional para- meters. E.g.: 'clifm --list-and-quit /etc' --ls short for --list-and-quit --lscolors read file colors from the LS_COLORS environment variable (BSD LSCOLORS is also supported). Bear in mind that clifm-specific colors (like empty directory or inaccessible file) will be dis- abled. Note also that colors for specific filenames, as defined in LS_COLORS, are not supported. Consult dircolors(1) for more information about LS_COLORS, or the ls(1) BSD manpage in the case of LSCOLORS. --max-dirhist maximum number of visited directories to remember --max-files=NUM list only up to NUM files. Use -1 or 'unset' to remove this limit (default). See the mf command for a more detailed descrip- tion. --mimelist-file=FILE set FILE as Lira's configuration file. See the FILE OPENER sec- tion below for more information --mnt-udisks2 use udisks2 instead of udevil (default), for the media command --no-apparent-size print file sizes as used blocks (actual device usage) instead of used bytes (apparent size). Equivalent to --physical-size. --no-bold disable bold colors (applies to all color schemes) --no-cd-auto by default, clifm changes directories by just specifying the corresponding ELN (e.g. '12' instead of 'cd 12'). This option forces the use of cd. --no-classify by default, clifm appends a file type indicator character to filenames when running with no colors (see the --no-color option below) and a directory indicator (plus a files counter) when running with colors. Classification characters are: /n: directory (n = files counter) @: symbolic link !: broken symbolic link |: fifo/pipe =: socket *: executable file +: block device -: character device ?: unknown file type Use this option to disable file type classification. Note that this option disables the files counter too. --no-clear-screen do not clear the screen before listing files --no-color disable colors --no-columns disable columns when listing files (use a single column) --no-dir-jumper disable the directory jumper function --no-file-cap do not check file capabilities when listing files (only meaning- ful for performance reasons) --no-file-ext do not check file extensions (mostly used to colorize specific filenames) when listing files --no-files-counter disable the files counter for directories (speeding up thus the listing process: counting files in directories is particularly expensive). --no-follow-symlinks do not follow symbolic links when listing files. Overrides both -L and --color-links-as-target. --no-fzfpreview disable file previews for tab completion (fzf mode only) --no-highlight disable syntax highlighting. To customize highlighting colors see the COLOR CODES section below. --no-history do not write commands to the history file (see also the HistIg- nore option in the configuration file) --no-open-auto same as --no-cd-auto, but for files instead of directories --no-refresh-on-resize do not attempt to refresh the list of files upon window's resize --no-restore-last-path by default, clifm saves the last visited directory for each workspace to be restored in the next session. Use this option to disable this behavior. --no-suggestions disable the auto-suggestions system --no-tips disable startup tips --no-truncate-names do not truncate filenames (see MaxFilenameLen in the configura- tion file) --no-unicode do not use Unicode decorations --no-warning-prompt disable the warning prompt (used to highlight invalid command names) --no-welcome-message disable the welcome message --only-dirs list directories only --open=FILE run as a standalone file opener: open FILE and exit, where FILE can be a regular file or a directory, using either standard no- tation (/dir/file) or the URI file scheme (file://dir/file), or a URL (www.domain or https://domain). --opener=APPLICATION use APPLICATION (e.g.: rifle or xdg-open) as files opener/launcher (instead of Lira, clifm's default opener). --pager-view=MODE list files in the pager according to MODE. Possible values: auto (use the current listing mode - this is the default), long (list files in long view), and short (list files in short view). --physical-size same as --no-apparent-size --preview=FILE display a preview of FILE (via Shotgun) and exit. Use --shot- gun-file to set an alternative configuration file via. Consult the SHOTGUN section below for more information. --print-sel print the list of selected files. The maximum number of selected files to be printed can be specified via the MaxPrintSelfiles option in the configuration file. Defaults to 0 (auto, i.e. never take more than half terminal height). Use -1 to remove the limit or any other positive value. --prop-fields=FORMAT set fields to be displayed in long view mode. For information on how to construct this format string consult the PropFields op- tion in the configuration file. --ptime-style=STYLE time/date style used by the p/pp command and the --stat/--stat-full command line switches. Available styles: de- fault, iso, long-iso, full-iso, full-iso-nano, +FORMAT. FORMAT is interpreted like in strftime(3). Nano-second precision is available via the %N modifier (like in date(1)). --readonly run in read-only mode (internal commands able to modify the filesystem are disabled). Disabled commands are: ac, ad, bb, bl/bleach, br/bulk, c, dup, l, le, m, md, n/new, oc, paste, pc, r, rr, t/trash, tag, te, u/undel/untrash, and vv, plus the shell commands cp, rm, mv, ln, mkdir, rmdir, link, and unlink. --report-cwd report the current directory to the underlying terminal (via the OSC-7 escape sequence, not supported by all terminals) --rl-vi-mode set readline to vi editing mode (defaults to emacs editing mode) --secure-cmds filter commands passed to the OS to mitigate command injection attacks (--secure-env is implied). Consult the SECURITY section below --secure-env run clifm in a secure environment (regular mode). Consult the SECURITY section below --secure-env-full run clifm in a secure environment (full mode). Consult the SECU- RITY section below --sel-file=FILE set FILE as selections file --share-selbox make the Selection Box common (that is, accessible) to different profiles. By default, each profile has a private Selection Box. --shotgun-file=FILE set FILE as shotgun's configuration file. See the SHOTGUN sec- tion below for more information --si print file sizes in powers of 1000, as defined by the Interna- tional System of Units (SI), instead of 1024 --smenutab use smenu to display completion matches --sort-reverse sort files in reverse order (e.g.: z-a instead of a-z) --stat FILE... run the p command on FILE(s) and exit. This must be the last op- tion on the command line. Use --ptime-style to set a custom date/time format. --stat-full FILE.. same as --stat, but it runs the pp command (instead of p) on FILE(s) --stdtab use the standard mode (readline's builtin) for tab completion --time-style=STYLE time/date style used in long view. Available styles: default, relative, iso, long-iso, full-iso, +FORMAT. FORMAT is inter- preted like in strftime(3). --trash-as-rm the r command executes the builtin trash (see the t command) in- stead of rm(1) to prevent accidental deletions --unicode Unicode decorations are used provided Unicode support is de- tected for the running terminal. Use this option to force Uni- code decorations. --virtual-dir=PATH use PATH as Clifm's virtual directory --virtual-dir-full-paths print filenames in virtual directories as full paths instead of just base names --vt100 run in VT100 compatibility mode Options precedence order: 1) command line flags; 2) configuration file; 3) default values. 4. COMMANDS Help for all commands listed here can be accessed via the -h or --help options. For example: p --help to get help about the properties func- tion. NOTE: ELN = Entry List Number. Example: in the line "12 openbox" (when listing files), 12 is the ELN corresponding to the file named "open- box". The slash followed by a number (/xx) after directories and sym- bolic links to directories (the files counter) indicates the amount of files contained by the corresponding directory, excluding self and par- ent directories ("." and ".." respectively). NOTE 2: In case of ELN-filename conflict the backslash can be used to prevent ELN expansion. For example, if we have at least two files and one of them is named "2", then clifm cannot know in advance if the com- mand refers to the ELN 2 or to the filename "2". In we want the ELN, we just write the ELN number, for example: s 2. But if we want the file- name, we need to escape the filename using the backlash character: s \2. NOTE 3: clifm supports fused parameters for internal commands taking an ELN or range of ELNs as parameters. Much like short options for command line programs, you can drop or omit the space between internal commands and the corresponding ELN passed as argument. In general, you can write CMDELN instead of CMD ELN. For example: o12 or s1-5 instead of o 12 and s 1-5 respectively. Bear in mind, however, that in thus omitting the space char tab completion for ELNs will not be available. If there is a file named o12 (more generally, CMDELN), and if you want to refer to this file instead of a clifm command, escape the filename to prevent the split; for example: s \o12. NOTE 4: clifm implements a fastback function, that is to say, the con- version of "... n" or "cmd ... n" into "../.. n" or "cmd ../.. n". In other words, subsequent dots after ".." will be converted each into "/..". For example, if you are in your home directory and type "..." or "cd ...", and since "..." amounts to "../..", you will be taken to the root directory. Tab completion is available for the fastback function: "....bin" -> TAB -> "../../../bin". FILE/DIR if the autocd and auto-open functions are enabled, which is the default value, open FILE or change directory to DIR. In other words, FILE amounts to open FILE or o FILE, and DIR to cd DIR. ELNs, of course, are allowed. Example: 12. /PATTERN [-filetype] [-x] [DIR] this is the quick search function. Type / followed by a glob or regular (or extended regular) expression, and clifm will list all matches in the current working directory. For example, both /*.pdf and /.pdf$ expressions will list all PDF files in the current working directory, the former using wildcards, and the second a regular expression. You can list previously used search patterns via TAB: /*<TAB>. Note: By default, the search function attempts to resolve a pat- tern first as glob, and then, if no matches are found, as a reg- ular expression. This behavior can be customizad however in the configuration file, via the SearchStrategy option. Note 2: If no further parameter is provided, but only a glob pattern (wildcards), you can expand the pattern into the corre- sponding matches via the TAB key. For example, to list all C files in the current directory: /*.c<TAB>. Note 3: Expressions containing no pattern metacharacter are au- tomatically transformed into a glob/regular expression (depend- ing on the value of the SearchStrategy option). For example, /test becomes *test* or /.*test.*. 1. Case sensitivity By default, regular expressions are case insensitive (glob ex- pressions, by contrast, are always case sensitive). However, you can enable case sensitive search by setting the CaseSensi- tiveSearch option to true in the configuration file. 2. Destination directory To search for files in any directory other than the current di- rectory, specify the directory name as a further parameter. This parameter (DIR) can be an absolute path, a relative path, or an ELN. For example, enter /^A 7 to search for all files starting with 'A' in the directory corresponding to the ELN 7. 3. File type filter The result of the search can be further filtered by specifying a filter type: -b, -c, -d, -f, -l, -p, -s, -O, and -P (block de- vice, character device, directory, regular file, symbolic link, FIFO/pipe, socket, door (Solaris), and port (Solaris) respec- tively. For example, /[.-].*d$ -d Documents/ will list all di- rectories containing a dot or a dash and ending with 'd' in the directory named Documents. 4. Negate a pattern The quick search function also supports invert search: prepend the exclamation mark (!) to negate a given search pattern. For example: !.*s$ -d /etc will match all directories in /etc not ending with 's', just as !D* will match all files in the current directory not starting with 'D'. 5. Recursive search To perform a recursive search use the -x parameter, and, option- ally, a search path (DIR) (file type filter is not allowed). The search will be performed using find(1) as follows: find DIR MODE PATTERN. If no search path is provided, the search is executed starting in the current directory. Otherwise, the search starts in DIR. MODE is one of: -name: if SearchStrategy is not regex-only and CaseSensi- tiveSearch is set to true -iname: if SearchStrategy is not regex-only and CaseSensi- tiveSearch is set to false -regex: if SearchStrategy is regex-only and CaseSensitiveSearch is set to true -iregex: if SearchStrategy is regex-only and CaseSensi- tiveSearch is set to false ;[CMD], :[CMD] If no CMD, run the system shell in the current working direc- tory. If CMD is specified, skip all clifm expansions (see the BUILT-IN EXPANSIONS section below) and run the input string (CMD) as is via the default system shell. ac, ad ELN/FILE... archive/compress and dearchive/decompress one or multiple files and/or directories. The archiver function brings two modes: ac, to generate archives or compressed files, and ad, to decompress or dearchive files, either just listing, extracting, recompress- ing, or mounting their content. In this latter case, the mount- point used automatically is $HOME/.config/clifm/PRO- FILE/mounts/ARCHIVE_NAME. The function accepts single and multiple filenames, wildcards, ELN ranges, and the 'sel' keyword. For example: ac sel, ac 4-25 myfile, or ad *.tar.gz. Multiple archive/compression formats are supported, including Zstandard. When it comes to ISO 9660 files only single files are supported. The archive mount function for non ISO files depends on archive- mount, while the remaining functions depend on atool and other third-party utilities for achive formats support, for example, p7zip. p7zip is also used to manage most decompressing options for ISO 9660 files, except for mount, in which case mount(8) is used. Creation of ISO files is done via genisoimage(1). For more information consult atool(1), archivemount(1), zstd(1), and 7z(1). acd, autocd [on, off, status] toggle the autocd function on/off. If set to on, DIR amounts to cd DIR. actions [list] [edit [APP]] to list available actions (or plugins) use the list subcommand. Note that, since list is the default action, it can be omitted. Use the edit subcommand to add, remove or modify custom actions (using APP if specified or the default associated application for text files otherwise). The aim of this function is to allow the user to easily add cus- tom commands and functions to clifm. In other words, the actions function is a plugins capability. The general procedure is quite simple: a) edit the actions file (via actions edit) and bind a custom action name to an exe- cutable file (written in any language you want, be it a shell or Python script, a C program or whatever you like). Example: "my- action=myscript.sh". b) Now, drop the corresponding script (in our example, myscript.sh) into the plugins directory, usually, ~/.config/clifm/plugins (see the FILES section below). 3) Once this is done, you can call the script using the custom action name defined before as if it were any other command: run myac- tion, and myscript.sh will be executed. Note that all arguments passed to the action command (myaction) are passed to the script or program as well (myscript.sh), which is executed via the system shell. To assist the user when writing plugins, clifm's state informa- tion is exported via environment variables when running plugins. For example, CLIFM_LONG_VIEW is set to 1 if currently running in long view. See the ENVIRONMENT section for the complete list of exported values. The plugins bundled with clifm (take a look at the plugins di- rectory) can be used as a starting point to create new plugins. alias [import FILE] [ls,list] [NAME] with no argument (or with ls,list parameters), it prints the list of available aliases, if any. To get the description of a specific alias enter alias followed by the alias name. To write a new alias simply enter edit (or press F10) to open the config- uration file and add a line like this: "alias name='command args...'" or "alias name='directory'". To import aliases from a file, provided it contains aliases in the specified form (i.e. the POSIX syntax for the alias shell command), use the import parameter. Aliases conflicting with some of the internal commands won't be imported. However, a neat usage for the alias function is not so much to bind short keys to commands, but to files and directories vis- ited regularly. In this way, it is possible to bind as many files or directories, no matter how deep they are in the filesystem, to very short strings, even single characters. For example, "alias w='/some/file/deep/in/the/filesystem'. Now, no matter where we are, we can just enter 'w', provided autocd and/or auto-open function is enabled, to access the file or di- rectory we want. Theoretically at least, this procedure can be repeated until the system memory is exhausted. To create multiple aliases for files at once, this is the recom- mended procedure: 1) Select all files you want to alias with the sel function: s file1 file2 file3 .... 2) Export the selected files into a temporary file running exp sel; 3) Edit this file to contain only valid alias lines: alias a1='file1' alias b1='file2' alias c1='file3' NOTE: Make sure alias names do not conflict with other commands, either internal or external. To bypass the conflicts check, per- formed automatically by the 'alias import' command, you can edit the aliases file manually (F10). 4) Finally, import this file with the alias function: alias im- port tmp_file. Now, you can access any of these files by enter- ing just a few characters: a1, b1, and c1. auto [list | none | unset | OPTION=VALUE...] Set a temporary autocommand for the current directory. Unlike permanent autocommands, defined in the configuration file via the autocmd keyword (see the AUTOCOMMANDS section below), options set via the auto command are temporary, i.e., valid only for the current directory and the current session. Options set via this command take precedence over both permament autocommands and regular options (set either via the command line or the configuration file). Examples List available autocommands auto list List files in the current directory in long view auto lv=1 List only PDF files, set the color scheme to nord, and sort files by size auto ft=.*.pdf$,cs=nord,st=size The same list of options can be specified sequentially (i.e., previous options are preserved) auto ft=.*.pdf$ auto cs=nord auto st=size Unset the files filter and the color scheme, and change sort to blocks auto ft=,cs=,st=blocks Unset all temporary autocommands previously set for the current directory auto unset Reload the current directory ignoring all autocommands (includ- ing permanent autocommands) auto none For the list of available option codes consult the AUTOCOMMANDS section or enter help autocommands. ao, auto-open [on, off, status] toggle the auto-open function on/off. If set to on, FILE amounts to open FILE. b, back [h, hist] [clear] [W!ELN] unlike cd .., which sends you to the parent directory of the current directory, this command (with no argument) sends you back to the previously visited directory. clifm keeps a record of all visited directories (to prevent a directory from being added to the directory history list use the DirhistIgnore option in the main configuration file). You can see this list by typing b hist or b h, and you can access any element in this list by simply passing the corresponding ELN in this list to the back command. Example: :) > ~ $ bh 1 /home/user 2 /etc 3 /proc :) > ~ $ b !3 :) > /proc $ NOTE: the highlighted line (by default printed in bold cyan) in- dicates the current position of the back function in the direc- tory history list. Finally, you can also clear this history list by typing b clear. The best way of navigating the directory history list, however, is via the directory jumper function. See the j command below. You can take a look at the dh command as well. bb, bleach ELN/FILE... Bleach is a builtin filenames cleaner (based on detox [https://github.com/dharple/detox]), whose main aim is to rename filenames using only safe characters. Bleach cleans up file- names either by removing unsafe (extended-ASCII/Unicode) charac- ters without an ASCII alternative/similar character, or by translating these unsafe characters into an alternative ASCII character based on familiarity/similarity. These following simple rules are used to compose clean/safe filenames: - NUL (\0) and slash (/) characters are completely disal- lowed - Only characters from the Portable Filename Characters Set (a-zA-Z0-9._-) are allowed - { [ ( ) ] } are replaced by a dash (-). Everything else is replaced by an underscore (_) - Unicode characters are translated, whenever possible, into an ASCII replacement. Otherwise, they are just ignored. For ex- ample, an upper case A with diacritic (accent, umlaut, diaresis, and so on) will be replaced by an ASCII A, but the smiley face emoji will be simply ignored. A few special signs will be trans- lated into text, for instance, the pound sign will be replaced by "_pound_" and the Euro symbol by "EUR". Translations are made via a translation table (see the cleaner_table.h in the source code). - Filenames never start with a dash (-) - Files named . and .. are not allowed - Append .bleach to single character filenames - Do not let a replacement filename start with a dot (hid- den) if the original does not - Max filename length is NAME_MAX (usually 255) Modified filenames will be listed on screen asking the user for confirmation, allowing besides to edit (by pressing 'e') the list of modified filenames via a text editor. If the replacement filename already exists, a dash and a number (starting from 1) will be appended. E.g.: file-3. bd [NAME] bd is the backdir function: it takes you back to the parent di- rectory matching NAME. With no arguments, bd prints a menu with all parent directories relative to the current directory, allowing the user to select an entry. Otherwise, it checks the absolute current directory against the provided query string (NAME): if only one match is found, it automatically changes to this directory; if multiple matches are found, the list of matches is presented to the user in a selection menu. If NAME is a directory name, bd just changes to this directory, be it a parent of the current direc- tory or not. Tab completion and suggestions are available for this function. Example: Provided that the current directory is /home/user/git/reposito- ries/lambda, entering bd git will take you immediatelly to /home/user/git. Note that there is no need to type the entire directory name; if the query is unambiguous, only a few characters, and even just one, suffices to match the appropriate directory. In our exam- ple, bd g is enough to take you to /home/user/git, just as bd h will take you to /home. The query string can match any part of a directory name: bd er, for instance, will take you to /home/user, since it is an unam- biguous query. bl FILE... Create symbolic links (in the current directory) for each speci- fied file. For example, to create symbolic links in the direc- tory dir for all PNG files in the current directory, issue these commands: s *.png, cd dir, and then bl sel. bm, bookmarks [a, add FILENAME NAME [SHORTCUT]] [d, del NAME] [e, edit [APP]] [NAME, SHORTCUT] Bookmarks can be managed either from the bookmark manager screen or from the command line. 1. The bookmark manager screen To access the bookmark manager screen simply enter bm. Here you can cd to the desired bookmark by entering either its ELN or name (regular files can be bookmarked as well). In this screen you can also add, remove, or edit your bookmarks by simply en- tering 'e' to edit the bookmarks file (which is simply a list of lines with this format: name:path. E.g.: "docs:/home/user/docu- ments"). Make your changes, save, and exit. 2. The command line +-------------------------+----------------------------------------------+ | Command | Description | +-------------------------+----------------------------------------------+ | bm add /media/mount mnt | Bookmark the /media/mount directory as "mnt" | +-------------------------+----------------------------------------------+ | bm mnt | Change to/open the bookmark named "mnt" | +-------------------------+----------------------------------------------+ | bm del mnt | Delete the bookmark named "mnt" | +-------------------------+----------------------------------------------+ | bm edit | Edit your bookmarks | +-------------------------+----------------------------------------------+ A handy use for the bookmarks function is to create bookmarks using short names, which will be later easily accessible via tab completion. The b: construct The b: construct is used as a way to quickly access/operate on bookmarks. A few examples: +---------------+--------------------------------------------------------------+ | Command | Description | +---------------+--------------------------------------------------------------+ | b:<TAB> | List available bookmarks | +---------------+--------------------------------------------------------------+ | b:net | Change to the bookmark named "net" (1) | +---------------+--------------------------------------------------------------+ | p b:bm1 b:bm2 | Print file properties of the bookmarks named "bm1" and "bm2" | +---------------+--------------------------------------------------------------+ | s b: | Select all bookmarks at once | +---------------+--------------------------------------------------------------+ (1) If your are not sure about where a bookmark points to, type b:NAME<TAB>. br, bulk ELN/FILE... [:EDITOR] rename at once all files passed as arguments to the function. It accepts single and multiple filenames, wildcards, ELN ranges, and the sel keyword. Example: br myfile 4-10 sel. Each filename will be copied to a temporary file, which will be opened via EDITOR (default associated application for plain text files if omitted), letting the user modify it. Once the file has been modified and saved, the modifications are printed on the screen and the user is asked for confirmation. This builtin bulk rename function won't deal with deletions, re- placements, filename conflicts and the like. For a smarter al- ternative use qmv(1). c, m, md, r short for the following commands respectively: cp -iRp, mv -i, mkdir -p, and rm (for files) or rm -r (for directories). By default, the c, m, and r commands ask for confirmation before operations. Since this might sometimes be quite intrusive (spe- cially when operating on large amount of files), it is possible to turn interactivity off in two different ways: a) For the current command only: via the -f, --force switch. Example: c -f sel, m -f sel, or r -f *. b) Permanently. Use the cpCmd, mvCmd, and rmForce options in the configuration file to permanently set any of these commands to non-interactive mode. To use these commands without any of these arguments, or with any other argument you want, use the non-abbreviated (shell) command, for instance, cp instead of c. Of course, you can also create aliases to use your preferred commands, for example, "c='cp -adp'". Consult the alias command above for more informa- tion. The l command allows the use of the e, edit option to modify the destination of a symbolic link. Example: l edit 12 (or le 12) to relink the symbolic link corresponding to the file whose ELN is 12. When using the sel keyword and no destination is provided, c and m will copy/move selected files to the current directory. Whenever sel is not used, but just a source filename (and no destination is provided), the m command behaves much like the imv(1) shell command (from the 'renameutils' package), providing an interactive renaming function: it prompts the user to enter a new name using the source filename as base, so that it does not need to be typed twice. For this alternative prompt, only tab completion for filenames is available. Clifm supports advcp(1), wcp, and rsync(1) to copy files (they include a progress bar). To use them instead of cp(1) set the corresponding option (cpCmd) in the configuration file. If advcp is selected, the command used is advcp -giRp (or advcp -gRp, for non-interactive mode). If rsync, the command is rsync -avP. wcp takes no argument. advmv(1) is also supported to move files (to add a progress bar to the move command). Use the mvCmd option in the configuration file to choose this alternative implementation of mv. In this case, the command used is advmv -gi (or advmv -g for non-inter- active mode). cd [ELN/DIR] Change the current working directory to ELN/DIR. Directories check order: 1. If no argument, change to the home directory (HOME, or, if HOME is not set, the sixth field of the entry corresponding to the current user in /etc/passwd) 2. If argument is an absolute path (begins with a slash char- acter), or the first component is dot (.) or dot-dot (..), con- vert to canonical form (via realpath(3)) and, if a valid direc- tory, change to this directory. 3. Check CDPATH environment variable and append /DIR to each of the paths specified here. If the result of the concatenation is a valid directory, change to it. 4. Check directories in the current working directory. If a matching directory is found, change to it. You can use either ELNs or a string to indicate the directory you want. E.g.: cd 12 or cd ~/media. If autocd is enabled (de- fault), cd 12 and cd ~/media can be written as 12 and ~/media respectively as well. Unlike the shell cd(1) command, clifm's builtin cd function not only changes the current directory, but also lists its content (provided the option AutoLs is enabled, which is the default) according to a comprehensive list of color codes. By default, the output of cd is much like this shell command: cd DIR && ls --color=auto --group-directories-first. Automatic file listing can be disabled by either setting AutoLs to "false" in the configuration file or running clifm with the -O or --no-autols option. cl, columns [on, off] toggle columns on/off. cmd, commands show this list of commands. A more convenient way of getting in- formation about clifm commands is via the interactive help plu- gin (depends on fzf), by default bound to the "ihelp" action name. colors preview the current color scheme config [edit [APP]] [reset, reload, dump] Manage the main configuration file. To edit the configuration file use the edit subcommand. If an application is specified (config edit APP), APP will be used to open the file (otherwise, the default associated program will be used). Edit settings to your liking if necessary, save, and quit the editor. Changes are automatically applied. Note that, since edit is the default action, it can be omitted. Enter just config to open the configuration file, or config APP to open it using APP. Use the reload subcommand to reload the main configuration file and update settings accordingly. Use the reset subcommand to generate a fresh configuration file and create a backup copy of the old one (named clifmrc.YYYYM- MDD@HH:MM:SS). The dump subcommand prints the list of settings (as defined in the main configuration file) with their current value. Those differing from the default values are highlighted, and the de- fault value for the corresponding option is displayed in brack- ets. cs, colorschemes [edit [APP]] [n, name] [p, preview] [check-ext] [NAME] with no arguments, list available color schemes (cs name (or cs n) to print the current color scheme name). To get a preview of the current color scheme use the preview subcommand: cs preview. Use the check-ext subcommand to check for file extension con- flicts: cs check-ext. Use the edit subcommand to open/edit the configuration file of the current color scheme (open with APP if specified or via the default associated application). To switch color schemes, specify the color scheme name: cs NAME. (Tab completion is available: cs <TAB>). d, dup FILE... Duplicate files passed as parameters, either directories or reg- ular files. The user will be asked for a destination directory. Duplicated filenames are generated by appending ".copy" to the basename of each source file. For example: d /my/file will copy /my/file to the directory selected by the user as file.copy. If file.copy already exists, an extra suffix will be added as fol- lows: file.copy-N, where N is a positive integer (starting at 1). If rsync(1) is found, it will be used as follows: rsync -acz- vAXHS --progress. Else, cp(1) will be used: cp -a. dh [STRING] [PATH] [!ELN] With no parameters, it prints the directory history list. To filter this list just pass a query string: only entries matching this query will be displayed. In both cases, tab completion is available. For example: dh down<TAB> will list only those en- tries matching down (fuzzily, if fuzzy-matching is enabled). To access a specific entry, you can pass the entry number pre- ceded by an exclamation mark. For example, if you want the entry number 12, enter dh !12 to change to the corresponding direc- tory. Finally, if an absolute path is passed as first parameter, dh works just as the cd command. Note: Take a look at the j command as well. Both commands deal with the list of visited directories, but in slightly different ways: while dh deals with the list of the last MaxDirhist en- tries (see the configuration file), the j command deals with the ranked list of visited directories. ds, desel [*, a, all] [FILE]... deselect one or more selected files. If no parameter is passed, the user is prompted to either mark selected files to be deselected or to edit the selections file (entering 'e') via a text editor to manually deselect files. Use *, a or all to deselect all selected entries at once. E.g.: ds *. You can also pass the filename(s) (or ELNs) to be deselected as a parameter. For example: ds myfile 24. Tab completion is available for this command. exp [FILE]... with no argument, export the list of files in the current work- ing directory to a temporary file. Otherwise, export only those specified as further arguments: they can be directories, file- names, ELNs or some search expression like "*.c". ext [on, off, status] toggle external commands on/off. f, forth [h, hist] [clear] [!ELN] it works just like the back function, but it goes forward in the history record. Of course, you can use f hist, f h, and f !ELN. fc [on, off, status] By default, clifm prints the amount of files contained by listed directories next to the directory name. However, since this is an expensive feature, it might be desirable (for example, when listing files in a remote machine) to disable this feature. Use the off subcommand to disable it. To permanently disable it, use the FilesCounter option in the configuration file. ff, dirs-first [on, off, status] toggle list directories first on/off. ft, filter [unset] [[!]REGEX,=FILE-TYPE-CHAR] filter the current list of files, either by filename (via a reg- ular expression) or file type (via a file type character). With no argument, ft prints the current filter. To remove the current filter use the unset option. To set a new filter enter ft followed by a filter expression (use the exclamation mark to reverse the meaning of a filter). Examples: Exclude hidden files: ft !^. List only files ending with .pdf: ft .*\.pdf$ List only symbolic links: ft =l Exclude socket files: ft !=s The list of file type characters is included in the FILE FILTERS section below. The filter will be lost at program exit. To permanently set a filter use the Filter option (in the configuration file) or the CLIFM_FILTER environment variable (consult the ENVIRONMENT and the FILE FILTERS sections below). fz [on, off] Toggle full directory size on/off (only for long view mode). hf, hh, hidden [on, off, status] toggle hidden files on/off. history [edit [APP]] [clear] [-n] [on, off, status, show-time] with no arguments, it prints the commands history list (use show-time to print timestamps as well). If clear is passed as argument, it will delete all entries in the history file. Use edit to open the history file and modify it as required (the file will be opened with APP, if specified, or with the default associated application otherwise). -n tells the history command to list only the last 'n' commands in the history list. Finally, you can disable history (subsequent entries won't be written to the history file) via history off (you can also use the HistIg- nore option in the configuration file to prevent specific com- mand lines from being added to the history list). You can use the exclamation mark (!) to perform some history commands: !<TAB>: List history entries !!: Execute the last command. !n: Execute the command number 'n' in the history list. !-n: Execute the 'last - n' command in the history list. !STRING: Execute the command starting with STRING. Tab comple- tion is available in this case: !STRING<TAB>. icons [on, off] toggle icons on/off Note: Depending on how the terminal renders icons, the apparent space between icons and filenames may not be the most appropi- ate. This space can be adjusted using the IconsGap option in the configuration file (valid values: 0, 1, 2). j [--purge [NUM]] [--edit], jc, jl, jp [STR]..., je j is the fastest way of using Kangaroo, a directory jumper func- tion used to quickly navigate through the jump database (i.e. a database of visited directories). With no argument, j just lists the entries in the jump database (1)(2), printing: a) order number of the corresponding entry, b) total sum of visits, c) days since the first visit, d) hours since the last visit, e) the rank value, and f) the directory name itself. An asterisk next to the rank value means that the corresponding directory will not be removed from the database, despite its rank, either becuase it has been visited in the last 24 hours, or because it is bookmarked, pinned, or currently ac- tive in some workspace. (1) To prevent a directory from being added to the jump database use the DirhistIgnore option in the main configuration file. (2) To prevent a directory from being removed from the jump database, edit the database (j edit) and prepend a plus sign (+) to the corresponding line. Otherwise, if a query string is provided as parameter, j searches for this string in the database and cd to the best ranked matching entry. Example: j Down will probably take you to /home/user/Downloads, provided this directory has been already visited and is the best ranked match in the database. For a more detailed description of the matching algorithm see the KANGAROO FRECENCY ALGORITHM section below. Multiple query strings can be passed to the function. For exam- ple, j et mo will first check for "et" in the jump database and then will further filter the search using the second parameter: "mo". It will most probably take you (again, provided the direc- tory has been already visited and is the best ranked match) to /etc/modprobe.d directory. Bear in mind that if STR is an actual directory, jump will just cd to it without performing any query. The backslash (\) and the slash (/) can be used to instruct Kan- garoo to search for the string query only in the first or last path segment of each entry in the database respectively. Let's suppose we have two entries matching src in the database: /me- dia/src/images and /home/user/Downloads/clifm/src. If the first entry is better ranked than the second, j src will match this first entry. However, if what we really want is the second en- try, appending a slash to the query string instructs Kangaroo to only match entries having src in the last path segment, here /home/user/Downloads/clifm/src. Since it is not always obvious or easy to know where exactly a query string will take you, clifm (if the suggestions system is enabled) will print, at the right of the cursor, the path matched by Kangaroo. If that is the actually intended path, press the Right arrow key to accept the suggestion. Otherwise, it will be ignored. You can also use tab completion to print the list of matches for the current query string. For example: j - c<TAB> to list all entries in the directory history list con- taining a dash (-) and a 'c'. j accepts four modifiers: 'e', 'p' 'c', and 'l', the first standing for "edit", the second for "parent", the third for "child", and the last one for "list". Thus, je (or j --edit) will open the jump database to be edited as required; jc will search for files querying only child directories relative to the current working directory, while jp will do the same but for parent directories. Finally, jl just prints the matches for the given query string(s), but without changing the current direc- tory. Examples: +-------------+----------------------------------------------------------------------------------+ | Command | Description | +-------------+----------------------------------------------------------------------------------+ | jp foo | Change to the best ranked parent directory containing the string "foo". | +-------------+----------------------------------------------------------------------------------+ | jc bar test | Change to the best ranked child directory containing the string "bar" and "test" | +-------------+----------------------------------------------------------------------------------+ | jl foo | Print all entries in the database containing the word "foo" | +-------------+----------------------------------------------------------------------------------+ Use the --purge option to shrink the database. Without further parameters, --purge removes all non-existent (un-stat'able) di- rectories from the database. If a numeric parameter is passed, by contrast, all entries ranked below this number will be re- moved from the database. For example, j --purge 100 will remove all entries ranked below 100. You can also manually edit the database file using the je (or j --edit) command: edit whatever needs to be edited, save changes, and close the editor. This is useful, for example, to remove a specific entry/directory from the database (however, bear in mind that if the directory is in the directory history, it will not be removed from the jump database). To mark an entry as permanent (prevent it from being removed from the database), follow any of these procedures: a. Bookmark it. b. Edit the jump database (je or j --edit) and prepend a plus sign (+) to the corresponding entry. An alternative way of navigating the jump database is using the jumper plugin (located in the plugins directory and bound by de- fault to the "++" action name), which uses fzf to enable fuzzy searches. Enter ++ to perform a fuzzy search over the jump data- base. Take a look at the dh command as well. k if running in long view, toggle follow-links (Alt-+ is also available). See the -L,--follow-symlinks-long command line switch. kk toggle max-filename-len on/off (Ctrl-Alt-l is also available) kb, keybinds [list] [bind FUNCTION] [edit [APP]] [conflict] [reset] [readline] with no argument (or if the argument is list), prints the cur- rent keybindings and their associated functions. To change a keybinding use the bind subcommand. Type kb bind <TAB> to get the list of bindable functions. Enter kb bind FUNCTION to set a new keybinding for FUNCTION. For example, to bind the function previous-dir to a new key, enter kb bind previous-dir. You'll see a little prompt: press the key combination you want to associate to the specified function and the press Enter (while in this prompt, press Ctrl-d to abort or Ctrl-c to clear the current line). To manually edit your keybindings use the edit option (the key- bindings file will be opened with APP, if specified, or with the default associated application otherwise). If you somehow messed up your keybindings, you can check for keybinding conflicts with the conflict option, or use the reset option to create a fresh keybindings file with the default val- ues. To unbind a function run kb edit and comment out the correspond- ing entry. Note that some functions may have several entries, associating them to multiple keybindings: comment them out all if required. To list readline keybindings (defined in ~/.config/clifm/read- line.clifm), use the readline option. The syntax is the same as the one used by readline's .inputrc file (consult http://tiswww.case.edu/php/chet/readline/readline.html#SEC9 for more information.) l, le Create (l) or edit (le) symbolic links. The syntax for the l command is: l TARGET [LINK_NAME]. Note that if LINK_NAME is omitted, the symbolic link is created as TAR- GET_BASENAME.link in the current directory. By default, the link target is created literally (like ln -s would). The link creation mode can be set via the LinkCreation- Mode option in the configuration file. Available modes are: ab- solute, literal, and relative (like ln -rs would). To edit the target of a symbolic link use the le command fol- lowed by the desired link name. The user will be prompted to en- ter a new link target, using the current one as template. ll, lv [on, off] Toggle long/detail view mode lm [on, off] Toggle the light mode on/off. This option, aimed at making file listing faster than the default mode, is especially useful for really old hardware or when working on remote machines (for more information see the NOTE ON SPEED section below). log [cmd [list, on, off, status, clear]] [msg [list, on, off, status, clear]] Enable, disable, clear, list or check the status of the program logs, either message (errors and warnings) or command logs. Ex- ample: log cmd on, to enable command logs, or log msg clear, to clear/remove message logs. Consult the FILES section below for information about how logs are written to the logs file. media NOTE: This command is Linux-specific List available storage devices and mount/unmount the selected one using either udevil or udisks2 (at least one of these must be installed. udevil will be preferred over udisks2). If the de- vice is unmounted, it will be automatically mounted, and if mounted, it will be automatically unmounted. Though mountpoints are determined by the mounting application itself (udevil or udisks2), clifm will automatically cd to the corresponding mountpoint whenever the mount operation was suc- cesfull. When unmounting, and if the current directory is inside the mountpoint, clifm will attempt to cd to the previous visited di- rectory, and, if none, to the home directory, before unmounting the device. To get information about a device, enter iELN, for example, i12, provided '12' is the ELN of the device you want. mf [NUM, unset] List only up to NUM files (valid range: >= 0). Use unset to list all files (default). An indicator (listed_files/total_files) will be printed below the list of files whenever some file is excluded from the current list (e.g. 20/310). Note however that though some files are excluded, all of them are loaded anyway, so that you can still perform any valid operation on them. For example, even if only 10 files are listed, you can still search for ALL symbolic links in the corresponding directory using the appropriate command: /* -l. mm, mime [open FILE] [info FILE] [edit [APP]] [import] This is Lira, clifm's file opener. Use the open subcommand to open a file with the default associ- ated application. Note that, since open is the default action, it can be omitted. For example: mm file.pdf. The same can be achieved more easily via the open command: open file.pdf (or us- ing the short command, o file.pdf). Or, even shorter, just file.pdf. The info option prints MIME information about FILE: its MIME type, and, if any, the application associated to this filename or to the file's MIME type. The edit option allows you to edit and customize the MIME list file. So, if a file has no default associated application, first get its MIME info or its file extension (running mm info FILE), and then add a value for it to the MIME list file using the edit option (mm edit or F6). Check the FILE OPENER section below for information about the mimelist file syntax. Finally, via the import option clifm will try to import MIME as- sociations from the system looking for mimeapps.list files in those paths specified by the Freedesktop specification (see https://specifications.freedesk- top.org/mime-apps-spec/mime-apps-spec-latest.html). If at least one MIME association is successfuly imported, it will be stored as mimelist.clifm.XXXXXX (where XXXXXX is a random six digits alphanumerical string). You can add these new associations to your mimelist file using the mime edit command. mp, mountpoints list available mountpoints and change the current working direc- tory to the selected mountpoint. msg, messages [clear] with no arguments, prints the list of messages in the current session. The clear option tells clifm to empty the messages list. n, new [FILE[@TEMPLATE]]... [DIR/]... create new regular files and/or directories. If a filename ends with a slash (/), it will be taken as a di- rectory name. Else, it will be created as a regular file. E.g.: n myfile mydir/, to create a file named myfile and a directory named mydir. If no filename is provided, the user will be prompted to enter one. Automatic templates New regular files will be created from a template file if: 1. The file to be created has a filename extension (e.g., file.html). 2. A file named like this extension, here html, exists in the templates directory (1). If both conditions are met, running n file.html will create a new file named file.html which is a copy of the html file in the templates directory. Note that template names are not limited to actual file exten- sions: you can name your templates whatever you like (with any content you want) provided new files are created using the tem- plate name as extension. E.g.: n file.my_super_cool_template. Explicit templates If a filename is followed by the expression @TEMPLATE, where TEMPLATE is any regular file found in the templates direc- tory(1), the file will be created as a copy of the corresponding file template. E.g., n file.sh@my_script.sh. Tab completion is available for explicit templates: n file@<TAB> (1) The templates directory is $CLIFM_TEMPLATES_DIR, $XDG_TEM- PLATES_DIR, or ~/Templates, in this precendence order. Filename validation is performed over names before creation. In case of an unsafe name, the user is warned and asked for confir- mation. A name (namely, any component of a path) is considered unsafe if: 1. Starts with a dash (-): command option flags collision 2. Is a reserved keyword/expression (internal): fastback (...), ELN/range (12, 1-45), and MIME/file type expansion (@query, =x) 3. Is a reserved system/shell keyword ('~', '.' ,'..') 4. Contains embedded control characters (0x00-0x1f in the ASCII table) 5. Contains embedded shell meta-characters (*?:[]"<>|(){}&'!\;$) 6. It is too long (larger than NAME_MAX, usually 255 bytes) For more information about unsafe filenames consult https://dwheeler.com/essays/fixing-unix-linux-filenames.html. net [NAME] [list] [edit] [m, mount NAME] [u, unmount NAME] 1. The configuration file The net command manages connections to remote systems via a sim- ple samba-like configuration file ($HOME/.config/clifm/pro- files/PROFILE/nets.clifm). Here you can specify multiple remotes and options for each of these remotes. Syntax example for this file: [remote_name] Comment=A nice descriptive comment Mountpoint=/path/to/mountpoint MountCmd=sudo mount.cifs //192.168.0.12/share %m -o OPTIONS UnmountCmd=sudo umount %m AutoUnmount=true (Auto-unmount this remote at exit) AutoMount=false (Auto-mount this remote at startup) Note: %m can be used as a placeholder for Mountpoint. %m will be replaced by the value of Mountpoint. 1.a. Mounting remote filesystems A Samba share: [samba_share] Comment=My samba share Mountpoint="~/.config/clifm/mounts/smb_share" MountCmd=sudo mount.cifs //192.168.0.26/samba_share %m -o mapchars,credentials=/etc/samba/credentials/samba_share UnmountCmd=sudo umount %m AutoUnmount=false AutoMount=false A SSH filesystem (sshfs): [ssh_share] Comment=My ssh share Mountpoint="/media/ssh" MountCmd=sshfs user@192.168.0.26: %m -C -p 22 UnmountCmd=fusermount3 -u %m AutoUnmount=true AutoMount=false 1.b. Mounting local filesystems Though originally intended to manage remote filesystems, net can also manage local filesystems. Just provide the appropriate mount and unmount commands. Since the device name assigned by the kernel might change accross reboots (specially when it comes to removable drives), it is recommended to mount using the de- vice's UUID (Universal Unique Identifier) instead of the drive name. For example: MountCmd=sudo mount -U c98d91g4-6781... %m Here's an example of how to set up net to mount USB devices, one with a FAT filesystem, and another with an ISO9660 filesystem: [Sandisk USB] Comment=Sandisk USB drive Mountpoint="/media/usb" MountCmd=sudo mount -o gid=1000,fmask=113,dmask=002 -U 5847-xxxx %m UnmountCmd=sudo umount %m AutoUnmount=false AutoMount=false [Kingston USB] Comment=Kingston USB drive Mountpoint="/media/usb2" MountCmd=sudo mount -t iso9660 -U 2020-10-01-15-xx-yy-zz %m UnmountCmd=sudo umount %m AutoUnmount=false AutoMount=false NOTE: The gid, fmask, and dmask options are used to allow the user to access the mountpoint without elevated privileges. If the device data is unknown, as it often happens when it comes to removable devices, you should use the media command instead. 2. Command syntax Without arguments (or via the list subcommand), net lists the configuration for each remote available in the configuration file. Use the edit option to edit the remotes configuration file. If no further argument is specified, the file will be opened with the current file opener. However, you can pass an application as second parameter to open to configuration file. Example: net edit nano. If not already mounted, the m, mount option mounts the specified remote using the mount command and the mounpoint specified in the confifuration file and automatically cd to the corresponding mountpoint. Example: net m smb_work. Since mount is the default action, it can be omitted: net smb_work. The u, unmount option unmounts the specified remote using the unmount command specified in the configuration file. For exam- ple: net u smb_work. Tab completion is also available for this function. NOTE: If you only need to copy some files to a remote location (including mobile phones) without the need to mount the re- source, you can make use of the cprm.sh plugin, bound by default to the cr action. Set up your remotes (cr --edit) and then send the file you want (cr FILE). o, open ELN/FILE [APPLICATION] open FILE, which can be either a directory, in which case it works just like the cd command (see above), a regular file, or a symbolic link to either of the two. For example: o 12, o file- name, o /path/to/filename. By default, the open function will open files with the default application associated to them via Lira, the builtin file opener (see the mime command above). However, if you want to open a file with a different application, add the application name as second argument, e.g. o 12 leafpad or o12 leafpad. If you want to run the program in the background, simply add the ampersand character, as usual: o 12 &, o 12&, o12& or (if auto-open is enabled) just 12&. If the file to be opened is an archive/compressed file, the archive function (see the ad command above) will be executed in- stead. oc ELN/FILE... Interactively change files ownership A new prompt is displayed using user and primary group common to all files passed as parameters as ownership template. Ownership (both user and primary group, if specified) is changed for all files passed as parameters. If the file is a symbolic link, the operation is performed on the target file, and not on the symbolic link itself. Bear in mind that recursion is not supported: use chown(1) (with the -R option) instead. Both names and ID numbers are allowed (Tab completion for names is available). If only a name/number is entered, it is taken as the user who owns the file(s). Use the pc command to edit files permissions. opener [default] [APPLICATION] with no argument, prints the currently used file opener (by de- fault, Lira, clifm's builtin opener). Otherwise, set APPLICATION (say rifle or xdg-open) as opener or, if default is passed in- stead, use Lira. ow ELN/FILE [APPLICATION] If APPLICATION is specified, open ELN/FILE with APPLICATION. In case you need to add parameters to APPLICATION, it is recom- mended to quote the expression: ow FILE "APP ARG...". If no APPLICATION is specified, the list of available applica- tions associated to ELN/FILE (either via its MIME type or its file extension) is printed, allowing the user to choose one of these applications, and then open the file with the selected ap- plication. This command supports tab completion. Type "ow filename <TAB>" and those applications able to open ELN/FILE will be listed. p, pp, prop ELN/FILE... print file properties for ELN/FILE. The output of this function is much like the combined output of ls -l and stat. By default, directories size is not shown. Use pp instead of just p to print directories size as well (it could take longer depending on the directory's content). On the other side, and unlike p, pp provides information about the dereferenced sym- links (namely, the symlink target) instead of the symlink it- self. However, note that, in case of symbolic links to directo- ries, p provides information about the link target if the pro- vided filename ends with a slash. Otherwise, information about the link itself is displayed. The time format used to display time information can be cus- tomized via the PTimeStyle option in the configuration file (de- faults to "%Y-%m-%d %H:%M:%S.%N %z", where %N stands for nano-second precision). If you need to list the properties of all files in the current directory, try the long view mode (ll or Alt-l). Fields dis- played in this mode can be customized using the PropFields op- tion in the configuration file. For custom timestamp formats use the TimeStyle option. For more information about file details consult the file-details help topic: help file-details. pc ELN/FILE... Interactively change files permissions (only traditional Unix permissions are supported). A new prompt is displayed using actual permissions (in symbolic notation) of the file to be edited as template. If editing mul- tiple files with different sets of permissions, only shared per- mission bits are set in the permissions template. Bear in mind that, if editing multiple files at once, say pc sel or pc *.c, the new permissions set will be applied to all of them. Both symbolic and octal notation for the new permissions set are allowed. Recursively setting file permissions is not supported. Use chmod(1) with the -R flag instead. If you just need to toggle the executable permission bit on a file, you can use the te command. Use the oc command to edit files ownership. pf, profile [ls, list] [set, add, del PROFILE] [rename PROFILE NEW_NAME] with no arguments, prints the name of the currently used pro- file. Use the ls or list option to list available profiles. To switch, add, delete, or rename a profile, use the set, add, del, and rename options respectively. pg, pager [on, off, once, status, [NUM]] run or set Mas, Clifm's builtin files pager. With no parameter, just run the pager (Alt-0 is also available). If set to on, run the pager whenever the list of files does not fit on the screen. Set it to any positive integer greater than 1 to run the pager whenever the amount of files in the current directory is greater than or equal to this value, say 1000 (0 amounts to off and 1 to on). Set to once to run the pager only once (overwriting whatever was its previous value). While paging, the following keys are available: ?, h: Help Down arrow, Enter, Space: Advance one line Page down: Advance one page q: Stop paging (without printing remaining files) c: Stop paging (printing remaining files) Note: To scroll lines up, use whatever your terminal emulator has to offer (e.g.: mouse scrolling or some keybinding). By default, the pager lists files using the current listing mode (long or short). Use PagerView in the configuration file (or --pager-view in the command line) to force the use of a specific mode. Possibles values: auto: Use the current listing mode (default) long: List files in long view short: List files in short view pin [FILE/DIR] pin a file or directory to be accessed later via the comma (,) keyword. For example, run pin mydir and then access mydir as follows: cd , where the comma is automatically expanded to the pinned file, in this case mydir. The comma keyword could be used with any command, either internal or external, e.g, ls ,. With no arguments, the pin command prints the current pinned file, if any. If an argument is given, it will be taken as a filename to be pinned. Running this command again, frees the previous pinned file and sets a new one. In other words, only one pin is supported at a time. An easy alternative to create as many pins or shortcuts as you want, and how you want, is to use the alias function. Bookmarks could also be used to achieve a very similar result. At program exit, the pinned file is written to a file in the configuration directory (as .pin) to be loaded in the next ses- sion. prompt [set NAME] [list] [edit [APP]] [unset] [reload] Manage clifm's prompts. Use the set subcommand to temporarily change the current prompt to the prompt named NAME (use the un- set subcommand to unset the current prompt and set the default one). Available prompts (which can be listed via prompt list or prompt set <TAB>) are defined in the prompts file ($HOME/.con- fig/clifm/prompts.clifm). To permanently set a prompt, edit your color scheme file (via the cs edit command) and set Prompt to either a prompt code or a prompt name (as defined in the prompts file). q, quit, exit Quit clifm. rf, refresh refresh the screen, that is, reprint files in the current direc- tory and update the prompt. If the current directory is not ac- cessible for any reason, rf will go up until it finds an acces- sible one and then will change to this directory. rl, reload Reload all settings, except those passed as command line argu- ments, from the configuration file. rr [DIR] [EDITOR] Remove files and/or directories in bulk using a text editor. rr writes all filenames in DIR (or in the current directory if DIR is omitted) to a temporary file and opens it using EDITOR (or the default associated application for text/plain MIME type, if EDITOR is omitted). Once in the editor, remove the lines corresponding to the files you want to delete. Save changes and close the editor. Removed files will be listed and the user asked for confirmation. s, sel ELN/FILE... [[!]PATTERN] [-filetype] [:PATH] mark one or multiple files (either regular files or directories) as selected (send to the Selection Box). sel accepts individual elements, range of elements, say 1-6, filenames and paths, just as wildcards (globbing) and regular expressions. Example: s 1 4-10 ^r file* filename /path/to/filename. If not in light mode, once a file is selected, and if the file is in the current directory, the corresponding filename will be highlighted with a mark (colored according to the value of li in the color scheme file (by default bold green)) at the left of the filename (and at the right of its ELN). Just as in the search function, it is also possible to further filter the list of matches indicating the desired file type. For instance, s ^ -d will select all directories in the current working directory. For available file type filters see the search function above. By default, the selection function operates on the current work- ing directory. To select files in any other directory use the ":PATH" expression. For example, to select all regular files with a .conf extension in the /etc directory, the command would be: s .*\.conf$ -f :/etc, or using wildcards: s *.conf -f :/etc. Of course, you can also do just s -f /etc/*.conf. Just as in the case of the search function, inverse matching is supported for patterns, either wildcards or regular expressions. To invert the meaning and action of a pattern, prepend an excla- mation mark (!). E.g., to select all non-hidden regular files in the Documents directory, issue this command: s !^. -f :Docu- ments, or, to select all directories in /etc, except those end- ing with ".d": s !*.d -d :/etc. Glob and regular expressions can be used together. For example: s ^[r|R].*d$ /etc/*.conf will select all files starting with ei- ther 'r' or 'R' and ending with 'd' in the current working di- rectory, plus all .conf files in the /etc directory. However, this use is discouraged if both patterns refer to the same di- rectory, since the second one will probably override the result of the first one. It is important to note that glob expressions are evaluated be- fore regular expressions, in such a way that any pattern that could be understood by both kinds of pattern matching mechanisms will be evaluated first according to the former, that is, as a glob expression. For example, '.*', as regular expression, should match all files. However, since glob expressions are evaluated first, it will only match hidden files. To select all files using a glob expression, try '.* *', or, with a regular expression: '^' or '(.*?)'. The keyboard shortcut Alt-a is also available to perform the same operation. The Selection Box is accessible from different instances of the program, provided they use the same profile (see the profile command below). By default, indeed, each profile keeps a private Selection Box, being thus not accessible to other profiles. You can nonetheless modify this behavior via the ShareSelbox option in the configuration file. If ShareSelbox is enabled, selected files are stored in /tmp/clifm/username/.selbox.clifm. Other- wise, /tmp/clifm/username/.selbox_profilename.clifm is used (this is the default). Operating on selected files To operate on one or more selected files use the sel keyword (s: can be used as well). For example, to print the file properties of all selected files: p sel (or p s:). Use s:<TAB> to list se- lected files (multi-selection is available if running in fzf mode). Listing selected files To list selected files use the sb command (standing for Selec- tion Box). You can also type s:<TAB>. Deselecting files To deselect files use the ds command. See above. You can also press Alt-d to deselect all files at once. Note: If there is a file named sel in the current directory, use ./sel to distinguish it from the sel keyword. For example, enter p ./sel to tell clifm that you want to get the properties of the file named sel rather than the properties of the cur- rently selected files. For more information consult the BUILT-IN EXPANSIONS section be- low. sb, selbox show the elements currently contained in the Selection Box. splash show the splash screen. st, sort [METHOD] [rev] with no argument, print the current sorting order. Else, sort files by METHOD, where METHOD is one of: 0=none, 1=name, 2=size, 3=atime, 4=btime, 5=ctime, 6=mtime, 7=version, 8=extension, 9=inode, 10=owner, 11=group, 12=blocks, 13=links, or 14=type (e.g.: st atime or st 3). Methods 10 and 11 sort by owner and group ID names if using ID names in long view (see the Prop- Fields option in the configuration file). Else, ID numbers are used. The default order is version. By default, files are sorted from less to more (e.g.: from 'a' to 'z' if sorting by name). Use the rev subcommand to invert this order. E.g.: st rev or st inode rev. Switch back to the previous state running st rev again. Take a look at the configuration file for extra sorting options (ListDirsFirst, PrioritySortChar, ShowHiddenFiles). stats print statistics about files in the current directory (not available in light mode). t, trash [ELN/FILE]... [ls, list] [clear, empty] [del [FILE]...]] move specified files to the trash can (e.g. t file1 file2). With no argument (or by passing the ls option), it prints the list of currently trashed files. The clear (or empty) sucommand removes all files from the trash can, while the del subcommand lists trashed files allowing the user to permanently remove one or more trashed files. If using del, tab completion to list/se- lect currently trashed files is available. The trash directory is $XDG_DATA_HOME/Trash, falling back to $HOME/.local/share/Trash. To set an alternative trash directory use the -T,--trash-dir command line option. Since this trash system follows the Freedesktop specification, it is able to handle files trashed by different Trash implemen- tations. To restore trashed files (to their original location) see the undel command below. tag [add, del, list, list-full, new, merge, rename, untag] [FILE]... [[:]TAG] tag is the main Etiqueta command, clifm's builtin files tagging system. See the FILE TAGS section for a complete description of this command. te FILE... toggle executable bit (on user, group, and others) on FILE(s). It is equivalent to the -x and +x options for the chmod(1) com- mand. tips print the list of clifm tips u, undel, untrash [*, a, all] [FILE]... If filenames are passed as parameters, undelete these files, that is, restore them to their original location. Otherwise, this function prints a list of currently trashed files allowing the user to choose one or more of these files to be restored. Use the *, a or all parameters to restore all trashed files at once. Tab completion to list/select currently trashed files is available. unpin this command takes no argument. It just frees the current pin and, if it exists, deletes the .pin file generated by the pin command. vv FILE... DIR copy FILE(s) to DIR and bulk rename them at once. ver, version show clifm version details. view [edit [APP] | purge] preview files in the current directory (full screen). Requires fzf(1). Alt+- is also available. By pressing Enter or Right, the currently highlighted file will be selected and view closed. To select multiple files, mark them with the TAB key and then press Enter or Right to confirm. To quit view press Escape or the Left arrow key. Run view purge to purge the thumbnails directory ($XDG_CACHE_HOME/clifm/thumbnails) of dangling thumbnails. To edit the previewer configuration file enter view edit, or view edit vi to open it with a specific application, in this case, vi(1). For image previews consult the Wiki (https://github.com/leo-arch/clifm/tree/master/misc/tools/img- prev) or enter help image-previews. For further information consult the SHOTGUN section below. ws [NUM/NAME [unset], +, -] Clifm offers up to eight workspaces, each with its own indepen- dent path. With no argument, the ws command prints the list of workspaces and its corresponding paths, highlighting the current workspace. Use NUM to switch to the workspace number NUM, NAME to switch to the workspace named NAME, the plus sign (+) to switch to the next workspace, and the minus sign (-) to switch to the previous workspace. To unset a workspace use the unset subcommand preceded by the workspace (either number or name) to be unset. For example: ws 2 unset. Four keyboard shortcuts are available to easily switch to any of the first four workspaces: Alt-[1-4]. Every time an empty workspace is created, it starts in the cur- rent working directory. Though by default workspaces are unnamed, you can name them how- ever you like using the WorkspaceNames option in the configura- tion file. Use autocommands to persistenly set options per workspace, for example, to always list files in the third workspace in long view. See the AUTOCOMMANDS section below for more information. Make local settings private to the current workspace by setting the PrivateWorkspaceSettings option to true in the configuration file: settings changed via either the command line or keyboard shortcuts (say Alt-l, to toggle the long view) will apply only to the current workspace and will be remembered even when switching workspaces. To directly operate on a workspace (namely, the path it points to) you can use the w: construct followed by a workspace number or name. For example, to copy all .png files in the current di- rectory to the third workspace, enter c *.png w:3. Press TAB im- mediately after w: to get the list of available workspaces. x, X [DIR] open DIR, or the current working directory if DIR is not speci- fied, in a new instance of clifm (as root if X, as the current unprivileged user if x) using the value of TerminalCmd (from the configuration file) as terminal emulator. If this value is not set, xterm will be used as fallback terminal emulator. This function is only available for graphical environments. Shell-builtins implementations pwd [-LP] print the current working directory export NAME=VALUE... export variables to the environment umask [VALUE] print/set the current umask value unset NAME remove a variable from the environment 5. FILE FILTERS Clifm provides multiple ways to filter the current list of files: a) Hidden files: via the -A and -a command line flags, the hh command, and the Alt-. keybinding. Files listed in a file named .hidden in the current directory will be hidden as well whenever dotfiles are not shown (wildcards are sup- ported). b) Directories: via the --only-dirs command line switch and the Alt-, keybinding. c) Filenames and file types: either via a regular expression or a file type character (see below) using the ft command (the Filter option in the configuration file and the CLIFM_FILTER environment variable are also available). For example, to exclude backup files (ending with a tilde): CLIFM_FILTER='!.*~$' clifm or (in the configuration file): Filter="!.*~$" or (via the ft command): ft !.*~$ See the ft command for a few more examples. d) Filtering files via the TAB key: You can filter files by name using wildcards. For example: p *.mp3<TAB> (or /*.mp3<TAB>) to get a list of MP3 files in the current directory. Files can also be filtered by MIME-type via the '@' keyword. Type @<TAB> to list all MIME-types found in the current directory, or @query<TAB> to list all files whose MIME-type includes the string "query". For example, @image<TAB> will list all files in the current directory whose MIME type includes the string "image". Finally, files can be filtered as well by file type using the '=' key- word followed by a file type character (see below). For example, =l<TAB> to get a list of symbolic links in the current directory. Note: If using tab completion in fzf mode, multi-selection is allowed (except in the case of @<TAB>). Available file type characters: b: Block devices c: Character devices C: Files with capabilities (1)(2) d: Directories D: Empty directories f: Regular files F: Empty regular files g: SGID files (2) h: Multi-hardlink files (directories excluded) l: Symbolic links L: Broken symbolic links o: Other-writable files (2) p: FIFO/pipes (2) s: Sockets (2) O: Doors (Solaris only) P: Event ports (Solaris only) t: Files with the sticky bit set (2) u: SUID files (2) x: Executable files (2) (1) Only for tab completion (2) Not available in light mode e) Grouping files (via automatic expansion): By means of the above features, you can easily group and operate on groups of files. For example, this command: vt b: @image =x sel t:work *.txt opens a virtual directory (see the VIRTUAL DIRECTORIES section below) automatically expanding the above expressions as follows: +-------------+-----------------------------+ | Expression | Description | +-------------+-----------------------------+ | b: | All your bookmarks (paths) | +-------------+-----------------------------+ | @image | All image files (CWD) | +-------------+-----------------------------+ | =x | All executable files (CWD) | +-------------+-----------------------------+ | sel | All selected files | +-------------+-----------------------------+ | t:work | All files tagged as work | +-------------+-----------------------------+ | *.txt | All .txt files (CWD) | +-------------+-----------------------------+ 6. KEYBOARD SHORTCUTS The following is the list of default keyboard shortcuts: +----------------------+--------------------------------------------------------------------------+ | Key | Description | +----------------------+--------------------------------------------------------------------------+ | Ctrl-Alt-j | Switch to vi editing mode | +----------------------+--------------------------------------------------------------------------+ | Ctrl-Alt-e | Switch back to emacs editing mode (default) | +----------------------+--------------------------------------------------------------------------+ | Right, Ctrl-f | Accept the entire current suggestion | +----------------------+--------------------------------------------------------------------------+ | Alt-Right, Alt-f | Accept the first suggested word (up to the first slash or space) | +----------------------+--------------------------------------------------------------------------+ | Alt-c | Clear the current command line buffer | +----------------------+--------------------------------------------------------------------------+ | Alt-q | Delete last word (up to last slash or space) | +----------------------+--------------------------------------------------------------------------+ | Alt-i, Alt-. | Toggle hidden-files | +----------------------+--------------------------------------------------------------------------+ | Alt-l | Toggle long-view | +----------------------+--------------------------------------------------------------------------+ | Alt-+ | Toggle follow-links (long view only) | +----------------------+--------------------------------------------------------------------------+ | Alt-g | Toggle list-directories-first | +----------------------+--------------------------------------------------------------------------+ | Alt-, | Toggle list-only-directories | +----------------------+--------------------------------------------------------------------------+ | Ctrl-Alt-l | Toggle max-filename-length | +----------------------+--------------------------------------------------------------------------+ | Ctrl-Alt-i, Alt-TAB | Toggle disk-usage-analyzer | +----------------------+--------------------------------------------------------------------------+ | Alt-w | Toggle full-path-filenames (virtual directories) | +----------------------+--------------------------------------------------------------------------+ | Ctrl-l | Refresh the screen (reprint the list of files in the current directory) | +----------------------+--------------------------------------------------------------------------+ | Alt-t | Clear program messages | +----------------------+--------------------------------------------------------------------------+ | Alt-m | List mountpoints | +----------------------+--------------------------------------------------------------------------+ | Alt-b | Launch the Bookmark Manager | +----------------------+--------------------------------------------------------------------------+ | Alt-h | Show the directory history | +----------------------+--------------------------------------------------------------------------+ | Alt-n | Create new file or directory | +----------------------+--------------------------------------------------------------------------+ | Alt-s | Open the Selection Box | +----------------------+--------------------------------------------------------------------------+ | Alt-- | Launch the file previewer (view command) | +----------------------+--------------------------------------------------------------------------+ | Alt-a | Select all files in the current directory | +----------------------+--------------------------------------------------------------------------+ | Alt-d | Deselect all files | +----------------------+--------------------------------------------------------------------------+ | Alt-0 | Run MAS, the file pager | +----------------------+--------------------------------------------------------------------------+ | Alt-p | Change to the pinned directory | +----------------------+--------------------------------------------------------------------------+ | Alt-1 | Switch to workspace 1 | +----------------------+--------------------------------------------------------------------------+ | Alt-2 | Switch to workspace 2 | +----------------------+--------------------------------------------------------------------------+ | Alt-3 | Switch to workspace 3 | +----------------------+--------------------------------------------------------------------------+ | Alt-4 | Switch to workspace 4 | +----------------------+--------------------------------------------------------------------------+ +---------------------+------------------------------------------------------------+ | Key | Description | +---------------------+------------------------------------------------------------+ | Alt-r | Change to the root directory | +---------------------+------------------------------------------------------------+ | Alt-e, Home | Change to the home directory | +---------------------+------------------------------------------------------------+ | Alt-u, Shift-Up | Change to the parent directory | +---------------------+------------------------------------------------------------+ | Alt-j, Shift-Left | Change to the previously visited directory | +---------------------+------------------------------------------------------------+ | Alt-k, Shift-Right | Change to the next visited directory | +---------------------+------------------------------------------------------------+ | Ctrl-Alt-o | Switch to the previous profile | +---------------------+------------------------------------------------------------+ | Ctrl-Alt-p | Switch to the next profile | +---------------------+------------------------------------------------------------+ | Ctrl-Alt-a | Archive selected files | +---------------------+------------------------------------------------------------+ | Ctrl-Alt-e | Export selected files | +---------------------+------------------------------------------------------------+ | Ctrl-Alt-r | Rename selected files | +---------------------+------------------------------------------------------------+ | Ctrl-Alt-d | Remove selected files | +---------------------+------------------------------------------------------------+ | Ctrl-Alt-t | Trash selected files | +---------------------+------------------------------------------------------------+ | Ctrl-Alt-v | Copy selected files to the current directory | +---------------------+------------------------------------------------------------+ | Alt-y | Toggle light-mode | +---------------------+------------------------------------------------------------+ | Alt-z | Switch to previous sorting method | +---------------------+------------------------------------------------------------+ | Alt-x | Switch to next sorting method | +---------------------+------------------------------------------------------------+ | Ctrl-x | Launch a new instance of clifm | +---------------------+------------------------------------------------------------+ | Ctrl-y | Copy the contents of the line buffer to the clipboard (1) | +---------------------+------------------------------------------------------------+ | F1 | Go to the manpage | +---------------------+------------------------------------------------------------+ | F2 | List commands | +---------------------+------------------------------------------------------------+ | F3 | List keybindings | +---------------------+------------------------------------------------------------+ | F6 | Open the MIME list file | +---------------------+------------------------------------------------------------+ | F7 | Open the shotgun configuration file | +---------------------+------------------------------------------------------------+ | F8 | Open the current color scheme file | +---------------------+------------------------------------------------------------+ | F9 | Open the keybindings file | +---------------------+------------------------------------------------------------+ | F10 | Open the main configuration file | +---------------------+------------------------------------------------------------+ | F11 | Open the bookmarks file | +---------------------+------------------------------------------------------------+ | F12 | Quit | +---------------------+------------------------------------------------------------+ (1) This shortcut is bound to the xclip plugin. See the PLUGINS section below for more information. Customizing keybindings The above are the default keyboard shortcuts. However, they can be cus- tomized using the kb bind command (for more information consult the de- scription for the kb command above). The keybindings configuration file can also be manually edited using the kb edit command (for more details take a look at the description provided by this file itself). Readline keybindings Readline keybindings for command line editing, such as Ctrl-a, to move the cursor to the beginning of the line, or Ctrl-e, to move it to the end, should work out of the box. Of course, you can modify these key- bindings by editing the ~/.config/clifm/readline.clifm file, following the same rules used by readline itself for the ~/.inputrc file. For more information consult the readline documentation (readline(3)). Keybindings for plugins clifm provides sixteen customizable keybindings for custom plugins. The procedure for setting a keybinding for a plugin is the following:.sp 1) Copy your plugin to the plugins directory (or use any of the plugins already in there) 2) Link pluginx (where 'x' is the plugin number [1-16]) to your plugin using the actions edit command. E.g.: "plugin1=myplu- gin.sh" 3) Set a keybinding for pluginx using the kb edit command. E.g.: "plugin1:\M-7" Troubleshooting Some of these keybindings might not work on your console/terminal emu- lator, depending on your system. Some useful tips on this regard: Haiku terminal: Most of these keybindings won't work on the Haiku ter- minal, since Alt plays here the role Ctrl usually plays in most other systems (see the Haiku documentation). To fix this, set your custom keybindings. Kernel builtin console: Key sequences involving the Shift key (S-up, S-left, and S-right in our case) will just not work. Use the alterna- tive key sequences instead: M-u, M-j, and M-k respectively NetBSD (wsvt25) and OpenBSD (vt220) kernel consoles: Key sequences in- volving the Alt key won't work out of the box. Here's how to make them work: On OpenBSD: 1) Copy /etc/examples/wsconsctl.conf to /etc (if it does not already exist) 2) Add the metaesc flag to your current keyboard enconding. For example keyboard.encoding=us.metaesc You might need to reboot the machine for changes to take ef- fect. On NetBSD: Add the metaesc flag to your current encoding in /etc/ws- cons.conf. Example: encoding us.metaesc You might need to reboot the machine for changes to take ef- fect. Konsole: If Shift+left and Shift+right are not already bound to any function, you need to bind them manually. Go to Settings -> Edit cur- rent profile -> Keyboard -> Default (Xfree4), and add these values: Left+Shift \E[1;2D Right+Shift \E[1;2C If they are already bound, by contrast, you only need to unbound them. Go to "Settings -> Configure keyboard shortcuts", click on the corresponding keybinding, and set it to "Custom (none)"). Terminology/Yakuake: Shift+left and Shift+right are already bound to other functions, so that you only need to unbind them or rebind the corresponding functions to different key sequences. Of course, the above two procedures should be similar in case of key- binding issues in other terminal emulators. In case some of these keybindings are already used by your Window Man- ager, you only need to unbind the key or rebind the corresponding func- tion to another key. Since each Window Manager uses its own mechanisms to set/unset keybindings, you should consult the appropriate manual. 7. THEMING All customization settings (theming) are made from a single configura- tion file (the color scheme file), installed by default in $XDG_DATA_DIRS/clifm/colors (usually /usr/local/share/clifm/colors or /usr/share/clifm/colors), though color scheme files found in $XDG_CON- FIG_HOME/clifm/colors (usually $HOME/.config/clifm/colors) take prece- dence. Note: Color scheme files are copied automatically to the local colors directory when running the cs edit command. Each color scheme may include any (or all) of the below options: FiletypeColors = Colors for different file types, such as directory, regular files, and so on. See the COLORS section below. InterfaceColors = Colors for clifm's interface, such as ELNs, file properties bits, suggestions, syntax highlighting, etc. See the COLORS section below. ExtColors = Colors for files based on filename extensions. See the COLORS section below. DateShades = A comma delimited list of colors used to print timestamps (long view). Consult the default color scheme file for more informa- tion. SizeShades = A comma delimited list of colors used to print file sizes (long view). Consult the default color scheme file for more informa- tion. DirIconColor = Color for the directory icon (when icons are enabled). See the COLORS section below. Only when using icons-in-terminal or Ner- fonts. If using rather emoji-icons (default build), this option is ig- nored. Prompt = Define Clifm's prompt. See the THE PROMPT section below. DividingLine = The line dividing the current list of files and the prompt. See the THE DIVIDING LINE below. FzfTabOptions = Options to be passed to fzf when using the fzf mode for tab completion, including colors. See the BUILT-IN EXPANSIONS sec- tion below. The color scheme (or just theme) can be set either via the command line (--color-scheme=NAME), via the ColorScheme option in the main configu- ration file, or using the cs command, for instance, cs mytheme. Enter just cs to list available color schemes (tab completion is available). To edit the current color scheme enter cs edit. 1. COLORS If 256 colors support is detected for the current terminal, and not set in any other way (either via the ColorScheme option in the configura- tion file or the --color-scheme command line switch), clifm will at- tempt to load the 256 colors version of the default color scheme: de- fault-256. Otherwise, it falls back to the 16 colors version. All color codes are specified in the corresponding color scheme file (by default ~/.config/clifm/colors/default.clifm). You can edit this file pressing F8 or entering cs edit. a. Color codes Colors are specified using the same format used by dircolors(1) and the LS_COLORS environment variable, namely, a colon separated list of codes with this general format: name=value, where name refers to an interface element, and value to the color to be used by this element. This is the list of file type codes (you will find them in the File- typeColors section of the current color scheme file): di = directory ed = empty directory nd = directory with no read/exec permission (1) fi = regular file ef = empty regular file nf = file with no read permission (1) ln = symlink mh = multi-hardlink file or = orphaned or broken symlink bd = block device cd = character device pi = FIFO, pipe so = socket su = SUID file sg = SGID file tw = sticky and other writable directory st = sticky and not other writable directory ow = other writable directory ex = executable file ee = empty executable file ca = file with capabilities oo = door/port (Solaris only) no = unknown file type uf = unaccessible files (fstatat(3) error) (1) If unset, the corresponding file type color is used and an exclamation mark is printed before the filename in the file list (provided icons are disabled -otherwise the lock icon is used- and clifm is not running in light mode -in light mode access checks are not performed). The color used for the exclamation mark is xf (see below). The following codes are used for different interface elements (in the InterfaceColors section of the current color scheme file): Suggestions sb = shell builtins sc = aliases and shell command names sd = internal commands description sf = ELNs, bookmarks, tag, and filenames sh = commands history entries sx = suggestions for clifm's internal commands and parameters sp = suggestions pointer (e.g.: 56 > filename, where '>' is the suggestion pointer) sz = filenames (fuzzy) Syntax highlighting hb = brackets '()[]{}' hc = comments (lines starting with '#') hd = slashes he = expansion chars '~*' hn = numbers hp = option parameters (starting with '-') hq = quoted strings (both single and double quotes) hr = process redirection (>) hs = process separators (; & |) hv = variable names (starting with '$') hw = Backslash (aka whack) Prompt elements li = selected files ti = trash indicator ac = autocommand indicator em = error message indicator wm = warning message indicator nm = notice message indicator ro = read-only mode indicator si = stealth mode indicator tx = command line text (regular prompt) File properties db = file allocated blocks dd = last access/change/modification time (1) de = file inode number (long view only) dg = group ID (provided the user has access to the file) dk = number of links (long view only) dn = dash (unset property) do = octal value for file properties dp = SUID, SGID, sticky bit dr = read permission bit dt = timestamp identification mark (2) du = user ID (provided the user has access to the file) dw = write permission bit dxd = executable permission bit (directories) dxr = executable permission bit (regular files) dz = size (1) (1) If unset (default), gradient colors are used (based on file size and file age). (2) If unset (default), a dimmed version of the current time- stamp color is used. NOTE: For a better graphical representation of file properties, 256 colors are used if possible (otherwise, clifm falls back to 16 colors). Miscellaneous interface elements fc = files counter df = default color dl = dividing line el = ELN color lc = symbolic link indicator (ColorLinksAsTarget only) mi = misc indicators (disk usage, sort method, bulk rename, jump database list) ts = matching suffix for possible tab completed entries tt = tilde for truncated filenames wc = welcome message wsN = color for workspace N (1-8) xs = exit code: success xf = exit code: failure b. Supported colors 4-bit, 8-bit (256-colors), and 24-bit (true colors) colors are sup- ported. Colors are defined basically as SGR sequences (excluding the initial escape character and the ending 'm'), the same sequences used by the LS_COLORS environment variable. However, shortcuts for 8-bit (256-col- ors) and 24-bit (true color) colors are available. For example: 31 4-bit 38;5;160 8-bit @160 8-bit (short) 38;2;255;0;0 24-bit #ff0000 24-bit (short, HEX) (1) (1) Both three and six digits hexadecimal colors (lower or uppercase) are supported. For example, #f00 amounts to #ff0000. A single attribute can be added to hex colors and 256 colors (in the form @NUM) using a dash and an attribute number (#RRGGBB-[1-9] or @NUM-[1-9]), where 1-9 is: 1: Bold or increased intensity 2: Faint, decreased intensity or dim 3: Italic (Not widely supported) 4: Underline 5: Slow blink 6: Rapid blink 7: Reverse video or invert 8: Conceal or hide (Not widely supported) 9: Crossed-out or strike Note: Some attributes may not be supported by all terminal emulators. For example, for bold red the hex code is #ff0000-1, while the 256-col- ors code is @160-1. (for more information about SGR sequences consult https://en.wikipedia.org/wiki/ANSI_escape_code). c. Color names Xterm-like color names are also supported. For example: ex=DodgerBlue2. This is the list of color names (as defined by vifm(1)): 0 Black 86 Aquamarine1 172 Orange3 1 Red 87 DarkSlateGray2 173 Light- Salmon3_2 2 Green 88 DarkRed_2 174 Light- Pink3 3 Yellow 89 DeepPink4_2 175 Pink3 4 Blue 90 DarkMagenta 176 Plum3 5 Magenta 91 DarkMagenta_2 177 Violet 6 Cyan 92 DarkViolet 178 Gold3_2 7 White 93 Purple 179 Light- Goldenrod3 8 LightBlack 94 Orange4_2 180 Tan 9 LightRed 95 LightPink4 181 Misty- Rose3 10 LightGreen 96 Plum4 182 Thistle3 11 LightYellow 97 MediumPurple3 183 Plum2 12 LightBlue 98 MediumPurple3_2 184 Yel- low3_2 13 LightMagenta 99 SlateBlue1 185 Khaki3 14 LightCyan 100 Yellow4 186 Light- Goldenrod2 15 LightWhite 101 Wheat4 187 LightYellow3 16 Grey0 102 Grey53 188 Grey84 17 NavyBlue 103 LightSlateGrey 189 Light- SteelBlue1 18 DarkBlue 104 MediumPurple 190 Yellow2 19 Blue3 105 LightSlateBlue 191 DarkO- liveGreen1 20 Blue3_2 106 Yellow4_2 192 DarkO- liveGreen1_2 21 Blue1 107 DarkOliveGreen3 193 DarkSea- Green1_2 22 DarkGreen 108 DarkSeaGreen 194 Honey- dew2 23 DeepSkyBlue4 109 LightSkyBlue3 195 Light- Cyan1 24 DeepSkyBlue4_2 110 LightSkyBlue3_2 196 Red1 25 DeepSkyBlue4_3 111 SkyBlue2 197 Deep- Pink2 26 DodgerBlue3 112 Chartreuse2_2 198 Deep- Pink1 27 DodgerBlue2 113 DarkOliveGreen3_2 199 Deep- Pink1_2 28 Green4 114 PaleGreen3_2 200 Ma- genta2_2 29 SpringGreen4 115 DarkSeaGreen3 201 Magenta1 30 Turquoise4 116 DarkSlateGray3 202 Oran- geRed1 31 DeepSkyBlue3 117 SkyBlue1 203 Indi- anRed1 32 DeepSkyBlue3_2 118 Chartreuse1 204 Indi- anRed1_2 33 DodgerBlue1 119 LightGreen_2 205 HotPink 34 Green3 120 LightGreen_3 206 Hot- Pink_2 35 SpringGreen3 121 PaleGreen1 207 Mediu- mOrchid1_2 36 DarkCyan 122 Aquamarine1_2 208 DarkOr- ange 37 LightSeaGreen 123 DarkSlateGray1 209 Salmon1 38 DeepSkyBlue2 124 Red3 210 LightCo- ral 39 DeepSkyBlue1 125 DeepPink4_3 211 PaleVio- letRed1 40 Green3_2 126 MediumVioletRed 212 Orchid2 41 SpringGreen3_2 127 Magenta3 213 Orchid1 42 SpringGreen2 128 DarkViolet_2 214 Orange1 43 Cyan3 129 Purple_2 215 Sandy- Brown 44 DarkTurquoise 130 DarkOrange3 216 Light- Salmon1 45 Turquoise2 131 IndianRed 217 Light- Pink1 46 Green1 132 HotPink3 218 Pink1 47 SpringGreen2_2 133 MediumOrchid3 219 Plum1 48 SpringGreen1 134 MediumOrchid 220 Gold1 49 MediumSpringGreen 135 MediumPurple2 221 Light- Goldenrod2_2 50 Cyan2 136 DarkGoldenrod 222 Light- Goldenrod2_3 51 Cyan1 137 LightSalmon3 223 Nava- joWhite1 52 DarkRed 138 RosyBrown 224 Misty- Rose1 53 DeepPink4 139 Grey63 225 Thistle1 54 Purple4 140 MediumPurple2_2 226 Yellow1 55 Purple4_2 141 MediumPurple1 227 Light- Goldenrod1 56 Purple3 142 Gold3 228 Khaki1 57 BlueViolet 143 DarkKhaki 229 Wheat1 58 Orange4 144 NavajoWhite3 230 Corn- silk1 59 Grey37 145 Grey69 231 Grey100 60 MediumPurple4 146 LightSteelBlue3 232 Grey3 61 SlateBlue3 147 LightSteelBlue 233 Grey7 62 SlateBlue3_2 148 Yellow3 234 Grey11 63 RoyalBlue1 149 DarkOliveGreen3_3 235 Grey15 64 Chartreuse4 150 DarkSeaGreen3_2 236 Grey19 65 DarkSeaGreen4 151 DarkSeaGreen2 237 Grey23 66 PaleTurquoise4 152 LightCyan3 238 Grey27 67 SteelBlue 153 LightSkyBlue1 239 Grey30 68 SteelBlue3 154 GreenYellow 240 Grey35 69 CornflowerBlue 155 DarkOliveGreen2 241 Grey39 70 Chartreuse3 156 PaleGreen1_2 242 Grey42 71 DarkSeaGreen4_2 157 DarkSeaGreen2_2 243 Grey46 72 CadetBlue 158 DarkSeaGreen1 244 Grey50 73 CadetBlue_2 159 PaleTurquoise1 245 Grey54 74 SkyBlue3 160 Red3_2 246 Grey58 75 SteelBlue1 161 DeepPink3 247 Grey62 76 Chartreuse3_2 162 DeepPink3_2 248 Grey66 77 PaleGreen3 163 Magenta3_2 249 Grey70 78 SeaGreen3 164 Magenta3_3 250 Grey74 79 Aquamarine3 165 Magenta2 251 Grey78 80 MediumTurquoise 166 DarkOrange3_2 252 Grey82 81 SteelBlue1_2 167 IndianRed_2 253 Grey85 82 Chartreuse2 168 HotPink3_2 254 Grey89 83 SeaGreen2 169 HotPink2 255 Grey93 84 SeaGreen1 170 Orchid 85 SeaGreen1_2 171 MediumOrchid1 Just as with hex colors, a single attribute can be appended to color names. For example, SteelBlue1-1 to get the bold version of this color. d. Color variables Up to 128 custom color variables can be used via the define keyword to make it easier to build and read theme files. Example: define FTYPE_DIR=31 define IFACE_ELN=4;38;2;255;255;0;48;2;0;14;191 FiletpeColors="di=FTPYE_DIR:" InterfaceColors="el=IFACE_ELN:" These variables can only be used for FiletypeColors, InterfaceColors, ExtColors, and DirIconColor. The Prompt line (if using a prompt code) uses full SGR sequences or prompt-specific color codes instead. e. Examples A few examples to put all this together: fi=4;31 (regular files are 4-bit underlined red) di=@33-1 (directories are 8-bit bold light-blue) ln=#5fd7ff (symbolic links are 24-bit light cyan) so=Yellow3 (socket files are Yellow3) More complex combinations can be achieved using complete SGR sequences (for example, to add a background color). E.g.: fi=4;38;2;245;76;48;2;0;0;255 will print regular files underlined and using a bold orange color on a blue background. In this case, just make sure to use a terminal emula- tor supporting true colors. To test your terminal color capabilities use the colors.sh script (in the plugins directory). NOTE: It may happen that, for some reason, you need to force clifm to use colors despite the value of the TERM variable. The OpenBSD console, for example, sets TERM to vt220 by default, which, according to the terminfo database, does not support color. However, the OpenBSD console does actually support color. In this case, you can set the CLIFM_FORCE_COLOR to either true or 1 to use color even if the value of TERM says otherwise. To see a colored list of the currently used colors run the cs preview command. To run colorless use the --no-color command line option or set either CLIFM_NO_COLOR or NO_COLOR environment variables to any value. For more information about the no-color initiative see https://no-color.org/ For a full no-color experience recall to edit your prompt removing all color codes. 2. THE PROMPT Clifm's prompt is taken from the Prompt line in the color scheme file using a prompt name as defined in the prompts file, for example, Prompt="security-scanner". Each prompt is built following almost the same escape codes and rules used by the Bash prompt, except that it does not accept shell functions (like conditionals and loops). Command substitution (in the form $(cmd)), prompt modules (in the form ${module}), color codes (in the form %{color}), string literals, and escape sequences can be used to build the prompt. Consult the prompts file (via the prompt edit command) for detailed in- formation and examples on how to build a prompt. By default, for intstance, clifm's prompt line is this: "%{reset}\I[\S%{reset}]\l \A \u:\H %{cyan}\w%{reset}\n<\z%{re- set}> %{blue}\$%{reset} " which once decoded should look something like this: [1] 13:45 user:hostname /my/path <0> $ with the workspace number printed in blue, the path in cyan, the last exit status in green (or red in case of error), and the dollar sign in blue. A more "classic" prompt can be generated as follows: "\u@\U \w> " or, using now command substitution: "$(whoami)@$(hostname) $(pwd)> " Prompt notifications A bold red 'R' at the left of the prompt reminds the user that the pro- gram is running as root. A bold green 'S' indicates that there are ele- ments in the Selection Box. In the same way, a cyan 'T' means that there are currently files in the trash can, just as a bold blue 'S' means that the program is running in stealth mode. Finally, clifm makes use of three kind of messages: errors (a red 'E' at the left of the prompt), warnings (a yellow 'W'), and simple notices (a green 'N'). If Notifications is set to "false" in the prompts file, the above noti- fications won't be printed by the prompt, but are still available to the user as escape codes (see above) and environment variables (see the ENVIRONMENT section below) to build custom prompts. The Warning Prompt The suggestions system includes a secondary, warning prompt, used to highlight wrong/invalid/non-existent command names. Once an invalid command is entered, the regular prompt will be switched to the warning prompt. The wrong command name check is omitted if the input string: Is quoted (e.g.: "string" or 'string') Is bracketed (e.g.: (string), [string], or {string}) It starts with a stream redirection character (e.g.: <string or >string) Is a comment (e.g.: #string) It starts with one or more spaces Is an assignment (e.g.: foo=var) It is escaped (e.g.: \string) The warning prompt can be customized by means of the same rules used by the regular prompt. To use a custom warning prompt, modify the Warning- Prompt line in the prompts file (via the prompt edit command). It de- faults to "%{reset}%{b:red}(!)%{n:dim} > " the last line of the regular prompt will become "(!) > ", with "(!)" printed in bold red. To disable this feature use the --no-warning-prompt command line switch or set the EnableWarningPrompt option to false in the prompts file. NOTE: Bear in mind that the warning prompt depends on the suggestions system, so that it won't be available if this system is disabled. 3. THE DIVIDING LINE The line dividing the current list of files and the prompt. It can be customized via the DividingLine option in the color scheme file to fit your prompt design and/or color scheme. DividingLine accepts one or more ASCII or Unicode characters (in both cases you only need to type/paste here the chosen character(s)). If only one character is specified (by default, "-"), it will be repeat- edly printed to fulfill the current line up to the right edge of the screen or terminal window. If you don't want to cover the whole line, specify two or more characters, in which case only these characters (and no more) will be used as dividing line. For example: "------->". To use an empty line, set DividingLineChar to "0" (that is, as a char- acter, not as a number). Finally, if this value is not set, a special line drawn with box-drawing characters will be used (box-drawing char- acters are not supported by all terminal emulators). The color of this line is set via the dl color code in the color scheme file. Consult the COLOR CODE section above for more information. 4. FZF WINDOW Refer to the Tab completion section below. 8. BUILT-IN EXPANSIONS The SEL keyword Clifm will automatically expand the sel keyword: sel indeed amounts to 'file1 file2 file3 ...' In this way, you can use the sel keyword with any command. s: can be used interchangeably (with the difference that s: can be used as first word, and not only as parameter to other com- mands). If you want to set the executable bit on several files, for instance, simply select the files you want and then run this command: chmod +x sel. Or, if you want to copy or move several files to some directory: cp sel 12, or mv sel 12 (provided the ELN 12 corresponds to a direc- tory), respectively. If the destination directory is omitted, selected files are copied to the current working directory, that is to say, mv sel amounts to mv sel .. To trash or remove selected files, simply run tr sel or rm sel respec- tively. The same goes for wildcards and braces: chmod +x *, for exam- ple, will set the executable bit on all files (excluding hidden files) in the current working directory, while chmod +x file{1,2,3} will do it for file1, file2, and file3 respectively. If using the fzf mode for tab completion (see below), you can operate only on some selected files as follows: type CMD sel and, without ap- pending any space char, press TAB: the list of selected files will be displayed. Choose one or more of them (use TAB to mark entries) to op- erate only on those specific files. For example, to print the file properties of some specific selected files: p sel->TAB, select the files you want via TAB, press Enter or Right (marked files will be in- serted in the command line), and the press Enter, as usual. Tab completion There are four modes for tab completion: standard (interface provided by readline), fzf, which depends on fzf (https://github.com/june- gunn/fzf) (version 0.18.0 or later), fnf (https://github.com/leo-arch/fnf), and smenu (https://github.com/p-gen/smenu). By default, if the fzf binary is found in PATH, clifm will attempt to use fzf to display completions. You can force the use of the remaining modes via the --stdtab, --fn- ftab, and --smenutab command line switches. The TabCompletionMode op- tion in the configuration file can be used to permanently set the tab completion mode. If using the fzf mode, the completions interface can be customized us- ing the FzfTabOptions option in the color scheme file. --height, --mar- gin, +i/-i, --read0, --query, and --ansi will be appended to set up some details of the completions interface. Set this value to none to pass no option, to the empty string to load the default values, or to any other custom value. Unless set to none, any option specified here will override FZF_DEFAULT_OPTS. Default values for this option are: --color=16,prompt:6,fg+:-1,pointer:4,hl:5,hl+:5,gut- ter:-1,marker:2,border:7:dim --bind tab:accept,right:ac- cept,left:abort,alt-p:toggle-preview --inline-info --layout=re- verse-list --preview-window=wrap,border-left Consult fzf(1) for more information. If set neither in FzfTabOptions nor in FZF_DEFAULT_OPTS (in this or- der), the height of the fzf window is set to the default value: 40% of the current terminal amount of line/rows. To use fzf global values (defined in FZF_DEFAULT_OPTS), set FzfTabOp- tions to none. File previews are available in fzf mode via shotgun. See the SHOTGUN section above. Image previews are available via the clifmimg plugin. Run help im- age-previews for more information. If using the smenu mode, the interface can be customized using the CLIFM_SMENU_OPTIONS environment variable. For example: export CLIFM_SMENU_OPTIONS="-a t:2,b b:4 c:r ct:2,r sf:6,r st:5,r mt:5,b" Consult smenu(1) for more information. For information about how to customize fnf consult fnf(1). Clifm can perform fuzzy tab completion (just as suggestions) for file- names and paths (e.g. "dwn" is completed/suggested as "Downloads"). To enable this feature use the --fuzzy-matching command line switch or set FuzzyMatching to true in the configuration file. Besides the default tab completion for command names and paths, you can also expand ELNs using the TAB key. Example: type 'o 12', press TAB, and it becomes 'o filename ', or, if 12 refers to a directory, 'o dir/'. clifm uses a Bash-style quoting system, so that this filename: "this is a test@version{1}" is expanded as follows: this\ is\ a\ test\@version\{1\} ELNs and ELN ranges will be also automatically expanded, provided the corresponding ELNs actually exist, that is to say, provided some file- name is listed on the screen under those numbers. For example: 'diff 1 118' will only expand '1', but not '118', if there is no ELN 118. In the same way, the range 1-118 will only be expanded provided there are 118 or more elements listed on the screen. Note that the second field oa a range can be omitted, in which case the ELN of the last listed file is assumed (e.g.: provided there are 100 listed files, 12- is equivalent to 12-100). Since ranges can be a bit tricky, tab completion is available to make sure this range actually includes the desired filenames. If this feature somehow conflicts with the command you want to run, say, 'chmod 644 ...', because the current amount of files is equal or larger than 644 (in which case clifm will expand that number), then you can simply run the command as external: ';chmod 644 ...' Tab completion for commands, paths, users home directory, workspaces, wildcards*, file types*, environment variables, bookmarks, profiles, color schemes, file tags, commands history, directory history (via the jump command), remote resources, sort methods, ranges*, the 'sel' key- word*, trashed files*, plus the deselect* and the open-with commands (ow) is also available. To make use of the bookmarks completion, make sure to specify some name for your bookmarks, since these names are used by the completion function. * When using fzf mode for tab completion, multi-selection is available: Press TAB to expand possible selections, then press TAB again to mark desired entries. Once desired entries are marked, press Enter or the Right arrow key: marked entries will be inserted into the command line. Multi-selection is also available for the following commands, provided there is no slash in the query string: ac, ad, bb, br, d/dup, p/pr/prop, r, s, t/tr/trash, and te. Of course, combinations of all these features is also possible. Exam- ple: cp sel file* 2 23-31 . will copy all selected files, plus all files whose name starts with "file", plus those files corresponding to the ELNs 2, and 23 to 31, to the current working directory. In addition to completions and expansions, an auto-suggestions system is also available. See the AUTO-SUGGESTIONS section below. 9. FILE OPENER As clifm's builtin file opener, Lira takes care of opening files when no opening application has been specified in the command line. It does this by automatically parsing a MIME list file (see the FILES section below): it looks first for a matching pattern (either a MIME type or a filename), then checks the existence of the command associated to this pattern, and finally executes it. Lira is controlled via the mime command. File associations are stored in the MIME list file. When running for the first time, or whenever the MIME list file cannot be found, clifm will copy the MIME definitions file from the DATADIR directory (usually /usr/share/clifm/mimelist.clifm) to the local con- figuration directory. Lira will check the file line by line, and if a matching line is found, and if at least one of the specified applications exists, this applica- tion will be used to open the corresponding associated file. Else, the next line will be checked. In other words, the precedence order is top to bottom (for lines) and left to right (for applications). Note: In case of directories (whose MIME type is inode/directory), the entry will be used only for the open-with command (ow). A note about MIME types File MIME types are determined using libmagic the same library used by file(1), which, though highly reliable, is not bullet-proof. Sometimes it fails, either because the appropriate MIME type is not in its data- base, or because the database is just wrong. In either case, you can manually map file extensions to MIME types using a specific file (by default, ~/.mime.types).(1) By way of example, libmagic knows nothing about ILBM image files, and returns application/zip for OpenRaster images. Create ~/.mime.types with the following content: image/x-ilbm iff lbm image/openraster ora Restart clifm and these MIME types will be immediately associated to all files having the specified extensions (to test it, run mm info on any of these files).(2) If required, edit the mimelist and the preview files (mm edit and view edit, to specify how files are opened and previewed respectively), and add a new line handling the corresponding MIME types (say, image/x- ilbm=APP and image/openraster=APP). See below for more information. (1) To use a different file, set $CLIFM_MIMETYPES_FILE to the desired file, for example, CLIFM_MIMETYPES_FILE=/etc/mime.types clifm. (2) In case of issues, bear in mind that the mime.types file is read top to bottom, and that, in case of conclicts (mostly duplicate exten- sions), only the last entry is effective. Important: Though sometimes convenient, determining file types by means of filename extensions alone is unreliable: a file, no matter its type, can bear any file extension, without restriction. Because of this, you might end up executing a command that was not intended due to wrong file identification. Be extra careful when doing this. 1. Syntax In its most basic form, each line in the MIME list file consists of: a) A left value: this is just a regular expression indicating what we are trying to match (it can be a filename, a file extension, or a MIME type). b) A right value: a semicolon separated list of commands to be used as the opening application (the first existing program found in this list will be used). For example: ^text/.*=leafpad which is to be read as follows: Open text files (in this case we are partially matching a MIME type) using leafpad. As explained below, this basic rule can be modified to get much more control on what we are matching and how we execute the opening applica- tion. The syntax is this: [!][X:][N:]REGEX=CMD [ARGS] [%[f,x]] [![E,O]] [&]; ... Note that this syntax departs from the Freedesktop specification in that we do not rely on desktop files (mostly used by desktop environ- ments), but rather on commands and parameters. 2. The left value (REGEX) 2.1. The X prefix Without any prefixes, the rule will attempt to match MIME types, disre- garding if we are running on a graphical or non-graphical environment. For example, ^text/.*=leafpad instructs lira to open all text files using leafpad, no matter if we are running on a graphical or non-graphical environment. However, we usually do not want to use leafpad if we are not running on a graphical environment. In this case, we can write a double rule as follows: X:^text/.*=leafpad !X:^text/.*=nano where the first rule (via the X prefix) is intended for use on graphi- cal environments, where we can use leafpad, and the second one (via the !X prefix) for non-graphical environments, where we rather prefer to use nano. 2.2. The N prefix Sometimes MIME types are not enough to identify a file, or we just want to match a specific filename. In this case, we can use the N prefix to tell Lira that we want to match a filename instead of a MIME type. For example: X:N:^filename.txt$=leafpad in which case we want to match exactly the filename filename.txt (no matter its MIME type). If we want to match file extensions, instead of entire filenames, we can use a regular expression, as follows: X:N:.*.txt$=leafpad Here, we are not matching a specific filename, but a specific file ex- tension, so that the rule reads as follows: open all files ending with .txt using leafpad. 3. The right value (CMD) The right value is a semicolon separated list of commands, each of which contains a command, and optionally, command arguments and modi- fiers. For example: X:N:.*.txt$=leafpad --sync,geany,mousepad,nano which means: Open .txt files (graphical environments only) using leaf- pad --sync, or, if not found, geany, mousepad, or nano, in this order. The file to be opened will be appended to the command string, say leaf- pad --sync FILE. 3.1. The %f placeholder Use the %f placeholder to specify the position of the file to be opened in the command, for example: mpv %f --terminal=no will be translated into: mpv FILE --terminal=no If the placeholder is not specified, the file to be opened will be ap- pended to the command string. Thus, this: mpv --terminal=no amounts to this: mpv --terminal=no FILE. 3.2. STDERR and STDOUT Sometimes we might need to silence either standard error (STDERR), standard output (STDOUT), or both. Use !E and !O to silence them re- spectively. Both can be used together: !EO. Example: leafpad %f !EO, or, to silence only STDERR: leafpad %f !E. 3.3. Run in the background The ampersand character (&) can be used, as usual, to run the opening application in the background. Example: leafpad %f &. 3.4. The %x flag The %x flag is a shorthand for "%f !EO &": the command will be executed in the background and both STDOUT and STDERR will be silenced. As a plus, the command is executed in a new session, i.e. detached from the running terminal (via setsid(3). This flag is recommended to open files via graphical applications. Examples: For GUI applications: APP %x For terminal applications: TERM -e APP %x Replace TERM and APP by the appropriate values (say, xterm and vi re- spectively). The -e option might vary depending on the terminal emula- tor used. Note: In case of archives, the builtin ad command can be used as open- ing application. 3.5. Environment variables Environment variables (e.g. $EDITOR, $VISUAL, $BROWSER, and even $PAGER) are also recognized by Lira. You can even set custom environ- ment variables to be used exclusively by clifm. For example, you can set CLIFM_TERM, CLIFM_EDITOR, and CLIFM_PDF, and then use them to de- fine some associations: X:text/plain=$CLIFM_TERM -e $CLIFM_EDITOR %f & X:N:.*\.pdf$=$CLIFM_PDF %f & 3.6. Using shell scripts Bear in mind that commands will be executed directly without shell intervention, so that no shell goodies (like pipes, condi- tions, loops, etc) are available. In case you need something more complex than a single command (including shell capabili- ties) write your own script and place the path to the script in place of the command. For example: X:^text/.*:~/scripts/my_cool_script.sh 4. Examples: Match a full filename: X:N:some_filename=nano;vim;vi;emacs Note: If the filename contains a dot, quote it like this: some_file- name\.ext (to prevent the REGEX parser from interpreting the dot). Open video files with mpv in the foreground and silence STDERR: ^video/.*=mpv %f !E Open video files with gmplayer in the background and silence both STDERR and STDOUT: ^video/.*=gmplayer %f !EO & (or 'gmplayer %x') Match multiple filenames (starting with "str"): X:N:^str.*=leafpad %x;mousepad %x;kate %x;gedit %x Match a single extension: X:N:.*\.txt$=leafpad %x;mousepad %x;kate %x;gedit %x !X:N:.*\.^txt$=nano;vim;vi;emacs Match multiple extensions: X:N:.*\.(sh|c|py|pl)$:geany %x;leafpad %x;nano Match a single mimetype: !X:^audio/mp3$=mpv %f --terminal=no;ffplay -nodisp -au- toexit;mpv;mplayer Match mutiple mimetypes: X:^audio/.*=mplayer;mplayer2;vlc %x;gmplayer %x;smplayer %x;totem %x In case of MIME types, you can also write the entire expression without relying on any regular expression. For example: !X:text/plain=$TERM -e $EDITOR %x For more information take a look at the mimelist file itself (F6 or mm edit). 5. Using a third-party opener This can be done in two ways: a. Set Opener in the configuration file to the name of the desired opener. For example, to use Ranger's rifle(1): Opener=rifle or, if you prefer xdg-open(1): Opener=xdg-open b. Tell Lira to open all files, no matter the MIME type or filename, via the desired opener. For example: .*=rifle 6. Using Clifm as a standalone file opener Though clifm is a file manager, it can be used as a simple file opener via the --open command line option. For example: clifm --open /path/to/my_file.jpg clifm --open /path/to/my_dir clifm --open https://some_domain Note: When opening web resources clifm will query the mimelist file us- ing text/html as MIME type. Whatever association it finds for this spe- cific MIME type will be used to open the web resource. 10. SHOTGUN 1. Tab completion with file previews Shotgun is clifm's builtin files previewer. Though, as described below, it may be used as a standalone and general purpose file previewer (sim- ilar in this regard to pistol(1)), it is mainly intended to be used by clifm's tab completion function running in fzf mode: every time tab completion is invoked for files, shotgun will be executed with the cur- rently highlighted file as argument (as shown below) to generate the preview. Set the FzfPreview option in the configuration file to false (or run with --no-fzfpreview) to disable this feature. Shotgun is also used by the view command to display file previews in full screen. 2. Running as a standalone files previewer Executed via the --preview command line switch, shotgun performs file preview for any file passed as argument. For example: clifm --preview myfile.txt This command generates a preview of the file myfile.txt and then quits clifm. 3. Customization Previewing applications (based on either MIME type or filename) are de- fined in a configuration file ($XDG_CONFIG_HOME/clifm/profiles/PRO- FILE/preview.clifm) using the same syntax used by Lira (the builtin file opener). See the FILE OPENER section above. You can set an alternative configuration file via the --shotgun-file command line switch: clifm --shotgun-file=/path/to/shotgun/config/file --preview=my- file.txt To customize the appearance of the preview window, use the --pre- view-window option in the FzfTabOptions line in the current color scheme file. For example, if you want the preview window down the file list (instead of to the right): --preview-window=down Default keybindings for the preview window: Alt-p: Toggle the preview window on/off Ctrl-Up / Shift-Up: Scroll the preview window up one line Ctrl-Down / Shift-Down: Scroll the preview window down one line Alt-Up: Scroll the preview window up one page Alt-Down: Scroll the preview window down one page Keybindings can be customized using the --bind option in the FzfTabOp- tions field in the color scheme file. Consult fzf(1) for more information. 4. Image previews Image previews are available via the clifmimg plugin. Run help image- previews or consult the Wiki for more information: https://github.com/leo-arch/clifm/tree/master/misc/tools/imgprev 11. AUTO-SUGGESTIONS Gemini is a builtin suggestions system (similar to that provided by the Fish shell). As you type, Gemini will suggest possible completions right after the current cursor position. The following checks are availabe (the order can be customized, see be- low): a. ELNs b. clifm commands and parameters (including the sel keyword) c. Entries in the command history list (already used commands) d. Filenames in the current working directory and paths (1) e. Entries in the jump database f. Aliases names g. Bookmarks names h. Program names in PATH i. Shell builtins (2) (1) Fuzzy suggestions are supported. For example: dwn > Downloads. En- able this feature via the --fuzzy-marching command line switch or set- ting FuzzyMatching to true in the configuration file. (2) The shell name is taken from /bin/sh. The following shells are sup- ported: bash, dash, fish, ksh, tcsh, and zsh. Command names are checked in the following order: clifm internal commands, commands in PATH, and shell builtins. Note: By default, a brief description for internal commands is sug- gested. You can disable this feature via the SuggestCmdDesc option in the configuration file. To accept the entire suggestion press Right or Ctrl-f: the cursor will move to the end of the suggested command and the suggestion color will change to that of the typed text; next, you can press Enter to execute the command as usual. Otherwise, if the suggestion is not accepted, it will be simply ignored and you can continue editing the current command line however you want. To accept the first suggested word only (up to first slash or space), press rather Alt-Right or Alt-f. Not available for ELNs, aliases and bookmarks names. Bear in mind that suggestions for ELNs, aliases, bookmarks names, the jump function (invoked by the j command), just as filenames and paths (if fuzzy-suggestions are enabled) do not work as the remaining sugges- tions: they do not suggest possible completions for the current input, but rather the value pointed to by it. For example, if you type "12" and the current list of files includes a filename whose ELN is '12', the filename corresponding to this ELN will be printed next to "12" as follows: 12_ > filename (where the underscore is the current cursor po- sition). Press Right or Ctrl-f to accept the suggestion, in which case the text typed so far will be replaced by the suggestion. The order of the suggestion checks can be customized via the Sugges- tionStrategy option in the configuration file. Each check is assigned a lowercase character: a = Aliases names c = Possible completions e = ELNs f = Files in the current directory h = Entries in the commands history j = Entries in the jump database The value taken by SuggestionStrategy is a string containing one or more of the above characters. The characters order in this string spec- ifies the order in which the suggestion checks will be performed. For example, to perform all checks in the same order above, the value of the string should be acefhj (without quotes). Or, if you prefer to run the history check first: hacefj. Finally, you can ignore one or more checks by just omitting the corresponding character (to skip all checks, set the option value to a single dash (-)). So, to ignore the aliases and the ELN checks, set SuggestionStrategy to hcfj. The default value for this option is ehfjac. Note: The check for program names in PATH is always executed at last, except when the ExternalCommands option is disabled, in which case sug- gestions for them are simply not displayed. Suggestions will be printed using one of the following color codes (see the COLOR CODES section above): sf: Used for file and directory names. This includes suggestions for ELNs, bookmarks names, files in the current directory, and possible completions. Default value: 2;4;36 (dimmed underlined cyan) sh: Used for entries in the commands history. sc: Used for aliases and program names in PATH. sx: Used for clifm internal commands and parameters. sp: Greater-than sign (>) used when suggesting ELNs, bookmarks, and aliases names. You can set SuggestFiletypeColor to true in the configuration file to use the color of the file type of the current filename (as set in the color scheme file) instead of the value of sf. For example, if a sug- gestion is printed for a file that is a symbolic link, ln or or (if it's a broken link) will be used instead of sf. 12. SHELL FUNCTIONS Clifm includes a few shell functions to perform specific actions (cd-on-quit, and subshell-notice). Take a look at the corresponding files, in /usr/share/clifm/functions, and follow the instructions. Nee- dles to say, you can write your own functions. 13. PLUGINS Plugins are just scripts or programs (written in any language) intended to add, extend or improve clifm's functionalities. They are linked to actions names defined in a dedicated configuration file ($XDG_CON- FIG_HOME/clifm/profiles/PROFILE/actions.clifm). Note: In stealth mode, since access to configuration files is not al- lowed, plugins are disabled. To list available actions and the plugins they are linked to, run ac- tions. To execute a given plugin, enter the corresponding action name (plus parameters if requiered). To get information about a specific plugin, enter the action name fol- lowed by --help. Though several plugins are provided at installation time (in the plug- ins directory), you can write your owns as you like, with any language you like, and for whatever purpose you want. Writing plugins is gener- ally quite easy; but your mileage may vary depending on what you are trying to achieve. A good place to start is examining the provided plu- gins and reading the actions command description, just as the ENVIRON- MENT and FILES sections below. A convenient helper script is provided to get a consistent look across all plugins, specially those running fzf. This helper script is located in DATADIR/clifm/plugins/plugins-helper, but it will be overridden by $XDG_CONFIG_HOME/clifm/plugins/plugins-helper if found. The location of this file is set by clifm itself in the CLIFM_PLUGINS_HELPER environ- ment variable to be used by plugins. Source the file and use any of the functions and variables provided by it to write a new fzf plugin: # Source our plugins helper if [ -z "$CLIFM_PLUGINS_HELPER" ] || ! [ -f "$CLIFM_PLUGINS_HELPER" ]; then printf "clifm: Unable to find plugins-helper file\n" >&2 exit 1 fi # shellcheck source=/dev/null . "$CLIFM_PLUGINS_HELPER" Plugins can talk to clifm via a dedicated pipe created for this purpose and exposed via an environment variable (CLIFM_BUS). Write to the pipe and clifm will hear and handle the message immediately after the plu- gin's execution. If the message is a path, clifm will run the open function, changing the current directory to the new path, if a direc- tory, or opening it with the file opener, if a file. Otherwise, if the message is not a path, it will be taken and executed as a command. Ex- amples: 'echo "/tmp" > "$CLIFM_BUS"' tells clifm to change the current di- rectory to /tmp 'echo "s *.png" > "$CLIFM_BUS"' makes clifm select all files in the current directory ending with ".png" The pipe (CLIFM_BUS) is deleted immediately after the execution of its content and recreated before running any other plugin. This is a list of available plugins: +---------------------+------------------------------------------+--------------------------------+ | Action name | Description | Dependencies | +---------------------+------------------------------------------+--------------------------------+ | bn | Create files in batch | - | +---------------------+------------------------------------------+--------------------------------+ | bcp | Copy files in batch | - | +---------------------+------------------------------------------+--------------------------------+ | bmi | Import bookmarks | - | +---------------------+------------------------------------------+--------------------------------+ | clip | Interact with the system clipboard | (1) | +---------------------+------------------------------------------+--------------------------------+ | unset | Test terminal's colors capability | (2) | +---------------------+------------------------------------------+--------------------------------+ | cr | Copy files to a remote location | fzf, and scp, ffsend, or croc | +---------------------+------------------------------------------+--------------------------------+ | da | Disk usage analyzer | du, fzf | +---------------------+------------------------------------------+--------------------------------+ | dr | Drag and drop files | dragon or dragon-drag-and-drop | +---------------------+------------------------------------------+--------------------------------+ | fdups | Find/remove file dups | (3) | +---------------------+------------------------------------------+--------------------------------+ | + | Find files in the current directory | fzf or rofi | +---------------------+------------------------------------------+--------------------------------+ | _ (underscore) | Quickly change directory | fzf | +---------------------+------------------------------------------+--------------------------------+ | h | Browse the commands history | fzf | +---------------------+------------------------------------------+--------------------------------+ | - (yes, just a | Navigate/select/preview files | See section below | | dash) | | | +---------------------+------------------------------------------+--------------------------------+ | * | Select files (includes flat view) | fzf, find | +---------------------+------------------------------------------+--------------------------------+ | ** | Deselect files | fzf | +---------------------+------------------------------------------+--------------------------------+ | unset | Show git repo status | git (4) | +---------------------+------------------------------------------+--------------------------------+ | ih | Browse clifm's manpage | fzf | +---------------------+------------------------------------------+--------------------------------+ | i | Image thumbnails previewer | sxiv, feh or lsix | +---------------------+------------------------------------------+--------------------------------+ | ++ | Jump to a directory in the jump database | fzf or rofi | +---------------------+------------------------------------------+--------------------------------+ | kd | Decrypt a GnuPG encrypted file | gpg, tar, sed, grep | +---------------------+------------------------------------------+--------------------------------+ | ke | Encrypt files/dirs using GnuPG | gpg, tar, sed, fzf, awk, xargs | +---------------------+------------------------------------------+--------------------------------+ | ml | List files by a given MIME type | fzf, file | +---------------------+------------------------------------------+--------------------------------+ | music | Create a music playlist | mplayer | +---------------------+------------------------------------------+--------------------------------+ | gg | Pipe files in CWD through a pager | less, column | +---------------------+------------------------------------------+--------------------------------+ | ptot | Preview PDF files as text | pdftotext | +---------------------+------------------------------------------+--------------------------------+ | rrm | Recursively remove files | find, fzf | +---------------------+------------------------------------------+--------------------------------+ | // | Search files by content | fzf, ripgrep | +---------------------+------------------------------------------+--------------------------------+ | unset | Update plugins | (5) | +---------------------+------------------------------------------+--------------------------------+ | vid | Preview video files thumbnails | ffmpegthumbnailer | +---------------------+------------------------------------------+--------------------------------+ | vt | Virtual directory for sets of files | sed | +---------------------+------------------------------------------+--------------------------------+ | wall | Set image as wallpaper | (6) | +---------------------+------------------------------------------+--------------------------------+ | unset | Pick/select files via clifm | (7) | +---------------------+------------------------------------------+--------------------------------+ | Ctrl-y | Copy the line buffer to the clipboard | (8) | +---------------------+------------------------------------------+--------------------------------+ (1) xclip or xsel (Xorg), wl-copy/wl-paste (Wayland), clipboard (Haiku), clip (Cygwin), pbcopy/pbget (MacOS), termux-clipboard-get/ter- mux-clipboard-set (Termux), cb (cross-platform: https://github.com/Slackadays/Clipboard) (2) colors.sh (by default unset) (3) find, md5sum, sort, uniq, xargs, sed, stat (4) The git_status.sh plugin is not intended to be used as a normal plugin, that is, executed via an action name, but rather to be executed as a prompt command (it will be executed immediately before each prompt). Add this line to the main configuration file: promptcmd /usr/share/clifm/plugins/git_status.sh Whereas this plugin provides basic Git integration, it could be easily modified (it is just a few lines long) to include whatever git function you might need. (5) update.sh (by default unset) (6) feh, xloadimage, hsetroot, or nitrogen (for X); swww or swaybg (for Wayland) (7) file_picker.sh (by default unset). Usage example: ls -ld $(file_picker.sh) (8) Dependencies: cb, wl-copy, xclip, xsel, pbcopy, termux-clip- board-set, clipboard, or clip. Consult the plugin file itself (xclip.sh) for more information Dependencies of the previewer plugin (fzfnav.sh) archives: atool, bsdtar, or tar images: kitty terminal, imagemagick, and ueberzug or viu or catimg or img2txt or pixterm fonts: fontpreview or fontforge docs: libreoffice, catdoc, odt2txt, pandoc PDF: pdftoppm, pdftotext or mutool epub: epub-thumbnailer DjVu: djvulibre or djvutxt postscript: ghostscript videos: ffmpegthumbnailer audio: ffmpeg, mplayer, or mpv web: w3m, links, elinks, or pandoc markdown: glow highlight: bat, highlight, or pygmentize torrent: transmission-cli json: python or pq file info: exiftool, mediainfo, or file To run the pager.sh plugin, for example, you only need to enter the corresponding action name, in this case gg. In case of need, all plug- ins provide a -h,--help switch for a brief usage description. Note: The fzfnav plugin uses fzf(1) to navigate the filesystem and BFG (a script located in the plugins directory) to show previews (to dis- play image previews BFG requires ueberzug(1) or the Kitty protocol via the Kitty terminal). A configuration file (BFG.cfg, in the plugins di- rectory itself) is provided to customize the previewer's behavior. Note 2: An alternative files previewing function (builtin, and thereby faster than BFG) is provided by shotgun. See the SHOTGUN section above for more information. In addition to the builtin BFG previewer, fzfnav supports the use of both Ranger's scope.sh script and pistol(1). To use scope, edit the BFG configuration file and set USE_SCOPE to 1 and SCOPE_FILE to the correct path to the scope.sh file (normally $HOME/.config/ranger/scope.sh). To use pistol instead, set USE_PISTOL to 1. Take a look at the Wiki for more information: https://github.com/clifm/wiki/Advanced#plugins 14. AUTOCOMMANDS Heavily inspired by Vifm, the autocommands function allows the user a fine-grained control over clifm settings. It is mostly devised as a way to improve performance for remote filesystems (usually slower than lo- cal ones) by allowing you to turn off some features (like the files counter) that might greatly affect performance under some circumstances (like remote connections). However, the autocommands function is not restricted to this specific use case: use it for whatever purpose you find useful. Note: We describe here permanent autocommands, which need to be defined in the configuration file. Temporary autocommands (set via the command line and valid only for the current directory and the current session) are also available via the auto command. See above. Add a line preceded by the autocmd keyword to the main configuration file. The general syntax is: autocmd TARGET cmd,cmd,cmd TARGET specifies the object to which subsequent commands will apply. It can match either directory names (paths) or workspaces. 1. To match directory names use a glob pattern (as specified by glob(7)). If no glob metacharacter is provided, the string will be com- pared as is to the current working directory. To invert the meaning of a pattern, prepend an exclamation mark. To match all directories under a specific directory (including this directory itself) use the double asterisk (**). A few examples: ~/Downloads Match exactly the Downloads directory (and only this directory) in your home directory ~/Downloads/* Recursively match all subdirectories in ~/Downloads (excluding the Downloads directory itself) /~/Downloads/** Recursively match all subdirectories in ~/Downloads (including the Downloads directory itself) ~/Downloads/*.d Match all subdirectories in ~/Downloads ending with ".d" (excluding the Downloads directory itself) !~/Downloads Match everything except the ~/Downloads directory 2. You can match workspaces using the ampersand character (@) followed by the ws keyword and then the workspace number. For example, to match the third workspace: @ws3, or, to match the first workspace, @ws1. To match instead all workspaces except the second one: !@ws2. TARGET is followed by a comma separated list of commands: !CMD: The exclamation mark allows you to run shell commands, custom bi- naries or scripts The following codes are used to control clifm's file list: Code Description Example cs Color scheme cs=zenburn fc Files counter fc=0 ft Files filter ft=.*\.pdf$ fz Full dir size fz=1 hf,hh Hidden files hf=0 lm Light mode lm=1 lv,ll Long/detail view lv=0 mf Max files mf=100 (1) mn Max filename length mn=20 (1) od Only directories od=1 pg Pager pg=0 st Sort method st=5 sr Reverse sort sr=1 To remove a value, set the option to an empty value. For example, to remove the files filter and the color scheme: ft=,cs=. (1) This option supports the unset keyword to remove the corresponding limit. E.g.: mf=unset,mn=unset. Examples 1. Run in light mode and disable the files counter for the remotes di- rectory:(1) autocmd /media/remotes/** lm=1,fc=0 2. Just a friendly reminder: autcomd ~/important !printf "Important: keep your fingers outta here!\n" && read -n1 3. This directory has thousands of files. Show only the first hundred and enable the pager: autocmd /usr/bin mf=100,pg=1 4. Lots of media files (with large filenames). Truncate filenames to 20 chars max and run the files previewer:(2) autocmd ~/Downloads mn=20,!~/.config/clifm/plugins/fzfnav.sh 5. I want the second workspace, no matter what the current directory is, to list files in long view: autocmd @ws2 lv=1 6. Mmm, just because I can. Be creative! autocmd /home/user hf=0,cs=nord,lv=1 autocmd / lv=1,fc=0,cs=solarized,st=5 (1) This is the recommended configuration for remote filesystems (2) As seen here, plugins can be used as well: in this case, we want to run fzfnav (to make use of the files preview capability) whenever we enter the Downloads directory, usually containing videos, music, and images. NOTE: If you decide to use a plugin, bear in mind that it won't be able to communicate with clifm, because the autocommand func- tion always executes commands as external applications using the system shell. Bear in mind that autocmd directives are evaluated from top to bottom, so that subsequent matching entries will overwrite options set by pre- vious entries. Autocommand notifications By default, a gray 'A' is printed to the left of the prompt whenever an autocommand is active for the current directory. The behavior of this indicator can be customized via the InformAutocmd option in the configuration file. The color code used to colorize this indicator is ac (see the COLORS section above). Autocommand files: .cfm.in and .cfm.out To use this feature, you must first set ReadAutocmdFiles to true in the main configuration file. However, bear in mind that autocommand files will never be read if running on an untrusted environment (i.e. if run- ning with --secure-cmds, --secure-env, or --secure-env-full). Two files are specifically checked by the autocommands function: .cfm.in and .cfm.out (they must be non-empty regular files of at most PATH_MAX (usually 4096) bytes, and no NUL byte must be contained in them). The content of these files is a single instruction, either a shell com- mand or, if you need more elaborated stuff, a script (or custom bi- nary). Note that codes to modify clifm's settings (as described above) are not available here. If a directory contains a file named .cfm.in, clifm will execute (via the system shell) its content when entering this directory (before listing files). If the file is named rather .cfm.out, its content will be executed immediately after leaving this directory (and before list- ing the new directory's content). For example, if you want a simple notification whenever you enter or leave your home directory, create both .cfm.in and .cfm.out files in the home directory with the following content: For .cfm.in: printf "Entering %s ..." "$PWD" && read -n1 && clear For .cfm.out: printf "Leaving %s ..." "$OLDPWD" && read -n1 15. FILE TAGS Etiqueta is clifm's builtin files tagging system 1. How does Etiqueta work? File tags are created via symlinks using a specific directory under the user's profile: ${XDG_CONFIG_DIR:-/home/USER/.config}/clifm/pro- files/USER/tags Every time a new tag is created, a new directory named as the tag it- self is created in the tags directory. Tagged files are just symbolic links to the actual files created in the appropriate directory. For ex- ample, if you tag ~/myfile.txt as work, a symbolic link to ~/my- file.txt, named myfile.txt will be created in tags/work. 2. Handling file tags tag is the main Etiqueta command and is used to handle file tags. Its syntax is as follows: tag [add, del, list, list-full, new, merge, rename, untag] [FILE]... [[:]TAG] NOTE: The :TAG notation is used for commands taking both file and tag names: 'tag add FILES(s) :TAG ...', to tag files, and 'tag untag :TAG file1 file2', to untag files. Otherwise, TAG is used (without the lead- ing colon). For example: 'tag new docs', to create a new tag named docs, or 'tag del png', to delete the tag named png. Both short and long command format can be used: +--------------+-------------+---------------------------+ | Short format | Long format | Description | +--------------+-------------+---------------------------+ | ta | tag add | Tag files | +--------------+-------------+---------------------------+ | td | tag del | Delete tag(s) | +--------------+-------------+---------------------------+ | tl | tag list | List tags or tagged files | +--------------+-------------+---------------------------+ | tm | tag rename | Rename tags | +--------------+-------------+---------------------------+ | tn | tag new | Create new tag(s) | +--------------+-------------+---------------------------+ | tu | tag untag | Untag file(s) | +--------------+-------------+---------------------------+ | ty | tag merge | Merge two tags | +--------------+-------------+---------------------------+ 3. Usage examples +---------------------+----------------------------+----------------------------------------------+ | Short format | Long format | Description | +---------------------+----------------------------+----------------------------------------------+ | tl | tag list | List available tags | +---------------------+----------------------------+----------------------------------------------+ | - | tag list-full | List available tags and all tagged files | +---------------------+----------------------------+----------------------------------------------+ | tl work | tag list work | List all files tagged as work | +---------------------+----------------------------+----------------------------------------------+ | tl file.txt | tag list file.txt | List tags applied to the file file.txt | +---------------------+----------------------------+----------------------------------------------+ | tn dogs cats | tag new dogs cats | Create two empty tags: dogs and cats | +---------------------+----------------------------+----------------------------------------------+ | ta *.png :images | tag add *.png :images :png | Tag PNG files as both images and png (1) (2) | | :png | | | +---------------------+----------------------------+----------------------------------------------+ | ta sel :special | tag add sel :special | Tag all selected files as special | +---------------------+----------------------------+----------------------------------------------+ | tr documents docs | tag rename documents docs | Rename the tag documents as docs | +---------------------+----------------------------+----------------------------------------------+ | ty png images | tag merge png images | Merge the tag png into images (3) | +---------------------+----------------------------+----------------------------------------------+ | td images | tag del images | Remove the tag images (4) | +---------------------+----------------------------+----------------------------------------------+ | tu :work file1 dir2 | tag untag :work file1 dir2 | Untag a few files from work (5) | +---------------------+----------------------------+----------------------------------------------+ (1) Tags are created if they do not exist (2) Since add is the default action, it can be omitted: tag *.png :im- ages :png. (3) All files tagged as png will be now tagged as images, and the png tag will be removed. (4) Untag all files tagged as images and remove the tag itself (5) Tab completion is available to complete tagged files. If using the fzf mode, multiple files can be selected using the the TAB key. 4. Operating on tagged files The t:TAG construct (or tag expression) is used to operate on tagged files via any command, be it internal or external. A few examples: +--------------------+------------------------------------------------------------------------+ | Command | Description | +--------------------+------------------------------------------------------------------------+ | p t:docs | Print properties of files tagged as docs | +--------------------+------------------------------------------------------------------------+ | r t:images | Remove all files tagged as images | +--------------------+------------------------------------------------------------------------+ | stat t:docs t:work | Run stat(1) over all files tagged as docs and all files tagged as work | +--------------------+------------------------------------------------------------------------+ 4.1 Operating on specific tagged files NOTE: This feature, as always when multi-selection is involved, is only available when tab completion mode is set to fzf. See the Tab comple- tion subsection of the BUILT-IN-EXPANSIONS section above. You might not want to operate on all files tagged as some specific tag, say work, but rather on some files tagged as work. Tab completion is used to achieve this aim. Let's suppose you have a tag named work which contains ten tagged files, but you need to operate (say, print the file properties) only on two of them, say, work1.odt and work2.odt: p t:work<TAB> The list of files tagged as work will be displayed via fzf. Now mark the two files you need using TAB, press Enter or Right, and the full path to both files will be inserted into the command line. So, 'p t:work' will be replaced by 'p /path/to/work1.odt /path/to/work2.odt'. 16. VIRTUAL DIRECTORIES CliFM is able to read and list files from the standard input stream (STDIN). Each file in the list should be an absolute path, terminated with a new line character (\n) and stripped from extra characters not belonging to the path itself. The size of the input stream buffer is 262MiB (65536 paths, provided each path takes PATH_MAX bytes (4096 by default)). Each file passed via standard input is stored as a symbolic link point- ing to the original file in a temporary directory (called here virtual directory) with read-only (0500) permissions. This directory, and all its contents, will be deleted at program exit. Use the --virtual-dir command line flag to specify a custom directory (it if does not exist, it will be created) instead of the default one, created in the system temporary directory (usually /tmp/clifm/USER/vdir.XXXXXX, where XXXXXX is a random six digits string). The user can operate on these files as if they were any other regular file, since all operations performed on these symbolic links (provided the current working directory is the virtual directory where all these files are stored) are performed on the target files and NOT on the sym- bolic links themselves. Once in the virtual directory, files are listed by default using only the base name of the target file. For example, if the target file is /home/user/Downloads/myfile.tar.gz, this file will be listed as my- file.tar.gz. If this file already exists in the virtual directory (be- cause there is another target file with the same base name, say, /home/user/Documents/tars/myfile.tar.gz), a random six digits suffix will be appended to the file (for instance, myfile.tar.gz.12Rgj6). Since this listing mode does not allow the user to get a clear idea of the actual location of each listed file, a keybinding (by default Alt-w) is available to toggle short (base names only) and long file- names: in this latter case, filenames are listed using the full path to the target file, replacing slashes by colons (:). For example, if the target file is /home/user/Downloads/myfile.tar.gz, it will be listed in the virtual directory as home:user:Downloads:myfile.tar.gz. If you prefer the long names approach, you can use the --vir- tual-dir-full-paths command line flag. Note: Bear in mind that the restore last path function is disabled when listing in this way. CliFM provides to ways of using virtual directories: 1. Reading files from the standard input 2. Listing sets of files via the virtualize.sh plugin (which is in fact a special use case of point 1) 1. Standard input Examples: ls -Ad /var/* | clifm This command will pass all files in the directory /var to CliFM If you need to perform more specific queries, you can use find(1) as follows: find -maxdepth 1 -size +500k -print0 | tr '\0' '\n' | sed 's/.//g' | clifm The above command will pass all files in the current directory bigger than 500KiB to CliFM. You can also use stream redirection: ls -Ad $PWD/* > list.txt clifm < list.txt 2. The virtualization plugin The virtualize.sh plugin, bound by default to the vt action name, is intended to provide an easy way of listing sets or collections of files, such as selected, tagged, or bookmarked files. For example, to send all selected files to a virtual directory, you can issue this com- mand: vt sel and, if you want rather files tagged as PDF: vt t:PDF Of course, individual files can also be used: vt file1 file2 file3 Once executed, the vt plugin will launch a new instance of CliFM (on a new terminal emulator window) where you can operate on the specified files as if they were just normal files. Once done, quit this new in- stance (via the q command) to return to the primary instance of CliFM. Note: By default, the terminal emulator used is xterm(1), but it can be changed by editing the plugin script (virtualize.sh). If navigating the filesystem, you can quickly go back to the virtual directory using the -d option: vt -d. The navigation keys (see the KEY- BOARD SHORTCUTS section above) and the CLIFM_VIRTUAL_DIR environment variable are also available (Shift-Left/Shift-Right or cd $CLIFM_VIR- TUAL_DIR). Tip: Write an alias to make this even easier: alias vtd='cd $CLIFM_VIRTUAL_DIR' 17. NOTE ON SPEED clifm is by itself quite fast by default, but if speed is still an is- sue, it is possible to get some extra performance. The two most time consuming features are: 1) The files counter, used to print the amount of files contained by listed directories. Disabling this option produces a nice performance boost. 2) In normal mode, fstatat(3) is used to gather information about listed files. Since this function, especially when executed hundreds (and even thousands) of times, is quite time consuming, the light mode was implemented as an alternative listing process omitting all calls to this function (this does not apply, however, to the long view: since we need to display files information, fstatat(3) is required). When running in light mode, however, a few features are lost: 1. Only basic file classification is performed, namely, that provided by the d_type field of a dirent struct (see readdir(3)). Bear in mind, nonetheless, that whenever _DIRENT_HAVE_D_TYPE was not set at compile time, or in case of a DT_UNKNOWN value for a given entry (we might be facing a filesystem not returning the d_type value, for example, loop devices), clifm will fall back to stat(3) to get basic files classifi- cation. 2. Color per file extension is disabled for performance reasons. 3. The marker for selected files (*) is lost as well: to keep track of selected files and thus recognize them in the current list of files, we make use of files device and inode number, which is provided by fs- tatat(3). Besides these two features, a few more things can be disabled to get some extra speed (though perhaps unnoticeable): icons (if enabled), columns, colors, and, if already running without colors, file type in- dicators. Because listing lots of files could be expensive and time consuming, you can also try to limit the amount of files printed for each visited directory (see the mf command above). Despite the above, however, it is important to bear in mind that list- ing speed does not only depend on the program's code and enabled fea- tures, but also on the terminal emulator used. Old, basic terminal emu- lators like Xterm, Aterm, and the kernel builtin console are really slow compared to more modern ones like Urxvt, Lxterminal, ST, and Ter- minator, to name just a few. If using Xterm, a nice speed boost is provided by the fast scroll op- tion: set fastScroll to true in your ~/.Xresources file. See xterm(1). 18. KANGAROO FRECENCY ALGORITHM The directory jumper function is designed to learn the navigation habits of the user. The information is stored in a database (see the FILES section below) used to get the best match for a given string pro- vided by the user. In this sense, Kangaroo is like a quick, smart, and evolved cd function. The information stored in the database, always per directory, is: a) Permanent entry ('+'): this directory will not be removed from the database, no matter its rank b) Number of visits c) Date of first visit (seconds since the Unix epoch) d) Date of the last visit (seconds since Unix epoch) e) The full path to each visited directory With this information it is possible to build a ranking of directories to offer the user the most accurate matches for each query string. The matching algorithm takes into account mainly two factors: frequency and recency (which is why this kind of algorithm is often called a frecency algorithm). After getting an initial list of matches based on the query string(s) entered by the user, the frequency algorithm is applied on each entry in the list. The algorithm is quite simple: (visits * VISIT-CREDIT) / days-since-first-visit. As a result, we get the average of visits per day since the day of the first visit (what we call the directory rank). NOTE: VISIT-CREDIT is a hardcoded value: 200. There are however some further steps in the ranking process: Bonus points. Extra credits or penalties are assigned based on the directories last access time according to the following simple algorithms: Within last hour: rank * 4 Within last day: rank * 2 Within last week: rank / 2 More than a week: rank / 4 If the last query string matches the basename of a directory, the entry for this directory has 300 extra credits. This is done simply because users normally use directory basenames as query strings: they are eas- ier to remember. In the same way, pinned directories get 1000 extra credits, bookmarked directories 500 credits, directories active in a workspace 300 credits, and directories marked as permanent 300 credits. For example: if the query string is "test", /media/data/test will be matched. Now, if this directory was accessed within the last hour, and its rank was 200, it becomes 800. But, because the search string matches its basename, it gets 300 extra credits, and, if this directory is in addition bookmarked, pinned, and marked as permanent, it gets 1800 extra credits. In this way the total rank of this directory in the matching process is 2900. In doing so, we have more chances of matching what the user actually wanted to match. Once all entries in the initial list of matches have been filtered via the above procedure and ranked, we can return the best ranked entry. The higher rank a directory has, the more priority it has over the re- maining entries in the initial list of matches. Automatic maintenance is done on the database applying a few simple procedures: a) If PurgeJumpDB is set to true (see the main configuration file), each entry in the database is checked at startup to remove non-existent directories. This option is set to false by default to avoid removing paths pointing to unmounted filesystems (like removable devices or re- mote locations) which you still might want to keep. Non-existent direc- tories, however, will be removed soon or later anyway due to their low rank value (see below). b) Once the rank of a directory falls below MinJumpRank (by default 10), it is forgotten and deleted from the database. The MinJumpRank value can be customized in the configuration file. To make non-fre- quently visited directories disappear quicker from the database, in- crease this value. If set to 0, by contrast, directories will never be removed from the database. c) Once the sum total of ranks reaches MaxJumpTotalRank (by default 100000), each individual rank is divided by a dynamic factor so that the total rank becomes less than or equal to MaxJumpTotalRank. If some rank falls in the process below MinJumpRank (and provided this latter is not 0), it is removed from the database. MaxJumpTotalRank can be modified in the configuration file. The higher the value of MaxJumpTo- talRank, the more time directories will be kept in the database. NOTE: Directories visited in the last 24 hours, just as pinned, book- marked directories, and directories currently used in some workspace, will not be removed from the database, no matter what their rank is. In other words, if you want to indefinitely keep a given directory in the jump database, bookmark it, or mark it as permanent (edit the database, via je or j --edit, and prepend a plus sign (+) to the corresponding entry). The idea of 'frecency' was, as far as I know, first devised and de- signed by Mozilla. See https://wiki.mozilla.org/User:Mcon- nor/Past/PlacesFrecency. However, it is also implemented, though using different algorithms, by different projects like autojump, z.lua, and zoxide. 19. ENVIRONMENT The following variables are read at initialization time: NO_COLOR If set to any value, clifm will run colorless CLIFM_NO_COLOR Same as NO_COLOR, but specific to clifm CLICOLOR_FORCE Force the use of colors, even if the terminal informs not sup- porting colors CLIFM_FORCE_COLOR Same as CLICOLOR_FORCE, but specific to clifm COLORTERM If set to either truecolor or 24bit, clifm assumes the terminal emulator to be capable of displaying true colors (and thereby also 256 colors), despite what the terminfo(5) database informs. CLIFM_FILE_COLORS A colon separated list of file type color codes in the same form specified above in the COLOR CODES section CLIFM_EXT_COLORS Same as above, but for file extensions CLIFM_IFACE_COLORS Same as above, but for different elements of clifm's interface CLIFM_DATE_SHADES A comma separated list of colors used to print timetamps based on age CLIFM_SIZE_SHADES Same as CLIFM_DATE_SHADES, but for file sizes CLIFM_PREVIEW_MAX_SIZE If running with --preview, or PreviewMaxSize is not set in the configuration file, no preview is generated for files larger that this value. The value must be specified in KiB: for exam- ple, 2048 is read as 2 MiB. CLIFM_TEMPLATES_DIR A custom file templates directory CLIFM_HISTFILE A custom commands history file CLIFM_FILTER Define a file filter. If set, this variable overrides the Filter option in the configuration file CLIFM_SUDO_CMD Name of the authenticator program. Used by the X command (to launch a new instance of **clifm** as root), the Alt-v keybind- ing (to prepend the authenticator program name to the current command line), and for some operations on archives (ISO files). Defaults to sudo (or doas if compiled on OpenBSD). Example: CLIFM_SUDO_CMD=doas clifm. SHELL An absolute path to the shell to be used by clifm to run exter- nal commands. Only values found in /etc/shells are allowed. CLIFM_SHELL Same as SHELL, but specific to clifm (takes precedence over SHELL). TMPDIR Path to a directory where temporary files will be created CLIFM_TMPDIR Same as TMPDIR, but specific to clifm (takes precendece over TM- PDIR) TERM Terminal type for which output is to be prepared FZF_DEFAULT_OPTS A quoted list of options to be passed to fzf (if used for tab completion) TIME_STYLE If set from neither --time-style nor TimeStyle (in the configu- ration file), use this time style for the long view mode CLIFM_TIME_STYLE Same as TIME_STYLE, but specific to clifm (takes precedence over TIME_STYLE) PTIME_STYLE If set from neither --ptime-style nor PTimeStyle (in the config- uration file), use this time style for the p/pp command and the --stat/--stat-full command line switches CLIFM_COLUMNS The number of terminal columns CLIFM_LINES The number of terminal lines CLIFM_MIMETYPES_FILE Set a custom mime.types file (instead of the default, ~/.mime.types). Consult the FILE OPENER section form more infor- mation. Except when running in stealth mode, clifm sets the following environ- ment variables: CLIFM Path to the configuration directory. By inspecting this variable other programs can find out if they were spawned by clifm. It can also be used to quickly jump to the configuration directory: cd $CLIFM or just $CLIFM CLIFMRC Path to the main configuration file (by default ~/.con- fig/clifm/profiles/default/clifmrc) CLIFM_PID PID number of clifm's running instance CLIFM_VERSION Version number of clifm's running instance CLIFM_VIRTUAL_DIR Path to the currently used virtual directory only if (and while) the virtual directory function is exectued. See the VIRTUAL DI- RECTORIES section above. SHLVL Incremented by one each time a new shell is started. CLIFMLVL Same as SHLVL, but specific to clifm. If Notifications is set to false for the current prompt, the following variables are exported to the environment to be used, if needed, by your custom prompt: CLIFM_STAT_SEL Current amount of selected files CLIFM_STAT_TRASH Current amount of trashed files CLIFM_STAT_ERROR_MSGS Current amount of error messages CLIFM_STAT_WARNING_MSGS Current amount of warning messages CLIFM_STAT_NOTICE_MSGS Current amount of notice messages CLIFM_STAT_WS Current workspace number CLIFM_STAT_EXIT Exit code of the last executed command CLIFM_STAT_ROOT 1 if user is root (UID = 0), 0 otherwise CLIFM_STAT_STEALTH 1 if running in stealth mode, 0 otherwise When running a plugin, the following environment variables are set: CLIFM_BUS The path to a pipe by means of which plugins can talk to clifm. See the PLUGINS section for more information. CLIFM_COLOR_SCHEME Set to the name of the current color scheme CLIFM_COLORLESS Set to 1 if running without colors CLIFM_CUR_WS Set to the current workspace number CLIFM_DIRS_FIRST Set to 1 if list-dirs-first is enabled. Otherwise it is set to 0 CLIFM_FILES_COUNTER Set to 1 if files-counter is enabled. Otherwise it is set to 0 CLIFM_FILES_FILTER Set to the files filter string. Unset if no files filter is set CLIFM_FILTER_REVERSE Set to 1 if filter-reverse is set or to 0 otherwise (unset if no files filter is set) CLIFM_FOLLOW_LINKS Set to 1 if follow-symlinks is enabled. Otherwise it is set to 0 CLIFM_LIGHT_MODE Set to 1 if light-mode is enabled. Otherwise it is set to 0 CLIFM_LINE When running a plugin via a keybinding, this variable holds the content of the current line buffer. For a usage example see the xclip.sh plugin. CLIFM_LONG_VIEW Set to 1 if long-view is enabled. Otherwise it is set to 0 CLIFM_MAX_FILES Set to MAX_FILES if max-files is set. Unset otherwise. CLIFM_ONLY_DIRS Set to 1 if only-dirs is enabled. Otherwise it is set to 0 CLIFM_PLUGINS_HELPER Set to the full path to the plugins-helper script used by many plugins. CLIFM_PROFILE Set to the name of the current profile. CLIFM_SEL_FILES Set to the number of currently selected files (unset if there are no selected files) CLIFM_SELFILE Set to the path to the current selection file CLIFM_SHOW_HIDDEN Set to 1-3 if show-hidden is enabled (true, first, last, in this order). Otherwise it is set to 0. CLIFM_SORT_REVERSE Set to 1 if sort-reverse is enabled. Otherwise it is set to 0 CLIFM_SORT_STYLE Set to the current sorting method CLIFM_TRASH_FILES Set to the number of currently trashed files (unset if there are no trashed files) CLIFM_TRUNCATE_NAMES Set to 1 if truncate-names is enabled. Otherwise it is set to 0 20. SECURITY Since clifm executes OS commands, it needs to provide a way to securely run these commands, specially when it comes to untrusted environments. Two features are provided to achieve this aim: secure environment and secure commands. Both features are aimed at protecting the program and the system as such from malicious input, either coming from environment variables or from indirect input, that is to say, input coming not from the command line (in which is assumed that it is the user herself who is executing the given command), but from files: this is the case of default associ- ated applications (the mime command), autocommands, aliases, plugins, (un)mount commands (via the net command), just as profile and prompt commands. In an untrusted environment, an attacker could cause unexpected and in- secure behavior (even command injection) using environment variables, or inject malicious commands via indirect input, commands which will be later executed by clifm without the user's consent (i.e. automati- cally). This is why we provide a mechanism to minimize this danger: if running in an untrusted environment, the secure environment and secure commands features are there to prevent (at least as far as possible) this kind of attacks. A) Secure environment Programs inherit the environment from the parent process. However, if this inherited environment is not trusted, not secure, it is always a good idea to sanitize it using only sane values, preventing thus unde- sired and uncontrolled input that might endanger the program and the system itself. The secure-environment function forces clifm to run on a such a sani- tized environment. There are two secure-environment modes, the regular, and the full one. To enable the regular mode, run clifm with the --secure-env command line option. Otherwise, enable the full mode using --secure-env-full. a) Regular: in this mode, the inherited environment is cleared, though a few variables are preserved to keep clifm running as stable as possi- ble. These preserved variables are: TERM, DISPLAY, LANG, TZ, and, if fzf tab completion mode is enabled, FZF_DEFAULT_OPTS. The following variables are set in an environment agnostic way (that is, securely): - HOME, SHELL, and USER are retrieved using getpwuid(3) - PATH is set consulting _PATH_STDPATH (or _CS_PATH if the former is not available) - IFS is set to a sane, hard-coded value: " \n\t" (space, new line char, and horizontal TAB) As a plus, 1) core dumps are disabled, 2) the umask value is set to 0077 at startup and the creation mode (when using the new command) is forced to 0700 for directories and 0600 for files, 3) non-standard file descriptors (>2) are closed, 4) SUID/SGID privileges, if any, are dropped, and 5) autocommand files aren't read at all (even if ReadAu- tocmdFiles is set to true). b) Full: this mode is just like the regular mode, except that nothing is imported from the environment at all and only PATH, HOME, USER, SHELL, and IFS are set (as described above). Everything else remains unset, and is the user's responsibility to set environment variables (via the export function), as needed. In this case, you might want to set, at least, TERM, and, if running in a graphical environment, DIS- PLAY. Be aware that enabling secure-environment might break some functions, depending on the system configuration. B) Secure commands Some commands are automatically executed by clifm: (un)mount commands (via the net command), opening applications (via Lira), aliases, and plugins, just as prompt, profile, and autocommands. These commands are read from a configuration file and then executed. Now, if an attacker has access to any of these files, she might force clifm to run any ar- bitrary command, and thereby possibly exposing the whole system. Every time a command is thus automatically executed via the system shell (i.e. without the user's direct consent), the secure commands function performs four different, though intrinsically related tasks aimed to mitigate command injection and/or unexpected behavior: a) Plugins are disabled. b) Only command base names are allowed: nano, for instance, is allowed, while /usr/bin/nano is not. In this way we can guarantee that only com- mands found in a sanitized PATH (see the point d below) will be exe- cuted. This is done in order to prevent the execution of custom bina- ries/scripts, for example: /tmp/exec_file. c) Commands are validated using a whitelist of safe characters (mostly to prevent stream redirection, conditional execution, and so on, for example, 'your_command;some_injected_command'). This set of safe char- acters slightly vary depending on the command being executed (because they use different syntaxes): Net command: a-zA-Z -_.,/= Prompt, profile, autocommands: a-zA-Z -_.,/"' Mime command: a-zA-Z -_.,%& Commands containing at least one unsafe character will be rejected. Of course, we cannot (and should not) prevent what looks like legitimate, benign commands from being executed. But we can stop commands that, in an untrusted environment, look suspicious. This is specially the case of stream redirection (>), pipes (|), sequential (;) and conditional execution (&&, ||), command substitution ($(cmd)), and environment variables ($VAR). d) A secure environment is set (--secure-env is implied; to run on a fully sanitized environment run as follows: --secure-cmds --se- cure-env-full. 21. MISCELLANEOUS NOTES Sequential and conditional execution of commands: For each of the internal commands (see the COMMANDS section above) you can use the semicolon to execute them sequentially and/or the double ampersand to execute them conditionally. Example: cmd1; cmd2 && cmd3. Though you can use here external commands as well, bear in mind that, whenever at least one internal command is involved in a chained list of commands, clifm will take care of executing this list (simply because the system shell isn't able to understand any of these commands), so that no shell inter-process function (like pipes), nor any stream redi- rection or shell expression (like IF blocks or FOR loops) will be available. However, the shell is still used to run single external com- mands found in the chained list, but in isolation from the remaining commands in this list. As a rule of thumb, when using chained commands make sure to always ex- pand ELNs to avoid undesired consequences. If, for instance, you issue this command: touch aaa && r 3, you will end up deleting a file you were not intended to delete, simple because after the successful execu- tion of the first command, the ELN 3 corresponds now to a different file. External commands: Clifm is not limited to its own set of internal commands, like open, sel, trash, etc. It can run any external command as well, provided ex- ternal commands are allowed (see the -x option, the ext command, or the configuration file). External commands are executed using an actual shell (say, /bin/bash), which is specified by clifm as follows: 1. If the CLIFM_SHELL environment variable is set, this value is used. 2. If the SHELL environment variable is set, this value is used. 3. If none of the above, the value will be taken from the passwd database (via getpwuid(3)). By beginning the external command by a colon or a semicolon (':', ';') you tell clifm not to parse the input string, but instead letting this task to the system shell. Bear in mind that clifm is not intended to be used as a shell, but as the file manager it is. Terminal emulators and non-ASCII characters: It depends on the terminal emulator you use to correctly display non-ASCII characters and characters from the extended ASCII charset. If, for example, you create a filenamed "and" (the Spanish word for 'rhea'), it will be correctly displayed by the Linux console, Lxtermi- nal, and Urxvt, but not thus by more basic terminal emulators like Aterm. Spaces and filenames: When dealing with filenames containing spaces, you can use both single and double quotes (e.g.: "this file" or 'this file') plus the backslash character (e.g.: this\ file). Starting path: By default, clifm starts in the current working directory. However, you can always specify a different path by passing it as positional parame- ter. E.g.: clifm /home/user/misc. You can also permanently set up the starting path in the clifm configuration file. If the RestoreLastPath option is set to true, clifm will start instead in the last visited di- rectory (and in the last used workspace), unless the starting path (and optionally the workspace number) is specified using the appropriate command line options. Default profile: Clifm's default profile is default. To create alternative profiles use the -P command line option or the pf add command (see above). 22. FILES CONFIGURATION FILE The main configuration file is looked up in these places (and in this order): 1. -c,--config-file switch 2. $CLIFMRC variable 3. $XDG_CONFIG_HOME/clifm/profiles/PROFILE/clifmrc directory If $XDG_CONFIG_HOME is not set, $HOME/.config is used instead. If running with secure-environment (via either --secure-cmds, --secure-env, or --secure-env-full) no environment variable is read, so that the home directory is taken instead from the pass- word database (via getpwuid(3)). PROFILE is by default default (unless set via -P,--profile). You can access the configuration file either via the config com- mand or pressing F10. A description for each option in the configuration file can be found in the configuration file itself. PROFILE FILE The profile file is $XDG_CONFIG_HOME/clifm/profiles/PROFILE/pro- file.clifm. In this file you can add those commands you want to be executed at startup. You can also permanently set here some custom variables, e.g.: 'dir="/path/to/dir"'. This variable may be used as a shortcut to that directory, for instance: cd $dir. Custom variables could also be temporarily defined via the com- mand prompt: E.g.: user@hostname ~ $ var="This is a test". Tem- porary variables will be removed at program exit. Internal vari- ables are disabled by default; enable them via the --int-vars command line switch. PROMPTS FILE This file contains prompts definitions and is located in DATADIR/clifm/prompts.clifm. It will be copied automatically to $XDG_CONFIG_HOME/clifm/prompts.clifm if it doesn't exist. The Prompt line in the color scheme file should point to one of the prompt names defined in this file. See the PROMPT section for more information. KEYBINDINGS FILE The keybindings file is $XDG_CONFIG_HOME/clifm/keybindings,cfm. It will be copied from DATADIR/clifm (usually /usr/share/clifm), and if not found, it will be created anew with default values. This file is used to specify the keyboard shortcuts used for some ClifM's functions. The format for each keybinding is always "keyseq:function", where 'keyseq' is an escape sequence in GNU emacs style. A more detailed explanation can be found in the keybindings file itself. PLUGINS DIRECTORY The directory used to store programs or scripts pointed to by actions (in other words, plugins) is DATADIR/clifm/plugins (usu- ally /usr/share/clifm/plugins). To edit these plugins copy them to $XDG_CONFIG_HOME/clifm/plugins and edit them to your liking. Plugins in this local directory take precedence over those in the system one. COLORS DIRECTORY This directory, $DATADIR/clifm/colors, contains available color schemes (or just themes) as files with a .clifm extension. You can copy these themes to the local colors directory ($XDG_CON- FIG_HOME/clifm/colors) and edit them to your liking (or create new themes from the ground up). Themes in the local colors di- rectory take precedence over those in the system directory. You can create as many themes as you want by dropping them into the local colors directory. The default color scheme file (de- fault.clifm) can be used as a guide. ACTIONS FILE The file used to define custom actions is $XDG_CON- FIG_HOME/clifm/profiles/PROFILE/actions.clifm. It will be copied from DATADIR/clifm (usually /usr/share/clifm), and if not found, it will be created anew with default values. MIMELIST FILE The mimelist file is $XDG_CONFIG_HOME/clifm/profiles/PRO- FILE/mimelist.clifm. It is a list of file types and name/exten- sions and their associated applications used by lira. It will be copied from DATADIR/clifm (usually /usr/share/clifm). PREVIEW FILE The preview file is $XDG_CONFIG_HOME/clifm/profiles/PROFILE/pre- view.clifm and is shotgun's configuration file. It makes use of the same syntax used by the mimelist file. It will be copied from DATADIR/clifm (usually /usr/share/clifm). BOOKMARKS FILE The bookmarks file is $XDG_CONFIG_HOME/clifm/profiles/PRO- FILE/bookmarks.clifm Just the list of the user's bookmarks used by the bookmarks function. HISTORY FILE The history file is ~/.config/clifm/profiles/PROFILE/his- tory.clifm. A list of commands entered by the user and used by the history function. COMMANDS LOG FILE The commands log file is $XDG_CONFIG_HOME/clifm/profiles/PRO- FILE/cmdlogs.clifm. Command logs keep track of commands entered in the command line. These logs have this form: "[date] cur- rent_working_directory:command". MESSAGES LOG FILE The messages log file is $XDG_CONFIG_HOME/clifm/profiles/PRO- FILE/msglogs.clifm. Message logs are a record of errors and warnings and have the following form: "[date] message". KANGAROO DATABASE The directory jumper database is stored in $XDG_CON- FIG_HOME/clifm/profiles/PROFILE/jump.clifm. NOTE: If $XDG_CONFIG_HOME is not set, $HOME/.config/ is used instead. 23. EXAMPLES NOTE: Always try TAB. Tab completion is available for many things NOTE 2: Suggestions for possible completions are printed next to the text typed so far. To accept the given suggestion press Right (or Alt-f to accept only the first/next suggested word). Otherwise, the sugges- tion is just ignored Get help: F1: manpage F2: keybindings F3: commands 1. NAVIGATION +-------------------------+--------------------------------------------------------------------+ | Command | Description | +-------------------------+--------------------------------------------------------------------+ | /etc | Change directory to /etc (1) | +-------------------------+--------------------------------------------------------------------+ | 5 | Change to the directory whose ELN is 5 (2) | +-------------------------+--------------------------------------------------------------------+ | j <TAB> (also dh <TAB>) | Navigate through visited directories | +-------------------------+--------------------------------------------------------------------+ | j xproj | Jump to ~/media/data/docs/work/mike/xproject (3) | +-------------------------+--------------------------------------------------------------------+ | b (Shift-Left, Alt-j) | Go back in the directory history list | +-------------------------+--------------------------------------------------------------------+ | f (Shift-Right, Alt-k) | Go forth in the directory history list | +-------------------------+--------------------------------------------------------------------+ | .. (Shift-Up, Alt-u) | Change to the parent directory | +-------------------------+--------------------------------------------------------------------+ | ... | Change to the parent directory of the current parent directory (4) | +-------------------------+--------------------------------------------------------------------+ | bd w | Change to the parent directory matching "w" (5) | +-------------------------+--------------------------------------------------------------------+ | ws2 (Alt-2) | Swtich to the second workspace (6) | +-------------------------+--------------------------------------------------------------------+ | /*.pdf<TAB> | List PDF files (current dir) | +-------------------------+--------------------------------------------------------------------+ | =x<TAB> | List executable files (current dir) (7) | +-------------------------+--------------------------------------------------------------------+ | @gzip<TAB> | List files (current dir) whose MIME type includes "gzip" | +-------------------------+--------------------------------------------------------------------+ | pin mydir | Pin the directory named mydir | +-------------------------+--------------------------------------------------------------------+ | , | Change to pinned directory | +-------------------------+--------------------------------------------------------------------+ | view (Alt+-) | Preview files (current dir) (8) | +-------------------------+--------------------------------------------------------------------+ | pg (Alt+0) | Run MAS, the files pager, on the current directory | +-------------------------+--------------------------------------------------------------------+ (1) cd /etc also works (2) Press TAB to make sure 5 is the file you want, or just pay atten- tion to the suggestion. Press Right to accept the given suggestion (3) This depends on the database ranking. For more accuracy: j mike xproj. Tab completion is available: j xproj<TAB> (4) This is the fastback function: each susequent dot after the two first dots is understood as an extra "/.." (5) Type bd <TAB> to list all parent directories (6) Alt-[1-4] is available for workspaces 1-4 (7) Type =<TAB> to get the list of available file type characters. Consult the FILE FILTERS section above for more information (8) This feature depends on fzf(1) 2. FILE OPERATIONS +--------------------------+---------------------------------------------------------------------------+ | Command | Description | +--------------------------+---------------------------------------------------------------------------+ | myfile.txt | Open myfile.txt (with the default associated application) | +--------------------------+---------------------------------------------------------------------------+ | myfile.txt vi | Open myfile.txt using vi (1) | +--------------------------+---------------------------------------------------------------------------+ | 24& | Open the file whose ELN is 24 in the background | +--------------------------+---------------------------------------------------------------------------+ | n myfile mydir/ | Create a new file named myfile and a new directory named mydir (2)(3) | +--------------------------+---------------------------------------------------------------------------+ | p4 | Print the properties of the file whose ELN is 4 | +--------------------------+---------------------------------------------------------------------------+ | pc myfile.txt | Edit the permission set of the file myfile.txt (use oc to edit ownership) | +--------------------------+---------------------------------------------------------------------------+ | s *.c | Select all c files in the current directory | +--------------------------+---------------------------------------------------------------------------+ | s /media/*<TAB> | Interactively select files in the directory /media (4) | +--------------------------+---------------------------------------------------------------------------+ | s 1-4 8 19-26 | Select multiple files in the current directory by ELN | +--------------------------+---------------------------------------------------------------------------+ | sb (sel<TAB> or s:<TAB>) | List selected files (5) | +--------------------------+---------------------------------------------------------------------------+ | ds (ds <TAB>) | Selectively deselect files using a menu | +--------------------------+---------------------------------------------------------------------------+ | bm add mydir/ mybm | Bookmark the directory mydir/ as "mybm" | +--------------------------+---------------------------------------------------------------------------+ | bm mybm (b:mybm) | Access the bookmark named mybm (6) | +--------------------------+---------------------------------------------------------------------------+ | bm del mybm | Remove the bookmark named mybm | +--------------------------+---------------------------------------------------------------------------+ | bm (Alt-b or b:<TAB>) | Open the bookmark manager | +--------------------------+---------------------------------------------------------------------------+ | t 1-3 *.old | Trash a few files | +--------------------------+---------------------------------------------------------------------------+ | u (u <TAB>) | Selectively undelete/restore trashed files using a menu | +--------------------------+---------------------------------------------------------------------------+ | t del (t del <TAB>) | Selectively remove files from the trash can using a menu | +--------------------------+---------------------------------------------------------------------------+ | t empty | Empty the trash can | +--------------------------+---------------------------------------------------------------------------+ | ta *.pdf :mypdfs | Tag all PDF files in the current directory as mypdfs | +--------------------------+---------------------------------------------------------------------------+ | p t:mypdfs | Print the file properties of all files tagged as mypdfs | +--------------------------+---------------------------------------------------------------------------+ | /*.pdf | Search for all PDF files in the current directory | +--------------------------+---------------------------------------------------------------------------+ | c sel | Copy selected files to the current directory | +--------------------------+---------------------------------------------------------------------------+ | c *.txt 2 | Copy all txt file to the directory whose ELN is 2 | +--------------------------+---------------------------------------------------------------------------+ | r sel | Remove all selected files (7) | +--------------------------+---------------------------------------------------------------------------+ | m4 | Rename the file whose ELN is 4 (8) | +--------------------------+---------------------------------------------------------------------------+ (1) Use the ow command to select the opening application from a menu: ow myfile.txt or ow myfile.txt <TAB> (2) Note the ending slash in the directory name (3) Since clifm is integrated to the system shell, you can also use any of the shell commands you usually use to create new files. E.g.: touch myfile or nano myfile (4) Only for non-standard tab completion: fzf, fnf, smenu (5) You can also TAB expand the sel keyword: p sel<TAB> to list se- lected files (and optionally mark multiple selected files to operate on) (6) Type bm <TAB> to get the list of available bookmark names (7) To remove files in bulk use the rr command (8) To rename files in bulk use the br command 3. MISC +----------------------------+---------------------------------------+ | Command | Description | +----------------------------+---------------------------------------+ | hh (Alt-.) | Toggle hidden files | +----------------------------+---------------------------------------+ | ll (Alt-l) | Toggle detail/long view mode | +----------------------------+---------------------------------------+ | rf (Enter -on empty line- | Clear/refresh the screen | | or Ctrl-l) | | +----------------------------+---------------------------------------+ | Alt-, | Toggle list-directories-only | +----------------------------+---------------------------------------+ | Alt-TAB, Ctrl-Alt-i | Toggle disk usage analyzer mode | +----------------------------+---------------------------------------+ | !<TAB> | Navigate through the command history | +----------------------------+---------------------------------------+ | config (F10) | View/edit the main configuration file | +----------------------------+---------------------------------------+ | pf set test | Change to profile test | +----------------------------+---------------------------------------+ | actions | List available actions/plugins | +----------------------------+---------------------------------------+ | icons on | Want icons? | +----------------------------+---------------------------------------+ | cs (cs <TAB>) | List available color schemes | +----------------------------+---------------------------------------+ | prompt (prompt <TAB>) | List available prompts | +----------------------------+---------------------------------------+ | q | I'm tired, quit | +----------------------------+---------------------------------------+ There is a lot more you can do, but this should be enough to get you started. EXIT STATUS Clifm returns the exit status of the last executed command CONFORMING TO Clifm is C99 compliant, and, if compiled with the _BE_POSIX flag, it is POSIX.1-2008 compliant as well. If not, just a single non-POSIX func- tion is used: statx(2) (Linux specific), to get files birth time. BUG AND FEATURE REQUESTS Report at <https://github.com/leo\-arch/clifm/issues> AUTHOR L. M. Abramovich <leo.clifm@outlook.com> For additional contributors, use git shortlog -s on the clifm.git repository. clifm 1.24 Mar 2, 2025 CLIFM(1)
NAME | SYNOPSIS | INDEX | 1. GETTING HELP | 2. DESCRIPTION | 3. PARAMETERS | POSITIONAL PARAMETERS | OPTIONS | 4. COMMANDS | 5. FILE FILTERS | 6. KEYBOARD SHORTCUTS | 7. THEMING | 8. BUILT-IN EXPANSIONS | 9. FILE OPENER | 10. SHOTGUN | 11. AUTO-SUGGESTIONS | 12. SHELL FUNCTIONS | 13. PLUGINS | 14. AUTOCOMMANDS | 15. FILE TAGS | 16. VIRTUAL DIRECTORIES | 17. NOTE ON SPEED | 18. KANGAROO FRECENCY ALGORITHM | 19. ENVIRONMENT | 20. SECURITY | 21. MISCELLANEOUS NOTES | 22. FILES | 23. EXAMPLES | EXIT STATUS | CONFORMING TO | BUG AND FEATURE REQUESTS | AUTHOR
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=clifm&sektion=1&manpath=FreeBSD+Ports+14.3.quarterly>
