#define SETTINGS_LINE_NUMBERS 2 /* 0 is disabled, 1 is enabled, 2 is relative */ #define SETTINGS_UEBERZUG_IMAGE_PREVIEW 1 /* 0 is disabled, 1 is enabled, 2 is with caching */ #define SETTINGS_RELOAD_DIR_DELTA 10 /* 0 is disabled, time in seconds of how often the directory should be reload */ /* {{{ */ #ifndef CONFIG_GUARD #define CONFIG_GUARD #include "defines.h" #include "sorting.h" #include "interactions.h" /* }}} */ static const mimetype mimetype_default_cmd[] = { /* mimetype shell command * ^ substring of "file --mime-type -b ./hovered" * this does mean that this list is checked for completely linear. * Example: * file --mime-type -b ./image.gif * gives us "image/gif", thusly if we want to open gif in mpv rather than feh, * we need to define "gif" before "image" */ { "text", "$EDITOR" }, { "gif", "mpv --loop-file=\"inf\"" }, { "image", "feh" }, { "video", "mpv" }, { "audio", "mpv" }, { "pdf", "zathura" }, }; static const extension file_extension_default_cmd[] = { /* extension shell command * similar to mimetype_default_cmd, however it searches for exact string matches * and is checked before mimetype_default_cmd */ { ".exe", "wine"}, { ".cbz", "mcomix"}, { ".cbr", "mcomix"}, { ".json", "$EDITOR"}, { ".csv", "$EDITOR"}, }; static const binding key_binding[] = { /*key action blackmagic comment*/ /*you cannot add bindings that include other bindings in its entirety * possible: mk, mf * not possible: gg, ggg * trying to use ggg will always fail as it will execute gg first instead, resetting the input buffer, thus never reaching ggg */ /* blackmagic holds a modifier of an action, either as string or as function pointer depending on the action */ { "q", quit_program, NULL, "quit" }, { " ", toggle_selection, NULL, "toggle file selection" }, /* on hovered file/directory */ { "v", select_all, NULL, "select all files in dir" }, { "e", update, NULL, "rerun all backend" }, /* executes the entire backend and redrawing of the screen */ { "B", enter_shell, "$SHELL", "enter $SHELL shell" }, { "/", search, NULL, "search" }, { ":", jmp_file_index, NULL, "jump to file on input number" }, { "l", search_next, NULL, "search next" }, { "L", search_previous, NULL, "search previous" }, { "h", move_left, NULL, "move left" }, /* moves one dir up */ { "t", move_down, NULL, "move down" }, { "n", move_up, NULL, "move up" }, { "s", move_right, NULL, "move right" }, /* if a dir is hovered, cd into it, if a file is selected, see mimetype_default_cmd */ { "\n", open_with, NULL, "open \"open with\" dialog" }, /* opens the hovered file with an arbitrary command */ { "r", rename_hovered, NULL, "rename hovered file" }, /* renames currently hovered file/directory */ { "dD", delete, NULL, "delete file" }, /* deletes currently hovered OR selected file/directory * this means that it does not delete the hovered files if files are already selected */ { "yn", yank_text, "name", "yank filename of hovered file" }, { "yp", yank_text, "path", "yank path of hovered file" }, { "yy", yank_file, "copy", "copy/yank file/directory" }, { "dd", yank_file, "cut", "cut file/directory" }, { "pp", paste, NULL, "paste" }, { "G", jump_bottom, NULL, "jump to last file in dir" }, { "gg", jump_top, NULL, "jump to first file in dir" }, { "gh", jump_to_dir, "$HOME", "jump to $HOME" }, { "gs", jump_to_dir, "$START_PATH", "jump to $START_PATH" }, /* the path you started th in */ { "gD", jump_to_dir, "$HOME/Downloads", "jump to $HOME/Downloads" }, { "gC", jump_to_dir, "$HOME/Documents", "jump to $HOME/Documents" }, { "gP", jump_to_dir, "$HOME/Pictures", "jump to $HOME/Pictures" }, { "gM", jump_to_dir, "$HOME/Music", "jump to $HOME/Music" }, { "gd", jump_to_dir, "/dev", "jump to /dev" }, { "ge", jump_to_dir, "/etc", "jump to /etc" }, { "gp", jump_to_dir, "/etc/portage", "jump to /etc/portage" }, { "gm", jump_to_dir, "/mnt", "jump to /mnt" }, { "go", jump_to_dir, "/opt", "jump to /opt" }, { "gt", jump_to_dir, "/tmp", "jump to /tmp" }, { "gv", jump_to_dir, "/var", "jump to /var" }, { "u7", cmd_on_selected, "7z x", "unzip 7z" }, { "ub", cmd_on_selected, "tar -xvf", "unzip bz2" }, { "ur", cmd_on_selected, "unrar x", "unzip rar" }, { "ut", cmd_on_selected, "tar -xvf", "unzip tar" }, { "ut", cmd_on_selected, "gzip -d", "unzip gzip" }, { "uz", cmd_on_selected, "unzip ", "unzip zip" }, { "on", order_by, sort_natural, "order natural" }, { "oe", order_by, sort_extension, "order extension" }, { "os", order_by, sort_size, "order size" }, { "ot", order_by, sort_type, "order type" }, { "or", order_by, sort_random, "order random" }, { "oa", order_by, sort_alpha, "order alphabetically" }, { "mk", makedir, NULL, "create directory" }, { "mf", makefile, NULL, "create file" }, { "a", toggle_hidden_files, NULL, "toggle hidden files" }, { "\x7F", toggle_hidden_files, NULL, "toggle hidden files" }, /* backspace key */ }; static const char size_unit[] = { 'B', 'K', 'M', 'G', 'T', 'P' }; /* this defines the maximum size unit, deleting everything except B results in all sizes being displayed in byte */ static const char clipboard_cmd[] = "xsel -ib --trim"; /* assembles the following shell cmd: echo "hovered_file" | clipboard_cmd */ static const char ui_btm_text_storage_left[] = "total free"; static const char ui_btm_current_dir_size[] = "sum of dir,"; /* {{{ */ static const unsigned long binding_count = sizeof(key_binding) / sizeof(binding); static const unsigned long mimetype_default_count = sizeof(mimetype_default_cmd) / sizeof(mimetype); static const unsigned long file_extension_default_count = sizeof(file_extension_default_cmd) / sizeof(extension); static const char size_unit_count = (sizeof(size_unit) / sizeof(size_unit[0])) - 1; #else static const char clipboard_cmd[]; static const mimetype mimetype_default_cmd[]; static const extension file_extension_default_cmd[]; static const binding key_binding[]; static const unsigned long binding_count; static const unsigned long mimetype_default_count; static const unsigned long file_extension_default_count; static const char size_unit[]; static const char size_unit_count; #endif /* }}} */