diff --git a/.SpaceVim.d/autoload/guifont.vim b/.SpaceVim.d/autoload/guifont.vim deleted file mode 100644 index ba4fe2b..0000000 --- a/.SpaceVim.d/autoload/guifont.vim +++ /dev/null @@ -1,14 +0,0 @@ -function! guifont#setfont () abort - set guifont=FiraCode\ Nerd\ Font:h18 - set clipboard+=unnamedplus - let g:neoformat_python_black = { - \ 'exe': 'black', - \ 'stdin': 1, - \ 'args': ['-q', '-'], - \ } - let g:neoformat_enabled_python = ['black'] - let g:gruvbox_material_palette = 'material' - let g:gruvbox_material_enable_bold = 1 - let g:gruvbox_material_enable_italic = 1 - let g:g:gruvbox_material_ui_contrast = 'high' -endfunction diff --git a/.SpaceVim.d/init.toml b/.SpaceVim.d/init.toml deleted file mode 100644 index fa5bbe1..0000000 --- a/.SpaceVim.d/init.toml +++ /dev/null @@ -1,101 +0,0 @@ -#============================================================================= -# dark_powered.toml --- dark powered configuration example for SpaceVim -# Copyright (c) 2016-2017 Wang Shidong & Contributors -# Author: Wang Shidong < wsdjeg at 163.com > -# URL: https://spacevim.org -# License: GPLv3 -#============================================================================= - -# All SpaceVim option below [option] section -[options] - # set spacevim theme. by default colorscheme layer is not loaded, - # if you want to use more colorscheme, please load the colorscheme - # layer - colorscheme = "gruvbox-material" - background = "dark" - # Disable guicolors in basic mode, many terminal do not support 24bit - # true colors - enable_guicolors = true - # Disable statusline separator, if you want to use other value, please - # install nerd fonts - statusline_separator = "arrow" - statusline_inactive_separator = "arrow" - buffer_index_type = 4 - enable_tabline_filetype_icon = true - enable_statusline_display_mode = false - bootstrap_before = 'guifont#setfont' - guifont = "FuraMono Nerd Font:h18" - autocomplete_method = "coc" - -# Enable autocomplete layer -[[layers]] -name = 'autocomplete' -auto-completion-return-key-behavior = "complete" -auto-completion-tab-key-behavior = "smart" - -[[layers]] -name = "checkers" - -[[layers]] -name = 'shell' -default_position = 'top' -default_height = 30 - -[[layers]] -name = "denite" - -[[layers]] -name = "git" - -[[layers]] -name = "sudo" - -[[layers]] - name = "lsp" - enabled_clients = ["pylsp", "rls", "bashls", "vimls"] - filetypes = [ - "python", - "rust", - "sh", - "vim" - ] - [layers.override_cmd] - rust = ["rls"] - python = ["pyls"] - -[[layers]] -name = "lang#python" -format_on_save = true - -[[layers]] -name = "lang#ipynb" - -[[layers]] -name = "lang#html" - -[[layers]] -name = "lang#markdown" - -[[layers]] -name = "lang#rust" -recommended-style = "enabled" - -[[layers]] -name = "lang#sh" - -[[custom_plugins]] -name = "rhysd/vim-grammarous" - -[[custom_plugins]] -name = "mtdl9/vim-log-highlighting" - -[[custom_plugins]] -name = "https://tildegit.org/sloum/gemini-vim-syntax" - -[[custom_plugins]] -name = "habamax/vim-godot" - -[[custom_plugins]] - repo = "sainnhe/gruvbox-material" - merged = 0 - diff --git a/.Xmodmap b/.Xmodmap deleted file mode 100644 index b5e3f46..0000000 --- a/.Xmodmap +++ /dev/null @@ -1,4 +0,0 @@ -!! No Caps Lock -clear lock -!! Make Caps_lock an escape key. -keycode 0x42 = Escape diff --git a/.config/MangoHud/MangoHud.conf b/.config/MangoHud/MangoHud.conf deleted file mode 100644 index 995de1a..0000000 --- a/.config/MangoHud/MangoHud.conf +++ /dev/null @@ -1,220 +0,0 @@ -### MangoHud configuration file -### Uncomment any options you wish to enable. Default options are left uncommented -### Use some_parameter=0 to disable a parameter (only works with on/off parameters) -### Everything below can be used / overridden with the environment variable MANGOHUD_CONFIG instead - -################ PERFORMANCE ################# - -### Limit the application FPS. Comma-separated list of one or more FPS values (e.g. 0,30,60). 0 means unlimited (unless VSynced) -# fps_limit= - -### VSync [0-3] 0 = adaptive; 1 = off; 2 = mailbox; 3 = on -# vsync= - -### OpenGL VSync [0-N] 0 = off; >=1 = wait for N v-blanks, N > 1 acts as a FPS limiter (FPS = display refresh rate / N) -# gl_vsync= - -################### VISUAL ################### - -### Legacy layout -# legacy_layout=false - -### Display custom centered text, useful for a header -# custom_text_center= - -### Display the current system time -# time - -### Time formatting examples -# time_format=%H:%M -# time_format=[ %T %F ] -# time_format=%X # locally formatted time, because of limited glyph range, missing characters may show as '?' (e.g. Japanese) - -### Display MangoHud version -# version - -### Display the current GPU information -gpu_stats -# gpu_temp -# gpu_core_clock -# gpu_mem_clock -# gpu_power -# gpu_text=GPU -# gpu_load_change -# gpu_load_value=60,90 -# gpu_load_color=39F900,FDFD09,B22222 - -### Display the current CPU information -cpu_stats -# cpu_temp -# cpu_power -# cpu_text=CPU -# cpu_mhz -# cpu_load_change -# cpu_load_value=60,90 -# cpu_load_color=39F900,FDFD09,B22222 - -### Display the current CPU load & frequency for each core -# core_load -# core_load_change - -### Display IO read and write for the app (not system) -io_stats -io_read -io_write - -### Display system vram / ram / swap space usage -vram -ram -# swap - -### Display per process memory usage -## Show resident memory and other types, if enabled -# procmem -# procmem_shared -# procmem_virt - -### Display battery information -# battery -# battery_icon - -### Display FPS and frametime -fps -# fps_sampling_period=500 -# fps_color_change -# fps_value=30,60 -# fps_color=B22222,FDFD09,39F900 -frametime - -### Display miscellaneus information -engine_version -gpu_name -vulkan_driver -wine - -### Display loaded MangoHud architecture -# arch - -### Display the frametime line graph -frame_timing -# histogram - -### Display GameMode / vkBasalt running status -gamemode -vkbasalt - -### Display current FPS limit -# show_fps_limit - -### Display the current resolution -# resolution - -### Display custom text -# custom_text= -### Display output of Bash command in next column -# exec= - -### Display media player metadata -# media_player -# media_player_name=spotify -## Format metadata, lines are delimited by ; (wip) -# media_player_format={title};{artist};{album} -# media_player_format=Track:;{title};By:;{artist};From:;{album} - -### Change the hud font size -# font_size=24 -# font_scale=1.0 -# font_size_text=24 -# font_scale_media_player=0.55 -# no_small_font - -### Change default font (set location to TTF/OTF file) -## Set font for the whole hud -# font_file= - -## Set font only for text like media player metadata -# font_file_text= - -## Set font glyph ranges. Defaults to Latin-only. Don't forget to set font_file/font_file_text to font that supports these -## Probably don't enable all at once because of memory usage and hardware limits concerns -## If you experience crashes or text is just squares, reduce glyph range or reduce font size -# font_glyph_ranges=korean,chinese,chinese_simplified,japanese,cyrillic,thai,vietnamese,latin_ext_a,latin_ext_b - -### Change the hud position -# position=top-left - -### Change the corner roundness -# round_corners= - -### Disable / hide the hud by default -no_display - -### Hud position offset -# offset_x= -# offset_y= - -### Hud dimensions -# width= -# height= -# table_columns= -# cellpadding_y= - -### Hud transparency / alpha -# background_alpha=0.5 -# alpha= - -### Color customization -# text_color=FFFFFF -# gpu_color=2E9762 -# cpu_color=2E97CB -# vram_color=AD64C1 -# ram_color=C26693 -# engine_color=EB5B5B -# io_color=A491D3 -# frametime_color=00FF00 -# background_color=020202 -# media_player_color=FFFFFF -wine_color=cccc00 -# battery_color=FF9078 - -### Specify GPU with PCI bus ID for AMDGPU and NVML stats -### Set to 'domain:bus:slot.function' -# pci_dev=0:0a:0.0 - -### Blacklist -# blacklist= - -################ WORKAROUNDS ################# -### Options starting with "gl_*" are for OpenGL -### Specify what to use for getting display size. Options are "viewport", "scissorbox" or disabled. Defaults to using glXQueryDrawable -# gl_size_query=viewport - -### (Re)bind given framebuffer before MangoHud gets drawn. Helps with Crusader Kings III -# gl_bind_framebuffer=0 - -### Don't swap origin if using GL_UPPER_LEFT. Helps with Ryujinx -# gl_dont_flip=1 - -################ INTERACTION ################# - -### Change toggle keybinds for the hud & logging -# toggle_hud=Shift_R+F12 -# toggle_fps_limit=Shift_L+F1 -# toggle_logging=Shift_L+F2 -# reload_cfg=Shift_L+F4 -# upload_log=Shift_L+F3 - -#################### LOG ##################### -### Automatically start the log after X seconds -# autostart_log=1 -### Set amount of time in seconds that the logging will run for -# log_duration= -### Change the default log interval, 100 is default -# log_interval=100 -### Set location of the output files (required for logging) -# output_folder=/home//mangologs -### Permit uploading logs directly to FlightlessMango.com -# permit_upload=1 -### Define a '+'-separated list of percentiles shown in the benchmark results -### Use "AVG" to get a mean average. Default percentiles are 97+AVG+1+0.1 -# benchmark_percentiles=97,AVG,1,0.1 diff --git a/.config/bat/config b/.config/bat/config deleted file mode 100644 index 2ea2845..0000000 --- a/.config/bat/config +++ /dev/null @@ -1,28 +0,0 @@ -# This is `bat`s configuration file. Each line either contains a comment or -# a command-line option that you want to pass to `bat` by default. You can -# run `bat --help` to get a list of all possible configuration options. - -# Set pretty print for more "cat" like looks --pp - -# Specify desired highlighting theme (e.g. "TwoDark"). Run `bat --list-themes` -# for a list of all available themes ---theme="gruvbox-dark" - -# Enable this to use italic text on the terminal. This is not supported on all -# terminal emulators (like tmux, by default): -#--italic-text=always - -# Uncomment the following line to disable automatic paging: -#--paging=never - -# Uncomment the following line if you are using less version >= 551 and want to -# enable mouse scrolling support in `bat` when running inside tmux. This might -# disable text selection, unless you press shift. -#--pager="less --RAW-CONTROL-CHARS --quit-if-one-screen --mouse" - -# Syntax mappings: map a certain filename pattern to a language. -# Example 1: use the C++ syntax for .ino files -# Example 2: Use ".gitignore"-style highlighting for ".ignore" files -#--map-syntax "*.ino:C++" -#--map-syntax ".ignore:Git Ignore" diff --git a/.config/kitty/colors/gruvbox-material-dark-hard.conf b/.config/kitty/colors/gruvbox-material-dark-hard.conf deleted file mode 100644 index c7852c8..0000000 --- a/.config/kitty/colors/gruvbox-material-dark-hard.conf +++ /dev/null @@ -1,47 +0,0 @@ -background #1d2021 -foreground #d4be98 - -selection_background #d4be98 -selection_foreground #1d2021 - -cursor #a89984 -cursor_text_color background - -active_tab_background #1d2021 -active_tab_foreground #d4be98 -active_tab_font_style bold -inactive_tab_background #1d2021 -inactive_tab_foreground #a89984 -inactive_tab_font_style normal - -# Black -color0 #665c54 -color8 #928374 - -# Red -color1 #ea6962 -color9 #ea6962 - -# Green -color2 #a9b665 -color10 #a9b665 - -# Yellow -color3 #e78a4e -color11 #d8a657 - -# Blue -color4 #7daea3 -color12 #7daea3 - -# Magenta -color5 #d3869b -color13 #d3869b - -# Cyan -color6 #89b482 -color14 #89b482 - -# White -color7 #d4be98 -color15 #d4be98 diff --git a/.config/kitty/colors/gruvbox-material-dark-medium.conf b/.config/kitty/colors/gruvbox-material-dark-medium.conf deleted file mode 100644 index a856d7f..0000000 --- a/.config/kitty/colors/gruvbox-material-dark-medium.conf +++ /dev/null @@ -1,47 +0,0 @@ -background #282828 -foreground #d4be98 - -selection_background #d4be98 -selection_foreground #282828 - -cursor #a89984 -cursor_text_color background - -active_tab_background #282828 -active_tab_foreground #d4be98 -active_tab_font_style bold -inactive_tab_background #282828 -inactive_tab_foreground #a89984 -inactive_tab_font_style normal - -# Black -color0 #665c54 -color8 #928374 - -# Red -color1 #ea6962 -color9 #ea6962 - -# Green -color2 #a9b665 -color10 #a9b665 - -# Yellow -color3 #e78a4e -color11 #d8a657 - -# Blue -color4 #7daea3 -color12 #7daea3 - -# Magenta -color5 #d3869b -color13 #d3869b - -# Cyan -color6 #89b482 -color14 #89b482 - -# White -color7 #d4be98 -color15 #d4be98 diff --git a/.config/kitty/colors/gruvbox-material-dark-soft.conf b/.config/kitty/colors/gruvbox-material-dark-soft.conf deleted file mode 100644 index 36ed491..0000000 --- a/.config/kitty/colors/gruvbox-material-dark-soft.conf +++ /dev/null @@ -1,47 +0,0 @@ -background #32302f -foreground #d4be98 - -selection_background #d4be98 -selection_foreground #32302f - -cursor #a89984 -cursor_text_color background - -active_tab_background #32302f -active_tab_foreground #d4be98 -active_tab_font_style bold -inactive_tab_background #32302f -inactive_tab_foreground #a89984 -inactive_tab_font_style normal - -# Black -color0 #665c54 -color8 #928374 - -# Red -color1 #ea6962 -color9 #ea6962 - -# Green -color2 #a9b665 -color10 #a9b665 - -# Yellow -color3 #e78a4e -color11 #d8a657 - -# Blue -color4 #7daea3 -color12 #7daea3 - -# Magenta -color5 #d3869b -color13 #d3869b - -# Cyan -color6 #89b482 -color14 #89b482 - -# White -color7 #d4be98 -color15 #d4be98 diff --git a/.config/kitty/colors/gruvbox-material-light-hard.conf b/.config/kitty/colors/gruvbox-material-light-hard.conf deleted file mode 100644 index 9399a66..0000000 --- a/.config/kitty/colors/gruvbox-material-light-hard.conf +++ /dev/null @@ -1,47 +0,0 @@ -background #f9f5d7 -foreground #654735 - -selection_background #654735 -selection_foreground #f9f5d7 - -cursor #928374 -cursor_text_color background - -active_tab_background #f9f5d7 -active_tab_foreground #654735 -active_tab_font_style bold -inactive_tab_background #f9f5d7 -inactive_tab_foreground #7c6f64 -inactive_tab_font_style normal - -# Black -color0 #bdae93 -color8 #928374 - -# Red -color1 #c14a4a -color9 #c14a4a - -# Green -color2 #6c782e -color10 #6c782e - -# Yellow -color3 #c35e0a -color11 #b47109 - -# Blue -color4 #45707a -color12 #45707a - -# Magenta -color5 #945e80 -color13 #945e80 - -# Cyan -color6 #4c7a5d -color14 #4c7a5d - -# White -color7 #654735 -color15 #654735 diff --git a/.config/kitty/colors/gruvbox-material-light-medium.conf b/.config/kitty/colors/gruvbox-material-light-medium.conf deleted file mode 100644 index 00781cc..0000000 --- a/.config/kitty/colors/gruvbox-material-light-medium.conf +++ /dev/null @@ -1,47 +0,0 @@ -background #fbf1c7 -foreground #654735 - -selection_background #654735 -selection_foreground #fbf1c7 - -cursor #928374 -cursor_text_color background - -active_tab_background #fbf1c7 -active_tab_foreground #654735 -active_tab_font_style bold -inactive_tab_background #fbf1c7 -inactive_tab_foreground #7c6f64 -inactive_tab_font_style normal - -# Black -color0 #bdae93 -color8 #928374 - -# Red -color1 #c14a4a -color9 #c14a4a - -# Green -color2 #6c782e -color10 #6c782e - -# Yellow -color3 #c35e0a -color11 #b47109 - -# Blue -color4 #45707a -color12 #45707a - -# Magenta -color5 #945e80 -color13 #945e80 - -# Cyan -color6 #4c7a5d -color14 #4c7a5d - -# White -color7 #654735 -color15 #654735 diff --git a/.config/kitty/colors/gruvbox-material-light-soft.conf b/.config/kitty/colors/gruvbox-material-light-soft.conf deleted file mode 100644 index c075536..0000000 --- a/.config/kitty/colors/gruvbox-material-light-soft.conf +++ /dev/null @@ -1,47 +0,0 @@ -background #f2e5bc -foreground #654735 - -selection_background #654735 -selection_foreground #f2e5bc - -cursor #928374 -cursor_text_color background - -active_tab_background #f2e5bc -active_tab_foreground #654735 -active_tab_font_style bold -inactive_tab_background #f2e5bc -inactive_tab_foreground #7c6f64 -inactive_tab_font_style normal - -# Black -color0 #bdae93 -color8 #928374 - -# Red -color1 #c14a4a -color9 #c14a4a - -# Green -color2 #6c782e -color10 #6c782e - -# Yellow -color3 #c35e0a -color11 #b47109 - -# Blue -color4 #45707a -color12 #45707a - -# Magenta -color5 #945e80 -color13 #945e80 - -# Cyan -color6 #4c7a5d -color14 #4c7a5d - -# White -color7 #654735 -color15 #654735 diff --git a/.config/kitty/kitty.conf b/.config/kitty/kitty.conf deleted file mode 100644 index 79aa4ab..0000000 --- a/.config/kitty/kitty.conf +++ /dev/null @@ -1,7 +0,0 @@ -# Custom color scheme for Kitty terminal emulator -# Based on https://github.com/sindresorhus/hyper-snazzy -# Modified by ChefTyler -# Designed with Simoniz0r zsh theme applied https://github.com/simoniz0r/.zshrc - -include other.conf -include colors/gruvbox-material-dark-hard.conf diff --git a/.config/kitty/kitty.conf! b/.config/kitty/kitty.conf! deleted file mode 100644 index bbb2ede..0000000 --- a/.config/kitty/kitty.conf! +++ /dev/null @@ -1,44 +0,0 @@ -# Custom color scheme for Kitty terminal emulator -# Based on https://github.com/sindresorhus/hyper-snazzy -# Modified by ChefTyler -# Designed with Simoniz0r zsh theme applied https://github.com/simoniz0r/.zshrc - -include other.conf - -foreground #FFFFFF -background #15181e -selection_foreground #000000 -selection_background #FFFACD -url_color #0087BD - -# black -color0 #FFFFFF -color8 #FFFFFF - -# red -color1 #E73600 -color9 #E73600 - -# green -color2 #40c340 -color10 #40c340 - -# orange -color3 #E47000 -color11 #E47000 - -# blue -color4 #5187de -color12 #5187de - -# magenta -color5 #dc768c -color13 #dc768c - -# cyan -color6 #00AFB5 -color14 #00AFB5 - -# white -color7 #7C7C7C -color15 #7C7C7C diff --git a/.config/kitty/other.conf b/.config/kitty/other.conf deleted file mode 100644 index 050ee76..0000000 --- a/.config/kitty/other.conf +++ /dev/null @@ -1,8 +0,0 @@ -font_size 14.0 -cursor #cccccc -cursor_shape beam -# Fonts are custom to me, you may need to change/modify them -font_family FuraCode Nerd Font Mono -bold_font FuraCode Nerd Font Mono -italic_font FuraCode Nerd Font Mono -bold_italic_font FuraCode Nerd Font Mono diff --git a/.config/mpv/script-opts/webm.conf b/.config/mpv/script-opts/webm.conf deleted file mode 100644 index 8360ef1..0000000 --- a/.config/mpv/script-opts/webm.conf +++ /dev/null @@ -1,73 +0,0 @@ -# Defaults to shift+w -keybind=W -# If empty, saves on the same directory of the playing video. -# A starting "~" will be replaced by the home dir. -# This field is delimited by double-square-brackets - [[ and ]] - instead of -# quotes, because Windows users might run into a issue when using -# backslashes as a path separator. Examples of valid inputs for this field -# would be: [[]] (the default, empty value), [[C:\Users\John]] (on Windows), -# and [[/home/john]] (on Unix-like systems eg. Linux). -# The [[]] delimiter is not needed when using from a configuration file -# in the script-opts folder. -output_directory=~/Desktop -run_detached=no -# Template string for the output file -# %f - Filename, with extension -# %F - Filename, without extension -# %T - Media title, if it exists, or filename, with extension (useful for some streams, such as YouTube). -# %s, %e - Start and end time, with milliseconds -# %S, %E - Start and end time, without milliseconds -# %M - "-audio", if audio is enabled, empty otherwise -# %R - "-(height)p", where height is the video's height, or scale_height, if it's enabled. -# More specifiers are supported, see https://mpv.io/manual/master/#options-screenshot-template -# Property expansion is supported (with %{} at top level, ${} when nested), see https://mpv.io/manual/master/#property-expansion -output_template=%F-[%s-%e]%M -# Scale video to a certain height, keeping the aspect ratio. -1 disables it. -scale_height=-1 -# Change the FPS of the output video, dropping or duplicating frames as needed. -# -1 means the FPS will be unchanged from the source. -fps=-1 -# Target filesize, in kB. This will be used to calculate the bitrate -# used on the encode. If this is set to <= 0, the video bitrate will be set -# to 0, which might enable constant quality modes, depending on the -# video codec that's used (VP8 and VP9, for example). -target_filesize=2500 -# If true, will use stricter flags to ensure the resulting file doesn't -# overshoot the target filesize. Not recommended, as constrained quality -# mode should work well, unless you're really having trouble hitting -# the target size. -strict_filesize_constraint=no -strict_bitrate_multiplier=0.95 -# In kilobits. -strict_audio_bitrate=64 -# Sets the output format, from a few predefined ones. -# Currently we have: -# webm-vp8 (libvpx/libvorbis) -# webm-vp9 (libvpx-vp9/libopus) -# mp4 (h264/AAC) -# mp4-nvenc (h264-NVENC/AAC) -# raw (rawvideo/pcm_s16le). -# mp3 (libmp3lame) -# and gif -output_format=mp4 -twopass=no -# If set, applies the video filters currently used on the playback to the encode. -apply_current_filters=yes -# If set, writes the video's filename to the "Title" field on the metadata. -write_filename_on_metadata=no -# Set the number of encoding threads, for codecs libvpx and libvpx-vp9 -libvpx_threads=4 -additional_flags= -# Constant Rate Factor (CRF). The value meaning and limits may change, -# from codec to codec. Set to -1 to disable. -crf=28 -# Useful for flags that may impact output filesize, such as qmin, qmax etc -# Won't be applied when strict_filesize_constraint is on. -non_strict_additional_flags= -# Display the encode progress, in %. Requires run_detached to be disabled. -# On Windows, it shows a cmd popup. "auto" will display progress on non-Windows platforms. -display_progress=auto -# The font size used in the menu. Isn't used for the notifications (started encode, finished encode etc) -font_size=28 -margin=10 -message_duration=5 diff --git a/.config/mpv/scripts/webm.lua b/.config/mpv/scripts/webm.lua deleted file mode 100644 index c4a7ba2..0000000 --- a/.config/mpv/scripts/webm.lua +++ /dev/null @@ -1,2734 +0,0 @@ -local mp = require("mp") -local assdraw = require("mp.assdraw") -local msg = require("mp.msg") -local utils = require("mp.utils") -local mpopts = require("mp.options") -local options = { - -- Defaults to shift+w - keybind = "W", - -- If empty, saves on the same directory of the playing video. - -- A starting "~" will be replaced by the home dir. - -- This field is delimited by double-square-brackets - [[ and ]] - instead of - -- quotes, because Windows users might run into a issue when using - -- backslashes as a path separator. Examples of valid inputs for this field - -- would be: [[]] (the default, empty value), [[C:\Users\John]] (on Windows), - -- and [[/home/john]] (on Unix-like systems eg. Linux). - -- The [[]] delimiter is not needed when using from a configuration file - -- in the script-opts folder. - output_directory = [[]], - run_detached = false, - -- Template string for the output file - -- %f - Filename, with extension - -- %F - Filename, without extension - -- %T - Media title, if it exists, or filename, with extension (useful for some streams, such as YouTube). - -- %s, %e - Start and end time, with milliseconds - -- %S, %E - Start and end time, without milliseconds - -- %M - "-audio", if audio is enabled, empty otherwise - -- %R - "-(height)p", where height is the video's height, or scale_height, if it's enabled. - -- More specifiers are supported, see https://mpv.io/manual/master/#options-screenshot-template - -- Property expansion is supported (with %{} at top level, ${} when nested), see https://mpv.io/manual/master/#property-expansion - output_template = "%F-[%s-%e]%M", - -- Scale video to a certain height, keeping the aspect ratio. -1 disables it. - scale_height = -1, - -- Change the FPS of the output video, dropping or duplicating frames as needed. - -- -1 means the FPS will be unchanged from the source. - fps = -1, - -- Target filesize, in kB. This will be used to calculate the bitrate - -- used on the encode. If this is set to <= 0, the video bitrate will be set - -- to 0, which might enable constant quality modes, depending on the - -- video codec that's used (VP8 and VP9, for example). - target_filesize = 2500, - -- If true, will use stricter flags to ensure the resulting file doesn't - -- overshoot the target filesize. Not recommended, as constrained quality - -- mode should work well, unless you're really having trouble hitting - -- the target size. - strict_filesize_constraint = false, - strict_bitrate_multiplier = 0.95, - -- In kilobits. - strict_audio_bitrate = 64, - -- Sets the output format, from a few predefined ones. - -- Currently we have: - -- webm-vp8 (libvpx/libvorbis) - -- webm-vp9 (libvpx-vp9/libopus) - -- mp4 (h264/AAC) - -- mp4-nvenc (h264-NVENC/AAC) - -- raw (rawvideo/pcm_s16le). - -- mp3 (libmp3lame) - -- and gif - output_format = "webm-vp8", - twopass = false, - -- If set, applies the video filters currently used on the playback to the encode. - apply_current_filters = true, - -- If set, writes the video's filename to the "Title" field on the metadata. - write_filename_on_metadata = false, - -- Set the number of encoding threads, for codecs libvpx and libvpx-vp9 - libvpx_threads = 4, - additional_flags = "", - -- Constant Rate Factor (CRF). The value meaning and limits may change, - -- from codec to codec. Set to -1 to disable. - crf = 10, - -- Useful for flags that may impact output filesize, such as qmin, qmax etc - -- Won't be applied when strict_filesize_constraint is on. - non_strict_additional_flags = "", - -- Display the encode progress, in %. Requires run_detached to be disabled. - -- On Windows, it shows a cmd popup. "auto" will display progress on non-Windows platforms. - display_progress = "auto", - -- The font size used in the menu. Isn't used for the notifications (started encode, finished encode etc) - font_size = 28, - margin = 10, - message_duration = 5 -} - -mpopts.read_options(options) -local base64_chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' - --- encoding -function base64_encode(data) - return ((data:gsub('.', function(x) - local r,b='',x:byte() - for i=8,1,-1 do r=r..(b%2^i-b%2^(i-1)>0 and '1' or '0') end - return r; - end)..'0000'):gsub('%d%d%d?%d?%d?%d?', function(x) - if (#x < 6) then return '' end - local c=0 - for i=1,6 do c=c+(x:sub(i,i)=='1' and 2^(6-i) or 0) end - return base64_chars:sub(c+1,c+1) - end)..({ '', '==', '=' })[#data%3+1]) -end - --- decoding -function base64_decode(data) - data = string.gsub(data, '[^'..base64_chars..'=]', '') - return (data:gsub('.', function(x) - if (x == '=') then return '' end - local r,f='',(base64_chars:find(x)-1) - for i=6,1,-1 do r=r..(f%2^i-f%2^(i-1)>0 and '1' or '0') end - return r; - end):gsub('%d%d%d?%d?%d?%d?%d?%d?', function(x) - if (#x ~= 8) then return '' end - local c=0 - for i=1,8 do c=c+(x:sub(i,i)=='1' and 2^(8-i) or 0) end - return string.char(c) - end)) -end -local bold -bold = function(text) - return "{\\b1}" .. tostring(text) .. "{\\b0}" -end -local message -message = function(text, duration) - local ass = mp.get_property_osd("osd-ass-cc/0") - ass = ass .. text - return mp.osd_message(ass, duration or options.message_duration) -end -local append -append = function(a, b) - for _, val in ipairs(b) do - a[#a + 1] = val - end - return a -end -local seconds_to_time_string -seconds_to_time_string = function(seconds, no_ms, full) - if seconds < 0 then - return "unknown" - end - local ret = "" - if not (no_ms) then - ret = string.format(".%03d", seconds * 1000 % 1000) - end - ret = string.format("%02d:%02d%s", math.floor(seconds / 60) % 60, math.floor(seconds) % 60, ret) - if full or seconds > 3600 then - ret = string.format("%d:%s", math.floor(seconds / 3600), ret) - end - return ret -end -local seconds_to_path_element -seconds_to_path_element = function(seconds, no_ms, full) - local time_string = seconds_to_time_string(seconds, no_ms, full) - local _ - time_string, _ = time_string:gsub(":", ".") - return time_string -end -local file_exists -file_exists = function(name) - local info, err = utils.file_info(name) - if info ~= nil then - return true - end - return false -end -local expand_properties -expand_properties = function(text, magic) - if magic == nil then - magic = "$" - end - for prefix, raw, prop, colon, fallback, closing in text:gmatch("%" .. magic .. "{([?!]?)(=?)([^}:]*)(:?)([^}]*)(}*)}") do - local err - local prop_value - local compare_value - local original_prop = prop - local get_property = mp.get_property_osd - if raw == "=" then - get_property = mp.get_property - end - if prefix ~= "" then - for actual_prop, compare in prop:gmatch("(.-)==(.*)") do - prop = actual_prop - compare_value = compare - end - end - if colon == ":" then - prop_value, err = get_property(prop, fallback) - else - prop_value, err = get_property(prop, "(error)") - end - prop_value = tostring(prop_value) - if prefix == "?" then - if compare_value == nil then - prop_value = err == nil and fallback .. closing or "" - else - prop_value = prop_value == compare_value and fallback .. closing or "" - end - prefix = "%" .. prefix - elseif prefix == "!" then - if compare_value == nil then - prop_value = err ~= nil and fallback .. closing or "" - else - prop_value = prop_value ~= compare_value and fallback .. closing or "" - end - else - prop_value = prop_value .. closing - end - if colon == ":" then - local _ - text, _ = text:gsub("%" .. magic .. "{" .. prefix .. raw .. original_prop:gsub("%W", "%%%1") .. ":" .. fallback:gsub("%W", "%%%1") .. closing .. "}", expand_properties(prop_value)) - else - local _ - text, _ = text:gsub("%" .. magic .. "{" .. prefix .. raw .. original_prop:gsub("%W", "%%%1") .. closing .. "}", prop_value) - end - end - return text -end -local format_filename -format_filename = function(startTime, endTime, videoFormat) - local hasAudioCodec = videoFormat.audioCodec ~= "" - local replaceFirst = { - ["%%mp"] = "%%mH.%%mM.%%mS", - ["%%mP"] = "%%mH.%%mM.%%mS.%%mT", - ["%%p"] = "%%wH.%%wM.%%wS", - ["%%P"] = "%%wH.%%wM.%%wS.%%wT" - } - local replaceTable = { - ["%%wH"] = string.format("%02d", math.floor(startTime / (60 * 60))), - ["%%wh"] = string.format("%d", math.floor(startTime / (60 * 60))), - ["%%wM"] = string.format("%02d", math.floor(startTime / 60 % 60)), - ["%%wm"] = string.format("%d", math.floor(startTime / 60)), - ["%%wS"] = string.format("%02d", math.floor(startTime % 60)), - ["%%ws"] = string.format("%d", math.floor(startTime)), - ["%%wf"] = string.format("%s", startTime), - ["%%wT"] = string.sub(string.format("%.3f", startTime % 1), 3), - ["%%mH"] = string.format("%02d", math.floor(endTime / (60 * 60))), - ["%%mh"] = string.format("%d", math.floor(endTime / (60 * 60))), - ["%%mM"] = string.format("%02d", math.floor(endTime / 60 % 60)), - ["%%mm"] = string.format("%d", math.floor(endTime / 60)), - ["%%mS"] = string.format("%02d", math.floor(endTime % 60)), - ["%%ms"] = string.format("%d", math.floor(endTime)), - ["%%mf"] = string.format("%s", endTime), - ["%%mT"] = string.sub(string.format("%.3f", endTime % 1), 3), - ["%%f"] = mp.get_property("filename"), - ["%%F"] = mp.get_property("filename/no-ext"), - ["%%s"] = seconds_to_path_element(startTime), - ["%%S"] = seconds_to_path_element(startTime, true), - ["%%e"] = seconds_to_path_element(endTime), - ["%%E"] = seconds_to_path_element(endTime, true), - ["%%T"] = mp.get_property("media-title"), - ["%%M"] = (mp.get_property_native('aid') and not mp.get_property_native('mute') and hasAudioCodec) and '-audio' or '', - ["%%R"] = (options.scale_height ~= -1) and "-" .. tostring(options.scale_height) .. "p" or "-" .. tostring(mp.get_property_native('height')) .. "p", - ["%%t%%"] = "%%" - } - local filename = options.output_template - for format, value in pairs(replaceFirst) do - local _ - filename, _ = filename:gsub(format, value) - end - for format, value in pairs(replaceTable) do - local _ - filename, _ = filename:gsub(format, value) - end - if mp.get_property_bool("demuxer-via-network", false) then - local _ - filename, _ = filename:gsub("%%X{([^}]*)}", "%1") - filename, _ = filename:gsub("%%x", "") - else - local x = string.gsub(mp.get_property("stream-open-filename", ""), string.gsub(mp.get_property("filename", ""), "%W", "%%%1") .. "$", "") - local _ - filename, _ = filename:gsub("%%X{[^}]*}", x) - filename, _ = filename:gsub("%%x", x) - end - filename = expand_properties(filename, "%") - for format in filename:gmatch("%%t([aAbBcCdDeFgGhHIjmMnprRStTuUVwWxXyYzZ])") do - local _ - filename, _ = filename:gsub("%%t" .. format, os.date("%" .. format)) - end - local _ - filename, _ = filename:gsub("[<>:\"/\\|?*]", "") - return tostring(filename) .. "." .. tostring(videoFormat.outputExtension) -end -local parse_directory -parse_directory = function(dir) - local home_dir = os.getenv("HOME") - if not home_dir then - home_dir = os.getenv("USERPROFILE") - end - if not home_dir then - local drive = os.getenv("HOMEDRIVE") - local path = os.getenv("HOMEPATH") - if drive and path then - home_dir = utils.join_path(drive, path) - else - msg.warn("Couldn't find home dir.") - home_dir = "" - end - end - local _ - dir, _ = dir:gsub("^~", home_dir) - return dir -end -local is_windows = type(package) == "table" and type(package.config) == "string" and package.config:sub(1, 1) == "\\" -local trim -trim = function(s) - return s:match("^%s*(.-)%s*$") -end -local get_null_path -get_null_path = function() - if file_exists("/dev/null") then - return "/dev/null" - end - return "NUL" -end -local run_subprocess -run_subprocess = function(params) - local res = utils.subprocess(params) - msg.verbose("Command stdout: ") - msg.verbose(res.stdout) - if res.status ~= 0 then - msg.verbose("Command failed! Reason: ", res.error, " Killed by us? ", res.killed_by_us and "yes" or "no") - return false - end - return true -end -local shell_escape -shell_escape = function(args) - local ret = { } - for i, a in ipairs(args) do - local s = tostring(a) - if string.match(s, "[^A-Za-z0-9_/:=-]") then - if is_windows then - s = '"' .. string.gsub(s, '"', '"\\""') .. '"' - else - s = "'" .. string.gsub(s, "'", "'\\''") .. "'" - end - end - table.insert(ret, s) - end - local concat = table.concat(ret, " ") - if is_windows then - concat = '"' .. concat .. '"' - end - return concat -end -local run_subprocess_popen -run_subprocess_popen = function(command_line) - local command_line_string = shell_escape(command_line) - command_line_string = command_line_string .. " 2>&1" - msg.verbose("run_subprocess_popen: running " .. tostring(command_line_string)) - return io.popen(command_line_string) -end -local calculate_scale_factor -calculate_scale_factor = function() - local baseResY = 720 - local osd_w, osd_h = mp.get_osd_size() - return osd_h / baseResY -end -local should_display_progress -should_display_progress = function() - if options.display_progress == "auto" then - return not is_windows - end - return options.display_progress -end -local reverse -reverse = function(list) - local _accum_0 = { } - local _len_0 = 1 - local _max_0 = 1 - for _index_0 = #list, _max_0 < 0 and #list + _max_0 or _max_0, -1 do - local element = list[_index_0] - _accum_0[_len_0] = element - _len_0 = _len_0 + 1 - end - return _accum_0 -end -local get_pass_logfile_path -get_pass_logfile_path = function(encode_out_path) - return tostring(encode_out_path) .. "-video-pass1.log" -end -local dimensions_changed = true -local _video_dimensions = { } -local get_video_dimensions -get_video_dimensions = function() - if not (dimensions_changed) then - return _video_dimensions - end - local video_params = mp.get_property_native("video-out-params") - if not video_params then - return nil - end - dimensions_changed = false - local keep_aspect = mp.get_property_bool("keepaspect") - local w = video_params["w"] - local h = video_params["h"] - local dw = video_params["dw"] - local dh = video_params["dh"] - if mp.get_property_number("video-rotate") % 180 == 90 then - w, h = h, w - dw, dh = dh, dw - end - _video_dimensions = { - top_left = { }, - bottom_right = { }, - ratios = { } - } - local window_w, window_h = mp.get_osd_size() - if keep_aspect then - local unscaled = mp.get_property_native("video-unscaled") - local panscan = mp.get_property_number("panscan") - local fwidth = window_w - local fheight = math.floor(window_w / dw * dh) - if fheight > window_h or fheight < h then - local tmpw = math.floor(window_h / dh * dw) - if tmpw <= window_w then - fheight = window_h - fwidth = tmpw - end - end - local vo_panscan_area = window_h - fheight - local f_w = fwidth / fheight - local f_h = 1 - if vo_panscan_area == 0 then - vo_panscan_area = window_h - fwidth - f_w = 1 - f_h = fheight / fwidth - end - if unscaled or unscaled == "downscale-big" then - vo_panscan_area = 0 - if unscaled or (dw <= window_w and dh <= window_h) then - fwidth = dw - fheight = dh - end - end - local scaled_width = fwidth + math.floor(vo_panscan_area * panscan * f_w) - local scaled_height = fheight + math.floor(vo_panscan_area * panscan * f_h) - local split_scaling - split_scaling = function(dst_size, scaled_src_size, zoom, align, pan) - scaled_src_size = math.floor(scaled_src_size * 2 ^ zoom) - align = (align + 1) / 2 - local dst_start = math.floor((dst_size - scaled_src_size) * align + pan * scaled_src_size) - if dst_start < 0 then - dst_start = dst_start + 1 - end - local dst_end = dst_start + scaled_src_size - if dst_start >= dst_end then - dst_start = 0 - dst_end = 1 - end - return dst_start, dst_end - end - local zoom = mp.get_property_number("video-zoom") - local align_x = mp.get_property_number("video-align-x") - local pan_x = mp.get_property_number("video-pan-x") - _video_dimensions.top_left.x, _video_dimensions.bottom_right.x = split_scaling(window_w, scaled_width, zoom, align_x, pan_x) - local align_y = mp.get_property_number("video-align-y") - local pan_y = mp.get_property_number("video-pan-y") - _video_dimensions.top_left.y, _video_dimensions.bottom_right.y = split_scaling(window_h, scaled_height, zoom, align_y, pan_y) - else - _video_dimensions.top_left.x = 0 - _video_dimensions.bottom_right.x = window_w - _video_dimensions.top_left.y = 0 - _video_dimensions.bottom_right.y = window_h - end - _video_dimensions.ratios.w = w / (_video_dimensions.bottom_right.x - _video_dimensions.top_left.x) - _video_dimensions.ratios.h = h / (_video_dimensions.bottom_right.y - _video_dimensions.top_left.y) - return _video_dimensions -end -local set_dimensions_changed -set_dimensions_changed = function() - dimensions_changed = true -end -local monitor_dimensions -monitor_dimensions = function() - local properties = { - "keepaspect", - "video-out-params", - "video-unscaled", - "panscan", - "video-zoom", - "video-align-x", - "video-pan-x", - "video-align-y", - "video-pan-y", - "osd-width", - "osd-height" - } - for _, p in ipairs(properties) do - mp.observe_property(p, "native", set_dimensions_changed) - end -end -local clamp -clamp = function(min, val, max) - if val <= min then - return min - end - if val >= max then - return max - end - return val -end -local clamp_point -clamp_point = function(top_left, point, bottom_right) - return { - x = clamp(top_left.x, point.x, bottom_right.x), - y = clamp(top_left.y, point.y, bottom_right.y) - } -end -local VideoPoint -do - local _class_0 - local _base_0 = { - set_from_screen = function(self, sx, sy) - local d = get_video_dimensions() - local point = clamp_point(d.top_left, { - x = sx, - y = sy - }, d.bottom_right) - self.x = math.floor(d.ratios.w * (point.x - d.top_left.x) + 0.5) - self.y = math.floor(d.ratios.h * (point.y - d.top_left.y) + 0.5) - end, - to_screen = function(self) - local d = get_video_dimensions() - return { - x = math.floor(self.x / d.ratios.w + d.top_left.x + 0.5), - y = math.floor(self.y / d.ratios.h + d.top_left.y + 0.5) - } - end - } - _base_0.__index = _base_0 - _class_0 = setmetatable({ - __init = function(self) - self.x = -1 - self.y = -1 - end, - __base = _base_0, - __name = "VideoPoint" - }, { - __index = _base_0, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - VideoPoint = _class_0 -end -local Region -do - local _class_0 - local _base_0 = { - is_valid = function(self) - return self.x > -1 and self.y > -1 and self.w > -1 and self.h > -1 - end, - set_from_points = function(self, p1, p2) - self.x = math.min(p1.x, p2.x) - self.y = math.min(p1.y, p2.y) - self.w = math.abs(p1.x - p2.x) - self.h = math.abs(p1.y - p2.y) - end - } - _base_0.__index = _base_0 - _class_0 = setmetatable({ - __init = function(self) - self.x = -1 - self.y = -1 - self.w = -1 - self.h = -1 - end, - __base = _base_0, - __name = "Region" - }, { - __index = _base_0, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - Region = _class_0 -end -local make_fullscreen_region -make_fullscreen_region = function() - local r = Region() - local d = get_video_dimensions() - local a = VideoPoint() - local b = VideoPoint() - local xa, ya - do - local _obj_0 = d.top_left - xa, ya = _obj_0.x, _obj_0.y - end - a:set_from_screen(xa, ya) - local xb, yb - do - local _obj_0 = d.bottom_right - xb, yb = _obj_0.x, _obj_0.y - end - b:set_from_screen(xb, yb) - r:set_from_points(a, b) - return r -end -local read_double -read_double = function(bytes) - local sign = 1 - local mantissa = bytes[2] % 2 ^ 4 - for i = 3, 8 do - mantissa = mantissa * 256 + bytes[i] - end - if bytes[1] > 127 then - sign = -1 - end - local exponent = (bytes[1] % 128) * 2 ^ 4 + math.floor(bytes[2] / 2 ^ 4) - if exponent == 0 then - return 0 - end - mantissa = (math.ldexp(mantissa, -52) + 1) * sign - return math.ldexp(mantissa, exponent - 1023) -end -local write_double -write_double = function(num) - local bytes = { - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - } - if num == 0 then - return bytes - end - local anum = math.abs(num) - local mantissa, exponent = math.frexp(anum) - exponent = exponent - 1 - mantissa = mantissa * 2 - 1 - local sign = num ~= anum and 128 or 0 - exponent = exponent + 1023 - bytes[1] = sign + math.floor(exponent / 2 ^ 4) - mantissa = mantissa * 2 ^ 4 - local currentmantissa = math.floor(mantissa) - mantissa = mantissa - currentmantissa - bytes[2] = (exponent % 2 ^ 4) * 2 ^ 4 + currentmantissa - for i = 3, 8 do - mantissa = mantissa * 2 ^ 8 - currentmantissa = math.floor(mantissa) - mantissa = mantissa - currentmantissa - bytes[i] = currentmantissa - end - return bytes -end -local FirstpassStats -do - local _class_0 - local duration_multiplier, fields_before_duration, fields_after_duration - local _base_0 = { - get_duration = function(self) - local big_endian_binary_duration = reverse(self.binary_duration) - return read_double(reversed_binary_duration) / duration_multiplier - end, - set_duration = function(self, duration) - local big_endian_binary_duration = write_double(duration * duration_multiplier) - self.binary_duration = reverse(big_endian_binary_duration) - end, - _bytes_to_string = function(self, bytes) - return string.char(unpack(bytes)) - end, - as_binary_string = function(self) - local before_duration_string = self:_bytes_to_string(self.binary_data_before_duration) - local duration_string = self:_bytes_to_string(self.binary_duration) - local after_duration_string = self:_bytes_to_string(self.binary_data_after_duration) - return before_duration_string .. duration_string .. after_duration_string - end - } - _base_0.__index = _base_0 - _class_0 = setmetatable({ - __init = function(self, before_duration, duration, after_duration) - self.binary_data_before_duration = before_duration - self.binary_duration = duration - self.binary_data_after_duration = after_duration - end, - __base = _base_0, - __name = "FirstpassStats" - }, { - __index = _base_0, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - local self = _class_0 - duration_multiplier = 10000000.0 - fields_before_duration = 16 - fields_after_duration = 1 - self.data_before_duration_size = function(self) - return fields_before_duration * 8 - end - self.data_after_duration_size = function(self) - return fields_after_duration * 8 - end - self.size = function(self) - return (fields_before_duration + 1 + fields_after_duration) * 8 - end - self.from_bytes = function(self, bytes) - local before_duration - do - local _accum_0 = { } - local _len_0 = 1 - local _max_0 = self:data_before_duration_size() - for _index_0 = 1, _max_0 < 0 and #bytes + _max_0 or _max_0 do - local b = bytes[_index_0] - _accum_0[_len_0] = b - _len_0 = _len_0 + 1 - end - before_duration = _accum_0 - end - local duration - do - local _accum_0 = { } - local _len_0 = 1 - local _max_0 = self:data_before_duration_size() + 8 - for _index_0 = self:data_before_duration_size() + 1, _max_0 < 0 and #bytes + _max_0 or _max_0 do - local b = bytes[_index_0] - _accum_0[_len_0] = b - _len_0 = _len_0 + 1 - end - duration = _accum_0 - end - local after_duration - do - local _accum_0 = { } - local _len_0 = 1 - for _index_0 = self:data_before_duration_size() + 8 + 1, #bytes do - local b = bytes[_index_0] - _accum_0[_len_0] = b - _len_0 = _len_0 + 1 - end - after_duration = _accum_0 - end - return self(before_duration, duration, after_duration) - end - FirstpassStats = _class_0 -end -local read_logfile_into_stats_array -read_logfile_into_stats_array = function(logfile_path) - local file = assert(io.open(logfile_path, "rb")) - local logfile_string = base64_decode(file:read()) - file:close() - local stats_size = FirstpassStats:size() - assert(logfile_string:len() % stats_size == 0) - local stats = { } - for offset = 1, #logfile_string, stats_size do - local bytes = { - logfile_string:byte(offset, offset + stats_size - 1) - } - assert(#bytes == stats_size) - stats[#stats + 1] = FirstpassStats:from_bytes(bytes) - end - return stats -end -local write_stats_array_to_logfile -write_stats_array_to_logfile = function(stats_array, logfile_path) - local file = assert(io.open(logfile_path, "wb")) - local logfile_string = "" - for _index_0 = 1, #stats_array do - local stat = stats_array[_index_0] - logfile_string = logfile_string .. stat:as_binary_string() - end - file:write(base64_encode(logfile_string)) - return file:close() -end -local vp8_patch_logfile -vp8_patch_logfile = function(logfile_path, encode_total_duration) - local stats_array = read_logfile_into_stats_array(logfile_path) - local average_duration = encode_total_duration / (#stats_array - 1) - for i = 1, #stats_array - 1 do - stats_array[i]:set_duration(average_duration) - end - stats_array[#stats_array]:set_duration(encode_total_duration) - return write_stats_array_to_logfile(stats_array, logfile_path) -end -local formats = { } -local Format -do - local _class_0 - local _base_0 = { - getPreFilters = function(self) - return { } - end, - getPostFilters = function(self) - return { } - end, - getFlags = function(self) - return { } - end, - getCodecFlags = function(self) - local codecs = { } - if self.videoCodec ~= "" then - codecs[#codecs + 1] = "--ovc=" .. tostring(self.videoCodec) - end - if self.audioCodec ~= "" then - codecs[#codecs + 1] = "--oac=" .. tostring(self.audioCodec) - end - return codecs - end - } - _base_0.__index = _base_0 - _class_0 = setmetatable({ - __init = function(self) - self.displayName = "Basic" - self.supportsTwopass = true - self.videoCodec = "" - self.audioCodec = "" - self.outputExtension = "" - self.acceptsBitrate = true - end, - __base = _base_0, - __name = "Format" - }, { - __index = _base_0, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - Format = _class_0 -end -local RawVideo -do - local _class_0 - local _parent_0 = Format - local _base_0 = { - getColorspace = function(self) - local csp = mp.get_property("colormatrix") - local _exp_0 = csp - if "bt.601" == _exp_0 then - return "bt601" - elseif "bt.709" == _exp_0 then - return "bt709" - elseif "bt.2020" == _exp_0 then - return "bt2020" - elseif "smpte-240m" == _exp_0 then - return "smpte240m" - else - msg.info("Warning, unknown colorspace " .. tostring(csp) .. " detected, using bt.601.") - return "bt601" - end - end, - getPostFilters = function(self) - return { - "format=yuv444p16", - "lavfi-scale=in_color_matrix=" .. self:getColorspace(), - "format=bgr24" - } - end - } - _base_0.__index = _base_0 - setmetatable(_base_0, _parent_0.__base) - _class_0 = setmetatable({ - __init = function(self) - self.displayName = "Raw" - self.supportsTwopass = false - self.videoCodec = "rawvideo" - self.audioCodec = "pcm_s16le" - self.outputExtension = "avi" - self.acceptsBitrate = false - end, - __base = _base_0, - __name = "RawVideo", - __parent = _parent_0 - }, { - __index = function(cls, name) - local val = rawget(_base_0, name) - if val == nil then - local parent = rawget(cls, "__parent") - if parent then - return parent[name] - end - else - return val - end - end, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - if _parent_0.__inherited then - _parent_0.__inherited(_parent_0, _class_0) - end - RawVideo = _class_0 -end -formats["raw"] = RawVideo() -local WebmVP8 -do - local _class_0 - local _parent_0 = Format - local _base_0 = { - getPreFilters = function(self) - local colormatrixFilter = { - ["bt.709"] = "bt709", - ["bt.2020"] = "bt2020", - ["smpte-240m"] = "smpte240m" - } - local ret = { } - local colormatrix = mp.get_property_native("video-params/colormatrix") - if colormatrixFilter[colormatrix] then - append(ret, { - "lavfi-colormatrix=" .. tostring(colormatrixFilter[colormatrix]) .. ":bt601" - }) - end - return ret - end, - getFlags = function(self) - return { - "--ovcopts-add=threads=" .. tostring(options.libvpx_threads) - } - end - } - _base_0.__index = _base_0 - setmetatable(_base_0, _parent_0.__base) - _class_0 = setmetatable({ - __init = function(self) - self.displayName = "WebM" - self.supportsTwopass = true - self.videoCodec = "libvpx" - self.audioCodec = "libvorbis" - self.outputExtension = "webm" - self.acceptsBitrate = true - end, - __base = _base_0, - __name = "WebmVP8", - __parent = _parent_0 - }, { - __index = function(cls, name) - local val = rawget(_base_0, name) - if val == nil then - local parent = rawget(cls, "__parent") - if parent then - return parent[name] - end - else - return val - end - end, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - if _parent_0.__inherited then - _parent_0.__inherited(_parent_0, _class_0) - end - WebmVP8 = _class_0 -end -formats["webm-vp8"] = WebmVP8() -local WebmVP9 -do - local _class_0 - local _parent_0 = Format - local _base_0 = { - getFlags = function(self) - return { - "--ovcopts-add=threads=" .. tostring(options.libvpx_threads) - } - end - } - _base_0.__index = _base_0 - setmetatable(_base_0, _parent_0.__base) - _class_0 = setmetatable({ - __init = function(self) - self.displayName = "WebM (VP9)" - self.supportsTwopass = true - self.videoCodec = "libvpx-vp9" - self.audioCodec = "libopus" - self.outputExtension = "webm" - self.acceptsBitrate = true - end, - __base = _base_0, - __name = "WebmVP9", - __parent = _parent_0 - }, { - __index = function(cls, name) - local val = rawget(_base_0, name) - if val == nil then - local parent = rawget(cls, "__parent") - if parent then - return parent[name] - end - else - return val - end - end, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - if _parent_0.__inherited then - _parent_0.__inherited(_parent_0, _class_0) - end - WebmVP9 = _class_0 -end -formats["webm-vp9"] = WebmVP9() -local MP4 -do - local _class_0 - local _parent_0 = Format - local _base_0 = { } - _base_0.__index = _base_0 - setmetatable(_base_0, _parent_0.__base) - _class_0 = setmetatable({ - __init = function(self) - self.displayName = "MP4 (h264/AAC)" - self.supportsTwopass = true - self.videoCodec = "libx264" - self.audioCodec = "aac" - self.outputExtension = "mp4" - self.acceptsBitrate = true - end, - __base = _base_0, - __name = "MP4", - __parent = _parent_0 - }, { - __index = function(cls, name) - local val = rawget(_base_0, name) - if val == nil then - local parent = rawget(cls, "__parent") - if parent then - return parent[name] - end - else - return val - end - end, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - if _parent_0.__inherited then - _parent_0.__inherited(_parent_0, _class_0) - end - MP4 = _class_0 -end -formats["mp4"] = MP4() -local MP4NVENC -do - local _class_0 - local _parent_0 = Format - local _base_0 = { } - _base_0.__index = _base_0 - setmetatable(_base_0, _parent_0.__base) - _class_0 = setmetatable({ - __init = function(self) - self.displayName = "MP4 (h264-NVENC/AAC)" - self.supportsTwopass = true - self.videoCodec = "h264_nvenc" - self.audioCodec = "aac" - self.outputExtension = "mp4" - self.acceptsBitrate = true - end, - __base = _base_0, - __name = "MP4NVENC", - __parent = _parent_0 - }, { - __index = function(cls, name) - local val = rawget(_base_0, name) - if val == nil then - local parent = rawget(cls, "__parent") - if parent then - return parent[name] - end - else - return val - end - end, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - if _parent_0.__inherited then - _parent_0.__inherited(_parent_0, _class_0) - end - MP4NVENC = _class_0 -end -formats["mp4-nvenc"] = MP4NVENC() -local MP3 -do - local _class_0 - local _parent_0 = Format - local _base_0 = { } - _base_0.__index = _base_0 - setmetatable(_base_0, _parent_0.__base) - _class_0 = setmetatable({ - __init = function(self) - self.displayName = "MP3 (libmp3lame)" - self.supportsTwopass = false - self.videoCodec = "" - self.audioCodec = "libmp3lame" - self.outputExtension = "mp3" - self.acceptsBitrate = true - end, - __base = _base_0, - __name = "MP3", - __parent = _parent_0 - }, { - __index = function(cls, name) - local val = rawget(_base_0, name) - if val == nil then - local parent = rawget(cls, "__parent") - if parent then - return parent[name] - end - else - return val - end - end, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - if _parent_0.__inherited then - _parent_0.__inherited(_parent_0, _class_0) - end - MP3 = _class_0 -end -formats["mp3"] = MP3() -local GIF -do - local _class_0 - local _parent_0 = Format - local _base_0 = { } - _base_0.__index = _base_0 - setmetatable(_base_0, _parent_0.__base) - _class_0 = setmetatable({ - __init = function(self) - self.displayName = "GIF" - self.supportsTwopass = false - self.videoCodec = "gif" - self.audioCodec = "" - self.outputExtension = "gif" - self.acceptsBitrate = false - end, - __base = _base_0, - __name = "GIF", - __parent = _parent_0 - }, { - __index = function(cls, name) - local val = rawget(_base_0, name) - if val == nil then - local parent = rawget(cls, "__parent") - if parent then - return parent[name] - end - else - return val - end - end, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - if _parent_0.__inherited then - _parent_0.__inherited(_parent_0, _class_0) - end - GIF = _class_0 -end -formats["gif"] = GIF() -local Page -do - local _class_0 - local _base_0 = { - add_keybinds = function(self) - if not self.keybinds then - return - end - for key, func in pairs(self.keybinds) do - mp.add_forced_key_binding(key, key, func, { - repeatable = true - }) - end - end, - remove_keybinds = function(self) - if not self.keybinds then - return - end - for key, _ in pairs(self.keybinds) do - mp.remove_key_binding(key) - end - end, - observe_properties = function(self) - self.sizeCallback = function() - return self:draw() - end - local properties = { - "keepaspect", - "video-out-params", - "video-unscaled", - "panscan", - "video-zoom", - "video-align-x", - "video-pan-x", - "video-align-y", - "video-pan-y", - "osd-width", - "osd-height" - } - for _index_0 = 1, #properties do - local p = properties[_index_0] - mp.observe_property(p, "native", self.sizeCallback) - end - end, - unobserve_properties = function(self) - if self.sizeCallback then - mp.unobserve_property(self.sizeCallback) - self.sizeCallback = nil - end - end, - clear = function(self) - local window_w, window_h = mp.get_osd_size() - mp.set_osd_ass(window_w, window_h, "") - return mp.osd_message("", 0) - end, - prepare = function(self) - return nil - end, - dispose = function(self) - return nil - end, - show = function(self) - if self.visible then - return - end - self.visible = true - self:observe_properties() - self:add_keybinds() - self:prepare() - self:clear() - return self:draw() - end, - hide = function(self) - if not self.visible then - return - end - self.visible = false - self:unobserve_properties() - self:remove_keybinds() - self:clear() - return self:dispose() - end, - setup_text = function(self, ass) - local scale = calculate_scale_factor() - local margin = options.margin * scale - ass:append("{\\an7}") - ass:pos(margin, margin) - return ass:append("{\\fs" .. tostring(options.font_size * scale) .. "}") - end - } - _base_0.__index = _base_0 - _class_0 = setmetatable({ - __init = function() end, - __base = _base_0, - __name = "Page" - }, { - __index = _base_0, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - Page = _class_0 -end -local EncodeWithProgress -do - local _class_0 - local _parent_0 = Page - local _base_0 = { - draw = function(self) - local progress = 100 * ((self.currentTime - self.startTime) / self.duration) - local progressText = string.format("%d%%", progress) - local window_w, window_h = mp.get_osd_size() - local ass = assdraw.ass_new() - ass:new_event() - self:setup_text(ass) - ass:append("Encoding (" .. tostring(bold(progressText)) .. ")\\N") - return mp.set_osd_ass(window_w, window_h, ass.text) - end, - parseLine = function(self, line) - local matchTime = string.match(line, "Encode time[-]pos: ([0-9.]+)") - local matchExit = string.match(line, "Exiting... [(]([%a ]+)[)]") - if matchTime == nil and matchExit == nil then - return - end - if matchTime ~= nil and tonumber(matchTime) > self.currentTime then - self.currentTime = tonumber(matchTime) - end - if matchExit ~= nil then - self.finished = true - self.finishedReason = matchExit - end - end, - startEncode = function(self, command_line) - local copy_command_line - do - local _accum_0 = { } - local _len_0 = 1 - for _index_0 = 1, #command_line do - local arg = command_line[_index_0] - _accum_0[_len_0] = arg - _len_0 = _len_0 + 1 - end - copy_command_line = _accum_0 - end - append(copy_command_line, { - '--term-status-msg=Encode time-pos: ${=time-pos}\\n' - }) - self:show() - local processFd = run_subprocess_popen(copy_command_line) - for line in processFd:lines() do - msg.verbose(string.format('%q', line)) - self:parseLine(line) - self:draw() - end - processFd:close() - self:hide() - if self.finishedReason == "End of file" then - return true - end - return false - end - } - _base_0.__index = _base_0 - setmetatable(_base_0, _parent_0.__base) - _class_0 = setmetatable({ - __init = function(self, startTime, endTime) - self.startTime = startTime - self.endTime = endTime - self.duration = endTime - startTime - self.currentTime = startTime - end, - __base = _base_0, - __name = "EncodeWithProgress", - __parent = _parent_0 - }, { - __index = function(cls, name) - local val = rawget(_base_0, name) - if val == nil then - local parent = rawget(cls, "__parent") - if parent then - return parent[name] - end - else - return val - end - end, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - if _parent_0.__inherited then - _parent_0.__inherited(_parent_0, _class_0) - end - EncodeWithProgress = _class_0 -end -local get_active_tracks -get_active_tracks = function() - local accepted = { - video = true, - audio = not mp.get_property_bool("mute"), - sub = mp.get_property_bool("sub-visibility") - } - local active = { - video = { }, - audio = { }, - sub = { } - } - for _, track in ipairs(mp.get_property_native("track-list")) do - if track["selected"] and accepted[track["type"]] then - local count = #active[track["type"]] - active[track["type"]][count + 1] = track - end - end - return active -end -local filter_tracks_supported_by_format -filter_tracks_supported_by_format = function(active_tracks, format) - local has_video_codec = format.videoCodec ~= "" - local has_audio_codec = format.audioCodec ~= "" - local supported = { - video = has_video_codec and active_tracks["video"] or { }, - audio = has_audio_codec and active_tracks["audio"] or { }, - sub = has_video_codec and active_tracks["sub"] or { } - } - return supported -end -local append_track -append_track = function(out, track) - local external_flag = { - ["audio"] = "audio-file", - ["sub"] = "sub-file" - } - local internal_flag = { - ["video"] = "vid", - ["audio"] = "aid", - ["sub"] = "sid" - } - if track['external'] and string.len(track['external-filename']) <= 2048 then - return append(out, { - "--" .. tostring(external_flag[track['type']]) .. "=" .. tostring(track['external-filename']) - }) - else - return append(out, { - "--" .. tostring(internal_flag[track['type']]) .. "=" .. tostring(track['id']) - }) - end -end -local append_audio_tracks -append_audio_tracks = function(out, tracks) - local internal_tracks = { } - for _index_0 = 1, #tracks do - local track = tracks[_index_0] - if track['external'] then - append_track(out, track) - else - append(internal_tracks, { - track - }) - end - end - if #internal_tracks > 1 then - local filter_string = "" - for _index_0 = 1, #internal_tracks do - local track = internal_tracks[_index_0] - filter_string = filter_string .. "[aid" .. tostring(track['id']) .. "]" - end - filter_string = filter_string .. "amix[ao]" - return append(out, { - "--lavfi-complex=" .. tostring(filter_string) - }) - else - if #internal_tracks == 1 then - return append_track(out, internal_tracks[1]) - end - end -end -local get_scale_filters -get_scale_filters = function() - if options.scale_height > 0 then - return { - "lavfi-scale=-2:" .. tostring(options.scale_height) - } - end - return { } -end -local get_fps_filters -get_fps_filters = function() - if options.fps > 0 then - return { - "fps=" .. tostring(options.fps) - } - end - return { } -end -local append_property -append_property = function(out, property_name, option_name) - option_name = option_name or property_name - local prop = mp.get_property(property_name) - if prop and prop ~= "" then - return append(out, { - "--" .. tostring(option_name) .. "=" .. tostring(prop) - }) - end -end -local append_list_options -append_list_options = function(out, property_name, option_prefix) - option_prefix = option_prefix or property_name - local prop = mp.get_property_native(property_name) - if prop then - for _index_0 = 1, #prop do - local value = prop[_index_0] - append(out, { - "--" .. tostring(option_prefix) .. "-append=" .. tostring(value) - }) - end - end -end -local get_playback_options -get_playback_options = function() - local ret = { } - append_property(ret, "sub-ass-override") - append_property(ret, "sub-ass-force-style") - append_property(ret, "sub-ass-vsfilter-aspect-compat") - append_property(ret, "sub-auto") - append_property(ret, "sub-delay") - append_property(ret, "video-rotate") - append_property(ret, "ytdl-format") - append_property(ret, "deinterlace") - return ret -end -local get_speed_flags -get_speed_flags = function() - local ret = { } - local speed = mp.get_property_native("speed") - if speed ~= 1 then - append(ret, { - "--vf-add=setpts=PTS/" .. tostring(speed), - "--af-add=atempo=" .. tostring(speed), - "--sub-speed=1/" .. tostring(speed) - }) - end - return ret -end -local get_metadata_flags -get_metadata_flags = function() - local title = mp.get_property("filename/no-ext") - return { - "--oset-metadata=title=%" .. tostring(string.len(title)) .. "%" .. tostring(title) - } -end -local apply_current_filters -apply_current_filters = function(filters) - local vf = mp.get_property_native("vf") - msg.verbose("apply_current_filters: got " .. tostring(#vf) .. " currently applied.") - for _index_0 = 1, #vf do - local _continue_0 = false - repeat - local filter = vf[_index_0] - msg.verbose("apply_current_filters: filter name: " .. tostring(filter['name'])) - if filter["enabled"] == false then - _continue_0 = true - break - end - local str = filter["name"] - local params = filter["params"] or { } - for k, v in pairs(params) do - str = str .. ":" .. tostring(k) .. "=%" .. tostring(string.len(v)) .. "%" .. tostring(v) - end - append(filters, { - str - }) - _continue_0 = true - until true - if not _continue_0 then - break - end - end -end -local get_video_filters -get_video_filters = function(format, region) - local filters = { } - append(filters, format:getPreFilters()) - if options.apply_current_filters then - apply_current_filters(filters) - end - if region and region:is_valid() then - append(filters, { - "lavfi-crop=" .. tostring(region.w) .. ":" .. tostring(region.h) .. ":" .. tostring(region.x) .. ":" .. tostring(region.y) - }) - end - append(filters, get_scale_filters()) - append(filters, get_fps_filters()) - append(filters, format:getPostFilters()) - return filters -end -local get_video_encode_flags -get_video_encode_flags = function(format, region) - local flags = { } - append(flags, get_playback_options()) - local filters = get_video_filters(format, region) - for _index_0 = 1, #filters do - local f = filters[_index_0] - append(flags, { - "--vf-add=" .. tostring(f) - }) - end - append(flags, get_speed_flags()) - return flags -end -local calculate_bitrate -calculate_bitrate = function(active_tracks, format, length) - if format.videoCodec == "" then - return nil, options.target_filesize * 8 / length - end - local video_kilobits = options.target_filesize * 8 - local audio_kilobits = nil - local has_audio_track = #active_tracks["audio"] > 0 - if options.strict_filesize_constraint and has_audio_track then - audio_kilobits = length * options.strict_audio_bitrate - video_kilobits = video_kilobits - audio_kilobits - end - local video_bitrate = math.floor(video_kilobits / length) - local audio_bitrate = audio_kilobits and math.floor(audio_kilobits / length) or nil - return video_bitrate, audio_bitrate -end -local find_path -find_path = function(startTime, endTime) - local path = mp.get_property('path') - if not path then - return nil, nil, nil, nil, nil - end - local is_stream = not file_exists(path) - local is_temporary = false - if is_stream then - if mp.get_property('file-format') == 'hls' then - path = utils.join_path(parse_directory('~'), 'cache_dump.ts') - mp.command_native({ - 'dump_cache', - seconds_to_time_string(startTime, false, true), - seconds_to_time_string(endTime + 5, false, true), - path - }) - endTime = endTime - startTime - startTime = 0 - is_temporary = true - end - end - return path, is_stream, is_temporary, startTime, endTime -end -local encode -encode = function(region, startTime, endTime) - local format = formats[options.output_format] - local originalStartTime = startTime - local originalEndTime = endTime - local path, is_stream, is_temporary - path, is_stream, is_temporary, startTime, endTime = find_path(startTime, endTime) - if not path then - message("No file is being played") - return - end - local command = { - "mpv", - path, - "--start=" .. seconds_to_time_string(startTime, false, true), - "--end=" .. seconds_to_time_string(endTime, false, true), - "--loop-file=no", - "--no-pause" - } - append(command, format:getCodecFlags()) - local active_tracks = get_active_tracks() - local supported_active_tracks = filter_tracks_supported_by_format(active_tracks, format) - for track_type, tracks in pairs(supported_active_tracks) do - if track_type == "audio" then - append_audio_tracks(command, tracks) - else - for _index_0 = 1, #tracks do - local track = tracks[_index_0] - append_track(command, track) - end - end - end - for track_type, tracks in pairs(supported_active_tracks) do - local _continue_0 = false - repeat - if #tracks > 0 then - _continue_0 = true - break - end - local _exp_0 = track_type - if "video" == _exp_0 then - append(command, { - "--vid=no" - }) - elseif "audio" == _exp_0 then - append(command, { - "--aid=no" - }) - elseif "sub" == _exp_0 then - append(command, { - "--sid=no" - }) - end - _continue_0 = true - until true - if not _continue_0 then - break - end - end - if format.videoCodec ~= "" then - append(command, get_video_encode_flags(format, region)) - end - append(command, format:getFlags()) - if options.write_filename_on_metadata then - append(command, get_metadata_flags()) - end - if format.acceptsBitrate then - if options.target_filesize > 0 then - local length = endTime - startTime - local video_bitrate, audio_bitrate = calculate_bitrate(supported_active_tracks, format, length) - if video_bitrate then - append(command, { - "--ovcopts-add=b=" .. tostring(video_bitrate) .. "k" - }) - end - if audio_bitrate then - append(command, { - "--oacopts-add=b=" .. tostring(audio_bitrate) .. "k" - }) - end - if options.strict_filesize_constraint then - local type = format.videoCodec ~= "" and "ovc" or "oac" - append(command, { - "--" .. tostring(type) .. "opts-add=minrate=" .. tostring(bitrate) .. "k", - "--" .. tostring(type) .. "opts-add=maxrate=" .. tostring(bitrate) .. "k" - }) - end - else - local type = format.videoCodec ~= "" and "ovc" or "oac" - append(command, { - "--" .. tostring(type) .. "opts-add=b=0" - }) - end - end - for token in string.gmatch(options.additional_flags, "[^%s]+") do - command[#command + 1] = token - end - if not options.strict_filesize_constraint then - for token in string.gmatch(options.non_strict_additional_flags, "[^%s]+") do - command[#command + 1] = token - end - if options.crf >= 0 then - append(command, { - "--ovcopts-add=crf=" .. tostring(options.crf) - }) - end - end - local dir = "" - if is_stream then - dir = parse_directory("~") - else - local _ - dir, _ = utils.split_path(path) - end - if options.output_directory ~= "" then - dir = parse_directory(options.output_directory) - end - local formatted_filename = format_filename(originalStartTime, originalEndTime, format) - local out_path = utils.join_path(dir, formatted_filename) - append(command, { - "--o=" .. tostring(out_path) - }) - if options.twopass and format.supportsTwopass and not is_stream then - local first_pass_cmdline - do - local _accum_0 = { } - local _len_0 = 1 - for _index_0 = 1, #command do - local arg = command[_index_0] - _accum_0[_len_0] = arg - _len_0 = _len_0 + 1 - end - first_pass_cmdline = _accum_0 - end - append(first_pass_cmdline, { - "--ovcopts-add=flags=+pass1" - }) - message("Starting first pass...") - msg.verbose("First-pass command line: ", table.concat(first_pass_cmdline, " ")) - local res = run_subprocess({ - args = first_pass_cmdline, - cancellable = false - }) - if not res then - message("First pass failed! Check the logs for details.") - return - end - append(command, { - "--ovcopts-add=flags=+pass2" - }) - if format.videoCodec == "libvpx" then - msg.verbose("Patching libvpx pass log file...") - vp8_patch_logfile(get_pass_logfile_path(out_path), endTime - startTime) - end - end - msg.info("Encoding to", out_path) - msg.verbose("Command line:", table.concat(command, " ")) - if options.run_detached then - message("Started encode, process was detached.") - return utils.subprocess_detached({ - args = command - }) - else - local res = false - if not should_display_progress() then - message("Started encode...") - res = run_subprocess({ - args = command, - cancellable = false - }) - else - local ewp = EncodeWithProgress(startTime, endTime) - res = ewp:startEncode(command) - end - if res then - message("Encoded successfully! Saved to\\N" .. tostring(bold(out_path))) - else - message("Encode failed! Check the logs for details.") - end - os.remove(get_pass_logfile_path(out_path)) - if is_temporary then - return os.remove(path) - end - end -end -local CropPage -do - local _class_0 - local _parent_0 = Page - local _base_0 = { - reset = function(self) - local dimensions = get_video_dimensions() - local xa, ya - do - local _obj_0 = dimensions.top_left - xa, ya = _obj_0.x, _obj_0.y - end - self.pointA:set_from_screen(xa, ya) - local xb, yb - do - local _obj_0 = dimensions.bottom_right - xb, yb = _obj_0.x, _obj_0.y - end - self.pointB:set_from_screen(xb, yb) - if self.visible then - return self:draw() - end - end, - setPointA = function(self) - local posX, posY = mp.get_mouse_pos() - self.pointA:set_from_screen(posX, posY) - if self.visible then - return self:draw() - end - end, - setPointB = function(self) - local posX, posY = mp.get_mouse_pos() - self.pointB:set_from_screen(posX, posY) - if self.visible then - return self:draw() - end - end, - cancel = function(self) - self:hide() - return self.callback(false, nil) - end, - finish = function(self) - local region = Region() - region:set_from_points(self.pointA, self.pointB) - self:hide() - return self.callback(true, region) - end, - draw_box = function(self, ass) - local region = Region() - region:set_from_points(self.pointA:to_screen(), self.pointB:to_screen()) - local d = get_video_dimensions() - ass:new_event() - ass:append("{\\an7}") - ass:pos(0, 0) - ass:append('{\\bord0}') - ass:append('{\\shad0}') - ass:append('{\\c&H000000&}') - ass:append('{\\alpha&H77}') - ass:draw_start() - ass:rect_cw(d.top_left.x, d.top_left.y, region.x, region.y + region.h) - ass:rect_cw(region.x, d.top_left.y, d.bottom_right.x, region.y) - ass:rect_cw(d.top_left.x, region.y + region.h, region.x + region.w, d.bottom_right.y) - ass:rect_cw(region.x + region.w, region.y, d.bottom_right.x, d.bottom_right.y) - return ass:draw_stop() - end, - draw = function(self) - local window = { } - window.w, window.h = mp.get_osd_size() - local ass = assdraw.ass_new() - self:draw_box(ass) - ass:new_event() - self:setup_text(ass) - ass:append(tostring(bold('Crop:')) .. "\\N") - ass:append(tostring(bold('1:')) .. " change point A (" .. tostring(self.pointA.x) .. ", " .. tostring(self.pointA.y) .. ")\\N") - ass:append(tostring(bold('2:')) .. " change point B (" .. tostring(self.pointB.x) .. ", " .. tostring(self.pointB.y) .. ")\\N") - ass:append(tostring(bold('r:')) .. " reset to whole screen\\N") - ass:append(tostring(bold('ESC:')) .. " cancel crop\\N") - local width, height = math.abs(self.pointA.x - self.pointB.x), math.abs(self.pointA.y - self.pointB.y) - ass:append(tostring(bold('ENTER:')) .. " confirm crop (" .. tostring(width) .. "x" .. tostring(height) .. ")\\N") - return mp.set_osd_ass(window.w, window.h, ass.text) - end - } - _base_0.__index = _base_0 - setmetatable(_base_0, _parent_0.__base) - _class_0 = setmetatable({ - __init = function(self, callback, region) - self.pointA = VideoPoint() - self.pointB = VideoPoint() - self.keybinds = { - ["1"] = (function() - local _base_1 = self - local _fn_0 = _base_1.setPointA - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["2"] = (function() - local _base_1 = self - local _fn_0 = _base_1.setPointB - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["r"] = (function() - local _base_1 = self - local _fn_0 = _base_1.reset - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["ESC"] = (function() - local _base_1 = self - local _fn_0 = _base_1.cancel - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["ENTER"] = (function() - local _base_1 = self - local _fn_0 = _base_1.finish - return function(...) - return _fn_0(_base_1, ...) - end - end)() - } - self:reset() - self.callback = callback - if region and region:is_valid() then - self.pointA.x = region.x - self.pointA.y = region.y - self.pointB.x = region.x + region.w - self.pointB.y = region.y + region.h - end - end, - __base = _base_0, - __name = "CropPage", - __parent = _parent_0 - }, { - __index = function(cls, name) - local val = rawget(_base_0, name) - if val == nil then - local parent = rawget(cls, "__parent") - if parent then - return parent[name] - end - else - return val - end - end, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - if _parent_0.__inherited then - _parent_0.__inherited(_parent_0, _class_0) - end - CropPage = _class_0 -end -local Option -do - local _class_0 - local _base_0 = { - hasPrevious = function(self) - local _exp_0 = self.optType - if "bool" == _exp_0 then - return true - elseif "int" == _exp_0 then - if self.opts.min then - return self.value > self.opts.min - else - return true - end - elseif "list" == _exp_0 then - return self.value > 1 - end - end, - hasNext = function(self) - local _exp_0 = self.optType - if "bool" == _exp_0 then - return true - elseif "int" == _exp_0 then - if self.opts.max then - return self.value < self.opts.max - else - return true - end - elseif "list" == _exp_0 then - return self.value < #self.opts.possibleValues - end - end, - leftKey = function(self) - local _exp_0 = self.optType - if "bool" == _exp_0 then - self.value = not self.value - elseif "int" == _exp_0 then - self.value = self.value - self.opts.step - if self.opts.min and self.opts.min > self.value then - self.value = self.opts.min - end - elseif "list" == _exp_0 then - if self.value > 1 then - self.value = self.value - 1 - end - end - end, - rightKey = function(self) - local _exp_0 = self.optType - if "bool" == _exp_0 then - self.value = not self.value - elseif "int" == _exp_0 then - self.value = self.value + self.opts.step - if self.opts.max and self.opts.max < self.value then - self.value = self.opts.max - end - elseif "list" == _exp_0 then - if self.value < #self.opts.possibleValues then - self.value = self.value + 1 - end - end - end, - getValue = function(self) - local _exp_0 = self.optType - if "bool" == _exp_0 then - return self.value - elseif "int" == _exp_0 then - return self.value - elseif "list" == _exp_0 then - local value, _ - do - local _obj_0 = self.opts.possibleValues[self.value] - value, _ = _obj_0[1], _obj_0[2] - end - return value - end - end, - setValue = function(self, value) - local _exp_0 = self.optType - if "bool" == _exp_0 then - self.value = value - elseif "int" == _exp_0 then - self.value = value - elseif "list" == _exp_0 then - local set = false - for i, possiblePair in ipairs(self.opts.possibleValues) do - local possibleValue, _ - possibleValue, _ = possiblePair[1], possiblePair[2] - if possibleValue == value then - set = true - self.value = i - break - end - end - if not set then - return msg.warn("Tried to set invalid value " .. tostring(value) .. " to " .. tostring(self.displayText) .. " option.") - end - end - end, - getDisplayValue = function(self) - local _exp_0 = self.optType - if "bool" == _exp_0 then - return self.value and "yes" or "no" - elseif "int" == _exp_0 then - if self.opts.altDisplayNames and self.opts.altDisplayNames[self.value] then - return self.opts.altDisplayNames[self.value] - else - return tostring(self.value) - end - elseif "list" == _exp_0 then - local value, displayValue - do - local _obj_0 = self.opts.possibleValues[self.value] - value, displayValue = _obj_0[1], _obj_0[2] - end - return displayValue or value - end - end, - draw = function(self, ass, selected) - if selected then - ass:append(tostring(bold(self.displayText)) .. ": ") - else - ass:append(tostring(self.displayText) .. ": ") - end - if self:hasPrevious() then - ass:append("◀ ") - end - ass:append(self:getDisplayValue()) - if self:hasNext() then - ass:append(" ▶") - end - return ass:append("\\N") - end - } - _base_0.__index = _base_0 - _class_0 = setmetatable({ - __init = function(self, optType, displayText, value, opts) - self.optType = optType - self.displayText = displayText - self.opts = opts - self.value = 1 - return self:setValue(value) - end, - __base = _base_0, - __name = "Option" - }, { - __index = _base_0, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - Option = _class_0 -end -local EncodeOptionsPage -do - local _class_0 - local _parent_0 = Page - local _base_0 = { - getCurrentOption = function(self) - return self.options[self.currentOption][2] - end, - leftKey = function(self) - (self:getCurrentOption()):leftKey() - return self:draw() - end, - rightKey = function(self) - (self:getCurrentOption()):rightKey() - return self:draw() - end, - prevOpt = function(self) - self.currentOption = math.max(1, self.currentOption - 1) - return self:draw() - end, - nextOpt = function(self) - self.currentOption = math.min(#self.options, self.currentOption + 1) - return self:draw() - end, - confirmOpts = function(self) - for _, optPair in ipairs(self.options) do - local optName, opt - optName, opt = optPair[1], optPair[2] - options[optName] = opt:getValue() - end - self:hide() - return self.callback(true) - end, - cancelOpts = function(self) - self:hide() - return self.callback(false) - end, - draw = function(self) - local window_w, window_h = mp.get_osd_size() - local ass = assdraw.ass_new() - ass:new_event() - self:setup_text(ass) - ass:append(tostring(bold('Options:')) .. "\\N\\N") - for i, optPair in ipairs(self.options) do - local opt = optPair[2] - opt:draw(ass, self.currentOption == i) - end - ass:append("\\N▲ / ▼: navigate\\N") - ass:append(tostring(bold('ENTER:')) .. " confirm options\\N") - ass:append(tostring(bold('ESC:')) .. " cancel\\N") - return mp.set_osd_ass(window_w, window_h, ass.text) - end - } - _base_0.__index = _base_0 - setmetatable(_base_0, _parent_0.__base) - _class_0 = setmetatable({ - __init = function(self, callback) - self.callback = callback - self.currentOption = 1 - local scaleHeightOpts = { - possibleValues = { - { - -1, - "no" - }, - { - 144 - }, - { - 240 - }, - { - 360 - }, - { - 480 - }, - { - 540 - }, - { - 720 - }, - { - 1080 - }, - { - 1440 - }, - { - 2160 - } - } - } - local filesizeOpts = { - step = 250, - min = 0, - altDisplayNames = { - [0] = "0 (constant quality)" - } - } - local crfOpts = { - step = 1, - min = -1, - altDisplayNames = { - [-1] = "disabled" - } - } - local fpsOpts = { - possibleValues = { - { - -1, - "source" - }, - { - 15 - }, - { - 24 - }, - { - 30 - }, - { - 48 - }, - { - 50 - }, - { - 60 - }, - { - 120 - }, - { - 240 - } - } - } - local formatIds = { - "webm-vp8", - "webm-vp9", - "mp4", - "mp4-nvenc", - "raw", - "mp3", - "gif" - } - local formatOpts = { - possibleValues = (function() - local _accum_0 = { } - local _len_0 = 1 - for _index_0 = 1, #formatIds do - local fId = formatIds[_index_0] - _accum_0[_len_0] = { - fId, - formats[fId].displayName - } - _len_0 = _len_0 + 1 - end - return _accum_0 - end)() - } - self.options = { - { - "output_format", - Option("list", "Output Format", options.output_format, formatOpts) - }, - { - "twopass", - Option("bool", "Two Pass", options.twopass) - }, - { - "apply_current_filters", - Option("bool", "Apply Current Video Filters", options.apply_current_filters) - }, - { - "scale_height", - Option("list", "Scale Height", options.scale_height, scaleHeightOpts) - }, - { - "strict_filesize_constraint", - Option("bool", "Strict Filesize Constraint", options.strict_filesize_constraint) - }, - { - "write_filename_on_metadata", - Option("bool", "Write Filename on Metadata", options.write_filename_on_metadata) - }, - { - "target_filesize", - Option("int", "Target Filesize", options.target_filesize, filesizeOpts) - }, - { - "crf", - Option("int", "CRF", options.crf, crfOpts) - }, - { - "fps", - Option("list", "FPS", options.fps, fpsOpts) - } - } - self.keybinds = { - ["LEFT"] = (function() - local _base_1 = self - local _fn_0 = _base_1.leftKey - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["RIGHT"] = (function() - local _base_1 = self - local _fn_0 = _base_1.rightKey - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["UP"] = (function() - local _base_1 = self - local _fn_0 = _base_1.prevOpt - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["DOWN"] = (function() - local _base_1 = self - local _fn_0 = _base_1.nextOpt - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["ENTER"] = (function() - local _base_1 = self - local _fn_0 = _base_1.confirmOpts - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["ESC"] = (function() - local _base_1 = self - local _fn_0 = _base_1.cancelOpts - return function(...) - return _fn_0(_base_1, ...) - end - end)() - } - end, - __base = _base_0, - __name = "EncodeOptionsPage", - __parent = _parent_0 - }, { - __index = function(cls, name) - local val = rawget(_base_0, name) - if val == nil then - local parent = rawget(cls, "__parent") - if parent then - return parent[name] - end - else - return val - end - end, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - if _parent_0.__inherited then - _parent_0.__inherited(_parent_0, _class_0) - end - EncodeOptionsPage = _class_0 -end -local PreviewPage -do - local _class_0 - local _parent_0 = Page - local _base_0 = { - prepare = function(self) - local vf = mp.get_property_native("vf") - vf[#vf + 1] = { - name = "sub" - } - if self.region:is_valid() then - vf[#vf + 1] = { - name = "crop", - params = { - w = tostring(self.region.w), - h = tostring(self.region.h), - x = tostring(self.region.x), - y = tostring(self.region.y) - } - } - end - mp.set_property_native("vf", vf) - if self.startTime > -1 and self.endTime > -1 then - mp.set_property_native("ab-loop-a", self.startTime) - mp.set_property_native("ab-loop-b", self.endTime) - mp.set_property_native("time-pos", self.startTime) - end - return mp.set_property_native("pause", false) - end, - dispose = function(self) - mp.set_property("ab-loop-a", "no") - mp.set_property("ab-loop-b", "no") - for prop, value in pairs(self.originalProperties) do - mp.set_property_native(prop, value) - end - end, - draw = function(self) - local window_w, window_h = mp.get_osd_size() - local ass = assdraw.ass_new() - ass:new_event() - self:setup_text(ass) - ass:append("Press " .. tostring(bold('ESC')) .. " to exit preview.\\N") - return mp.set_osd_ass(window_w, window_h, ass.text) - end, - cancel = function(self) - self:hide() - return self.callback() - end - } - _base_0.__index = _base_0 - setmetatable(_base_0, _parent_0.__base) - _class_0 = setmetatable({ - __init = function(self, callback, region, startTime, endTime) - self.callback = callback - self.originalProperties = { - ["vf"] = mp.get_property_native("vf"), - ["time-pos"] = mp.get_property_native("time-pos"), - ["pause"] = mp.get_property_native("pause") - } - self.keybinds = { - ["ESC"] = (function() - local _base_1 = self - local _fn_0 = _base_1.cancel - return function(...) - return _fn_0(_base_1, ...) - end - end)() - } - self.region = region - self.startTime = startTime - self.endTime = endTime - self.isLoop = false - end, - __base = _base_0, - __name = "PreviewPage", - __parent = _parent_0 - }, { - __index = function(cls, name) - local val = rawget(_base_0, name) - if val == nil then - local parent = rawget(cls, "__parent") - if parent then - return parent[name] - end - else - return val - end - end, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - if _parent_0.__inherited then - _parent_0.__inherited(_parent_0, _class_0) - end - PreviewPage = _class_0 -end -local MainPage -do - local _class_0 - local _parent_0 = Page - local _base_0 = { - setStartTime = function(self) - self.startTime = mp.get_property_number("time-pos") - if self.visible then - self:clear() - return self:draw() - end - end, - setEndTime = function(self) - self.endTime = mp.get_property_number("time-pos") - if self.visible then - self:clear() - return self:draw() - end - end, - setupStartAndEndTimes = function(self) - if mp.get_property_native("duration") then - self.startTime = 0 - self.endTime = mp.get_property_native("duration") - else - self.startTime = -1 - self.endTime = -1 - end - if self.visible then - self:clear() - return self:draw() - end - end, - draw = function(self) - local window_w, window_h = mp.get_osd_size() - local ass = assdraw.ass_new() - ass:new_event() - self:setup_text(ass) - ass:append(tostring(bold('WebM maker')) .. "\\N\\N") - ass:append(tostring(bold('c:')) .. " crop\\N") - ass:append(tostring(bold('1:')) .. " set start time (current is " .. tostring(seconds_to_time_string(self.startTime)) .. ")\\N") - ass:append(tostring(bold('2:')) .. " set end time (current is " .. tostring(seconds_to_time_string(self.endTime)) .. ")\\N") - ass:append(tostring(bold('o:')) .. " change encode options\\N") - ass:append(tostring(bold('p:')) .. " preview\\N") - ass:append(tostring(bold('e:')) .. " encode\\N\\N") - ass:append(tostring(bold('ESC:')) .. " close\\N") - return mp.set_osd_ass(window_w, window_h, ass.text) - end, - onUpdateCropRegion = function(self, updated, newRegion) - if updated then - self.region = newRegion - end - return self:show() - end, - crop = function(self) - self:hide() - local cropPage = CropPage((function() - local _base_1 = self - local _fn_0 = _base_1.onUpdateCropRegion - return function(...) - return _fn_0(_base_1, ...) - end - end)(), self.region) - return cropPage:show() - end, - onOptionsChanged = function(self, updated) - return self:show() - end, - changeOptions = function(self) - self:hide() - local encodeOptsPage = EncodeOptionsPage((function() - local _base_1 = self - local _fn_0 = _base_1.onOptionsChanged - return function(...) - return _fn_0(_base_1, ...) - end - end)()) - return encodeOptsPage:show() - end, - onPreviewEnded = function(self) - return self:show() - end, - preview = function(self) - self:hide() - local previewPage = PreviewPage((function() - local _base_1 = self - local _fn_0 = _base_1.onPreviewEnded - return function(...) - return _fn_0(_base_1, ...) - end - end)(), self.region, self.startTime, self.endTime) - return previewPage:show() - end, - encode = function(self) - self:hide() - if self.startTime < 0 then - message("No start time, aborting") - return - end - if self.endTime < 0 then - message("No end time, aborting") - return - end - if self.startTime >= self.endTime then - message("Start time is ahead of end time, aborting") - return - end - return encode(self.region, self.startTime, self.endTime) - end - } - _base_0.__index = _base_0 - setmetatable(_base_0, _parent_0.__base) - _class_0 = setmetatable({ - __init = function(self) - self.keybinds = { - ["c"] = (function() - local _base_1 = self - local _fn_0 = _base_1.crop - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["1"] = (function() - local _base_1 = self - local _fn_0 = _base_1.setStartTime - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["2"] = (function() - local _base_1 = self - local _fn_0 = _base_1.setEndTime - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["o"] = (function() - local _base_1 = self - local _fn_0 = _base_1.changeOptions - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["p"] = (function() - local _base_1 = self - local _fn_0 = _base_1.preview - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["e"] = (function() - local _base_1 = self - local _fn_0 = _base_1.encode - return function(...) - return _fn_0(_base_1, ...) - end - end)(), - ["ESC"] = (function() - local _base_1 = self - local _fn_0 = _base_1.hide - return function(...) - return _fn_0(_base_1, ...) - end - end)() - } - self.startTime = -1 - self.endTime = -1 - self.region = Region() - end, - __base = _base_0, - __name = "MainPage", - __parent = _parent_0 - }, { - __index = function(cls, name) - local val = rawget(_base_0, name) - if val == nil then - local parent = rawget(cls, "__parent") - if parent then - return parent[name] - end - else - return val - end - end, - __call = function(cls, ...) - local _self_0 = setmetatable({}, _base_0) - cls.__init(_self_0, ...) - return _self_0 - end - }) - _base_0.__class = _class_0 - if _parent_0.__inherited then - _parent_0.__inherited(_parent_0, _class_0) - end - MainPage = _class_0 -end -monitor_dimensions() -local mainPage = MainPage() -mp.add_key_binding(options.keybind, "display-webm-encoder", (function() - local _base_0 = mainPage - local _fn_0 = _base_0.show - return function(...) - return _fn_0(_base_0, ...) - end -end)(), { - repeatable = false -}) -return mp.register_event("file-loaded", (function() - local _base_0 = mainPage - local _fn_0 = _base_0.setupStartAndEndTimes - return function(...) - return _fn_0(_base_0, ...) - end -end)()) diff --git a/.config/paru/paru.conf b/.config/paru/paru.conf deleted file mode 100644 index 351ad9f..0000000 --- a/.config/paru/paru.conf +++ /dev/null @@ -1,30 +0,0 @@ -# -# $PARU_CONF -# /etc/paru.conf -# ~/.config/paru/paru.conf -# -# See the paru.conf(5) manpage for options - -# -# GENERAL OPTIONS -# -[options] -PgpFetch -Devel -Provides -DevelSuffixes = -git -cvs -svn -bzr -darcs -always -BottomUp -#RemoveMake -SudoLoop -#UseAsk -#CombinedUpgrade -#CleanAfter -#UpgradeMenu -NewsOnUpgrade - -# -# Binary OPTIONS -# -#[bin] -#FileManager = vifm -#MFlags = --skippgpcheck diff --git a/.config/qtile/__pycache__/config.cpython-39.pyc b/.config/qtile/__pycache__/config.cpython-39.pyc deleted file mode 100644 index a9ffd56..0000000 Binary files a/.config/qtile/__pycache__/config.cpython-39.pyc and /dev/null differ diff --git a/.config/qtile/colors.py b/.config/qtile/colors.py deleted file mode 100644 index 2a36984..0000000 --- a/.config/qtile/colors.py +++ /dev/null @@ -1,47 +0,0 @@ -# color definitions - -seiun = { - "bg": "#202020", - "fg": "#dfdfdf", - "dark-red": "#ea7171", - "red": "#ed8682", - "dark-green": "#96a171", - "green": "#b1d094", - "dark-yellow": "#e7a55f", - "yellow": "#ecb983", - "dark-blue": "#7196a1", - "blue": "#9fb8bf", - "dark-magenta": "#c28490", - "magenta": "#d7adb5", - "dark-cyan": "#80ab96", - "cyan": "#9fbfaf", - "dark-gray": "#3d3d3d", - "gray": "#666666", -} - -gruvbox = { - "bg": "#282828", - "bg0_h": "#1d2021", - "bg1": "#3c3836", - "bg2": "#504945", - "bg3": "#665c45", - "bg4": "#7c6f64", - "gray": "#928374", - "dark-grey": "#a89984", - "fg0": "#fbf1c7", - "fg": "#ebdbb2", - "dark-red": "#cc241d", - "light-red": "#fb4934", - "dark-green": "#98971a", - "light-green": "#b8bb26", - "dark-yellow": "#d79921", - "light-yellow": "#fabd2f", - "dark-blue": "#458588", - "light-blue": "#83a598", - "dark-purple": "#b16286", - "light-purple": "#d3869b", - "dark-aqua": "#689d6a", - "light-aqua": "#8ec07c", - "dark-orange": "#d65d0e", - "light-orange": "#fe8019", -} diff --git a/.config/qtile/config.py b/.config/qtile/config.py deleted file mode 100644 index 75fd1a4..0000000 --- a/.config/qtile/config.py +++ /dev/null @@ -1,697 +0,0 @@ -# Copyright (c) 2010 Aldo Cortesi -# Copyright (c) 2010, 2014 dequis -# Copyright (c) 2012 Randall Ma -# Copyright (c) 2012-2014 Tycho Andersen -# Copyright (c) 2012 Craig Barnes -# Copyright (c) 2013 horsik -# Copyright (c) 2013 Tao Sauvage -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - - -import os -import re -import socket -import subprocess -import colors -from typing import List # noqa: F401 -from libqtile import layout, bar, widget, hook, qtile -from libqtile.config import Click, Drag, Group, Key, Match, Screen, Rule -from libqtile.command import lazy - -from libqtile.widget import Spacer - -# mod4 or mod = super key -mod = "mod4" -mod1 = "alt" -mod2 = "control" -home = os.path.expanduser("~") - - -@lazy.function -def window_to_prev_group(qtile): - if qtile.currentWindow is not None: - i = qtile.groups.index(qtile.currentGroup) - qtile.currentWindow.togroup(qtile.groups[i - 1].name) - - -@lazy.function -def window_to_next_group(qtile): - if qtile.currentWindow is not None: - i = qtile.groups.index(qtile.currentGroup) - qtile.currentWindow.togroup(qtile.groups[i + 1].name) - - -myTerm = "kitty" # My terminal of choice - -keys = [ - # SUPER + FUNCTION KEYS - Key([mod], "f", lazy.window.toggle_fullscreen()), - Key([mod], "q", lazy.window.kill()), - Key([mod], "t", lazy.spawn("xterm")), - Key([mod], "v", lazy.spawn("pavucontrol")), - # Key([mod], "s", lazy.spawn("nwggrid -p -o 0.4")), - Key([mod], "s", lazy.spawn("albert toggle")), - Key([mod], "Escape", lazy.spawn("xkill")), - Key([mod], "Return", lazy.spawn("kitty")), - Key([mod], "KP_Enter", lazy.spawn("kitty")), - Key([mod], "x", lazy.shutdown()), - # SUPER + SHIFT KEYS - Key([mod, "shift"], "Return", lazy.spawn("thunar")), - Key( - [mod, "shift"], - "s", - lazy.spawn( - "dmenu_run -i -nb '#191919' -nf '#fea63c' -sb '#fea63c' -sf '#191919' -fn 'NotoMonoRegular:bold:pixelsize=14'" - ), - ), - # Key([mod, "shift"], "d", lazy.spawn(home + '/.config/qtile/scripts/dmenu.sh')), - Key([mod, "shift"], "q", lazy.window.kill()), - Key([mod, "shift"], "r", lazy.restart()), - Key([mod, "control"], "r", lazy.restart()), - Key([mod, "shift"], "x", lazy.shutdown()), - # CONTROL + ALT KEYS - Key( - ["mod1", "control"], - "o", - lazy.spawn(home + "/.config/qtile/scripts/picom-toggle.sh"), - ), - Key(["mod1", "control"], "t", lazy.spawn("xterm")), - Key(["mod1", "control"], "u", lazy.spawn("pavucontrol")), - # ALT + ... KEYS - Key(["mod1"], "p", lazy.spawn("pamac-manager")), - Key(["mod1"], "f", lazy.spawn("waterfox-g4")), - Key(["mod1"], "m", lazy.spawn("thunar")), - Key(["mod1"], "w", lazy.spawn("garuda-welcome")), - # CONTROL + SHIFT KEYS - Key([mod2, "shift"], "Escape", lazy.spawn("lxtask")), - # SCREENSHOTS - Key([], "Print", lazy.spawn("flameshot gui -p " + home + "/Pictures/Screenshots")), - Key( - [mod2], - "Print", - lazy.spawn("flameshot full -p " + home + "/Pictures/Screenshots"), - ), - # Key([mod2, "shift"], "Print", lazy.spawn('gnome-screenshot -i')), - # MULTIMEDIA KEYS - # INCREASE/DECREASE BRIGHTNESS - Key([], "XF86MonBrightnessUp", lazy.spawn("xbacklight -inc 5")), - Key([], "XF86MonBrightnessDown", lazy.spawn("xbacklight -dec 5")), - # INCREASE/DECREASE/MUTE VOLUME - Key([], "XF86AudioMute", lazy.spawn("amixer -q set Master toggle")), - Key([], "XF86AudioLowerVolume", lazy.spawn("amixer -q set Master 5%-")), - Key([], "XF86AudioRaiseVolume", lazy.spawn("amixer -q set Master 5%+")), - Key([], "XF86AudioPlay", lazy.spawn("playerctl play-pause")), - Key([], "XF86AudioNext", lazy.spawn("playerctl next")), - Key([], "XF86AudioPrev", lazy.spawn("playerctl previous")), - Key([], "XF86AudioStop", lazy.spawn("playerctl stop")), - # Key([], "XF86AudioPlay", lazy.spawn("mpc toggle")), - # Key([], "XF86AudioNext", lazy.spawn("mpc next")), - # Key([], "XF86AudioPrev", lazy.spawn("mpc prev")), - # Key([], "XF86AudioStop", lazy.spawn("mpc stop")), - # QTILE LAYOUT KEYS - Key([mod], "n", lazy.layout.normalize()), - Key([mod], "space", lazy.next_layout()), - # CHANGE FOCUS - Key([mod], "Up", lazy.layout.up()), - Key([mod], "Down", lazy.layout.down()), - Key([mod], "Left", lazy.layout.left()), - Key([mod], "Right", lazy.layout.right()), - Key([mod], "k", lazy.layout.up()), - Key([mod], "j", lazy.layout.down()), - Key([mod], "h", lazy.layout.left()), - Key([mod], "l", lazy.layout.right()), - # RESIZE UP, DOWN, LEFT, RIGHT - Key( - [mod, "control"], - "l", - lazy.layout.grow_right(), - lazy.layout.grow(), - lazy.layout.increase_ratio(), - lazy.layout.delete(), - ), - Key( - [mod, "control"], - "Right", - lazy.layout.grow_right(), - lazy.layout.grow(), - lazy.layout.increase_ratio(), - lazy.layout.delete(), - ), - Key( - [mod, "control"], - "h", - lazy.layout.grow_left(), - lazy.layout.shrink(), - lazy.layout.decrease_ratio(), - lazy.layout.add(), - ), - Key( - [mod, "control"], - "Left", - lazy.layout.grow_left(), - lazy.layout.shrink(), - lazy.layout.decrease_ratio(), - lazy.layout.add(), - ), - Key( - [mod, "control"], - "k", - lazy.layout.grow_up(), - lazy.layout.grow(), - lazy.layout.decrease_nmaster(), - ), - Key( - [mod, "control"], - "Up", - lazy.layout.grow_up(), - lazy.layout.grow(), - lazy.layout.decrease_nmaster(), - ), - Key( - [mod, "control"], - "j", - lazy.layout.grow_down(), - lazy.layout.shrink(), - lazy.layout.increase_nmaster(), - ), - Key( - [mod, "control"], - "Down", - lazy.layout.grow_down(), - lazy.layout.shrink(), - lazy.layout.increase_nmaster(), - ), - # FLIP LAYOUT FOR MONADTALL/MONADWIDE - Key([mod, "shift"], "f", lazy.layout.flip()), - # FLIP LAYOUT FOR BSP - Key([mod, "mod1"], "k", lazy.layout.flip_up()), - Key([mod, "mod1"], "j", lazy.layout.flip_down()), - Key([mod, "mod1"], "l", lazy.layout.flip_right()), - Key([mod, "mod1"], "h", lazy.layout.flip_left()), - # MOVE WINDOWS UP OR DOWN BSP LAYOUT - Key([mod, "shift"], "k", lazy.layout.shuffle_up()), - Key([mod, "shift"], "j", lazy.layout.shuffle_down()), - Key([mod, "shift"], "h", lazy.layout.shuffle_left()), - Key([mod, "shift"], "l", lazy.layout.shuffle_right()), - ### Treetab controls - Key( - [mod, "control"], - "k", - lazy.layout.section_up(), - desc="Move up a section in treetab", - ), - Key( - [mod, "control"], - "j", - lazy.layout.section_down(), - desc="Move down a section in treetab", - ), - # MOVE WINDOWS UP OR DOWN MONADTALL/MONADWIDE LAYOUT - Key([mod, "shift"], "Up", lazy.layout.shuffle_up()), - Key([mod, "shift"], "Down", lazy.layout.shuffle_down()), - Key([mod, "shift"], "Left", lazy.layout.swap_left()), - Key([mod, "shift"], "Right", lazy.layout.swap_right()), - # TOGGLE FLOATING LAYOUT - Key([mod, "shift"], "space", lazy.window.toggle_floating()), -] - -groups = [] - -# FOR QWERTY KEYBOARDS -group_names = [ - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "0", -] - -# FOR AZERTY KEYBOARDS -# group_names = ["ampersand", "eacute", "quotedbl", "apostrophe", "parenleft", "section", "egrave", "exclam", "ccedilla", "agrave",] - -# group_labels = ["1 ", "2 ", "3 ", "4 ", "5 ", "6 ", "7 ", "8 ", "9 ", "0",] -group_labels = [ - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", -] -# group_labels = ["", "", "", "", "",] -# group_labels = ["Web", "Edit/chat", "Image", "Gimp", "Meld", "Video", "Vb", "Files", "Mail", "Music",] - -group_layouts = [ - "monadtall", - "monadtall", - "monadtall", - "monadtall", - "monadtall", - "monadtall", - "monadtall", - "monadtall", - "treetab", - "floating", -] -# group_layouts = ["monadtall", "matrix", "monadtall", "bsp", "monadtall", "matrix", "monadtall", "bsp", "monadtall", "monadtall",] - -for i in range(len(group_names)): - groups.append( - Group( - name=group_names[i], - layout=group_layouts[i].lower(), - label=group_labels[i], - ) - ) - -for i in groups: - keys.extend( - [ - # CHANGE WORKSPACES - Key([mod], i.name, lazy.group[i.name].toscreen()), - Key([mod], "Tab", lazy.screen.next_group()), - Key([mod, "shift"], "Tab", lazy.screen.prev_group()), - Key(["mod1"], "Tab", lazy.screen.next_group()), - Key(["mod1", "shift"], "Tab", lazy.screen.prev_group()), - # MOVE WINDOW TO SELECTED WORKSPACE 1-10 AND STAY ON WORKSPACE - # Key([mod, "shift"], i.name, lazy.window.togroup(i.name)), - # MOVE WINDOW TO SELECTED WORKSPACE 1-10 AND FOLLOW MOVED WINDOW TO WORKSPACE - Key( - [mod, "shift"], - i.name, - lazy.window.togroup(i.name), - lazy.group[i.name].toscreen(), - ), - ] - ) - - -color = colors.gruvbox - - -def init_layout_theme(): - return { - "margin": 10, - "border_width": 2, - "border_focus": color["gray"], - "border_normal": color["dark-aqua"], - } - - -layout_theme = init_layout_theme() - - -layouts = [ - layout.MonadTall( - margin=16, - border_width=2, - border_focus=color["gray"], - border_normal=color["dark-aqua"], - ), - layout.MonadWide( - margin=16, - border_width=2, - border_focus=color["gray"], - border_normal=color["dark-aqua"], - ), - layout.Matrix(**layout_theme), - layout.Bsp(**layout_theme), - layout.Floating(**layout_theme), - layout.RatioTile(**layout_theme), - layout.Max(**layout_theme), - layout.Columns(**layout_theme), - layout.Stack(**layout_theme), - layout.Tile(**layout_theme), - layout.TreeTab( - sections=["FIRST", "SECOND"], - bg_color=color["bg1"], - active_bg=color["dark-blue"], - inactive_bg=color["light-blue"], - padding_y=5, - section_top=10, - panel_width=280, - ), - layout.VerticalTile(**layout_theme), - layout.Zoomy(**layout_theme), -] - -# COLORS FOR THE BAR - - -def base(fg="text", bg="dark"): - return {"foreground": color["fg"], "background": color["bg"]} - - -# WIDGETS FOR THE BAR - - -def init_widgets_defaults(): - return dict(font="Noto Sans", fontsize=9, padding=2, background=color["bg1"]) - - -widget_defaults = init_widgets_defaults() - - -def init_widgets_list(): - prompt = "{0}@{1}: ".format(os.environ["USER"], socket.gethostname()) - widgets_list = [ - widget.Sep( - linewidth=1, padding=10, foreground=color["bg1"], background=color["bg1"] - ), # - widget.Image( - filename="~/.config/qtile/icons/qtilelogo.png", - iconsize=9, - background=color["bg"], - mouse_callbacks={"Button1": lambda: qtile.cmd_spawn("jgmenu_run")}, - ), - widget.GroupBox( - **base(bg=color["bg1"]), - font="UbuntuMono Nerd Font", - fontsize=11, - margin_y=3, - margin_x=2, - padding_y=5, - padding_x=4, - borderwidth=3, - active=color["fg"], - inactive=color["light-red"], - rounded=True, - highlight_method="block", - urgent_alert_method="block", - urgent_border=color["dark-red"], - this_current_screen_border=color["dark-aqua"], - this_screen_border=color["dark-green"], - other_current_screen_border=color["bg0_h"], - other_screen_border=color["gray"], - disable_drag=True - ), - widget.TaskList( - highlight_method="border", # or block - icon_size=17, - max_title_width=150, - rounded=True, - padding_x=0, - padding_y=0, - margin_y=0, - fontsize=14, - border=color["light-green"], - foreground=color["dark-red"], - margin=2, - txt_floating="🗗", - txt_minimized=">_ ", - borderwidth=1, - background=color["bg"], - # unfocused_border = 'border' - ), - widget.CurrentLayoutIcon( - custom_icon_paths=[os.path.expanduser("~/.config/qtile/icons")], - foreground=color["fg"], - background=color["light-red"], - padding=0, - scale=0.7, - ), - widget.CurrentLayout( - font="Noto Sans Bold", - fontsize=12, - foreground=color["fg"], - background=color["light-red"], - ), - widget.Net( - font="Noto Sans", - fontsize=12, - # Here enter your network name - interface=["wlp2s0"], - format="{down} ↓↑ {up}", - foreground=color["fg"], - background=color["light-blue"], - padding=0, - ), - widget.CPU( - font="Noto Sans", - # format = '{MemUsed}M/{MemTotal}M', - update_interval=1, - fontsize=12, - foreground=color["fg"], - background=color["light-orange"], - mouse_callbacks={"Button1": lambda: qtile.cmd_spawn(myTerm + " -e htop")}, - ), - widget.Memory( - font="Noto Sans", - format="{MemUsed: .0f}M/{MemTotal: .0f}M", - update_interval=1, - fontsize=12, - measure_mem="M", - foreground=color["fg"], - background=color["gray"], - mouse_callbacks={"Button1": lambda: qtile.cmd_spawn(myTerm + " -e htop")}, - ), - widget.Clock( - foreground=color["light-red"], - background=color["light-yellow"], - fontsize=12, - format="%Y-%m-%d %H:%M", - ), - widget.Systray(background=color["bg"], icon_size=20, padding=4), - ] - return widgets_list - - -widgets_list = init_widgets_list() - - -def init_widgets_screen1(): - widgets_screen1 = init_widgets_list() - return widgets_screen1 - - -def init_widgets_screen2(): - widgets_screen2 = init_widgets_list() - return widgets_screen2 - - -widgets_screen1 = init_widgets_screen1() -widgets_screen2 = init_widgets_screen2() - - -def init_screens(): - return [ - Screen( - top=bar.Bar( - widgets=init_widgets_screen1(), - size=20, - opacity=0.85, - background="000000", - ) - ), - Screen( - top=bar.Bar( - widgets=init_widgets_screen2(), - size=20, - opacity=0.85, - background="000000", - ) - ), - ] - - -screens = init_screens() - - -# MOUSE CONFIGURATION -mouse = [ - Drag( - [mod], - "Button1", - lazy.window.set_position_floating(), - start=lazy.window.get_position(), - ), - Drag( - [mod], "Button3", lazy.window.set_size_floating(), start=lazy.window.get_size() - ), -] - -dgroups_key_binder = None -dgroups_app_rules = [] - -# ASSIGN APPLICATIONS TO A SPECIFIC GROUPNAME -# BEGIN - -######################################################### -################ assgin apps to groups ################## -######################################################### -@hook.subscribe.client_new -def assign_app_group(client): - d = {} - # ######################################################### - # ################ assgin apps to groups ################## - # ######################################################### - d["1"] = [ - "Kitty", - "kitty", - "Tilix", - "tilix", - ] - d["2"] = [ - "Waterfox", - "Firedragon", - "Chromium", - "waterfox", - "firedragon", - "chromium", - "qutebrowser", - ] - d["3"] = [ - "Neovide", - "Neovim", - "VSCodium", - "Notepadqq", - "neovide", - "neovim", - "vscodium", - "notepadqq", - ] - d["4"] = [ - "Pcmanfm", - "Pcmanfm-qt", - "pcmanfm", - "Thunar", - "thunar", - ] - d["5"] = [ - "Vlc", - "vlc", - "Mpv", - "mpv", - "SMPlayer", - "smplayer", - ] - d["6"] = [ - "Inkscape", - "Nomacs", - "Ristretto", - "Nitrogen", - "Feh", - "Gimp", - " Krita", - "inkscape", - "nomacs", - "ristretto", - "nitrogen", - "feh", - "gimp", - "krita", - ] - d["8"] = [ - "Thunderbird", - "Fluffychat", - "thunderbird", - "fluffychat", - ] - # d["0"] = ["Spotify", "Pragha", "Clementine", "Deadbeef", "Audacious", - # "spotify", "pragha", "clementine", "deadbeef", "audacious" ] - # ########################################################## - wm_class = client.window.get_wm_class()[0] - # - for i in range(len(d)): - if wm_class in list(d.values())[i]: - group = list(d.keys())[i] - client.togroup(group) - client.group.cmd_toscreen() - - -# END -# ASSIGN APPLICATIONS TO A SPECIFIC GROUPNAME - - -main = None - - -@hook.subscribe.startup_once -def start_once(): - home = os.path.expanduser("~") - subprocess.call([home + "/.config/qtile/scripts/autostart.sh"]) - - -@hook.subscribe.startup -def start_always(): - # Set the cursor to something sane in X - subprocess.Popen(["xsetroot", "-cursor_name", "left_ptr"]) - - -@hook.subscribe.client_new -def set_floating(window): - if ( - window.window.get_wm_transient_for() - or window.window.get_wm_type() in floating_types - ): - window.floating = True - - -floating_types = ["notification", "toolbar", "splash", "dialog"] - - -follow_mouse_focus = True -bring_front_click = False -cursor_warp = False -floating_layout = layout.Floating( - float_rules=[ - *layout.Floating.default_float_rules, - Match(wm_class="confirm"), - Match(wm_class="dialog"), - Match(wm_class="download"), - Match(wm_class="error"), - Match(wm_class="file_progress"), - Match(wm_class="notification"), - Match(wm_class="splash"), - Match(wm_class="toolbar"), - Match(wm_class="confirmreset"), - Match(wm_class="makebranch"), - Match(wm_class="maketag"), - Match(wm_class="Arandr"), - Match(wm_class="feh"), - Match(wm_class="Galculator"), - Match(title="branchdialog"), - Match(title="Open File"), - Match(title="pinentry"), - Match(wm_class="ssh-askpass"), - Match(wm_class="lxpolkit"), - Match(wm_class="Lxpolkit"), - Match(wm_class="yad"), - Match(wm_class="Yad"), - Match(wm_class="Cairo-dock"), - Match(wm_class="cairo-dock"), - ], - fullscreen_border_width=0, - border_width=0, -) -auto_fullscreen = True - -focus_on_window_activation = "focus" # or smart - -wmname = "LG3D" diff --git a/.config/qtile/icons/battery_icons_horiz/battery-10-charge.png b/.config/qtile/icons/battery_icons_horiz/battery-10-charge.png deleted file mode 100644 index 7f340a5..0000000 Binary files a/.config/qtile/icons/battery_icons_horiz/battery-10-charge.png and /dev/null differ diff --git a/.config/qtile/icons/battery_icons_horiz/battery-10.png b/.config/qtile/icons/battery_icons_horiz/battery-10.png deleted file mode 100644 index b6a0c7e..0000000 Binary files a/.config/qtile/icons/battery_icons_horiz/battery-10.png and /dev/null differ diff --git a/.config/qtile/icons/battery_icons_horiz/battery-20-charge.png b/.config/qtile/icons/battery_icons_horiz/battery-20-charge.png deleted file mode 100644 index e622639..0000000 Binary files a/.config/qtile/icons/battery_icons_horiz/battery-20-charge.png and /dev/null differ diff --git a/.config/qtile/icons/battery_icons_horiz/battery-20.png b/.config/qtile/icons/battery_icons_horiz/battery-20.png deleted file mode 100644 index 793c8cb..0000000 Binary files a/.config/qtile/icons/battery_icons_horiz/battery-20.png and /dev/null differ diff --git a/.config/qtile/icons/battery_icons_horiz/battery-30-charge.png b/.config/qtile/icons/battery_icons_horiz/battery-30-charge.png deleted file mode 100644 index 59d487b..0000000 Binary files a/.config/qtile/icons/battery_icons_horiz/battery-30-charge.png and /dev/null differ diff --git a/.config/qtile/icons/battery_icons_horiz/battery-30.png b/.config/qtile/icons/battery_icons_horiz/battery-30.png deleted file mode 100644 index 96832e8..0000000 Binary files a/.config/qtile/icons/battery_icons_horiz/battery-30.png and /dev/null differ diff --git a/.config/qtile/icons/battery_icons_horiz/battery-40-charge.png b/.config/qtile/icons/battery_icons_horiz/battery-40-charge.png deleted file mode 100644 index 7fbe757..0000000 Binary files a/.config/qtile/icons/battery_icons_horiz/battery-40-charge.png and /dev/null differ diff --git a/.config/qtile/icons/battery_icons_horiz/battery-40.png b/.config/qtile/icons/battery_icons_horiz/battery-40.png deleted file mode 100644 index 556042e..0000000 Binary files a/.config/qtile/icons/battery_icons_horiz/battery-40.png and /dev/null differ diff --git a/.config/qtile/icons/battery_icons_horiz/battery-50-charge.png b/.config/qtile/icons/battery_icons_horiz/battery-50-charge.png deleted file mode 100644 index e27b56f..0000000 Binary files a/.config/qtile/icons/battery_icons_horiz/battery-50-charge.png and /dev/null differ diff --git a/.config/qtile/icons/battery_icons_horiz/battery-50.png b/.config/qtile/icons/battery_icons_horiz/battery-50.png deleted file mode 100644 index 733bca0..0000000 Binary files a/.config/qtile/icons/battery_icons_horiz/battery-50.png and /dev/null differ diff --git a/.config/qtile/icons/battery_icons_horiz/battery-60-charge.png b/.config/qtile/icons/battery_icons_horiz/battery-60-charge.png deleted file mode 100644 index 7948227..0000000 Binary files a/.config/qtile/icons/battery_icons_horiz/battery-60-charge.png and /dev/null differ diff --git a/.config/qtile/icons/battery_icons_horiz/battery-60.png b/.config/qtile/icons/battery_icons_horiz/battery-60.png deleted file mode 100644 index 02d4717..0000000 Binary files a/.config/qtile/icons/battery_icons_horiz/battery-60.png and /dev/null differ diff --git a/.config/qtile/icons/battery_icons_horiz/battery-70-charge.png b/.config/qtile/icons/battery_icons_horiz/battery-70-charge.png deleted file mode 100644 index e5b42fe..0000000 Binary files a/.config/qtile/icons/battery_icons_horiz/battery-70-charge.png and /dev/null differ diff --git a/.config/qtile/icons/battery_icons_horiz/battery-70.png b/.config/qtile/icons/battery_icons_horiz/battery-70.png deleted file mode 100644 index f7634f7..0000000 Binary files a/.config/qtile/icons/battery_icons_horiz/battery-70.png and /dev/null differ diff --git a/.config/qtile/icons/battery_icons_horiz/battery-80-charge.png b/.config/qtile/icons/battery_icons_horiz/battery-80-charge.png deleted file mode 100644 index e2b2000..0000000 Binary files a/.config/qtile/icons/battery_icons_horiz/battery-80-charge.png and /dev/null differ diff --git a/.config/qtile/icons/battery_icons_horiz/battery-80.png b/.config/qtile/icons/battery_icons_horiz/battery-80.png deleted file mode 100644 index 8f8d765..0000000 Binary files a/.config/qtile/icons/battery_icons_horiz/battery-80.png and /dev/null differ diff --git a/.config/qtile/icons/battery_icons_horiz/battery-90-charge.png b/.config/qtile/icons/battery_icons_horiz/battery-90-charge.png deleted file mode 100644 index 38595a8..0000000 Binary files a/.config/qtile/icons/battery_icons_horiz/battery-90-charge.png and /dev/null differ diff --git a/.config/qtile/icons/battery_icons_horiz/battery-90.png b/.config/qtile/icons/battery_icons_horiz/battery-90.png deleted file mode 100644 index 3647ba3..0000000 Binary files a/.config/qtile/icons/battery_icons_horiz/battery-90.png and /dev/null differ diff --git a/.config/qtile/icons/battery_icons_horiz/battery-empty-charge.png b/.config/qtile/icons/battery_icons_horiz/battery-empty-charge.png deleted file mode 100644 index 5d7a242..0000000 Binary files a/.config/qtile/icons/battery_icons_horiz/battery-empty-charge.png and /dev/null differ diff --git a/.config/qtile/icons/battery_icons_horiz/battery-empty.png b/.config/qtile/icons/battery_icons_horiz/battery-empty.png deleted file mode 100644 index 226ce3b..0000000 Binary files a/.config/qtile/icons/battery_icons_horiz/battery-empty.png and /dev/null differ diff --git a/.config/qtile/icons/battery_icons_horiz/battery-full-charge.png b/.config/qtile/icons/battery_icons_horiz/battery-full-charge.png deleted file mode 100644 index eba1bc1..0000000 Binary files a/.config/qtile/icons/battery_icons_horiz/battery-full-charge.png and /dev/null differ diff --git a/.config/qtile/icons/battery_icons_horiz/battery-full-charged.png b/.config/qtile/icons/battery_icons_horiz/battery-full-charged.png deleted file mode 100644 index f857029..0000000 Binary files a/.config/qtile/icons/battery_icons_horiz/battery-full-charged.png and /dev/null differ diff --git a/.config/qtile/icons/battery_icons_horiz/battery-full.png b/.config/qtile/icons/battery_icons_horiz/battery-full.png deleted file mode 100644 index cfa1977..0000000 Binary files a/.config/qtile/icons/battery_icons_horiz/battery-full.png and /dev/null differ diff --git a/.config/qtile/icons/battery_icons_horiz/battery-missing-black.png b/.config/qtile/icons/battery_icons_horiz/battery-missing-black.png deleted file mode 100644 index 0fa15a1..0000000 Binary files a/.config/qtile/icons/battery_icons_horiz/battery-missing-black.png and /dev/null differ diff --git a/.config/qtile/icons/battery_icons_horiz/battery-missing.png b/.config/qtile/icons/battery_icons_horiz/battery-missing.png deleted file mode 100644 index 3fa4c65..0000000 Binary files a/.config/qtile/icons/battery_icons_horiz/battery-missing.png and /dev/null differ diff --git a/.config/qtile/icons/dnanordsmall.png b/.config/qtile/icons/dnanordsmall.png deleted file mode 100644 index da451ef..0000000 Binary files a/.config/qtile/icons/dnanordsmall.png and /dev/null differ diff --git a/.config/qtile/icons/garuda-purple.png b/.config/qtile/icons/garuda-purple.png deleted file mode 100644 index 8b38876..0000000 Binary files a/.config/qtile/icons/garuda-purple.png and /dev/null differ diff --git a/.config/qtile/icons/garuda-red.png b/.config/qtile/icons/garuda-red.png deleted file mode 100644 index c5a08f0..0000000 Binary files a/.config/qtile/icons/garuda-red.png and /dev/null differ diff --git a/.config/qtile/icons/garuda-white.png b/.config/qtile/icons/garuda-white.png deleted file mode 100644 index bb9f330..0000000 Binary files a/.config/qtile/icons/garuda-white.png and /dev/null differ diff --git a/.config/qtile/icons/garuda-yellow.svg b/.config/qtile/icons/garuda-yellow.svg deleted file mode 100644 index cdf2bf8..0000000 --- a/.config/qtile/icons/garuda-yellow.svg +++ /dev/null @@ -1,653 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/.config/qtile/icons/layout-bsp.png b/.config/qtile/icons/layout-bsp.png deleted file mode 100644 index 5aded44..0000000 Binary files a/.config/qtile/icons/layout-bsp.png and /dev/null differ diff --git a/.config/qtile/icons/layout-floating.png b/.config/qtile/icons/layout-floating.png deleted file mode 100644 index e876b13..0000000 Binary files a/.config/qtile/icons/layout-floating.png and /dev/null differ diff --git a/.config/qtile/icons/layout-max.png b/.config/qtile/icons/layout-max.png deleted file mode 100644 index 889bc78..0000000 Binary files a/.config/qtile/icons/layout-max.png and /dev/null differ diff --git a/.config/qtile/icons/layout-monadtall.png b/.config/qtile/icons/layout-monadtall.png deleted file mode 100644 index cf84fb8..0000000 Binary files a/.config/qtile/icons/layout-monadtall.png and /dev/null differ diff --git a/.config/qtile/icons/layout-stack.png b/.config/qtile/icons/layout-stack.png deleted file mode 100644 index 539f464..0000000 Binary files a/.config/qtile/icons/layout-stack.png and /dev/null differ diff --git a/.config/qtile/icons/layout-tile.png b/.config/qtile/icons/layout-tile.png deleted file mode 100644 index 74cd1e7..0000000 Binary files a/.config/qtile/icons/layout-tile.png and /dev/null differ diff --git a/.config/qtile/icons/layout-treetab.png b/.config/qtile/icons/layout-treetab.png deleted file mode 100644 index bd9c396..0000000 Binary files a/.config/qtile/icons/layout-treetab.png and /dev/null differ diff --git a/.config/qtile/icons/layout-zoomy.png b/.config/qtile/icons/layout-zoomy.png deleted file mode 100644 index 8a0a48c..0000000 Binary files a/.config/qtile/icons/layout-zoomy.png and /dev/null differ diff --git a/.config/qtile/icons/python.png b/.config/qtile/icons/python.png deleted file mode 100644 index bd02fea..0000000 Binary files a/.config/qtile/icons/python.png and /dev/null differ diff --git a/.config/qtile/icons/qtilelogo.png b/.config/qtile/icons/qtilelogo.png deleted file mode 100644 index 05bea31..0000000 Binary files a/.config/qtile/icons/qtilelogo.png and /dev/null differ diff --git a/.config/qtile/scripts/autostart.sh b/.config/qtile/scripts/autostart.sh deleted file mode 100755 index 94dd448..0000000 --- a/.config/qtile/scripts/autostart.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash - -function run { - if ! pgrep $1 ; - then - $@& - fi -} - - - -#starting utility applications at boot time -lxsession & -run nm-applet & -#run pamac-tray & -numlockx on & -blueman-applet & -#flameshot & -#picom --config $HOME/.config/picom/picom.conf & -picom --config .config/picom/picom-blur.conf --experimental-backends & -#/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 & -dunst & -feh --randomize --bg-fill ~/Pictures/Wallpapers/* -#starting user applications at boot time -run volumeicon & -#nitrogen --random --set-zoom-fill & -run caffeine -a & diff --git a/.config/qtile/scripts/dmenu.sh b/.config/qtile/scripts/dmenu.sh deleted file mode 100755 index a636cd6..0000000 --- a/.config/qtile/scripts/dmenu.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -# Import the colors -. "${HOME}/.cache/wal/colors.sh" - -dmenu_run -nb "$color0" -nf "$color15" -sb "$color1" -sf "$color15" diff --git a/.config/qtile/scripts/picom-toggle.sh b/.config/qtile/scripts/picom-toggle.sh deleted file mode 100755 index bf77768..0000000 --- a/.config/qtile/scripts/picom-toggle.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -if pgrep -x "picom" > /dev/null -then - killall picom -else - picom -b --config ~/.config/picom/picom-blur.conf -fi diff --git a/.config/qutebrowser/autoconfig.yml b/.config/qutebrowser/autoconfig.yml deleted file mode 100644 index 94939cd..0000000 --- a/.config/qutebrowser/autoconfig.yml +++ /dev/null @@ -1,18 +0,0 @@ -# If a config.py file exists, this file is ignored unless it's explicitly loaded -# via config.load_autoconfig(). For more information, see: -# https://github.com/qutebrowser/qutebrowser/blob/master/doc/help/configuring.asciidoc#loading-autoconfigyml -# DO NOT edit this file by hand, qutebrowser will overwrite it. -# Instead, create a config.py - see :help for details. - -config_version: 2 -settings: - colors.webpage.darkmode.enabled: - global: true - colors.webpage.darkmode.policy.page: - global: always - colors.webpage.prefers_color_scheme_dark: - global: true - auto_save.session: - global: true - zoom.default: - global: 150% diff --git a/.config/qutebrowser/config.py b/.config/qutebrowser/config.py deleted file mode 100644 index 2a36648..0000000 --- a/.config/qutebrowser/config.py +++ /dev/null @@ -1,303 +0,0 @@ -# base16-qutebrowser (https://github.com/theova/base16-qutebrowser) -# Base16 qutebrowser template by theova -# Default Dark scheme by Chris Kempson (http://chriskempson.com) - -base00 = "#181818" -base01 = "#282828" -base02 = "#383838" -base03 = "#585858" -base04 = "#b8b8b8" -base05 = "#d8d8d8" -base06 = "#e8e8e8" -base07 = "#f8f8f8" -base08 = "#ab4642" -base09 = "#dc9656" -base0A = "#f7ca88" -base0B = "#a1b56c" -base0C = "#86c1b9" -base0D = "#7cafc2" -base0E = "#ba8baf" -base0F = "#a16946" - -# set qutebrowser colors - -# Text color of the completion widget. May be a single color to use for -# all columns or a list of three colors, one for each column. -c.colors.completion.fg = base05 - -# Background color of the completion widget for odd rows. -c.colors.completion.odd.bg = base01 - -# Background color of the completion widget for even rows. -c.colors.completion.even.bg = base00 - -# Foreground color of completion widget category headers. -c.colors.completion.category.fg = base0A - -# Background color of the completion widget category headers. -c.colors.completion.category.bg = base00 - -# Top border color of the completion widget category headers. -c.colors.completion.category.border.top = base00 - -# Bottom border color of the completion widget category headers. -c.colors.completion.category.border.bottom = base00 - -# Foreground color of the selected completion item. -c.colors.completion.item.selected.fg = base05 - -# Background color of the selected completion item. -c.colors.completion.item.selected.bg = base02 - -# Top border color of the selected completion item. -c.colors.completion.item.selected.border.top = base02 - -# Bottom border color of the selected completion item. -c.colors.completion.item.selected.border.bottom = base02 - -# Foreground color of the matched text in the selected completion item. -c.colors.completion.item.selected.match.fg = base0B - -# Foreground color of the matched text in the completion. -c.colors.completion.match.fg = base0B - -# Color of the scrollbar handle in the completion view. -c.colors.completion.scrollbar.fg = base05 - -# Color of the scrollbar in the completion view. -c.colors.completion.scrollbar.bg = base00 - -# Background color of disabled items in the context menu. -c.colors.contextmenu.disabled.bg = base01 - -# Foreground color of disabled items in the context menu. -c.colors.contextmenu.disabled.fg = base04 - -# Background color of the context menu. If set to null, the Qt default is used. -c.colors.contextmenu.menu.bg = base00 - -# Foreground color of the context menu. If set to null, the Qt default is used. -c.colors.contextmenu.menu.fg = base05 - -# Background color of the context menu’s selected item. If set to null, the Qt default is used. -c.colors.contextmenu.selected.bg = base02 - -# Foreground color of the context menu’s selected item. If set to null, the Qt default is used. -c.colors.contextmenu.selected.fg = base05 - -# Background color for the download bar. -c.colors.downloads.bar.bg = base00 - -# Color gradient start for download text. -c.colors.downloads.start.fg = base00 - -# Color gradient start for download backgrounds. -c.colors.downloads.start.bg = base0D - -# Color gradient end for download text. -c.colors.downloads.stop.fg = base00 - -# Color gradient stop for download backgrounds. -c.colors.downloads.stop.bg = base0C - -# Foreground color for downloads with errors. -c.colors.downloads.error.fg = base08 - -# Font color for hints. -c.colors.hints.fg = base00 - -# Background color for hints. Note that you can use a `rgba(...)` value -# for transparency. -c.colors.hints.bg = base0A - -# Font color for the matched part of hints. -c.colors.hints.match.fg = base05 - -# Text color for the keyhint widget. -c.colors.keyhint.fg = base05 - -# Highlight color for keys to complete the current keychain. -c.colors.keyhint.suffix.fg = base05 - -# Background color of the keyhint widget. -c.colors.keyhint.bg = base00 - -# Foreground color of an error message. -c.colors.messages.error.fg = base00 - -# Background color of an error message. -c.colors.messages.error.bg = base08 - -# Border color of an error message. -c.colors.messages.error.border = base08 - -# Foreground color of a warning message. -c.colors.messages.warning.fg = base00 - -# Background color of a warning message. -c.colors.messages.warning.bg = base0E - -# Border color of a warning message. -c.colors.messages.warning.border = base0E - -# Foreground color of an info message. -c.colors.messages.info.fg = base05 - -# Background color of an info message. -c.colors.messages.info.bg = base00 - -# Border color of an info message. -c.colors.messages.info.border = base00 - -# Foreground color for prompts. -c.colors.prompts.fg = base05 - -# Border used around UI elements in prompts. -c.colors.prompts.border = base00 - -# Background color for prompts. -c.colors.prompts.bg = base00 - -# Background color for the selected item in filename prompts. -c.colors.prompts.selected.bg = base02 - -# Foreground color for the selected item in filename prompts. -c.colors.prompts.selected.fg = base05 - -# Foreground color of the statusbar. -c.colors.statusbar.normal.fg = base0B - -# Background color of the statusbar. -c.colors.statusbar.normal.bg = base00 - -# Foreground color of the statusbar in insert mode. -c.colors.statusbar.insert.fg = base00 - -# Background color of the statusbar in insert mode. -c.colors.statusbar.insert.bg = base0D - -# Foreground color of the statusbar in passthrough mode. -c.colors.statusbar.passthrough.fg = base00 - -# Background color of the statusbar in passthrough mode. -c.colors.statusbar.passthrough.bg = base0C - -# Foreground color of the statusbar in private browsing mode. -c.colors.statusbar.private.fg = base00 - -# Background color of the statusbar in private browsing mode. -c.colors.statusbar.private.bg = base01 - -# Foreground color of the statusbar in command mode. -c.colors.statusbar.command.fg = base05 - -# Background color of the statusbar in command mode. -c.colors.statusbar.command.bg = base00 - -# Foreground color of the statusbar in private browsing + command mode. -c.colors.statusbar.command.private.fg = base05 - -# Background color of the statusbar in private browsing + command mode. -c.colors.statusbar.command.private.bg = base00 - -# Foreground color of the statusbar in caret mode. -c.colors.statusbar.caret.fg = base00 - -# Background color of the statusbar in caret mode. -c.colors.statusbar.caret.bg = base0E - -# Foreground color of the statusbar in caret mode with a selection. -c.colors.statusbar.caret.selection.fg = base00 - -# Background color of the statusbar in caret mode with a selection. -c.colors.statusbar.caret.selection.bg = base0D - -# Background color of the progress bar. -c.colors.statusbar.progress.bg = base0D - -# Default foreground color of the URL in the statusbar. -c.colors.statusbar.url.fg = base05 - -# Foreground color of the URL in the statusbar on error. -c.colors.statusbar.url.error.fg = base08 - -# Foreground color of the URL in the statusbar for hovered links. -c.colors.statusbar.url.hover.fg = base05 - -# Foreground color of the URL in the statusbar on successful load -# (http). -c.colors.statusbar.url.success.http.fg = base0C - -# Foreground color of the URL in the statusbar on successful load -# (https). -c.colors.statusbar.url.success.https.fg = base0B - -# Foreground color of the URL in the statusbar when there's a warning. -c.colors.statusbar.url.warn.fg = base0E - -# Background color of the tab bar. -c.colors.tabs.bar.bg = base00 - -# Color gradient start for the tab indicator. -c.colors.tabs.indicator.start = base0D - -# Color gradient end for the tab indicator. -c.colors.tabs.indicator.stop = base0C - -# Color for the tab indicator on errors. -c.colors.tabs.indicator.error = base08 - -# Foreground color of unselected odd tabs. -c.colors.tabs.odd.fg = base05 - -# Background color of unselected odd tabs. -c.colors.tabs.odd.bg = base01 - -# Foreground color of unselected even tabs. -c.colors.tabs.even.fg = base05 - -# Background color of unselected even tabs. -c.colors.tabs.even.bg = base00 - -# Background color of pinned unselected even tabs. -c.colors.tabs.pinned.even.bg = base0C - -# Foreground color of pinned unselected even tabs. -c.colors.tabs.pinned.even.fg = base07 - -# Background color of pinned unselected odd tabs. -c.colors.tabs.pinned.odd.bg = base0B - -# Foreground color of pinned unselected odd tabs. -c.colors.tabs.pinned.odd.fg = base07 - -# Background color of pinned selected even tabs. -c.colors.tabs.pinned.selected.even.bg = base02 - -# Foreground color of pinned selected even tabs. -c.colors.tabs.pinned.selected.even.fg = base05 - -# Background color of pinned selected odd tabs. -c.colors.tabs.pinned.selected.odd.bg = base02 - -# Foreground color of pinned selected odd tabs. -c.colors.tabs.pinned.selected.odd.fg = base05 - -# Foreground color of selected odd tabs. -c.colors.tabs.selected.odd.fg = base05 - -# Background color of selected odd tabs. -c.colors.tabs.selected.odd.bg = base02 - -# Foreground color of selected even tabs. -c.colors.tabs.selected.even.fg = base05 - -# Background color of selected even tabs. -c.colors.tabs.selected.even.bg = base02 - -# Background color for webpages if unset (or empty to use the theme's -# color). -# c.colors.webpage.bg = base00 - - -config.load_autoconfig() diff --git a/.config/topgrade.toml b/.config/topgrade.toml deleted file mode 100644 index d854da2..0000000 --- a/.config/topgrade.toml +++ /dev/null @@ -1,85 +0,0 @@ -# Don't ask for confirmations -assume_yes = true - -# Ping on each step -notify_each_step = true - -# Disable specific steps - same options as the command line flag -#disable = ["system", "emacs"] - -# Ignore failures for these steps -#ignore_failures = ["powershell"] - -# Run specific steps - same options as the command line flag -#only = ["system", "emacs"] - -# Do not ask to retry failed steps (default: false) -no_retry = true - -# Run inside tmux -#run_in_tmux = true - -# List of remote machines with Topgrade installed on them -#remote_topgrades = ["toothless", "pi", "parnas"] - -# Arguments to pass SSH when upgrading remote systems -#ssh_arguments = "-o ConnectTimeout=2" - -# Path to Topgrade executable on remote machines -#remote_topgrade_path = ".cargo/bin/topgrade" - -# Arguments to pass tmux when pulling Repositories -#tmux_arguments = "-S /var/tmux.sock" - -# Do not set the terminal title -#set_title = false - -# Cleanup temporary or old files -cleanup = true - -[git] -#max_concurrency = 5 -# Additional git repositories to pull -repos = [ - "~/Documents/Git/*/", - "~/Git/*/" -] - -# Don't pull the predefined git repos -#predefined_repos = false - -# Arguments to pass Git when pulling Repositories -#arguments = "--rebase --autostash" - -[composer] -#self_update = true - -# Commands to run before anything -[pre_commands] -#"Emacs Snapshot" = "rm -rf ~/.emacs.d/elpa.bak && cp -rl ~/.emacs.d/elpa ~/.emacs.d/elpa.bak" - -# Custom commands -[commands] -#"Python Environment" = "~/dev/.env/bin/pip install -i https://pypi.python.org/simple -U --upgrade-strategy eager jupyter" - -[brew] -#greedy_cask = true - -[linux] -# Arguments to pass yay when updating packages -#yay_arguments = "--nodevel" -#trizen_arguments = "--devel" -#enable_tlmgr = true -#emerge_sync_flags = "-q" -#emerge_update_flags = "-uDNa --with-bdeps=y world" -#redhat_distro_sync = false - -[windows] -# Manually select Windows updates -#accept_all_updates = false -#open_remotes_in_new_terminal = true - -# Causes Topgrade to rename itself during the run to allow package managers -# to upgrade it. Use this only if you installed Topgrade by using a package -# manager such as Scoop to Cargo -#self_rename = true diff --git a/.config/vifm/scripts/README b/.config/vifm/scripts/README deleted file mode 100644 index 7694952..0000000 --- a/.config/vifm/scripts/README +++ /dev/null @@ -1,6 +0,0 @@ -This directory is dedicated for user-supplied scripts/executables. -vifm modifies its PATH environment variable to let user run those -scripts without specifying full path. All subdirectories are added -as well. File in a subdirectory overrules file with the same name -in parent directories. Restart might be needed to recognize files -in newly created or renamed subdirectories. \ No newline at end of file diff --git a/.config/vifm/vifm-help.txt b/.config/vifm/vifm-help.txt deleted file mode 100644 index 3f39546..0000000 --- a/.config/vifm/vifm-help.txt +++ /dev/null @@ -1,6378 +0,0 @@ -VIFM(1) General Commands Manual VIFM(1) - - - -NAME - vifm - vi file manager - -SYNOPSIS - vifm [OPTION]... - vifm [OPTION]... path - vifm [OPTION]... path path - -DESCRIPTION - Vifm is an ncurses based file manager with vi like keybindings. If you - use vi, vifm gives you complete keyboard control over your files with- - out having to learn a new set of commands. - -OPTIONS - vifm starts in the current directory unless it is given a different di- - rectory on the command line or 'vifminfo' option includes "savedirs" - (in which case last visited directories are used as defaults). - - - Read list of files from standard input stream and compose custom - view out of them (see "Custom views" section). Current working - directory is used as a base for relative paths. - - Starts Vifm in the specified path. - - - Starts Vifm in the specified paths. - - Specifying two directories triggers split view even when vifm was in - single-view mode on finishing previous run. To suppress this behaviour - :only command can be put in the vifmrc file. - - When only one path argument is found on command-line, the left/top pane - is automatically set as the current view. - - Paths to files are also allowed in case you want vifm to start with - some archive opened. - - --select - Open parent directory of the given path and select specified - file in it. - - -f Makes vifm instead of opening files write selection to - $VIFM/vimfiles and quit. - - --choose-files |- - Sets output file to write selection into on exit instead of - opening files. "-" means standard output. Use empty value to - disable it. - - --choose-dir |- - Sets output file to write last visited directory into on exit. - "-" means standard output. Use empty value to disable it. - - --delimiter - Sets separator for list of file paths written out by vifm. - Empty value means null character. Default is new line charac- - ter. - - --on-choose - Sets command to be executed on selected files instead of opening - them. The command may use any of macros described in "Command - macros" section below. The command is executed once for whole - selection. - - --logging[=] - Log some operational details $VIFM/log. If the optional startup - log path is specified and permissions allow to open it for writ- - ing, then logging of early initialization (before value of $VIFM - is determined) is put there. - - --server-list - List available server names and exit. - - --server-name - Name of target or this instance (sequential numbers are appended - on name conflict). - - --remote - Sends the rest of the command line to another instance of vifm, - --server-name is treated just like any other argument and should - precede --remote on the command line. When there is no server, - quits silently. There is no limit on how many arguments can be - processed. One can combine --remote with -c or + to execute commands in already running instance of vifm. - See also "Client-Server" section below. - - --remote-expr - passes expression to vifm server and prints result. See also - "Client-Server" section below. - - -c or + - Run command-line mode on startup. Commands in such - arguments are executed in the order they appear in command line. - Commands with spaces or special symbols must be enclosed in dou- - ble or single quotes or all special symbols should be escaped - (the exact syntax strongly depends on shell). "+" argument is - equivalent to "$" and thus picks last item of of the view. - - --help, -h - Show a brief command summary and exit vifm. - - --version, -v - Show version information and quit. - - --no-configs - Skip reading vifmrc and vifminfo. - - - See "Startup" section below for the explanations on $VIFM. - -General keys - Ctrl-C or Escape - cancel most operations (see "Cancellation" section below), clear - all selected files. - - Ctrl-L clear and redraw the screen. - -Basic Movement - The basic vi key bindings are used to move through the files and pop-up - windows. - - k, gk, or Ctrl-P - move cursor up one line. - - j, gj or Ctrl-N - move cursor down one line. - - h when 'lsview' is off move up one directory (moves to parent di- - rectory node in tree view), otherwise move left one file. - - l when 'lsview' is off move into a directory or launch a file, - otherwise move right one file. See "Selection" section below. - - gg move to the first line of the file list. - - G move to the last line in the file list. - - gh go up one directory regardless of view representation (regular, - ls-like). Also can be used to leave custom views including tree - view. - - gl or Enter - enter directory or launch a file. See "Selection" section be- - low. - - H move to the first file in the window. - - M move to the file in the middle of the window. - - L move to the last file in the window. - - Ctrl-F or Page Down - move forward one page. - - Ctrl-B or Page Up - move back one page. - - Ctrl-D jump back one half page. - - Ctrl-U jump forward one half page. - - n% move to the file that is n percent from the top of the list (for - example 25%). - - 0 or ^ move cursor to the first column. See 'lsview' option descrip- - tion. - - $ move cursor to the last column. See 'lsview' option descrip- - tion. - - Space switch file lists. - - gt switch to the next tab (wrapping around). - - {n}gt switch to the tab number {n} (wrapping around). - - gT switch to the previous tab (wrapping around). - - {n}gT switch to {n}-th previous tab. - -Movement with Count - Most movement commands also accept a count, 12j would move down 12 - files. - - [count]% - move to percent of the file list. - - [count]j - move down [count] files. - - [count]k - move up [count] files. - - [count]G or [count]gg - move to list position [count]. - - [count]h - go up [count] directories. - -Scrolling panes - zt redraw pane with file in top of list. - - zz redraw pane with file in center of list. - - zb redraw pane with file in bottom of list. - - Ctrl-E scroll pane one line down. - - Ctrl-Y scroll pane one line up. - -Pane manipulation - Second character can be entered with or without Control key. - - Ctrl-W H - move the pane to the far left. - - Ctrl-W J - move the pane to the very bottom. - - Ctrl-W K - move the pane to the very top. - - Ctrl-W L - move the pane to the far right. - - - Ctrl-W h - switch to the left pane. - - Ctrl-W j - switch to the pane below. - - Ctrl-W k - switch to the pane above. - - Ctrl-W l - switch to the right pane. - - - Ctrl-W b - switch to bottom-right window. - - Ctrl-W t - switch to top-left window. - - - Ctrl-W p - switch to previous window. - - Ctrl-W w - switch to other pane. - - - Ctrl-W o - leave only one pane. - - Ctrl-W s - split window horizontally. - - Ctrl-W v - split window vertically. - - - Ctrl-W x - exchange panes. - - Ctrl-W z - quit preview pane or view modes. - - - Ctrl-W - - decrease size of the view by count. - - Ctrl-W + - increase size of the view by count. - - Ctrl-W < - decrease size of the view by count. - - Ctrl-W > - increase size of the view by count. - - - Ctrl-W | - set current view size to count. - - Ctrl-W _ - set current view size to count. - - Ctrl-W = - make size of two views equal. - - For Ctrl-W +, Ctrl-W -, Ctrl-W <, Ctrl-W >, Ctrl-W | and Ctrl-W _ com- - mands count can be given before and/or after Ctrl-W. The resulting - count is a multiplication of those two. So "2 Ctrl-W 2 -" decreases - window size by 4 lines or columns. - - Ctrl-W | and Ctrl-W _ maximise current view by default. - -Marks - Marks are set the same way as they are in vi. - - You can use these characters for marks [a-z][A-Z][0-9]. - - m[a-z][A-Z][0-9] - set a mark for the file at the current cursor position. - - '[a-z][A-Z][0-9] - navigate to the file set for the mark. - - - There are also several special marks that can't be set manually: - - - ' (single quote) - previously visited directory of the view, thus - hitting '' allows switching between two last locations - - - < - the first file of the last visually selected block - - - > - the last file of the last visually selected block - -Searching - /regular expression pattern - search for files matching regular expression in forward direc- - tion and advance cursor to next match. - - / perform forward search with top item of search pattern history. - - ?regular expression pattern - search for files matching regular expression in backward direc- - tion and advance cursor to previous match. - - ? perform backward search with top item of search pattern history. - - Trailing slash for directories is taken into account, so /\/ searches - for directories and symbolic links to directories. At the moment // - works too, but this can change in the future, so consider escaping the - slash if not typing pattern by hand. - - Matches are automatically selected if 'hlsearch' is set. Enabling - 'incsearch' makes search interactive. 'ignorecase' and 'smartcase' op- - tions affect case sensitivity of search queries as well as local filter - and other things detailed in the description of 'caseoptions'. - - - [count]n - go to the next file matching last search pattern. Takes last - search direction into account. - - [count]N - go to the previous file matching last search pattern. Takes - last search direction into account. - - If 'hlsearch' option is set, hitting n/N to perform search and go to - the first matching item resets current selection in normal mode. It is - not the case if search was already performed on files in the directory, - thus selection is not reset after clearing selection with escape key - and hitting n/N key again. - - Note: vifm uses extended regular expressions for / and ?. - - - [count]f[character] - search forward for file with [character] as first character in - name. Search wraps around the end of the list. - - [count]F[character] - search backward for file with [character] as first character in - name. Search wraps around the end of the list. - - [count]; - find the next match of f or F. - - [count], - find the previous match of f or F. - - Note: f, F, ; and , wrap around list beginning and end when they are - used alone and they don't wrap when they are used as selectors. - -File Filters - There are three basic file filters: - - - dot files filter (does not affect "." and ".." special directories, - whose appearance is controlled by the 'dotdirs' option), see 'dot- - files' option; - - - permanent filter; - - - local filter (see description of the "=" normal mode command). - - Permanent filter essentially allows defining a group of files names - which are not desirable to be seen by default, like temporary or backup - files, which might be created alongside normal ones. Just like you - don't usually need to see hidden dot files (files starting with a dot). - Local filter on the other hand is for temporary immediate filtering of - file list at hand, to get rid of uninterested files in the view or to - make it possible to use % range in a :command. - - For the purposes of more deterministic editing permanent filter is - split into two parts: - - - one edited explicitly via :filter command; - - - another one which is edited implicitly via zf shortcut. - - Files are tested against both parts and a match counts if at least one - of the parts matched. - - - Each file list has its own copy of each filter. - - Filtered files are not checked in / search or :commands. - - Files and directories are filtered separately. This is done by append- - ing a slash to a directory name before testing whether it matches the - filter. Examples: - - - " filter directories which names end with '.files' - :filter /^.*\.files\/$/ - - " filter files which names end with '.d' - :filter {*.d} - - " filter files and directories which names end with '.o' - :filter /^.*\.o\/?$/ - - Note: vifm uses extended regular expressions. - - The basic vim folding key bindings are used for managing filters. - - - za toggle visibility of dot files. - - zo show dot files. - - zm hide dot files. - - zf add selected files to permanent filter. - - zO reset permanent filter. - - zR save and reset all filters. - - zr clear local filter. - - zM restore all filters (undoes last zR). - - zd exclude selection or current file from a custom view. Does - nothing for regular view. For tree view excluding directory ex- - cludes that sub-tree. For compare views zd hides group of adja- - cent identical files, count can be specified as 1 to exclude - just single file or selected items instead. Files excluded this - way are not counted as filtered out and can't be returned unless - view is reloaded. - - =regular expression pattern - filter out files that don't match regular expression. Whether - view is updated as regular expression is changed depends on the - value of the 'incsearch' option. This kind of filter is auto- - matically reset when directory is changed. - -Other Normal Mode Keys - [count]: - enter command line mode. [count] generates range. - - q: open external editor to prompt for command-line command. See - "Command line editing" section for details. - - q/ open external editor to prompt for search pattern to be searched - in forward direction. See "Command line editing" section for - details. - - q? open external editor to prompt for search pattern to be searched - in backward direction. See "Command line editing" section for - details. - - q= open external editor to prompt for filter pattern. See "Command - line editing" section for details. Unlike other q{x} commands - this one doesn't work in Visual mode. - - [count]!! and [count]! - enter command line mode with entered ! command. [count] modi- - fies range. - - Ctrl-O go backwards through directory history of current view. Nonex- - istent directories are automatically skipped. - - Ctrl-I if 'cpoptions' contains "t" flag, and switch active - pane just like does, otherwise it goes forward through - directory history of current view. Nonexistent directories are - automatically skipped. - - Ctrl-G show a dialog with detailed information about current file. See - "Menus and dialogs" section for controls. - - Shift-Tab - enter view mode (works only after activating view pane with - :view command). - - ga calculate directory size. Uses cached directory sizes when pos- - sible for better performance. As a special case calculating - size of ".." entry results in calculation of size of current di- - rectory. - - gA like ga, but force update. Ignores old values of directory - sizes. - - If file under cursor is selected, each selected item is processed, oth- - erwise only current file is updated. - - gf find link destination (like l with 'followlinks' off, but also - finds directories). On Windows additionally follows .lnk-files. - - gF Same as gf, but resolves final path of the chain of symbolic - links. - - gr only for MS-Windows - same as l key, but tries to run program with administrative - privileges. - - av go to visual mode into selection amending state preserving cur- - rent selection. - - gv go to visual mode restoring last selection. - - [reg]gs - when no register is specified, restore last t selection (similar - to what gv does for visual mode selection). If register is - present, then all files listed in that register and which are - visible in current view are selected. - - gu - make names of selected files lowercase. - - [count]guu and [count]gugu - make names of [count] files starting from the current one lower- - case. Without [count] only current file is affected. - - gU - make names of selected files uppercase. - - [count]gUU and [count]gUgU - make names of [count] files starting from the current one upper- - case. Without [count] only current file is affected. - - e explore file in the current pane. - - i handle file (even if it's an executable and 'runexec' option is - set). - - cw change word is used to rename a file or files. - - cW change WORD is used to change only name of file (without exten- - sion). - - cl change link target. - - co only for *nix - change file owner. - - cg only for *nix - change file group. - - [count]cp - change file attributes (permission on *nix and properties on - Windows). If [count] is specified, it's treated as numerical - argument for non-recursive `chmod` command (of the form - [0-7]{3,4}). See "Menus and dialogs" section for controls. - - [count]C - clone file [count] times. - - [count]dd or d[count]selector - move selected file or files to trash directory (if 'trash' op- - tion is set, otherwise delete). See "Trash directory" section - below. - - [count]DD or D[count]selector - like dd and d, but omitting trash directory (even when - 'trash' option is set). - - Y, [count]yy or y[count]selector - yank selected files. - - p copy yanked files to the current directory or move the files to - the current directory if they were deleted with dd or :d[elete] - or if the files were yanked from trash directory. See "Trash - directory" section below. - - P move the last yanked files. The advantage of using P instead of - d followed by p is that P moves files only once. This isn't im- - portant in case you're moving files in the same file system - where your home directory is, but using P to move files on some - other file system (or file systems, in case you want to move - files from fs1 to fs2 and your home is on fs3) can save your - time. - - al put symbolic links with absolute paths. - - rl put symbolic links with relative paths. - - t select or unselect (tag) the current file. - - u undo last change. - - Ctrl-R redo last change. - - dp in compare view of "ofboth grouppaths" kind, makes corresponding - entry of the other pane equal to the current one. The semantics - is as follows: - - nothing done for identical entries - - if file is missing in current view, its pair gets removed - - if file is missing or differs in other view, it's replaced - - file pairs are defined by matching relative paths - File removal obeys 'trash' option. When the option is enabled, - the operation can be undone/redone (although results won't be - visible automatically). - Unlike in Vim, this operation is performed on a single line - rather than a set of adjacent changes. - - do same as dp, but applies changes in the opposite direction. - - v or V enter visual mode, clears current selection. - - [count]Ctrl-A - increment first number in file name by [count] (1 by default). - - [count]Ctrl-X - decrement first number in file name by [count] (1 by default). - - ZQ same as :quit!. - - ZZ same as :quit. - - . repeat last command-line command (not normal mode command) of - this run (does nothing right after startup or :restart command). - The command doesn't depend on command-line history and can be - used with completely disabled history. - - ( go to previous group. Groups are defined by primary sorting - key. For name and iname members of each group have same first - letter, for all other sorting keys vifm uses size, uid, ... - - ) go to next group. See ( key description above. - - { speeds up navigation to closest previous entry of the opposite - type by moving to the first file backwards when cursor is on a - directory and to the first directory backwards when cursor is on - a file. This is essentially a special case of ( that is locked - on "dirs". - - } same as {, but in forward direction. - - [c go to previous mismatched entry in directory comparison view or - do nothing. - - ]c go to next mismatched entry in directory comparison view or do - nothing. - - [d go to previous directory entry or do nothing. - - ]d go to next directory entry or do nothing. - - [r same as :siblprev. - - ]r same as :siblnext. - - [R same as :siblprev!. - - ]R same as :siblnext!. - - [s go to previous selected entry or do nothing. - - ]s go to next selected entry or do nothing. - - [z go to first sibling of current entry. - - ]z go to last sibling of current entry. - - zj go to next directory sibling of current entry or do nothing. - - zk go to previous directory sibling of current entry or do nothing. - -Using Count - You can use count with commands like yy. - - [count]yy - yank count files starting from current cursor position downward. - - Or you can use count with motions passed to y, d or D. - - d[count]j - delete (count + 1) files starting from current cursor position - upward. - -Registers - vifm supports multiple registers for temporary storing list of yanked - or deleted files. - - Registers should be specified by hitting double quote key followed by a - register name. Count is specified after register name. By default - commands use unnamed register, which has double quote as its name. - - Though all commands accept registers, most of commands ignores them - (for example H or Ctrl-U). Other commands can fill register or append - new files to it. - - Presently vifm supports ", _, a-z and A-Z characters as register names. - - As mentioned above " is unnamed register and has special meaning of the - default register. Every time when you use named registers (a-z and A- - Z) unnamed register is updated to contain same list of files as the - last used register. - - _ is black hole register. It can be used for writing, but its list is - always empty. - - Registers with names from a to z and from A to Z are named ones. Low- - ercase registers are cleared before adding new files, while uppercase - aren't and should be used to append new files to the existing file list - of appropriate lowercase register (A for a, B for b, ...). - - Registers can be changed on :empty command if they contain files under - trash directory (see "Trash directory" section below). - - Registers do not contain one file more than once. - - Example: - - "a2yy - - puts names of two files to register a (and to the unnamed register), - - "Ad - - removes one file and append its name to register a (and to the unnamed - register), - - p or "ap or "Ap - - inserts previously yanked and deleted files into current directory. - -Selectors - y, d, D, !, gu and gU commands accept selectors. You can combine them - with any of selectors below to quickly remove or yank several files. - - Most of selectors are like vi motions: j, k, gg, G, H, L, M, %, f, F, - ;, comma, ', ^, 0 and $. But there are some additional ones. - - a all files in current view. - - s selected files. - - S all files except selected. - - Examples: - - - dj - delete file under cursor and one below; - - - d2j - delete file under cursor and two below; - - - y6gg - yank all files from cursor position to 6th file in the list. - - When you pass a count to whole command and its selector they are multi- - plied. So: - - - 2d2j - delete file under cursor and four below; - - - 2dj - delete file under cursor and two below; - - - 2y6gg - yank all files from cursor position to 12th file in the - list. - -Visual Mode - Visual mode has two generic operating submodes: - - - plain selection as it is in Vim; - - - selection editing submode. - - Both modes select files in range from cursor position at which visual - mode was entered to current cursor position (let's call it "selection - region"). Each of two borders can be adjusted by swapping them via "o" - or "O" keys and updating cursor position with regular cursor motion - keys. Obviously, once initial cursor position is altered this way, - real start position becomes unavailable. - - Plain Vim-like visual mode starts with cleared selection, which is not - restored on rejecting selection ("Escape", "Ctrl-C", "v", "V"). Con- - trary to it, selection editing doesn't clear previously selected files - and restores them after reject. Accepting selection by performing an - operation on selected items (e.g. yanking them via "y") moves cursor to - the top of current selection region (not to the top most selected file - of the view). - - In turn, selection editing supports three types of editing (look at - statusbar to know which one is currently active): - - - append - amend selection by selecting elements in selection region; - - - remove - amend selection by deselecting elements in selection re- - gion; - - - invert - amend selection by inverting selection of elements in se- - lection region. - - No matter how you activate selection editing it starts in "append". - One can switch type of operation (in the order given above) via "Ctrl- - G" key. - - Almost all normal mode keys work in visual mode, but instead of accept- - ing selectors they operate on selected items. - - Enter save selection and go back to normal mode not moving cursor. - - av leave visual mode if in amending mode (restores previous selec- - tion), otherwise switch to amending selection mode. - - gv restore previous visual selection. - - v, V, Ctrl-C or Escape - leave visual mode if not in amending mode, otherwise switch to - normal visual selection. - - Ctrl-G switch type of amending by round robin scheme: append -> remove - -> invert. - - : enter command line mode. Selection is cleared on leaving the - mode. - - o switch active selection bound. - - O switch active selection bound. - - gu, u make names of selected files lowercase. - - gU, U make names of selected files uppercase. - -View Mode - This mode tries to imitate the less program. List of builtin shortcuts - can be found below. Shortcuts can be customized using :qmap, :qnoremap - and :qunmap command-line commands. - - Shift-Tab, Tab, q, Q, ZZ - return to normal mode. - - [count]e, [count]Ctrl-E, [count]j, [count]Ctrl-N, [count]Enter - scroll forward one line (or [count] lines). - - [count]y, [count]Ctrl-Y, [count]k, [count]Ctrl-K, [count]Ctrl-P - scroll backward one line (or [count] lines). - - [count]f, [count]Ctrl-F, [count]Ctrl-V, [count]Space - scroll forward one window (or [count] lines). - - [count]b, [count]Ctrl-B, [count]Alt-V - scroll backward one window (or [count] lines). - - [count]z - scroll forward one window (and set window to [count]). - - [count]w - scroll backward one window (and set window to [count]). - - [count]Alt-Space - scroll forward one window, but don't stop at end-of-file. - - [count]d, [count]Ctrl-D - scroll forward one half-window (and set half-window to [count]). - - [count]u, [count]Ctrl-U - scroll backward one half-window (and set half-window to - [count]). - - r, Ctrl-R, Ctrl-L - repaint screen. - - R reload view preserving scroll position. - - F toggle automatic forwarding. Roughly equivalent to periodic - file reload and scrolling to the bottom. The behaviour is simi- - lar to `tail -F` or F key in less. - - [count]/pattern - search forward for ([count]-th) matching line. - - [count]?pattern - search backward for ([count]-th) matching line. - - [count]n - repeat previous search (for [count]-th occurrence). - - [count]N - repeat previous search in reverse direction (for [count]-th oc- - currence). - - [count]g, [count]<, [count]Alt-< - scroll to the first line of the file (or line [count]). - - [count]G, [count]>, [count]Alt-> - scroll to the last line of the file (or line [count]). - - [count]p, [count]% - scroll to the beginning of the file (or N percent into file). - - v invoke an editor to edit the current file being viewed. The - command for editing is taken from the 'vicmd'/'vixcmd' option - value and extended with middle line number prepended by a plus - sign and name of the current file. - - All "Ctrl-W x" keys work the same was as in Normal mode. Active mode - is automatically changed on navigating among windows. When less-like - mode activated on file preview is left using one by "Ctrl-W x" keys, - its state is stored until another file is displayed using preview (it's - possible to leave the mode, hide preview pane, do something else, then - get back to the file and show preview pane again with previously stored - state in it). - -Command line Mode - These keys are available in all submodes of the command line mode: com- - mand, search, prompt and filtering. - - Down, Up, Left, Right, Home, End and Delete are extended keys and they - are not available if vifm is compiled with --disable-extended-keys op- - tion. - - Esc, Ctrl-C - leave command line mode, cancels input. Cancelled input is - saved into appropriate history and can be recalled later. - - Ctrl-M, Enter - execute command and leave command line mode. - - Ctrl-I, Tab - complete command or its argument. - - Shift-Tab - complete in reverse order. - - Ctrl-_ stop completion and return original input. - - Ctrl-B, Left - move cursor to the left. - - Ctrl-F, Right - move cursor to the right. - - Ctrl-A, Home - go to line beginning. - - Ctrl-E, End - go to line end. - - Alt-B go to the beginning of previous word. - - Alt-F go to the end of next word. - - Ctrl-U remove characters from cursor position till the beginning of - line. - - Ctrl-K remove characters from cursor position till the end of line. - - Ctrl-H, Backspace - remove character before the cursor. - - Ctrl-D, Delete - remove character under the cursor. - - Ctrl-W remove characters from cursor position till the beginning of - previous word. - - Alt-D remove characters from cursor position till the beginning of - next word. - - Ctrl-T swap the order of current and previous character and move cursor - forward or, if cursor past the end of line, swap the order of - two last characters in the line. - - Alt-. insert last part of previous command to current cursor position. - Each next call will insert last part of older command. - - Ctrl-G edit command-line content in external editor. See "Command line - editing" section for details. - - Ctrl-N recall more recent command-line from history. - - Ctrl-P recall older command-line from history. - - Up recall more recent command-line from history, that begins as the - current command-line. - - Down recall older command-line from history, that begins as the cur- - rent command-line. - - Ctrl-] trigger abbreviation expansion. - -Pasting special values - The shortcuts listed below insert specified values into current cursor - position. Last key of every shortcut references value that it inserts: - - c - [c]urrent file - - d - [d]irectory path - - e - [e]xtension of a file name - - r - [r]oot part of a file name - - t - [t]ail part of directory path - - - a - [a]utomatic filter - - m - [m]anual filter - - = - local filter, which is bound to "=" in normal mode - - Values related to filelist in current pane are available through Ctrl-X - prefix, while values from the other pane have doubled Ctrl-X key as - their prefix (doubled Ctrl-X is presumably easier to type than upper- - case letters; it's still easy to remap the keys to correspond to names - of similar macros). - - Ctrl-X c - name of the current file of the active pane. - - Ctrl-X d - path to the current directory of the active pane. - - Ctrl-X e - extension of the current file of the active pane. - - Ctrl-X r - name root of current file of the active pane. - - Ctrl-X t - the last component of path to the current directory of the ac- - tive pane. - - Ctrl-X Ctrl-X c - name of the current file of the inactive pane. - - Ctrl-X Ctrl-X d - path to the current directory of the inactive pane. - - Ctrl-X Ctrl-X e - extension of the current file of the inactive pane. - - Ctrl-X Ctrl-X r - name root of current file of the inactive pane. - - Ctrl-X Ctrl-X t - the last component of path to the current directory of the inac- - tive pane. - - - Ctrl-X a - value of implicit permanent filter (old name "automatic") of the - active pane. - - Ctrl-X m - value of explicit permanent filter (old name "manual") of the - active pane. - - Ctrl-X = - value of local filter of the active pane. - - - Ctrl-X / - last pattern from search history. - -Command line editing - vifm provides a facility to edit several kinds of data, that is usually - edited in command-line mode, in external editor (using command speci- - fied by 'vicmd' or 'vixcmd' option). This has at least two advantages - over built-in command-line mode: - - one can use full power of Vim to edit text; - - finding and reusing history entries becomes possible. - - The facility is supported by four input submodes of the command-line: - - command; - - forward search; - - backward search; - - file rename (see description of cw and cW normal mode keys). - - Editing command-line using external editor is activated by the Ctrl-G - shortcut. It's also possible to do almost the same from Normal and - Visual modes using q:, q/ and q? commands. - - Temporary file created for the purpose of editing the line has the fol- - lowing structure: - - 1. First line, which is either empty or contains text already entered - in command-line. - - 2. 2nd and all other lines with history items starting with the most - recent one. Altering this lines in any way won't change history - items stored by vifm. - - After editing application is finished the first line of the file is - taken as the result of operation, when the application returns zero - exit code. If the application returns an error (see :cquit command in - Vim), all the edits made to the file are ignored, but the initial value - of the first line is saved in appropriate history. - -More Mode - This is the mode that appears when status bar content is so big that it - doesn't fit on the screen. One can identify the mode by "-- More --" - message at the bottom. - - The following keys are handled in this mode: - - - Enter, Ctrl-J, j or Down - scroll one line down. - - Backspace, k or Up - scroll one line up. - - - d scroll one page (half of a screen) down. - - u scroll one page (half of a screen) up. - - - Space, f or PageDown - scroll down a screen. - - b or PageUp - scroll up a screen. - - - G scroll to the bottom. - - g scroll to the top. - - - q, Escape or Ctrl-C - quit the mode. - - : switch to command-line mode. - -Commands - Commands are executed with :command_name - - Commented out lines should start with the double quote symbol ("), - which may be preceded by whitespace characters intermixed with colons. - Inline comments can be added at the end of the line after double quote - symbol, only last line of a multi-line command can contain such com- - ment. Not all commands support inline comments as their syntax con- - flicts with names of registers and fields where double quotes are al- - lowed. - - Most of the commands have two forms: complete and the short one. Exam- - ple: - - :noh[lsearch] - - This means the complete command is nohlsearch, and the short one is - noh. - - Most of command-line commands completely reset selection in the current - view. However, there are several exceptions: - - - `:invert s` most likely leaves some files selected; - - - :normal command (when it doesn't leave command-line mode); - - - :if and :else commands don't affect selection on successful execu- - tion. - - '|' can be used to separate commands, so you can give multiple commands - in one line. If you want to use '|' in an argument, precede it with - '\'. - - These commands see '|' as part of their arguments even when it's es- - caped: - - :[range]! - :autocmd - :cabbrev - :cmap - :cnoreabbrev - :cnoremap - :command - :dmap - :dnoremap - :filetype - :fileviewer - :filextype - :map - :mmap - :mnoremap - :nmap - :nnoremap - :noremap - :normal - :qmap - :qnoremap - :vmap - :vnoremap - :wincmd - :windo - :winrun - - To be able to use another command after one of these, wrap it with the - :execute command. An example: - - if filetype('.') == 'reg' | execute '!!echo regular file' | endif - - :[count] - - :number - move to the file number. - :12 would move to the 12th file in the list. - :0 move to the top of the list. - :$ move to the bottom of the list. - - :[count]command - The only builtin :[count]command are :[count]d[elete] and - :[count]y[ank]. - - :d3 would delete three files starting at the current file position - moving down. - - :3d would delete one file at the third line in the list. - - :command [args] - - :[range]!program - execute command via shell. Accepts macros. - - :[range]!command & - - same as above, but the command is run in the background using vifm's - means. - - Programs that write to stderr create error dialogs showing errors of - the command. - - Note the space before ampersand symbol, if you omit it, command will be - run in the background using job control of your shell. - - Accepts macros. - - :!! - - :[range]!!command - same as :!, but pauses before returning. - - :!! repeat the last command. - - :alink - - :[range]alink[!?] - create absolute symbolic links to files in directory of inactive - view. With "?" prompts for destination file names in an edi- - tor. "!" forces overwrite. - - :[range]alink[!] path - create absolute symbolic links to files in directory specified - by the path (absolute or relative to directory of inactive - view). - - :[range]alink[!] name1 name2... - create absolute symbolic links of files in directory of other - view giving each next link a corresponding name from the argu- - ment list. - - :apropos - - :apropos keyword... - create a menu of items returned by the apropos command. Select- - ing an item in the menu opens corresponding man page. By de- - fault the command relies on the external "apropos" utility, - which can be customized by altering value of the 'aproposprg' - option. See "Menus and dialogs" section for controls. - - :autocmd - - :au[tocmd] {event} {pat} {cmd} - register autocommand for the {event}, which can be: - - DirEnter - triggered after directory is changed - Event name is case insensitive. - - {pat} is a comma-separated list of modified globs patterns, - which can contain tilde or environment variables. All paths use - slash ('/') as directory separator. The pattern can start with - a '!', which negates it. Patterns that do not contain slashes - are matched against the last item of the path only (e.g. "dir" - in "/path/dir"). Literal comma can be entered by doubling it. - Two modifications to globs matching are as follows: - - * - never matches a slash (i.e., can signify single direc- - tory level) - - ** - matches any character (i.e., can match path of arbi- - trary depth) - - {cmd} is a :command or several of them separated with '|'. - - Examples of patterns: - - conf.d - matches conf.d directory anywhere - - *.d - matches directories ending with ".d" anywhere - - **.git - matches something.git, but not .git anywhere - - **/.git/** - matches /path/.git/objects, but not /path/.git - - **/.git/**/ - matches /path/.git/ only (because of trailing - slash) - - /etc/* - matches /etc/conf.d/, /etc/X11, but not - /etc/X11/fs - - /etc/**/*.d - matches /etc/conf.d, /etc/X11/conf.d, etc. - - /etc/**/* - matches /etc/ itself and any file below it - - /etc/**/** - matches /etc/ itself and any file below it - - :au[tocmd] [{event}] [{pat}] - list those autocommands that match given event-pattern combina- - tion. - {event} and {pat} can be omitted to list all autocommands. To - list any autocommands for specific pattern one can use * place- - holder in place of {event}. - - :au[tocmd]! [{event}] [{pat}] - remove autocommands that match given event-pattern combination. - Syntax is the same as for listing above. - - :apropos - repeat last :apropos command. - - :bmark - - :bmark tag1 [tag2 [tag3...]] - bookmark current directory with specified tags. - - :bmark! path tag1 [tag2 [tag3...]] - same as :bmark, but allows bookmarking specific path instead of - current directory. This is for use in vifmrc and for bookmark- - ing files. - - Path can contain macros that expand to single path (%c, %C, %d, - %D) or those that can expand to multiple paths, but contain only - one (%f, %F, %rx). The latter is done for convenience on using - the command interactively. Complex macros that include spaces - (e.g. "%c:gs/ /_") should be escaped. - - :bmarks - - :bmarks - display all bookmarks in a menu. - - :bmarks [tag1 [tag2...]] - display menu of bookmarks that include all of the specified - tags. See "Menus and dialogs" section for controls. - - :bmgo - - :bmgo [tag1 [tag2...]] - when there are more than one match acts exactly like :bmarks, - otherwise navigates to single match immediately (and fails if - there is no match). - - :cabbrev - - :ca[bbrev] - display menu of command-line mode abbreviations. See "Menus and - dialogs" section for controls. - - :ca[bbrev] lhs-prefix - display command-line mode abbreviations which left-hand side - starts with specified prefix. - - :ca[bbrev] lhs rhs - register new or overwrites existing abbreviation for command- - line mode. rhs can contain spaces and any special sequences ac- - cepted in rhs of mappings (see "Mappings" section below). Ab- - breviations are expanded non-recursively. - - :cnoreabbrev - - :cnorea[bbrev] - display menu of command-line mode abbreviations. See "Menus and - dialogs" section for controls. - - :cnorea[bbrev] lhs-prefix - display command-line mode abbreviations which left-hand side - starts with specified prefix. - - :cnorea[bbrev] lhs rhs - same as :cabbrev, but mappings in rhs are ignored during expan- - sion. - - :cd - - :cd or :cd ~ or :cd $HOME - change to home directory. - - :cd - go to the last visited directory. - - :cd ~/dir - change directory to ~/dir. - - :cd /curr/dir /other/dir - change directory of the current pane to /curr/dir and directory - of the other pane to /other/dir. Relative paths are assumed to - be relative to directory of current view. Command won't fail if - one of directories is invalid. All forms of the command accept - macros. - - :cd! /dir - same as :cd /dir /dir. - - :cds - - :cds[!] pattern string - navigate to path obtained by substituting first match in current - path. Arguments can include slashes, but starting first argu- - ment with a separator will activate below form of the command. - Specifying "!" changes directory of both panes. - - Available flags: - - - i - ignore case (the 'ignorecase' and 'smartcase' options are not - used) - - - I - don't ignore case (the 'ignorecase' and 'smartcase' options are - not used) - - :cds[!]/pattern/string/[flags] - same as above, but with :substitute-like syntax. Other punctua- - tion characters can be used as separators. - - :change - - :c[hange] - show a dialog to alter properties of files. - - :chmod - - :[range]chmod - display file attributes (permission on *nix and properties on - Windows) change dialog. - - :[range]chmod[!] arg... - only for *nix - change permissions for files. See `man 1 chmod` for arg format. - "!" means set permissions recursively. - - :chown - - :[range]chown - only for *nix - same as co key in normal mode. - - :[range]chown [user][:][group] - only for *nix - change owner and/or group of files. Operates on directories re- - cursively. - - :clone - - :[range]clone[!?] - clones files in current directory. With "?" vifm will open vi - to edit file names. "!" forces overwrite. Macros are expanded. - - :[range]clone[!] path - clones files to directory specified with the path (absolute or - relative to current directory). "!" forces overwrite. Macros - are expanded. - - :[range]clone[!] name1 name2... - clones files in current directory giving each next clone a cor- - responding name from the argument list. "!" forces overwrite. - Macros are expanded. - - :colorscheme - - :colo[rscheme]? - print current color scheme name on the status bar. - - :colo[rscheme] - display a menu with a list of available color schemes. You can - choose primary color scheme here. It is used for view if no di- - rectory specific colorscheme fits current path. It's also used - to set border color (except view titles) and colors in menus and - dialogs. See "Menus and dialogs" section for controls. - - :colo[rscheme] color_scheme_name - change primary color scheme to color_scheme_name. In case of - errors (e.g. some colors are not supported by terminal) either - nothing is changed or color scheme is reset to builtin colors to - ensure that TUI is left in a usable state. - - :colo[rscheme] color_scheme_name directory - associate directory with the color scheme. The directory argu- - ment can be either absolute or relative path when :colorscheme - command is executed from command line, but mandatory should be - an absolute path when the command is executed in scripts loaded - at startup (until vifm is completely loaded). - - :colo[rscheme] color_scheme_name color_scheme_name... - loads the first color scheme in the order given that exists and - is supported by the terminal. If none matches, current one re- - mains unchanged. For example: - - " use a separate color scheme for panes which are inside FUSE mounts - execute 'colorscheme in-fuse' &fusehome - - :comclear - - :comc[lear] - remove all user defined commands. - - :command - - :com[mand] - display a menu of user commands. See "Menus and dialogs" sec- - tion for controls. - - :com[mand] prefix - display user defined commands that start with the prefix. - - :com[mand] name action[ &] - set or redefine a user command. - Use :com[mand]! to overwrite a previously set command of the - same name. Builtin commands can't be redefined. - Unlike in vim, user commands do not have to start with a capital - letter. However, command name cannot contain numbers or special - symbols except for single trailing '?' or '!'. - User commands are run in a shell by default (see below for syn- - tax of other options). To run a command in the background you - must mark it as a background command by adding " &" after the - command's action (e.g., `:com rm rm %f &`). - User commands of all kinds have macros expanded in them. See - "Command macros" section for more information. - - :com[mand] name /pattern - set search pattern. - - :com[mand] name =pattern - set local filter value. - - :com[mand] name filter{:filter args} - set file name filter (see :filter command description). For ex- - ample: - - " display only audio files - :command onlyaudio filter/.+.\(mp3|wav|mp3|flac|ogg|m4a|wma|ape\)$/i - " display everything except audio files - :command noaudio filter!/.+.\(mp3|wav|mp3|flac|ogg|m4a|wma|ape\)$/i - - :com[mand] name :commands - set kind of an alias for internal commands (like in a shell). - Passes range given to alias to an aliased command, so running - :%cp after - :command cp :copy %a - equals - :%copy - - :compare - - :compare [byname | bysize | bycontents | listall | listunique | - listdups | ofboth | ofone | groupids | grouppaths | skipempty]... - compare files in one or two views according the arguments. The - default is "bycontents listall ofboth grouppaths". See "Compare - views" section below for details. Tree structure is incompati- - ble with alternative representations, so values of 'lsview' and - 'millerview' options are ignored. - - :copen - - :cope[n] - opens menu with contents of the last displayed menu with naviga- - tion to files by default, if any. - - :copy - - :[range]co[py][!?][ &] - copy files to directory of other view. With "?" prompts for - destination file names in an editor. "!" forces overwrite. - - :[range]co[py][!] path[ &] - copy files to directory specified with the path (absolute or - relative to directory of other view). "!" forces overwrite. - - :[range]co[py][!] name1 name2...[ &] - copy files to directory of other view giving each next file a - corresponding name from the argument list. "!" forces over- - write. - - :cquit - - :cq[uit][!] - same as :quit, but also aborts directory choosing via - --choose-dir (empties output file) and returns non-zero exit - code. - - :cunabbrev - - :cuna[bbrev] lhs - unregister command-line mode abbreviation by its lhs. - - :cuna[bbrev] rhs - unregister command-line mode abbreviation by its rhs, so that - abbreviation could be removed even after expansion. - - :delbmarks - - :delbmarks - remove bookmarks from current directory. - - :delbmarks tag1 [tag2 [tag3...]] - remove set of bookmarks that include all of the specified tags. - - :delbmarks! - remove all bookmarks. - - :delbmarks! path1 [path2 [path3...]] - remove bookmarks of listed paths. - - :delcommand - - :delc[ommand] user_command - remove user defined command named user_command. - - :delete - - :[range]d[elete][!][ &] - delete selected file or files. "!" means complete removal - (omitting trash). - - :[range]d[elete][!] [reg] [count][ &] - delete selected or [count] files to the reg register. "!" means - complete removal (omitting trash). - - :delmarks - - :delm[arks]! - delete all marks. - - :delm[arks] marks ... - delete specified marks, each argument is treated as a set of - marks. - - :delsession - - :delsession - delete specified session if it was stored previously. Deleting - current session doesn't detach it. - - :display - - :di[splay] - display menu with registers content. - - :di[splay] list ... - display the contents of the numbered and named registers that - are mentioned in list (for example "az to display "", "a and "z - content). - - :dirs - - :dirs display directory stack in a menu. See "Menus and dialogs" sec- - tion for controls. - - :echo - - :ec[ho] [...] - evaluate each argument as an expression and output them sepa- - rated with a space. See help on :let command for a definition - of . - - :edit - - :[range]e[dit] [file...] - open selected or passed file(s) in editor. Macros and environ- - ment variables are expanded. - - :else - - :el[se] - execute commands until next matching :endif if all other condi- - tions didn't match. See also help on :if and :endif commands. - - :elseif - - :elsei[f] {expr1} - execute commands until next matching :elseif, :else or :endif if - conditions of previous :if and :elseif branches were evaluated - to zero. See also help on :if and :endif commands. - - :empty - - :empty permanently remove files from all existing non-empty trash di- - rectories (see "Trash directory" section below). Trash directo- - ries which are specified via %r and/or %u also get deleted com- - pletely. Also remove all operations from undolist that have no - sense after :empty and remove all records about files located - inside directories from all registers. Removal is performed as - background task with undetermined amount of work and can be - checked via :jobs menu. - - :endif - - :en[dif] - end conditional block. See also help on :if and :else commands. - - :execute - - :exe[cute] [...] - evaluate each argument as an expression and join results sepa- - rated by a space to get a single string which is then executed - as a command-line command. See help on :let command for a defi- - nition of . - - :exit - - :exi[t][!] - same as :quit. - - :file - - :f[ile][ &] - display menu of programs set for the file type of the current - file. " &" forces running associated program in background. - See "Menus and dialogs" section for controls. - - :f[ile] arg[ &] - run associated command that begins with the arg skipping opening - menu. " &" forces running associated program in background. - - :filetype - - :filet[ype] pattern-list [{descr}]def_prog[ &],[{descr}]prog2[ &],... - associate given program list to each of the patterns. Associ- - ated program (command) is used by handlers of l and Enter keys - (and also in the :file menu). If you need to insert comma into - command just double it (",,"). Space followed by an ampersand - as two last characters of a command means running of the command - in the background. Optional description can be given to each - command to ease understanding of what command will do in the - :file menu. Vifm will try the rest of the programs for an asso- - ciation when the default isn't found. When program entry - doesn't contain any of vifm macros, name of current file is ap- - pended as if program entry ended with %c macro on *nix and %"c - on Windows. On Windows path to executables containing spaces - can (and should be for correct work with such paths) be double - quoted. See "Patterns" section below for pattern definition and - "Selection" section for how selection is handled. See also "Au- - tomatic FUSE mounts" section below. Example for zip archives - and several actions: - - filetype *.zip,*.jar,*.war,*.ear - \ {Mount with fuse-zip} - \ FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR, - \ {View contents} - \ zip -sf %c | less, - \ {Extract here} - \ tar -xf %c, - - Note that on OS X when `open` is used to call an app, vifm is - unable to check whether that app is actually available. So if - automatic skipping of programs that aren't there is desirable, - `open` should be replaced with an actual command. - - :filet[ype] filename - list (in menu mode) currently registered patterns that match - specified file name. Same as ":filextype filename". - - :filextype - - :filex[type] pattern-list [{ description }] def_program,program2,... - same as :filetype, but this command is ignored if not running in - X. In X :filextype is equal to :filetype. See "Patterns" sec- - tion below for pattern definition and "Selection" section for - how selection is handled. See also "Automatic FUSE mounts" sec- - tion below. - - For example, consider the following settings (the order might - seem strange, but it's for the demonstration purpose): - - filetype *.html,*.htm - \ {View in lynx} - \ lynx - filextype *.html,*.htm - \ {Open with dwb} - \ dwb %f %i &, - filetype *.html,*.htm - \ {View in links} - \ links - filextype *.html,*.htm - \ {Open with firefox} - \ firefox %f &, - \ {Open with uzbl} - \ uzbl-browser %f %i &, - - If you're using vifm inside a terminal emulator that is running - in graphical environment (when X is used on *nix; always on Win- - dows), vifm attempts to run application in this order: - - 1. lynx - 2. dwb - 3. links - 4. firefox - 5. uzbl - - If there is no graphical environment (checked by presence of - non-empty $DISPLAY or $WAYLAND_DISPLAY environment variable on - *nix; never happens on Windows), the list will look like: - - 1. lynx - 2. links - - Just as if all :filextype commands were not there. - - The purpose of such differentiation is to allow comfortable use - of vifm with same settings in desktop environment/through remote - connection (SSH)/in native console. - - Note that on OS X $DISPLAY isn't defined unless you define it, - so :filextype should be used only if you set $DISPLAY in some - way. - - :filext[ype] filename - list (in menu mode) currently registered patterns that match - specified file name. Same as ":filetype filename". - - :fileviewer - - :filev[iewer] pattern-list command1,command2,... - register specified list of commands as viewers for each of the - patterns. Viewer is a command which output is captured and dis- - played in one of the panes of vifm after pressing "e" or running - :view command. When the command doesn't contain any of vifm - macros, name of current file is appended as if command ended - with %c macro. Comma escaping and missing commands processing - rules as for :filetype apply to this command. See "Patterns" - section below for pattern definition. - - Example for zip archives: - - fileviewer *.zip,*.jar,*.war,*.ear zip -sf %c, echo "No zip to preview:" - - :filev[iewer] filename - list (in menu mode) currently registered patterns that match - specified filename. - - :filter - - :filter[!] {pattern} - filter files matching the pattern out of directory listings. - '!' controls state of filter inversion after updating filter - value (see also 'cpoptions' description). Filter is matched - case sensitively on *nix and case insensitively on Windows. See - "File Filters" and "Patterns" sections. - - Example: - - " filter all files ending in .o from the filelist. - :filter /.o$/ - - - :filter[!] {empty-pattern} - same as above, but use last search pattern as pattern value. - - Example: - - :filter //I - - - :filter - reset filter (set it to an empty string) and show all files. - - :filter! - same as :invert. - - :filter? - show information on local, name and auto filters. - - :find - - :[range]fin[d] pattern - display results of find command in the menu. Searches among se- - lected files if any. Accepts macros. By default the command - relies on the external "find" utility, which can be customized - by altering value of the 'findprg' option. - - :[range]fin[d] -opt... - same as :find above, but user defines all find arguments. - Searches among selected files if any. - - :[range]fin[d] path -opt... - same as :find above, but user defines all find arguments. Ig- - nores selection and range. - - :[range]fin[d] - repeat last :find command. - - :finish - - :fini[sh] - stop sourcing a script. Can only be used in a vifm script file. - This is a quick way to skip the rest of the file. - - :goto - - :go[to] - change directory if necessary and put specified path under the - cursor. The path should be existing non-root path. Macros and - environment variables are expanded. - - :grep - - :[range]gr[ep][!] pattern - will show results of grep command in the menu. Add "!" to re- - quest inversion of search (look for lines that do not match pat- - tern). Searches among selected files if any and no range given. - Ignores binary files by default. By default the command relies - on the external "grep" utility, which can be customized by al- - tering value of the 'grepprg' option. - - :[range]gr[ep][!] -opt... - same as :grep above, but user defines all grep arguments, which - are not escaped. Searches among selected files if any. - - :[range]gr[ep][!] - repeat last :grep command. "!" of this command inverts "!" in - repeated command. - - :help - - :h[elp] - show the help file. - - :h[elp] argument - is the same as using ':h argument' in vim. Use vifm- - to get help on vifm (tab completion works). This form of the - command doesn't work when 'vimhelp' option is off. - - :hideui - - :hideui - hide interface to show previous commands' output. - - :highlight - - :hi[ghlight] - display information about all highlight groups active at the mo- - ment. - - :hi[ghlight] clear - reset all highlighting to builtin defaults and removed all file- - name-specific rules. - - :hi[ghlight] clear ( {pat1,pat2,...} | /regexp/ ) - remove specified rule. - - :hi[ghlight] ( group-name | {pat1,pat2,...} | /regexp/ ) - display information on given highlight group or file name pat- - tern of color scheme used in the active view. - - :hi[ghlight] ( group-name | {pat1,pat2,...} | /regexp/[iI] ) - cterm=style | ctermfg=color | ctermbg=color - set style (cterm), foreground (ctermfg) or/and background - (ctermbg) parameters of highlight group or file name pattern for - color scheme used in the active view. - - All style values as well as color names are case insensitive. - - Available style values (some of them can be combined): - - bold - - underline - - reverse or inverse - - standout - - italic (on unsupported systems becomes reverse) - - none - - Available group-name values: - - Win - color of all windows (views, dialogs, menus) and default color - for their content (e.g. regular files in views) - - AuxWin - color of auxiliary areas of windows - - OtherWin - color of inactive pane - - Border - color of vertical parts of the border - - TabLine - tab line color (for 'tabscope' set to "global") - - TabLineSel - color of the tip of selected tab (regardless of 'tab- - scope') - - TopLine - top line color of the other pane - - TopLineSel - top line color of the current pane - - CmdLine - the command line/status bar color - - ErrorMsg - color of error messages in the status bar - - StatusLine - color of the line above the status bar - - JobLine - color of job line that appears above the status line - - WildMenu - color of the wild menu items - - SuggestBox - color of key suggestion box - - CurrLine - line at cursor position in active view - - OtherLine - line at cursor position in inactive view - - OddLine - color of every second entry line in a pane - - LineNr - line number column of views - - Selected - color of selected files - - Directory - color of directories - - Link - color of symbolic links in the views - - BrokenLink - color of broken symbolic links - - HardLink - color of regular files with more than one hard link - - Socket - color of sockets - - Device - color of block and character devices - - Executable - color of executable files - - Fifo - color of fifo pipes - - CmpMismatch - color of mismatched files in side-by-side comparison - by path - - User1..User9 - 9 colors which can be used via %* 'statusline' macro - - Available colors: - - -1 or default or none - default or transparent - - black and lightblack - - red and lightred - - green and lightgreen - - yellow and lightyellow - - blue and lightblue - - magenta and lightmagenta - - cyan and lightcyan - - white and lightwhite - - 0-255 - corresponding colors from 256-color palette - - Light versions of colors are regular colors with bold attribute set. - So order of arguments of :highlight command is important and it's bet- - ter to put "cterm" in front of others to prevent it from overwriting - attributes set by "ctermfg" or "ctermbg" arguments. - - For convenience of color scheme authors xterm-like names for 256 color - palette is also supported. The mapping is taken from - http://vim.wikia.com/wiki/Xterm256_color_names_for_console_Vim Dupli- - cated entries were altered by adding an underscore followed by numeri- - cal suffix. - - 0 Black 86 Aquamarine1 172 Orange3 - 1 Red 87 DarkSlateGray2 173 LightSalmon3_2 - 2 Green 88 DarkRed_2 174 LightPink3 - 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 LightGoldenrod3 - 8 LightBlack 94 Orange4_2 180 Tan - 9 LightRed 95 LightPink4 181 MistyRose3 - 10 LightGreen 96 Plum4 182 Thistle3 - 11 LightYellow 97 MediumPurple3 183 Plum2 - 12 LightBlue 98 MediumPurple3_2 184 Yellow3_2 - 13 LightMagenta 99 SlateBlue1 185 Khaki3 - 14 LightCyan 100 Yellow4 186 LightGoldenrod2 - 15 LightWhite 101 Wheat4 187 LightYellow3 - 16 Grey0 102 Grey53 188 Grey84 - 17 NavyBlue 103 LightSlateGrey 189 LightSteelBlue1 - 18 DarkBlue 104 MediumPurple 190 Yellow2 - 19 Blue3 105 LightSlateBlue 191 DarkOliveGreen1 - 20 Blue3_2 106 Yellow4_2 192 DarkOliveG- - reen1_2 - 21 Blue1 107 DarkOliveGreen3 193 DarkSeaGreen1_2 - 22 DarkGreen 108 DarkSeaGreen 194 Honeydew2 - 23 DeepSkyBlue4 109 LightSkyBlue3 195 LightCyan1 - 24 DeepSkyBlue4_2 110 LightSkyBlue3_2 196 Red1 - 25 DeepSkyBlue4_3 111 SkyBlue2 197 DeepPink2 - 26 DodgerBlue3 112 Chartreuse2_2 198 DeepPink1 - 27 DodgerBlue2 113 DarkOliveGreen3_2 199 DeepPink1_2 - 28 Green4 114 PaleGreen3_2 200 Magenta2_2 - 29 SpringGreen4 115 DarkSeaGreen3 201 Magenta1 - 30 Turquoise4 116 DarkSlateGray3 202 OrangeRed1 - 31 DeepSkyBlue3 117 SkyBlue1 203 IndianRed1 - 32 DeepSkyBlue3_2 118 Chartreuse1 204 IndianRed1_2 - 33 DodgerBlue1 119 LightGreen_2 205 HotPink - 34 Green3 120 LightGreen_3 206 HotPink_2 - 35 SpringGreen3 121 PaleGreen1 207 MediumOrchid1_2 - 36 DarkCyan 122 Aquamarine1_2 208 DarkOrange - 37 LightSeaGreen 123 DarkSlateGray1 209 Salmon1 - 38 DeepSkyBlue2 124 Red3 210 LightCoral - 39 DeepSkyBlue1 125 DeepPink4_3 211 PaleVioletRed1 - 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 SandyBrown - 44 DarkTurquoise 130 DarkOrange3 216 LightSalmon1 - 45 Turquoise2 131 IndianRed 217 LightPink1 - 46 Green1 132 HotPink3 218 Pink1 - 47 SpringGreen2_2 133 MediumOrchid3 219 Plum1 - 48 SpringGreen1 134 MediumOrchid 220 Gold1 - 49 MediumSpringGreen 135 MediumPurple2 221 LightGolden- - rod2_2 - 50 Cyan2 136 DarkGoldenrod 222 LightGolden- - rod2_3 - 51 Cyan1 137 LightSalmon3 223 NavajoWhite1 - 52 DarkRed 138 RosyBrown 224 MistyRose1 - 53 DeepPink4 139 Grey63 225 Thistle1 - 54 Purple4 140 MediumPurple2_2 226 Yellow1 - 55 Purple4_2 141 MediumPurple1 227 LightGoldenrod1 - 56 Purple3 142 Gold3 228 Khaki1 - 57 BlueViolet 143 DarkKhaki 229 Wheat1 - 58 Orange4 144 NavajoWhite3 230 Cornsilk1 - 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 - - There are two colors (foreground and background) and only one bold at- - tribute. Thus single bold attribute affects both colors when "reverse" - attribute is used in vifm run inside terminal emulator. At the same - time linux native console can handle boldness of foreground and back- - ground colors independently, but for consistency with terminal emula- - tors this is available only implicitly by using light versions of col- - ors. This behaviour might be changed in the future. - - Although vifm supports 256 colors in a sense they are supported by UI - drawing library, whether you will be able to use all of them highly de- - pends on your terminal. To set up terminal properly, make sure that - $TERM in the environment you run vifm is set to name of 256-color ter- - minal (on *nixes it can also be set via X resources), e.g. - xterm-256color. One can find list of available terminal names by list- - ing /usr/lib/terminfo/. Number of colors supported by terminal with - current settings can be checked via "tput colors" command. - - Here is the hierarchy of highlight groups, which you need to know for - using transparency: - JobLine - SuggestBox - StatusLine - WildMenu - User1..User9 - Border - CmdLine - ErrorMsg - Win - OtherWin - AuxWin - OddLine - File name specific highlights - Directory - Link - BrokenLink - HardLink - Socket - Device - Fifo - Executable - Selected - CurrLine - LineNr (in active pane) - OtherLine - LineNr (in inactive pane) - TopLine - TopLineSel - TabLineSel (for pane tabs) - User1..User9 - TabLine - TabLineSel - User1..User9 - - "none" means default terminal color for highlight groups at the first - level of the hierarchy and transparency for all others. - - Here file name specific highlights mean those configured via globs ({}) - or regular expressions (//). At most one of them is applied per file - entry, namely the first that matches file name, hence order of :high- - light commands might be important in certain cases. - - :history - - :his[tory] - display a menu with list of visited directories. See "Menus and - dialogs" section for controls. - - :his[tory] x - x can be: - d[ir] or . show directory history. - c[md] or : show command line history. - s[earch] or / show search history and search forward on l - key. - f[search] or / show search history and search forward on l - key. - b[search] or ? show search history and search backward on l - key. - i[nput] or @ show prompt history (e.g. on one file renam- - ing). - fi[lter] or = show filter history (see description of the "=" - normal mode command). - See "Menus and dialogs" section for controls. - - :histnext - - :histnext - same as . The main use case for this command is to work - around the common pain point of and being the same - ASCII character: one could alter the terminal emulator settings - to emit, for example, the `F1` keycode when Ctrl-I is pressed, - then `:noremap :histnext` in vifm, add "t" flag to the - 'cpoptions', and thus have both and working as ex- - pected. - - :histprev - - :histprev - same as . - - :if - - :if {expr1} - start conditional block. Commands are executed until next - matching :elseif, :else or :endif command if {expr1} evaluates - to non-zero, otherwise they are ignored. See also help on :else - and :endif commands. - - Example: - - if $TERM == 'screen.linux' - highlight CurrLine ctermfg=lightwhite ctermbg=lightblack - elseif $TERM == 'tmux' - highlight CurrLine cterm=reverse ctermfg=black ctermbg=white - else - highlight CurrLine cterm=bold,reverse ctermfg=black ctermbg=white - endif - - :invert - - :invert [f] - invert file name filter. - - :invert? [f] - show current filter state. - - :invert s - invert selection. - - :invert o - invert sorting order of the primary sorting key. - - :invert? o - show sorting order of the primary sorting key. - - :jobs - - :jobs display menu of current backgrounded processes. See "Menus and - dialogs" section for controls. - - :let - - :let $ENV_VAR = - set an environment variable. Warning: setting environment vari- - able to an empty string on Windows removes it. - - :let $ENV_VAR .= - append value to environment variable. - - :let &[l:|g:]opt = - sets option value. - - :let &[l:|g:]opt .= - append value to string option. - - :let &[l:|g:]opt += - increasing option value, adding sub-values. - - :let &[l:|g:]opt -= - decreasing option value, removing sub-values. - - Where could be a single-quoted string, double-quoted string, an - environment variable, function call or a concatanation of any of them - in any order using the '.' operator. Any whitespace is ignored. - - :locate - - :locate filename - use "locate" command to create a menu of filenames. Selecting a - file from the menu will reload the current file list in vifm to - show the selected file. By default the command relies on the - external "locate" utility (it's assumed that its database is al- - ready built), which can be customized by altering value of the - 'locateprg' option. See "Menus and dialogs" section for con- - trols. - - :locate - repeat last :locate command. - - :ls - - :ls lists windows of active terminal multiplexer (only when terminal - multiplexer is used). This is achieved by issuing proper com- - mand for active terminal multiplexer, thus the list is not han- - dled by vifm. - - :lstrash - - :lstrash - display a menu with list of files in trash. Each element of the - list is original path of a deleted file, thus the list can con- - tain duplicates. See "Menus and dialogs" section for controls. - - :mark - - :[range]ma[rk][?] x [/full/path] [filename] - Set mark x (a-zA-Z0-9) at /full/path and filename. By default - current directory is being used. If no filename was given and - /full/path is current directory then last file in [range] is - used. Using of macros is allowed. Question mark will stop com- - mand from overwriting existing marks. - - :marks - - :marks create a pop-up menu of marks. See "Menus and dialogs" section - for controls. - - :marks list ... - display the contents of the marks that are mentioned in list. - - :media - - :media only for *nix - display media management menu. See "Menus and dialogs" section - for controls. See also 'mediaprg' option. - - :messages - - :mes[sages] - shows previously given messages (up to 50). - - :mkdir - - :[line]mkdir[!] dir ... - create directories at specified paths. The [line] can be used - to pick node in a tree-view. "!" means make parent directories - as needed. Macros are expanded. - - :move - - :[range]m[ove][!?][ &] - move files to directory of other view. With "?" prompts for - destination file names in an editor. "!" forces overwrite. - - :[range]m[ove][!] path[ &] - move files to directory specified with the path (absolute or - relative to directory of other view). "!" forces overwrite. - - :[range]m[ove][!] name1 name2...[ &] - move files to directory of other view giving each next file a - corresponding name from the argument list. "!" forces over- - write. - - :nohlsearch - - :noh[lsearch] - clear selection in current pane. - - :normal - - :norm[al][!] commands - execute normal mode commands. If "!" is used, user defined map- - pings are ignored. Unfinished last command is aborted as if - or was typed. A ":" should be completed as well. - Commands can't start with a space, so put a count of 1 (one) be- - fore it. - - :only - - :on[ly] - switch to a one window view. - - :popd - - :popd remove pane directories from stack. - - :pushd - - :pushd[!] /curr/dir [/other/dir] - add pane directories to stack and process arguments like :cd - command. - - :pushd exchange the top two items of the directory stack. - - :put - - :[line]pu[t][!] [reg] [ &] - puts files from specified register (" by default) into current - directory. The [line] can be used to pick node in a tree-view. - "!" moves files "!" moves files from their original location in- - stead of copying them. During this operation no confirmation - dialogs will be shown, all checks are performed beforehand. - - :pwd - - :pw[d] show the present working directory. - - :qall - - :qa[ll][!] - exit vifm (add ! to skip saving changes and checking for active - backgrounded commands). - - :quit - - :q[uit][!] - if there is more than one tab, close the current one, otherwise - exit vifm (add ! to skip saving state and checking for active - backgrounded commands). - - :redraw - - :redr[aw] - redraw the screen immediately. - - :registers - - :reg[isters] - display menu with registers content. - - :reg[isters] list ... - display the contents of the numbered and named registers that - are mentioned in list (for example "az to display "", "a and "z - content). - - :regular - - :regular - - switch to regular view leaving custom view. - :rename - - :[range]rename[!] - rename files using vi to edit names. ! means go recursively - through directories. - - :[range]rename name1 name2... - rename each of selected files to a corresponding name. - - :restart - - :restart - free a lot of things (histories, commands, etc.), reread - vifminfo, vifmrc and session files and run startup commands - passed in the argument list, thus losing all unsaved changes - (e.g. recent history or keys mapped after starting this in- - stance). Session that wasn't yet stored gets reset. - - While many things get reset, some basic UI state and current lo- - cations are preserved, including tabs. - - :restart full - variation of :restart that makes no attempt to preserve any- - thing. - - :restore - - :[range]restore - restore file from trash directory, doesn't work outside one of - trash directories. See "Trash directory" section below. - - :rlink - - :[range]rlink[!?] - create relative symbolic links to files in directory of other - view. With "?" prompts for destination file names in an editor. - "!" forces overwrite. - - :[range]rlink[!] path - create relative symbolic links of files in directory specified - with the path (absolute or relative to directory of other view). - "!" forces overwrite. - - :[range]rlink[!] name1 name2... - create relative symbolic links of files in directory of other - view giving each next link a corresponding name from the argu- - ment list. "!" forces overwrite. - - :screen - - :screen - toggle whether to use the terminal multiplexer or not. - A terminal multiplexer uses pseudo terminals to allow multiple - windows to be used in the console or in a single xterm. Start- - ing vifm from terminal multiplexer with appropriate support - turned on will cause vifm to open a new terminal multiplexer - window for each new file edited or program launched from vifm. - This requires screen version 3.9.9 or newer for the screen -X - argument or tmux (1.8 version or newer is recommended). - - :screen! - enable integration with terminal multiplexers. - - :screen? - display whether integration with terminal multiplexers is en- - abled. - - Note: the command is called screen for historical reasons (when tmux - wasn't yet supported) and might be changed in future releases, or get - an alias. - - :select - - :[range]select - select files in the given range (current file if no range is - given). - - :select {pattern} - select files that match specified pattern. Possible {pattern} - forms are described in "Patterns" section below. Trailing slash - for directories is taken into account, so `:select! */ | invert - s` selects only files. - - :select //[iI] - same as item above, but reuses last search pattern. - - :select !{external command} - select files from the list supplied by external command. Files - are matched by full paths, relative paths are converted to abso- - lute ones beforehand. - - :[range]select! [{pattern}] - same as above, but resets previously selected items before pro- - ceeding. - - :session - - :session? - print name of the current session. - - :session - detach current session without saving it. Resets v:session. - - :session name - create or load and switch to a session with the specified name. - Name can't contain slashes. Session active at the moment is - saved before the switch. Session is also automatically saved - when quiting the application in usual ways. Sets v:session. - - :set - - :se[t] display all options that differ from their default value. - - :se[t] all - display all options. - - :se[t] opt1=val1 opt2='val2' opt3="val3" ... - sets given options. For local options both values are set. - You can use following syntax: - - for all options - option, option? and option& - - for boolean options - nooption, invoption and option! - - for integer options - option=x, option+=x and option-=x - - for string options - option=x and option+=x - - for string list options - option=x, option+=x, option-=x and - option^=x - - for enumeration options - option=x, option+=x and option-=x - - for set options - option=x, option+=x, option-=x and op- - tion^=x - - for charset options - option=x, option+=x, option-=x and op- - tion^=x - - the meaning: - - option - turn option on (for boolean) or print its value (for - all others) - - nooption - turn option off - - invoption - invert option state - - option! - invert option state - - option? - print option value - - option& - reset option to its default value - - option=x or option:x - set option to x - - option+=x - add/append x to option - - option-=x - remove (or subtract) x from option - - option^=x - toggle x presence among values of the option - - Option name can be prepended and appended by any number of - whitespace characters. - - :setglobal - - :setg[lobal] - display all global options that differ from their default value. - - :setg[lobal] all - display all global options. - - :setg[lobal] opt1=val1 opt2='val2' opt3="val3" ... - same as :set, but changes/prints only global options or global - values of local options. Changes to the latter might be not - visible until directory is changed. - - :setlocal - - :setl[ocal] - display all local options that differ from their default value. - - :setl[ocal] all - display all local options. - - :setl[ocal] opt1=val1 opt2='val2' opt3="val3" ... - same as :set, but changes/prints only local values of local op- - tions. - - :shell - - :sh[ell][!] - start a shell in current directory. "!" suppresses spawning - dedicated window of terminal multiplexer for a shell. To make - vifm adaptive to environment it uses $SHELL if it's defined, - otherwise 'shell' value is used. - - - :siblnext - - :[count]siblnext[!] - - change directory to [count]th next sibling directory after cur- - rent path using value of global sort option of current pane. - "!" enables wrapping. - - For example, say, you're at /boot and root listing starts like - this: - - bin/ - boot/ - dev/ - ... - - Issuing :siblnext will navigate to /dev. - - - :siblprev - - :[count]siblprev[!] - same as :siblnext, but in the opposite direction. - - :sort - - :sor[t] - display dialog with different sorting methods, where one can se- - lect the primary sorting key. When 'viewcolumns' options is - empty and 'lsview' is off, changing primary sorting key will - also affect view look (in particular the second column of the - view will be changed). See "Menus and dialogs" section for con- - trols. - - :source - - :so[urce] file - read command-line commands from the file. - - :split - - :sp[lit] - switch to a two window horizontal view. - - :sp[lit]! - toggle horizontal window splitting. - - :sp[lit] path - splits the window horizontally to show both file directories. - Also changes other pane to path (absolute or relative to current - directory of active pane). - - :substitute - - :[range]s[ubstitute]/pattern/string/[flags] - for each file in range replace a match of pattern with string. - - String can contain \0...\9 to link to capture groups (\0 - all match, - \1 - first group, etc.). - - Pattern is stored in search history. - - Available flags: - - - i - ignore case (the 'ignorecase' and 'smartcase' options are not - used) - - - I - don't ignore case (the 'ignorecase' and 'smartcase' options are - not used) - - - g - substitute all matches in each file name (each g toggles this) - - :[range]s[ubstitute]/pattern - substitute pattern with an empty string. - - :[range]s[ubstitute]//string/[flags] - use last pattern from search history. - - :[range]s[ubstitute] - repeat previous substitution command. - - :sync - - :sync [relative path] - change the other pane to the current pane directory or to some - path relative to the current directory. Using macros is al- - lowed. - - :sync! change the other pane to the current pane directory and synchro- - nize cursor position. If current pane displays custom list of - files, position before entering it is used (current one might - not make any sense). - - - :sync! [location | cursorpos | localopts | filters | filelist | tree | - all]... - change enumerated properties of the other pane to match corre- - sponding properties of the current pane. Arguments have the - following meanings: - - - location - current directory of the pane; - - - cursorpos - cursor position (doesn't make sense without "lo- - cation"); - - - localopts - all local options; - - - filters - all filters; - - - filelist - list of files for custom view (implies "loca- - tion"); - - - tree - tree structure for tree view (implies "location"); - - - all - all of the above. - - :tabclose - - :tabc[lose] - close current tab, unless it's the only one open at current - scope. - - :tabmove - - :tabm[ove] [N] - without the argument or with `$` as the argument, current tab - becomes the last tab. With the argument, current tab is moved - after the tab with the specified number. Argument of `0` moves - current tab to the first position. - - :tabname - - :tabname [name] - set, update or reset (when no argument is provided) name of the - current tab. - - :tabnew - - :tabnew [path] - create new tab. Accepts optional path for the new tab. Macros - and environment variables are expanded. - - :tabnext - - :tabn[ext] - switch to the next tab (wrapping around). - - :tabn[ext] {n} - go to the tab number {n}. Tab numeration starts with 1. - - :tabonly - - :tabo[nly] - close all tabs but the current one. Closes pane tabs only at - the active side. - - :tabprevious - - :tabp[revious] - switch to the previous tab (wrapping around). - - :tabp[revious] {n} - go to the {n}-th previous tab. Note that :tabnext handles its - argument differently. - - :touch - - :[line]touch file... - create files at specified paths. Aborts on errors. Doesn't up- - date time of existing files. The [line] can be used to pick - node in a tree-view. Macros are expanded. - - :tr - - :[range]tr/pattern/string/ - for each file in range transliterate the characters which appear - in pattern to the corresponding character in string. When - string is shorter than pattern, it's padded with its last char- - acter. - - :trashes - - :trashes - lists all valid trash directories in a menu. Only non-empty and - writable trash directories are shown. This is exactly the list - of directories that are cleared when :empty command is executed. - - :trashes? - same as :trashes, but also displays size of each trash direc- - tory. - - :tree - - :tree turn pane into tree view with current directory as its root. - The tree view is implemented on top of a custom view, but is au- - tomatically kept in sync with file system state and considers - all the filters. Thus the structure corresponds to what one - would see on visiting the directories manually. As a special - case for trees built out of custom view file-system tracking - isn't performed. - - To leave tree view go up from its root or use gh at any level of - the tree. Any command that changes directory will also do, in - particular, `:cd ..`. - - Tree structure is incompatible with alternative representations, - so values of 'lsview' and 'millerview' options are ignored. - - :tree! toggle current view in and out of tree mode. - - :undolist - - :undol[ist] - display list of latest changes. Use "!" to see actual commands. - See "Menus and dialogs" section for controls. - - :unlet - - :unl[et][!] $ENV_VAR1 $ENV_VAR2 ... - remove environment variables. Add ! to omit displaying of warn- - ings about nonexistent variables. - - :unselect - - :[range]unselect - unselect files in the given range (current file if no range is - given). - - :unselect {pattern} - unselect files that match specified pattern. Possible {pattern} - forms are described in "Patterns" section below. Trailing slash - for directories is taken into account, so `:unselect */` unse- - lects directories. - - :unselect !{external command} - unselect files from the list supplied by external command. - Files are matched by full paths, relative paths are converted to - absolute ones beforehand. - - :unselect //[iI] - same as item above, but reuses last search pattern. - - :version - - :ve[rsion] - show menu with version information. - - :vifm - - :vifm same as :version. - - :view - - :vie[w] - toggle on and off the quick file view (preview of file's con- - tents). See also 'quickview' option. - - :vie[w]! - turn on quick file view if it's off. - - :volumes - - :volumes - only for MS-Windows - display menu with volume list. Hitting l (or Enter) key opens - appropriate volume in the current pane. See "Menus and dialogs" - section for controls. - - :vsplit - - :vs[plit] - switch to a two window vertical view. - - :vs[plit]! - toggle window vertical splitting. - - :vs[plit] path - split the window vertically to show both file directories. And - changes other pane to path (absolute or relative to current di- - rectory of active pane). - - :wincmd - - :[count]winc[md] {arg} - same as running Ctrl-W [count] {arg}. - - :windo - - :windo [command...] - execute command for each pane (same as :winrun % command). - - :winrun - - :winrun type [command...] - execute command for pane(s), which is determined by type argu- - ment: - - ^ - top-left pane - - $ - bottom-right pane - - % - all panes - - . - current pane - - , - other pane - - :write - - :w[rite] - write current state to vifminfo and session files (if a session - is active). - - :wq - - :wq[!] same as :quit, but ! disables only the check of backgrounded - commands, while state of the application is always written. - :wqall - - :wqa[ll][!] - same as :qall, but ! disables only the check of backgrounded - commands, while state of the application is always written. - - :xall - - :xa[ll][!] - same as :qall. - - :xit - - :x[it][!] - same as :quit. - - :yank - - :[range]y[ank] [reg] [count] - will yank files to the reg register. - - :map lhs rhs - - :map lhs rhs - map lhs key sequence to rhs in normal and visual modes. - - :map! lhs rhs - map lhs key sequence to rhs in command line mode. - - - :cmap :dmap :mmap :nmap :qmap - :vmap - - :cm[ap] lhs rhs - map lhs to rhs in command line mode. - - :dm[ap] lhs rhs - map lhs to rhs in dialog modes. - - :mm[ap] lhs rhs - map lhs to rhs in menu mode. - - :nm[ap] lhs rhs - map lhs to rhs in normal mode. - - :qm[ap] lhs rhs - map lhs to rhs in view mode. - - :vm[ap] lhs rhs - map lhs to rhs in visual mode. - - - :*map - - :cm[ap] - list all maps in command line mode. - - :dm[ap] - list all maps in dialog modes. - - :mm[ap] - list all maps in menu mode. - - :nm[ap] - list all maps in normal mode. - - :qm[ap] - list all maps in view mode. - - :vm[ap] - list all maps in visual mode. - - :*map beginning - - :cm[ap] beginning - list all maps in command line mode that start with the begin- - ning. - - :dm[ap] beginning - list all maps in dialog modes that start with the beginning. - - :mm[ap] beginning - list all maps in menu mode that start with the beginning. - - :nm[ap] beginning - list all maps in normal mode that start with the beginning. - - :qm[ap] beginning - list all maps in view mode that start with the beginning. - - :vm[ap] beginning - list all maps in visual mode that start with the beginning. - - :noremap - - :no[remap] lhs rhs - map the key sequence lhs to rhs for normal and visual modes, but - disallow mapping of rhs. - - :no[remap]! lhs rhs - map the key sequence lhs to rhs for command line mode, but dis- - allow mapping of rhs. - - :cnoremap :dnoremap :mnoremap :nnoremap :qnoremap - :vnoremap - - :cno[remap] lhs rhs - map the key sequence lhs to rhs for command line mode, but dis- - allow mapping of rhs. - - :dn[oremap] lhs rhs - map the key sequence lhs to rhs for dialog modes, but disallow - mapping of rhs. - - :mn[oremap] lhs rhs - map the key sequence lhs to rhs for menu mode, but disallow map- - ping of rhs. - - :nn[oremap] lhs rhs - map the key sequence lhs to rhs for normal mode, but disallow - mapping of rhs. - - :qn[oremap] lhs rhs - map the key sequence lhs to rhs for view mode, but disallow map- - ping of rhs. - - :vn[oremap] lhs rhs - map the key sequence lhs to rhs for visual mode, but disallow - mapping of rhs. - - :unmap - - :unm[ap] lhs - remove user mapping of lhs from normal and visual modes. - - :unm[ap]! lhs - remove user mapping of lhs from command line mode. - - :cunmap :dunmap :munmap :nunmap :qunmap - :vunmap - - :cu[nmap] lhs - remove user mapping of lhs from command line mode. - - :du[nmap] lhs - remove user mapping of lhs from dialog modes. - - :mu[nmap] lhs - remove user mapping of lhs from menu mode. - - :nun[map] lhs - remove user mapping of lhs from normal mode. - - :qun[map] lhs - remove user mapping of lhs from view mode. - - :vu[nmap] lhs - remove user mapping of lhs from visual mode. - -Ranges - The ranges implemented include: - 2,3 - from second to third file in the list (including it) - % - the entire directory. - . - the current position in the filelist. - $ - the end of the filelist. - 't - the mark position t. - - Examples: - - :%delete - - would delete all files in the directory. - - :2,4delete - - would delete the files in the list positions 2 through 4. - - :.,$delete - - would delete the files from the current position to the end of the - filelist. - - :3delete4 - - would delete the files in the list positions 3, 4, 5, 6. - - If a backward range is given :4,2delete - an query message is given and - user can chose what to do next. - - The builtin commands that accept a range are :d[elete] and :y[ank]. - -Command macros - The command macros may be used in user commands. - - %a User arguments. When user arguments contain macros, they are - expanded before preforming substitution of %a. - - %c %"c The current file under the cursor. - - %C %"C The current file under the cursor in the other directory. - - %f %"f All of the selected files, but see "Selection" section below. - - %F %"F All of the selected files in the other directory list, but see - "Selection" section below. - - %b %"b Same as %f %F. - - %d %"d Full path to current directory. - - %D %"D Full path to other file list directory. - - %rx %"rx - Full paths to files in the register {x}. In case of invalid - symbol in place of {x}, it's processed with the rest of the line - and default register is used. - - %m Show command output in a menu. - - %M Same as %m, but l (or Enter) key is handled like for :locate and - :find commands. - - %u Process command output as list of paths and compose custom view - out of it. - - %U Same as %u, but implies less list updates inside vifm, which is - absence of sorting at the moment. - - %Iu same as %u, but gives up terminal before running external com- - mand. - - %IU same as %U, but gives up terminal before running external com- - mand. - - %S Show command output in the status bar. - - %q redirect command output to quick view, which is activated if - disabled. - - %s Execute command in split window of active terminal multiplexer - (ignored if not running inside one). - - %n Forbid using of terminal multiplexer to run the command. - - %i Completely ignore command output. - - - %pc Marks the end of the main command and the beginning of the clear - command for graphical preview, which is invoked on closing pre- - view of a file. - - %pd Marks a preview command as one that directly communicates with - the terminal. Beware that this is for things like sixel which - are self-contained sequences that depend only on current cursor - position, using this with anything else is likely to mangle ter- - minal state. - - The following dimensions and coordinates are in characters: - - %px x coordinate of top-left corner of preview area. - - %py y coordinate of top-left corner of preview area. - - %pw width of preview area. - - %ph height of preview area. - - - Use %% if you need to put a percent sign in your command. - - Note that %m, %M, %s, %S, %i, %u and %U macros are mutually exclusive. - Only the last one of them on the command will take effect. - - You can use file name modifiers after %c, %C, %f, %F, %b, %d and %D - macros. Supported modifiers are: - - - :p - full path - - - :u - UNC name of path (e.g. "\\server" in - "\\server\share"), Windows only. Expands to current computer name - for not UNC paths. - - - :~ - relative to the home directory - - - :. - relative to current directory - - - :h - head of the file name - - - :t - tail of the file name - - - :r - root of the file name (without last extension) - - - :e - extension of the file name (last one) - - - :s?pat?sub? - substitute the first occurrence of pat with sub. - You can use any character for '?', but it must not occur in pat or - sub. - - - :gs?pat?sub? - like :s, but substitutes all occurrences of pat with - sub. - - See ':h filename-modifiers' in Vim's documentation for the detailed de- - scription. - - Using %x means expand corresponding macro escaping all characters that - have special meaning. And %"x means using of double quotes and escape - only backslash and double quote characters, which is more useful on - Windows systems. - - Position and quantity (if there is any) of %m, %M, %S or %s macros in - the command is unimportant. All their occurrences are removed from the - resulting command. - - %c and %f macros are expanded to file names only, when %C and %F are - expanded to full paths. %f and %F follow this in %b too. - - :com move mv %f %D - set the :move command to move all of the files selected in the - current directory to the other directory. - - The %a macro is replaced with any arguments given to an alias command. - All arguments are considered optional. - :com lsl !!ls -l %a - set the lsl command to execute ls -l with - or without an argument. - - :lsl - will list the directory contents of the current directory. - - :lsl filename - will list only the given filename. - - The macros can also be used in directly executing commands. ":!mv %f - %D" would move the current directory selected files to the other direc- - tory. - - Appending & to the end of a command causes it to be executed in the - background. Typically you want to run two kinds of external commands - in the background: - - - GUI applications that doesn't fork thus block vifm (:!sxiv %f &); - - - console tools that do not work with terminal (:!mv %f %D &). - - You don't want to run terminal commands, which require terminal input - or output something in background because they will mess up vifm's TUI. - Anyway, if you did run such a command, you can use Ctrl-L key to update - vifm's TUI. - - Rewriting the example command with macros given above with background- - ing: - - %m, %M, %s, %S, %u and %U macros cannot be combined with background - mark (" &") as it doesn't make much sense. - -Command backgrounding - Copy and move operation can take a lot of time to proceed. That's why - vifm supports backgrounding of this two operations. To run :copy, - :move or :delete command in the background just add " &" at the end of - a command. - - For each background operation a new thread is created. Job cancella- - tion can be requested in the :jobs menu via dd shortcut. - - You can see if command is still running in the :jobs menu. Back- - grounded commands have progress instead of process id at the line be- - ginning. - - Background operations cannot be undone. - -Cancellation - Note that cancellation works somewhat different on Windows platform due - to different mechanism of break signal propagation. One also might - need to use Ctrl-Break shortcut instead of Ctrl-C. - - There are two types of operations that can be cancelled: - - - file system operations; - - - mounting with FUSE (but not unmounting as it can cause loss of - data); - - - calls of external applications. - - Note that vifm never terminates applications, it sends SIGINT signal - and lets the application quit normally. - - When one of set of operations is cancelled (e.g. copying of 5th file of - 10 files), further operations are cancelled too. In this case undo - history will contain only actually performed operations. - - Cancelled operations are indicated by "(cancelled)" suffix appended to - information message on statusbar. - - File system operations - - Currently the following commands can be cancelled: :alink, :chmod, - :chown, :clone, :copy, :delete, :mkdir, :move, :restore, :rlink, - :touch. File putting (on p/P key) can be cancelled as well. It's not - hard to see that these are mainly long-running operations. - - Cancelling commands when they are repeated for undo/redo operations is - allowed for convenience, but is not recommended as further undo/redo - operations might get blocked by side-effects of partially cancelled - group of operations. - - These commands can't be cancelled: :empty, :rename, :substitute, :tr. - - Mounting with FUSE - - It's not considered to be an error, so only notification on the status - bar is shown. - - External application calls - - Each of this operations can be cancelled: :apropos, :find, :grep, :lo- - cate. - -Selection - If there is a selection, it's stashed before proceeding further unless - file under the cursor is part of that selection. This means that when - macros are expanded for :filetype or :filextype programs, `%f` and `%F` - become equivalent to `%c` and `%C` respectively if current file is not - selected. So you run selection by running one of selected files, oth- - erwise you're running a single file even if there are other selected - entries. - - When running a selection it must not include broken symbolic links, has - to be consistent and set of file handlers must be compatible. Consis- - tency means that selection contains either only directories (including - links to them) or only files, but not their mix. - - Compatibility is a more sophisticated check, but it's defined in a nat- - ural way so that you get what you'd expect. The following properties - of selection are taken into account while checking it for compatibility - and deciding how to handle it: - - - 1. If there any files for which handler isn't defined, then all files - are opened using 'vicmd' or 'vixcmd'. - - - 2. If all handlers match the following criteria: - - backgrounded - - include `%c` and/or `%C` - - include neither `%f` nor `%F` - then each file is executed independently of the rest. - - - 3. If all handlers are equal, the common handler is executed. This - handler might ignore selection and process only file under the - cursor. - - - 4. Otherwise, an error is reported, because handlers differ and they - don't support parallel execution. - -Patterns - :highlight, :filetype, :filextype, :fileviewer commands and 'classify' - option support globs, regular expressions and mime types to match file - names or their paths. - - There are six possible ways to write a single pattern: - - 1. [!]{comma-separated-name-globs} - - 2. [!]{{comma-separated-path-globs}} - - 3. [!]/name-regular-expression/[iI] - - 4. [!]//path-regular-expression//[iI] - - 5. [!] - - 6. undecorated-pattern - - First five forms can include leading exclamation mark that negates pat- - tern matching. - - The last form is implicitly refers to one of others. :highlight does - not accept undecorated form, while :filetype, :filextype, :fileviewer, - :select, :unselect and 'classify' treat it as list of name globs. - - Path patterns receive absolute path of the file that includes its name - component as well. - - To combine several patterns (AND them), make sure you're using one of - the first five forms and write patterns one after another, like this: - {*.vifm} - Mind that if you make a mistake the whole string will be treated as the - sixth form. - - :filetype, :filextype and :fileviewer commands accept comma-separated - list of patterns instead of a single pattern, thus effectively handling - OR operation on them: - {*.vifm},{*.pdf} - Forms that accept comma-separated lists of patterns also process them - as lists of alternatives. - - Patterns with regular expressions - - Regular expression patterns are case insensitive by default, see de- - scription of commands, which might override default behaviour. - - Flags of regular expressions mean the following: - - "i" makes filter case insensitive; - - "I" makes filter case sensitive. They can be repeated multiple - times, but the later one takes precedence (e.g. "iiiI" is equivalent - to "I" and "IiIi" is the same as "i"). - - There are no implicit `^` or `$`, so make sure to specify them explic- - itly if the pattern should match the whole name or path. - - Patterns with globs - - "Globs" section below provides short overview of globs and some impor- - tant points that one needs to know about them. - - Patterns with mime-types - - Mime type matching is essentially globs matching applied to mime type - of a file instead of its name/path. Note: mime types aren't detected - on Windows. - - Examples - - Associate `evince` to PDF-files only inside `/home/user/downloads/` di- - rectory (excluding its subdirectories): - - :filextype //^/home/user/downloads/[^/]*.pdf$// evince %f - - -Globs - Globs are always case insensitive as it makes sense in general case. - - `*`, `?`, `[` and `]` are treated as special symbols in the pattern. - E.g. - - :filetype * less %c - - matches all files. One can use character classes for escaping, so - - :filetype [*] less %c - - matches only one file name, the one which contains only asterisk sym- - bol. - - `*` means any number of any characters (possibly an empty substring), - with one exception: asterisk at the pattern beginning doesn't match dot - in the first position. E.g. - - :fileviewer *.zip,*.jar zip -sf %c - - associates using of `zip` program to preview all files with `zip` or - `jar` extensions as listing of their content, but `.file.zip` won't be - matched. - - `?` means any character at this position. E.g. - - :fileviewer ?.out file %c - - calls `file` tool for all files which have exactly one character before - their extension (e.g. a.out, b.out). - - Square brackets designate character class, which means that whole char- - acter class matches against any of characters listed in it. For exam- - ple - - :fileviewer *.[ch] highlight -O xterm256 -s dante --syntax c %c - - makes vifm call `highlight` program to colorize source and header files - in C language for a 256-color terminal. Equal command would be - - :fileviewer *.c,*.h highlight -O xterm256 -s dante --syntax c %c - - - Inside square brackets `^` or `!` can be used for symbol class negotia- - tion and the `-` symbol to set a range. `^` and `!` should appear - right after the opening square bracket. For example - - :filetype *.[!d]/ inspect_dir - - associates `inspect_dir` as additional handler for all directories that - have one character extension unless it's "d" letter. And - - :filetype [0-9].jpg sxiv - - associates `sxiv` picture viewer only for JPEG-files that contain sin- - gle digit in their name. - - If you need to include literal comma, which is normally separates mul- - tiple globs, double it. - -:set options - Local options - These are kind of options that are local to a specific view. So - you can set ascending sorting order for left pane and descending - order for right pane. - - In addition to being local to views, each such option also has - two values: - - - local to current directory (value associated with current - location); - - - global to current directory (value associated with the - pane). - - The idea is that current directory can be made a temporary ex- - ception to regular configuration of the view, until directory - change. Use :setlocal for that. :setglobal changes view value - not affecting settings until directory change. :set applies - changes immediately to all values. - - - 'aproposprg' - type: string - default: "apropos %a" - Specifies format for an external command to be invoked by the - :apropos command. The format supports expanding of macros, spe- - cific for a particular *prg option, and %% sequence for insert- - ing percent sign literally. This option should include the %a - macro to specify placement of arguments passed to the :apropos - command. If the macro is not used, it will be implicitly added - after a space to the value of this option. - - 'autochpos' - type: boolean - default: true - When disabled vifm will set cursor to the first line in the view - after :cd and :pushd commands instead of saved cursor position. - Disabling this will also make vifm clear information about cur- - sor position in the view history on :cd and :pushd commands (and - on startup if 'autochpos' is disabled in the vifmrc). l key in - the ":history ." and ":trashes" menus are treated like :cd com- - mand. This option also affects marks so that navigating to a - mark doesn't restore cursor position. - - When this option is enabled, more fine grained control over cur- - sor position is available via 'histcursor' option. - - 'columns' 'co' - type: integer - default: terminal width on startup - Terminal width in characters. - - 'caseoptions' - type: charset - default: "" - This option gives additional control over case sensitivity by - allowing overriding default behaviour to either always be case - sensitive or always be case insensitive. Possible values form - pairs of lower and upper case letters that configure specific - aspect of behaviour: - p - always ignore case of paths during completion. - P - always match case of paths during completion. - g - always ignore case of characters for f/F/;/,. - G - always match case of characters for f/F/;/,. - - At most one item of each pair takes affect, if both or more are - present, only the last one matters. When none of pair's ele- - ments are present, the behaviour is default (depends on operat- - ing system for path completion and on values of 'ignorecase' and - 'smartcase' options for file navigation). - - 'cdpath' 'cd' - type: string list - default: value of $CDPATH with commas instead of colons - Specifies locations to check on changing directory with relative - path that doesn't start with "./" or "../". When non-empty, - current directory is examined after directories listed in the - option. - - This option doesn't affect completion of :cd command. - - Example: - - set cdpath=~ - - This way ":cd bin" will switch to "~/bin" even if directory - named "bin" exists in current directory, while ":cd ./bin" com- - mand will ignore value of 'cdpath'. - - 'chaselinks' - type: boolean - default: false - When enabled path of view is always resolved to real path (with - all symbolic links expanded). - - 'classify' - type: string list - default: ":dir:/" - Specifies file name prefixes and suffixes depending on file type - or name. The format is either of: - - [{prefix}]:{filetype}:[{suffix}] - - [{prefix}]::{pattern}::[{suffix}] - Possible {pattern} forms are described in "Patterns" section - above. - - Priority rules: - - file name patterns have priority over type patterns - - file name patterns are matched in left-to-right order of - their appearance in this option - - Either {prefix} or {suffix} or both can be omitted (which is the - default for all unspecified file types), this means empty {pre- - fix} and/or {suffix}. {prefix} and {suffix} should consist of - at most eight characters. Elements are separated by commas. - Neither prefixes nor suffixes are part of file names, so they - don't affect commands which operate on file names in any way. - Comma (',') character can be inserted by doubling it. List of - file type names can be found in the description of filetype() - function. - - 'confirm' 'cf' - type: set - default: delete,permdelete - Defines which operations require confirmation: - - delete - moving files to trash (on d or :delete); - - permdelete - permanent deletion of files (on D or :delete! - command or on undo/redo operation). - - 'cpoptions' 'cpo' - type: charset - default: "fst" - Contains a sequence of single-character flags. Each flag en- - ables behaviour of older versions of vifm. Flags: - - f - when included, running :filter command results in not in- - verted (matching files are filtered out) and :filter! in in- - verted (matching files are left) filter, when omitted, meaning - of the exclamation mark changes to the opposite; - - s - when included, yy, dd and DD normal mode commands act on - selection, otherwise they operate on current file only; - - t - when included, (thus ) behave as and - switches active pane, otherwise and go forward in - the view history. It's possible to make both and to - work as expected by setting up the terminal to emit a custom se- - quence when is pressed; see :histnext for details. - - 'cvoptions' - type: set - default: - Specifies whether entering/leaving custom views triggers events - that normally happen on entering/leaving directories: - - autocmds - trigger autocommands on entering/leaving custom - views; - - localopts - reset local options on entering/leaving custom - views; - - localfilter - reset local filter on entering/leaving custom - views. - - 'deleteprg' - type: string - default: "" - Specifies program to run on files that are permanently removed. - When empty, files are removed as usual, otherwise this command - is invoked on each file by appending its name. If the command - doesn't remove files, they will remain on the file system. - - 'dirsize' - type: enumeration - default: size - Controls how size of directories is displayed in file views. - The following values are possible: - - size - size of directory (i.e., size used to store list of - files) - - nitems - number of entries in the directory (excluding . and - ..) - - Size obtained via ga/gA overwrites this setting so seeing count - of files and occasionally size of directories is possible. - - 'dotdirs' - type: set - default: nonrootparent,treeleafsparent - Controls displaying of dot directories. The following values - are possible: - - rootparent - show "../" in root directory of file system - - nonrootparent - show "../" in non-root directories of file - system - - treeleafsparent - show "../" in empty directories of tree - view - - Note that empty directories always contain "../" entry regard- - less of value of this option. "../" disappears at the moment at - least one file is created. - - 'dotfiles' - type: boolean - default: false - Whether dot files are shown in the view. Can be controlled with - z* bindings. - - 'fastrun' - type: boolean - default: false - With this option turned on you can run partially entered com- - mands with unambiguous beginning using :! (e.g. :!Te instead of - :!Terminal or :!Te). - - 'fillchars' 'fcs' - type: string list - default: "" - Sets characters used to fill borders. - - item default used for - vborder:c ' ' left, middle and right vertical bor- - ders - - If value is omitted, its default value is used. Example: - - set fillchars=vborder:. - - 'findprg' - type: string - default: "find %s %a -print , -type d \( ! -readable -o ! -exe- - cutable \) -prune" - Specifies format for an external command to be invoked by the - :find command. The format supports expansion of macros specific - for this particular option and %% sequence for inserting percent - sign literally. The macros are: - - macro value/meaning - %s literal arguments of :find or - list of paths to search in - - %A empty or - literal arguments of :find - %a empty or - literal arguments of :find or - predicate followed by escaped arguments of :find - %p empty or - literal arguments of :find or - escaped arguments (parameters) of :find - - %u redirect output to custom view instead of showing a - menu - %U redirect output to unsorted custom view instead of - showing a menu - - Predicate in %a is "-name" on *nix and "-iname" on Windows. - - If both %u and %U are specified, %U is chosen. - - Some macros can be added implicitly: - - if %s isn't present, it's appended - - if neither of %a, %A and %p is present, %a is appended - - if neither of %s, %a, %A and %p is present, %s and %a are ap- - pended in this order - - The macros slightly change their meaning depending on format of - :find's arguments: - - if the first argument points to an existing directory, %s is - assigned all arguments while %a, %A and %p are left empty - - otherwise: - - %s is assigned a dot (".") meaning current directory or - list of selected file names, if any - - %a, %A and %p are assigned literal arguments when first - argument starts with a dash ("-"), otherwise %a gets an escaped - version of the arguments with a predicate and %p contains es- - caped version of the arguments - - Starting with Windows Server 2003 a `where` command is avail- - able. One can configure vifm to use it in the following way: - - set findprg="where /R %s %A" - - As the syntax of this command is rather limited, one can't use - :find command with selection of more than one item because the - command ignores all directory paths except for the last one. - - When using find port on Windows, another option is to setup - 'findprg' like this: - - set findprg="find %s %a" - - - 'followlinks' - type: boolean - default: true - Follow links on l or Enter. That is navigate to destination - file instead of treating the link as if it were target file. - Doesn't affects links to directories, which are always entered - (use gf key for directories). - - 'fusehome' - type: string - default: "($XDG_DATA_HOME/.local/share | $VIFM)/fuse/" - Directory to be used as a root dir for FUSE mounts. Value of - the option can contain environment variables (in form "$en- - vname"), which will be expanded (prepend it with a slash to pre- - vent expansion). The value should expand to an absolute path. - - If you change this option, vifm won't remount anything. It af- - fects future mounts only. See "Automatic FUSE mounts" section - below for more information. - - 'gdefault' 'gd' - type: boolean - default: false - When on, 'g' flag is on for :substitute by default. - - 'grepprg' - type: string - default: "grep -n -H -I -r %i %a %s" - Specifies format for an external command to be invoked by the - :grep command. The format supports expanding of macros, spe- - cific for a particular *prg option, and %% sequence for insert- - ing percent sign literally. This option should include the %i - macro to specify placement of "-v" string when inversion of re- - sults is requested, %a or %A macro to specify placement of argu- - ments passed to the :grep command and the %s macro to specify - placement of list of files to search in. If some of the macros - are not used, they will be implicitly added after a space to the - value of the 'grepprg' option in the following order: %i, %a, - %s. Note that when neither %a nor %A are specified, it's %a - which is added implicitly. - - Optional %u or %U macro could be used (if both specified %U is - chosen) to force redirection to custom or unsorted custom view - respectively. - - See 'findprg' option for description of difference between %a - and %A. - - Example of setup to use ack (http://beyondgrep.com/) instead of - grep: - - set grepprg='ack -H -r %i %a %s' - - or The Silver Searcher (https://github.com/ggreer/the_sil- - ver_searcher): - - set grepprg='ag --line-numbers %i %a %s' - - - - 'histcursor' - type: set - default: startup,dirmark,direnter - Defines situations when cursor should be moved according to di- - rectory history: - - startup - on loading file lists during startup - - dirmark - after navigating to a mark that doesn't specify - file - - direnter - on opening directory from a file list - - This option has no effect when 'autochpos' is disabled. - - Note that the list is not exhaustive and there are other situa- - tions when cursor is positioned automatically. - - 'history' 'hi' - type: integer - default: 15 - Maximum number of stored items in all histories. - - 'hlsearch' 'hls' - type: boolean - default: true - Automatically select files that are search matches. - - 'iec' type: boolean - default: false - Use KiB, MiB, ... suffixes instead of K, M, ... when printing - size in human-friendly format. - - 'ignorecase' 'ic' - type: boolean - default: false - Ignore case in search patterns (:substitute, / and ? commands), - local filter (but not the rest of filters) and other things de- - tailed in the description of 'caseoptions'. - - 'incsearch' 'is' - type: boolean - default: false - When this option is set, search and view update for local filter - is be performed starting from initial cursor position each time - search pattern is changed. - - 'iooptions' - type: set - default: - Controls details of file operations. The following values are - available: - - fastfilecloning - perform fast file cloning (copy-on-write), - when available - (available on Linux and btrfs file system). - - 'laststatus' 'ls' - type: boolean - default: true - Controls if status bar is visible. - - 'lines' - type: integer - default: terminal height on startup - Terminal height in lines. - - 'locateprg' - type: string - default: "locate %a" - Specifies format for an external command to be invoked by the - :locate command. The format supports expanding of macros, spe- - cific for a particular *prg option, and %% sequence for insert- - ing percent sign literally. This option should include the %a - macro to specify placement of arguments passed to the :locate - command. If the macro is not used, it will be implicitly added - after a space to the value of this option. - - Optional %u or %U macro could be used (if both specified %U is - chosen) to force redirection to custom or unsorted custom view - respectively. - - 'mediaprg' - type: string - default: path to bundled script that supports udevil, udisks and - udisks2 - (using udisks2 requires python with dbus module in- - stalled) - OS X: path points to a python script that uses diskutil - {only for *nix} - Specifies command to be used to manage media devices. Used by - :media command. - - The command can be passed the following parameters: - - list -- list media - - mount {device} -- mount a device - - unmount {path} -- unmount given mount point - - The output of `list` subcommand is parsed in search of lines - that start with one of the following prefixes: - - device= - specifies device path (e.g., "/dev/sde") - - label= - specifies optional device label (e.g., "Memory - card") - - info= - specifies arbitrary text to display next to - device (by - default "[label]" is used, if label is pro- - vided) - - mount-point= - specifies a mount point (can be absent or ap- - pear more than once) - - All other lines are ignored. Each `device=` starts a new sec- - tion describing a device which should include two other possible - prefixes. - - `list` subcommand is assumed to always succeed, while exit code - of `mount` and `unmount` is taken into account to determine - whether operation was performed successfully. - - 'lsoptions' - type: string list - default: "" - scope: local - - Configures ls-like view. - - item used for - transposed filling view grid by columns rather than by - lines - - - 'lsview' - type: boolean - default: false - scope: local - When this option is set, directory view will be displayed in - multiple columns with file names similar to output of `ls -x` - command. See "ls-like view" section below for format descrip- - tion. This option has no effect if 'millerview' is on. - - 'milleroptions' - type: string list - default: "lsize:1,csize:1,rsize:1,rpreview:dirs" - scope: local - - Configures miller view. - - item default used for - lsize:num 0 left column - csize:num 1 center column (can't be disabled) - rsize:num 0 right column - rpreview:str dirs right column - - *size specifies ratios of columns. Each ratio is in the range - from 0 to 100 and values are adjusted to fit the limits. Zero - disables a column, but central (main) column can't be disabled. - - rpreview specifies what file-system objects should be previewed - in the right column and can take two values: dirs (only directo- - ries) or all. Both options don't include parent directory - (".."). - - Example of two-column mode which is useful in combination with - :view command: - - set milleroptions=lsize:1,csize:2 - - - 'millerview' - type: boolean - default: false - scope: local - When this option is set, directory view will be displayed in - multiple cascading columns. Ignores 'lsview'. - - 'mintimeoutlen' - type: integer - default: 150 - The fracture of 'timeoutlen' in milliseconds that is waited be- - tween subsequent input polls, which affects various asynchronous - operations (detecting changes made by external applications, - monitoring background jobs, redrawing UI). There are no strict - guarantees, however the higher this value is, the less is CPU - load in idle mode. - - 'number' 'nu' - type: boolean - default: false - scope: local - Print line number in front of each file name when 'lsview' op- - tion is turned off. Use 'numberwidth' to control width of line - number. Also see 'relativenumber'. - - 'numberwidth' 'nuw' - type: integer - default: 4 - scope: local - Minimal number of characters for line number field. - - 'previewprg' - type: string - default: "" - scope: local - - External command to be used instead of preview programs config- - ured via :fileviewer command. - - Example: - - " always show git log in preview of files inside some repository - au DirEnter '~/git-repo/**/*' setl previewprg='git log --color -- %c 2>&1' - - 'quickview' - type: boolean - default: false - Whether quick view (:view) is currently active or not. - - 'relativenumber' 'rnu' - type: boolean - default: false - scope: local - Print relative line number in front of each file name when - 'lsview' option is turned off. Use 'numberwidth' to control - width of line number. Various combinations of 'number' and - 'relativenumber' lead to such results: - - nonumber number - - norelativenumber | first | 1 first - | second | 2 second - | third | 3 third - - relativenumber | 1 first | 1 first - | 0 second |2 second - | 1 third | 1 third - - - 'rulerformat' 'ruf' - type: string - default: "%l/%S " - Determines the content of the ruler. Its minimal width is 13 - characters and it's right aligned. Following macros are sup- - ported: - %= - separation point between left and right aligned halves of - the line - %l - file number - %L - total number of files in view (including filtered out - ones) - %x - number of files excluded by filters - %0- - old name for %x macro - %S - number of displayed files - %= - separation point between left and right align items - %% - literal percent sign - %[ - designates beginning of an optional block - %] - designates end of an optional block - - Percent sign can be followed by optional minimum field width. - Add '-' before minimum field width if you want field to be right - aligned. - - Optional blocks are ignored unless at least one macro inside of - them is expanded to a non-empty value. - - Example: - - set rulerformat='%2l-%S%[ +%x%]' - - 'runexec' - type: boolean - default: false - Run executable file on Enter, l or Right Arrow key. Behaviour - of the last two depends on the value of the 'lsview' option. - - 'scrollbind' 'scb' - type: boolean - default: false - When this option is set, vifm will try to keep difference of - scrolling positions of two windows constant. - - 'scrolloff' 'so' - type: integer - default: 0 - Minimal number of screen lines to keep above and below the cur- - sor. If you want cursor line to always be in the middle of the - view (except at the beginning or end of the file list), set this - option to some large value (e.g. 999). - - 'sessionoptions' 'ssop' - sessionoptions ssop - type: set - default: tui,state,tabs,savedirs,dhistory - An equivalent of 'vifminfo' for sessions, uses the same values. - When both options include the same value, data from session file - has higher priority (data from vifminfo isn't necessarily com- - pletely discarded, instead it's merged with the state of a ses- - sion the same way state of multiple instances is merged on - exit). - - 'shell' 'sh' - type: string - default: $SHELL or "/bin/sh" or "cmd" (on MS-Windows) - Full path to the shell to use to run external commands. On *nix - a shell argument can be supplied. - - 'shellcmdflag' 'shcf' - type: string - default: "-c" or "/C" (for cmd.exe on MS-Windows) - Command-line option used to pass a command to 'shell'. It's - used in contexts where command comes from the user. - - Note that using this option to force interactive mode of the - shell is most likely a BAD IDEA. In general interactive host - and interactive child shell can't share the same terminal ses- - sion. You can't even run such a shell in background. Consider - writing a wrapper for your shell that preloads aliases and com- - mands without making the shell interactive and ending up using - it in a way it was not meant to be used. - - Note that this option is ignored when 'shell' is set to Power- - Shell due to the internal use of `-encodedCommand`. - - 'shortmess' 'shm' - type: charset - default: "p" - Contains a sequence of single-character flags. Each flag en- - ables shortening of some message displayed by vifm in the TUI. - Flags: - - L - display only last directory in tab line instead of full - path. - - M - shorten titles in windows of terminal multiplexers cre- - ated by vifm down to file name instead of using full path. - - T - truncate status-bar messages in the middle if they are - too long to fit on the command line. "..." will appear in the - middle. - - p - use tilde shortening in view titles. - - - 'showtabline' 'stal' - type: enumeration - default: multiple - Specifies when tab line should be displayed. Possible values: - - never - never display tab line - - multiple - show tab line only when there are at least two - tabs - - always - display tab line always - - Alternatively 0, 1 and 2 Vim-like values are also accepted and - correspond to "never", "multiple" and "always" respectively. - - - 'sizefmt' - type: string list - default: "units:iec" - Configures the way size is formatted in human-friendly way. - - item value meaning - units: iec Use 1024 byte units (K or KiB, - etc.). - See 'iec' option. - si Use 1000 byte units (KB, etc.). - precision: i > 0 How many fraction digits to con- - sider. - {not set} Precision of 1 for integer part - < 10, - 0 otherwise (provides old behav- - iour). - space {present} Insert space before unit sym- - bols. - This is the default. - nospace {present} Do not insert space before unit - symbols. - - Numbers are rounded from zero. Trailing zeros are dropped. - - Example: - - set sizefmt=units:iec,precision:2,nospace - - - 'slowfs' - type: string list - default: "" - only for *nix - A list of mounter fs name beginnings (first column in /etc/mtab - or /proc/mounts) or paths prefixes for fs/directories that work - too slow for you. This option can be used to stop vifm from - making some requests to particular kinds of file systems that - can slow down file browsing. Currently this means don't check - if directory has changed, skip check if target of symbolic links - exists, assume that link target located on slow fs to be a di- - rectory (allows entering directories and navigating to files via - gf). If you set the option to "*", it means all the systems are - considered slow (useful for cygwin, where all the checks might - render vifm very slow if there are network mounts). - - Example for autofs root /mnt/autofs: - - set slowfs+=/mnt/autofs - - 'smartcase' 'scs' - type: boolean - default: false - Overrides the ignorecase option if a pattern contains at least - one upper case character. Only used when 'ignorecase' option is - enabled. - - 'sort' type: string list - default: +name on *nix and +iname on Windows - scope: local - Sets list of sorting keys (first item is primary key, second is - secondary key, etc.): - [+-]ext - extension of files and directories - [+-]fileext - extension of files only - [+-]name - name (including extension) - [+-]iname - name (including extension, ignores case) - [+-]type - file type - (dir/reg/exe/link/char/block/sock/fifo) - [+-]dir - directory grouping (directory < file) - [+-]gid - group id (*nix only) - [+-]gname - group name (*nix only) - [+-]mode - file type derived from its mode (*nix only) - [+-]perms - permissions string (*nix only) - [+-]uid - owner id (*nix only) - [+-]uname - owner name (*nix only) - [+-]nlinks - number of hard links (*nix only) - [+-]inode - inode number (*nix only) - [+-]size - size - [+-]nitems - number of items in a directory (zero for files) - [+-]groups - groups extracted via regexps from 'sortgroups' - [+-]target - symbolic link target (empty for other file - types) - [+-]atime - time accessed (e.g. read, executed) - [+-]ctime - time changed (changes in metadata, e.g. mode) - [+-]mtime - time modified (when file contents is changed) - - Note: look for st_atime, st_ctime and st_mtime in "man 2 stat" - for more information on time keys. - - '+' means ascending sort for this key, and '-' means descending - sort. - - "dir" key is somewhat similar in this regard but it's added im- - plicitly: when "dir" is not specified, sorting behaves as if it - was the first key in the list. That's why if one wants sorting - algorithm to mix directories and files, "dir" should be appended - to sorting option, for example like this: - - set sort+=dir - - or - - set sort=-size,dir - - Value of the option is checked to include dir key and default - sorting key (name on *nix, iname on Windows). Here is what hap- - pens if one of them is missing: - - - type key is added at the beginning; - - - default key is added at the end; - - all other keys are left untouched (at most they are moved). - - This option also changes view columns according to primary sort- - ing key set, unless 'viewcolumns' option is not empty. - - 'sortnumbers' - type: boolean - default: false - scope: local - Natural sort of (version) numbers within text. - - 'sortgroups' - type: string - default: "" - scope: local - Sets comma-separated list of regular expressions for group type - of sorting. Double the comma to insert it literally. - - The regular expressions are used to extract substrings of file - names to serve as keys for sorting. It is essentially a way to - ignore uninteresting parts of file names during sorting by name. - - Each expression should contain at least one group or its value - will be considered to be always empty. Also, only the first - match of regular expression is processed. - - The first group divides list of files into sub-groups, each of - which is then sorted by substrings extracted using second regu- - lar expression and so on recursively. - - Example: - set sortgroups=-(todo|done).* - this would group files with "-done" in their names and files - with "-todo" separately. On ascending sorting, group containing - "-done" would appear before the other one. - - 'sortorder' - type: enumeration - default: ascending - Sets sort order for primary key: ascending, descending. - - 'statusline' 'stl' - type: string - default: "" - Determines the content of the status line (the line right above - command-line). Empty string means use same format like in pre- - vious versions. Following macros are supported: - - - %t - file name (considering value of the 'classify' option) - - - %T - symbolic link target (empty for other filetypes) - - - %f - file name relative to current directory (considers 'clas- - sify') - - - %A - file attributes (permissions on *nix or properties on - Windows) - - - %u - user name or uid (if it cannot be resolved) - - - %g - group name or gid (if it cannot be resolved) - - - %s - file size in human readable format - - - %E - size of selected files in human readable format, same as - %s when no files are selected, except that it will never show - size of ../ in visual mode, since it cannot be selected - - - %d - file modification date (uses 'timefmt' option) - - - %D - path of the other pane for single-pane layout - - - %a - amount of free space available at current partition - - - %z - short tips/tricks/hints that chosen randomly after one - minute period - - - %{} - evaluate arbitrary vifm expression '', e.g. - '&sort' - - - %* - resets or applies one of User1..User9 highlight groups; - reset happens when width field is 0 or not specified, one of - groups gets picked when width field is in the range from 1 to - 9 - - - all 'rulerformat' macros - - Percent sign can be followed by optional minimum field width. - Add '-' before minimum field width if you want field to be right - aligned. - - On Windows file properties include the following flags (upper - case means flag is on): - A - archive - H - hidden - I - content isn't indexed - R - readonly - S - system - C - compressed - D - directory - E - encrypted - P - reparse point (e.g. symbolic link) - Z - sparse file - - Example without colors: - - set statusline=" %t%= %A %10u:%-7g %15s %20d %{&sort} " - - Example with colors: - - highlight User1 ctermbg=yellow - highlight User2 ctermbg=blue ctermfg=white cterm=bold - set statusline="%1* %-26t %2* %= %1* %A %2* %7u:%-7g %1* %-5s %2* %d " - - - 'suggestoptions' - type: string list - default: - Controls when, for what and how suggestions are displayed. The - following values are available: - - normal - in normal mode; - - visual - in visual mode; - - view - in view mode; - - otherpane - use other pane to display suggestions, when - available; - - delay[:num] - display suggestions after a small delay (to - do not annoy if you just want to type a fast shortcut consisting - of multiple keys), num specifies the delay in ms (500 by de- - fault), 'timeoutlen' at most; - - keys - include shortcuts (commands and selectors); - - foldsubkeys - fold multiple keys with common prefix; - - marks - include marks; - - registers[:num] - include registers, at most num files (5 by - default). - - 'syncregs' - type: string - default: - Specifies identifier of group of instances that share registers - between each other. When several instances of vifm have this - option set to identical value, they automatically synchronize - contents of their registers on operations which use them. - - 'syscalls' - type: boolean - default: false - When disabled, vifm will rely on external applications to per- - form file-system operations, otherwise system calls are used in- - stead (much faster and supports progress tracking). The option - should eventually be removed. Mostly *nix-like systems are af- - fected. - - 'tablabel' - type: string - default: "" - When non-empty, determines format of the main part of a single - tab's label. - - When empty, tab label is set to either tab name for named tabs - or to view title (usually current path) for unnamed tabs. - - The following macros can appear in the format (see below for - what a flag is): - - - %C - flag of a current tab - - - %N - number of the tab - - - %T - flag of a tree mode - - - %c - description of a custom view - - - %n - name of the tab - - - %p - path of the view (handles filename modifiers) - - - %t - title of the view (affected by 'shortmess' flags) - - - %% - literal percent sign - - - %[ - designates beginning of an optional block - - - %] - designates end of an optional block - - - %*, %0* - resets highlighting - - - %1-%9 - applies one of User1..User9 highlight groups - - In global tabs the view in bullets above refers to currently ac- - tive view of that tab. - - Flag macros are a special kind of macros that always expand to - an empty value and are ment to be used inside optional blocks to - control their visibility. - - Optional blocks are ignored unless at least one macro inside of - them is expanded to a non-empty value or is a set flag macro. - - " %[(%n)%] -- optional name of the tab - " %[ -- optional description of the view - " %[%T{tree}%] -- mark of tree mode - " %[{%c}%] -- description of custom view - " @ -- just an extra separator before the path - ' %] - " %p:t -- tail part of view's location - set tablabel=%[(%n)%]%[%[%T{tree}%]%[{%c}%]@%]%p:t - - 'tabprefix' - type: string - default: "[%N:" - Determines prefix of a tab's label. Formatting is done as for - 'tablabel' option. - - 'tabscope' - type: enumeration - default: global - Picks style of tabs, which defines what a single tab contains. - Possible values: - - global - tab describes complete UI of two views and how they - are arranged - - pane - tab is located "inside" a pane and manages it and - quick view - - 'tabstop' 'ts' - type: integer - default: value from curses library - Number of spaces that a Tab in the file counts for. - - 'tabsuffix' - type: string - default: "]" - Determines suffix of a tab's label. Formatting is done as for - 'tablabel' option. - - 'timefmt' - type: string - default: "%m/%d %H:%M" - Format of time in file list. See "man 1 date" or "man 3 strf- - time" for details. - - 'timeoutlen' 'tm' - type: integer - default: 1000 - The time in milliseconds that is waited for a mapped key in case - of already typed key sequence is ambiguous. - - 'title' - type: boolean - default: true when title can be restored, false otherwise - When enabled, title of the terminal or terminal multiplexer's - window is updated according to current location. Because not - all terminals support setting title, this works only if `$TERM` - value matches one of the following conditions: - - equals "xterm" or starts with "xterm-" - - equals "rxvt" or starts with "rxvt-" - - equals "screen" or starts with "screen-" - - equals "aterm" - - equals "Eterm" - - 'trash' - type: boolean - default: true - Use trash directory. See "Trash directory" section below. - - 'trashdir' - type: string - default: on *nix: - "%r/.vifm-Trash-%u,$VIFM/Trash,%r/.vifm-Trash" - or if $VIFM/Trash doesn't exist - "%r/.vifm-Trash-%u,$XDG_DATA_HOME/vifm/Trash,%r/.vifm-Trash" - on Windows: - "%r/.vifm-Trash,$XDG_DATA_HOME/vifm/Trash" - List of trash directory path specifications, separated with com- - mas. Each list item either defines an absolute path to trash - directory or a path relative to a mount point root when list el- - ement starts with "%r/". Value of the option can contain envi- - ronment variables (of form "$envname"), which will be expanded - (prepend $ with a slash to prevent expansion). Environment - variables are expanded when the option is set. - - On *nix, if element ends with "%u", the mark is replaced with - real user ID and permissions are set so that only that only - owner is able to use it. - Note that even this setup is not completely secure when combined - with "%r/" and it's overall safer to keep files in home direc- - tory, but that implies cost of copying files between partitions. - - When new file gets cut (deleted) vifm traverses each element of - the option in the order of their appearance and uses first trash - directory that it was able to create or that is already - writable. - - Default value tries to use trash directory per mount point and - falls back to ~/.vifm/Trash on failure. - - Will attempt to create the directory if it does not exist. See - "Trash directory" section below. - - 'tuioptions' 'to' - type: charset - default: "psv" - Each flag configures some aspect of TUI appearance. The flags - are: - p - when included: - * file list inside a pane gets additional single character - padding on left and right sides; - * quick view and view mode get single character padding. - s - when included, left and right borders (side borders, hence - "s" character) are visible. - u - use Unicode characters in the TUI (Unicode ellipsis instead - of "..."). - v - vary width of middle border to equalize view sizes. - - 'undolevels' 'ul' - type: integer - default: 100 - Maximum number of changes that can be undone. Note that here - single file operation is used as a unit, not operation, i.e. - deletion of 101 files will exceed default limit. - - 'vicmd' - type: string - default: "vim" - Command used to edit files in various contexts. Ampersand sign - at the end (regardless whether it's preceded by space or not) - means backgrounding of command. - - Background flag is ignored in certain context where vifm waits - for the editor to finish. Such contexts include any command - that spawns editor to change list of file names or a command, - with :rename being one example. `-f` is also appended to pre- - vent forking in such cases, so the command needs to handle the - flag. - - Additionally `+{num}` and `+'call cursor()'` arguments are used - to position cursor when location is known. - - 'viewcolumns' - type: string - default: "" - scope: local - Format string containing list of columns in the view. When this - option is empty, view columns to show are chosen automatically - using sorting keys (see 'sort') as a base. Value of this option - is ignored if 'lsview' is set. See "Column view" section below - for format description. - - An example of setting the options for both panes (note :windo - command): - - windo set viewcolumns=-{name}..,6{size},11{perms} - - 'vixcmd' - type: string - default: value of 'vicmd' - Same as 'vicmd', but takes precedence over it when running in- - side a graphical environment. - - 'vifminfo' - type: set - default: bookmarks,bmarks - Controls what will be saved in the $VIFM/vifminfo file. - - bmarks - named bookmarks (see :bmark command) - bookmarks - marks, except special ones like '< and '> - tui - state of the user interface (sorting, number of - windows, quick - view state, active view) - dhistory - directory history - state - file name and dot filters and terminal multiplex- - ers integration - state - cs - primary color scheme - savedirs - save last visited directory - chistory - command line history - shistory - search history (/ and ? commands) - phistory - prompt history - fhistory - history of local filter (see description of the - "=" normal mode - command) - dirstack - directory stack overwrites previous stack, unless - stack of - current instance is empty - registers - registers content - tabs - global or pane tabs - options - all options that can be set with the :set command - (obsolete) - filetypes - associated programs and viewers (obsolete) - commands - user defined commands (see :command description) - (obsolete) - - 'vimhelp' - type: boolean - default: false - Use vim help format. - - 'wildmenu' 'wmnu' - type: boolean - default: false - Controls whether possible matches of completion will be shown - above the command line. - - 'wildstyle' - type: enumeration - default: bar - Picks presentation style of wild menu. Possible values: - - bar - one-line with left-to-right cursor - - popup - multi-line with top-to-bottom cursor - - 'wordchars' - type: string list - default: "1-8,14-31,33-255" (that is all non-whitespace charac- - ters) - Specifies which characters in command-line mode should be con- - sidered as part of a word. Value of the option is comma-sepa- - rated list of ranges. If both endpoints of a range match, sin- - gle endpoint is enough (e.g. "a" = "a-a"). Both endpoints are - inclusive. There are two accepted forms: character representing - itself or number encoding character according to ASCII table. - In case of ambiguous characters (dash, comma, digit) use numeric - form. Accepted characters are in the range from 0 to 255. Any - Unicode character with code greater than 255 is considered to be - part of a word. - - The option affects Alt-D, Alt-B and Alt-F, but not Ctrl-W. This - is intentionally to allow two use cases: - - - Moving by WORDS and deletion by words. - - Moving by words and deletion by WORDS. - - To get the latter use the following mapping: - - cnoremap - - Also used for abbreviations. - - 'wrap' type: boolean - default: true - Controls whether to wrap text in quick view. - - 'wrapscan' 'ws' - type: boolean - default: true - Searches wrap around end of the list. - -Mappings - Map arguments - - LHS of mappings can be preceded by arguments which take the form of - special sequences: - - - Postpone UI updates until RHS is completely processed. - - In case of builtin mapping causing conflict for a user-defined - mapping (e.g., `t` builtin to a partially typed `ta` user-de- - fined mapping), ignore the builtin mapping and wait for input - indefinitely as opposed to default behaviour of triggering the - builtin mapping after a delay defined by 'timeoutlen'. Example: - - nnoremap tw :set wrap! - nnoremap tn :set number! - nnoremap tr :set relativenumber! - - Special sequences - - Since it's not easy to enter special characters there are several spe- - cial sequences that can be used in place of them. They are: - - Enter key. - - Escape key. - - - Space key. - - Less-than character (<). - - provides a way to disable a mapping (by mapping it to ). - - Backspace key (see key conflict description below). - - - Tabulation and Shift+Tabulation keys. - - - Home/End. - - - Arrow keys. - - - PageUp/PageDown. - - - Delete key. and mean different codes, but - is more common. - - - Insert key. - - ,,...,,,,,, - Control + some key (see key conflict description below). - - only for *nix - Control + Space. - - ,,..., - ,,..., Alt + some key. - - ,,..., - ,,..., only for *nix - Alt + Ctrl + some key. - - - - Functional keys. - - - - only for MS-Windows - functional keys with Control key pressed. - - - - only for MS-Windows - functional keys with Alt key pressed. - - - - only for MS-Windows - functional keys with Shift key pressed. - - Note that due to the way terminals process their input, several key- - board keys might be mapped to single key code, for example: - - - and ; - - - and ; - - - and ; - - - etc. - - Most of the time they are defined consistently and don't cause sur- - prises, but and are treated differently in different envi- - ronments (although they match each other all the time), that's why they - correspond to different keys in vifm. As a consequence, if you map or be sure to repeat the mapping with the other one so that it - works in all environments. Alternatively, provide your mapping in one - form and add one of the following: - - " if mappings with in the LHS work - map - " if mappings with in the LHS work - map - - Whitespace - - vifm removes whitespace characters at the beginning and end of com- - mands. That's why you may want to use at the end of rhs in - mappings. For example: - - cmap man - - will put "man " in line when you hit the key in the command line - mode. - -Expression syntax - Supported expressions is a subset of what VimL provides. - - Expression syntax summary, from least to most significant: - - expr1 expr2 - expr2 || expr2 .. logical OR - - expr2 expr3 - expr3 && expr3 .. logical AND - - expr3 expr4 - expr4 == expr4 equal - expr4 != expr4 not equal - expr4 > expr4 greater than - expr4 >= expr4 greater than or equal - expr4 < expr4 smaller than - expr4 <= expr4 smaller than or equal - - expr4 expr5 - expr5 + expr5 .. number addition - expr5 - expr5 .. number subtraction - - expr5 expr6 - expr6 . expr6 .. string concatenation - - expr6 expr7 - - expr6 unary minus - + expr6 unary plus - ! expr6 logical NOT - - expr7 number number constant - "string" string constant, \ is special - 'string' string constant, ' is doubled - &option option value - $VAR environment variable - v:var builtin variable - function(expr1, ...) function call - (expr1) nested expression - - ".." indicates that the operations in this level can be concatenated. - - expr1 - ----- - expr2 || expr2 - - Arguments are converted to numbers before evaluation. - - Result is non-zero if at least one of arguments is non-zero. - - It's right associative and with short-circuiting, so sub-expressions - are evaluated from left to right until result of whole expression is - determined (i.e., until first non-zero) or end of the expression. - - expr2 - ----- - expr3 && expr3 - - Arguments are converted to numbers before evaluation. - - Result is non-zero only if both arguments are non-zero. - - It's right associative and with short-circuiting, so sub-expressions - are evaluated from left to right until result of whole expression is - determined (i.e., until first zero) or end of the expression. - - expr3 - ----- - expr4 {cmp} expr4 - - Compare two expr4 expressions, resulting in a 0 if it evaluates to - false or 1 if it evaluates to true. - - equal == - not equal != - greater than > - greater than or equal >= - smaller than < - smaller than or equal <= - - Examples: - - 'a' == 'a' == 1 - 'a' > 'b' == 1 - 'a' == 'b' == 0 - '2' > 'b' == 0 - 2 > 'b' == 1 - 2 > '1b' == 1 - 2 > '9b' == 0 - -1 == -'1' == 1 - 0 == '--1' == 1 - - expr4 - ----- - expr5 + expr5 .. number addition expr5 - expr5 .. number sub- - traction - - Examples: - - 1 + 3 - 3 == 1 - 1 + '2' == 3 - - expr5 - ----- - expr6 . expr6 .. string concatenation - - Examples: - - 'a' . 'b' == 'ab' - 'aaa' . '' . 'c' == 'aaac' - - expr6 - ----- - - - expr6 unary minus - + expr6 unary plus - ! expr6 logical NOT - - For '-' the sign of the number is changed. - For '+' the number is unchanged. - For '!' non-zero becomes zero, zero becomes one. - - A String will be converted to a Number first. - - These operations can be repeated and mixed. Examples: - - --9 == 9 - ---9 == -9 - -+9 == 9 - !-9 == 0 - !'' == 1 - !'x' == 0 - !!9 == 1 - - expr7 - ----- - - number number constant - ----- - - Decimal number. Examples: - - 0 == 0 - 0000 == 0 - 01 == 1 - 123 == 123 - 10000 == 10000 - - string - ------ - "string" string constant - - Note that double quotes are used. - - A string constant accepts these special characters: - \b backspace - \e escape - \n newline - \r return - \t tab - \\ backslash - \" double quote - - Examples: - - "\"Hello,\tWorld!\"" - "Hi,\nthere!" - - literal-string - -------------- - 'string' string constant - - Note that single quotes are used. - - This string is taken as it is. No backslashes are removed or have a - special meaning. The only exception is that two quotes stand for one - quote. - - Examples: - - 'All\slashes\are\saved.' - 'This string contains doubled single quotes ''here''' - - option - ------ - &option option value (local one is preferred, if exists) - &g:option global option value &l:option local - option value - - Examples: - - echo 'Terminal size: '.&columns.'x'.&lines - if &columns > 100 - - Any valid option name can be used here (note that "all" in ":set all" - is a pseudo option). See ":set options" section above. - - environment variable - -------------------- - $VAR environment variable - - The String value of any environment variable. When it is not defined, - the result is an empty string. - - Examples: - - 'This is my $PATH env: ' . $PATH - 'vifmrc at ' . $MYVIFMRC . ' is used.' - - builtin variable - -------------------- - v:var builtin variable - - Information exposed by vifm for use in scripting. - - v:count - count passed to : command, 0 by default. Can be used in mappings to - passthe count to a different command. - v:count1 - same as v:count, but 1 by default. - v:jobcount - number of active jobs (as can be seen in the :jobs menu). - v:session - name of the current session or empty string. - v:servername - See below. - - function call - ------------- - function(expr1, ...) function call - - See "Functions" section below. - - Examples: - - "'" . filetype('.') . "'" - filetype('.') == 'reg' - - expression nesting - ------------------ - (expr1) nested expression - - Groups any other expression of arbitrary complexity enforcing order in - which operators are applied. - - -Functions - USAGE RESULT DESCRIPTION - - chooseopt({opt}) String Queries choose parameters passed on - startup. - executable({expr}) Integer Checks whether {expr} command avail- - able. - expand({expr}) String Expands special keywords in {expr}. - extcached({cache}, {path}, {extcmd}) - String Caches output of {extcmd} per {cache} - and - {path} combination. - filetype({fnum} [, {resolve}]) - String Returns file type from position. - fnameescape({expr}) String Escapes {expr} for use in a :command. - getpanetype() String Returns type of current pane. - has({property}) Integer Checks whether instance has {prop- - erty}. - layoutis({type}) Integer Checks whether layout is of type - {type}. - paneisat({loc}) Integer Checks whether current pane is at - {loc}. - system({command}) String Executes shell command and returns - its output. - tabpagenr([{arg}]) Integer Returns number of current or last - tab. - term({command}) String Like system(), but for interactive - commands. - - chooseopt({opt}) - - Retrieves values of options related to file choosing. {opt} can be one - of: - files returns argument of --choose-files or empty string - dir returns argument of --choose-dir or empty string - cmd returns argument of --on-choose or empty string - delimiter returns argument of --delimiter or the default one (\n) - - executable({expr}) - - If {expr} is absolute or relative path, checks whether path destination - exists and refers to an executable, otherwise checks whether command - named {expr} is present in directories listed in $PATH. Checks for - various executable extensions on Windows. Returns boolean value de- - scribing result of the check. - - Example: - - " use custom default viewer script if it's available and installed - " in predefined system directory, otherwise try to find it elsewhere - if executable('/usr/local/bin/defviewer') - fileview * /usr/local/bin/defviewer %c - else - if executable('defviewer') - fileview * defviewer %c - endif - endif - - expand({expr}) - - Expands environment variables and macros in {expr} just like it's done - for command-line commands. Returns a string. See "Command macros" - section above. - - Examples: - - " percent sign - :echo expand('%%') - " the last part of directory name of the other pane - :echo expand('%D:t') - " $PATH environment variable (same as `:echo $PATH`) - :echo expand('$PATH') - - extcached({cache}, {path}, {extcmd}) - - Caches value of {extcmd} external command automatically updating it as - necessary based on monitoring change date of a {path}. The cache is - invalidated when file or its meta-data is updated. A single path can - have multiple caches associated with it. - - {path} value is normalized, but symbolic links in it aren't resolved. - - Example: - - " display number and size of blocks actually used by a file or directory - set statusline+=" Uses: %{ extcached('uses', - expand('%c'), - expand('stat --format=%%bx%%B %c')) }" - - filetype({fnum} [, {resolve}]) - - The result is a string, which represents file type and is one of the - list: - exe executables - reg regular files - link symbolic links - broken broken symbolic links (appears only when resolving) - dir directories - char character devices - block block devices - fifo pipes - sock *nix domain sockets - ? unknown file type (should not normally happen) or - non-file (pseudo-entries in compare view) - - The result can also be an empty string in case of invalid argument. - - Parameter {fnum} can have following values: - - '.' to get type of file under the cursor in the active pane - - numerical value base 1 to get type of file on specified line num- - ber - - Optional parameter {resolve} is treated as a boolean and specifies - whether symbolic links should be resolved. - - fnameescape({expr}) - - Escapes parameter to make it suitable for use as an argument of a :com- - mand. List of escaped characters includes %, which is doubled. - - Usage example: - - " navigate to most recently modified file in current directory - execute 'goto' fnameescape(system('ls -t | head -1')) - - getpanetype() - - Retrieves string describing type of current pane. Possible return val- - ues: - regular regular file listing of some directory - custom custom file list (%u) - very-custom very custom file list (%U) - tree tree view - - has({property}) - - Allows examining internal parameters from scripts to e.g. figure out - environment in which application is running. Returns 1 if property is - true/present, otherwise 0 is returned. Currently the following proper- - ties are supported (anything else will yield 0): - unix runs in *nix-like environment (including Cygwin) - win runs on Windows - - Usage example: - - " skip user/group on Windows - if !has('win') - let $RIGHTS = '%10u:%-7g ' - endif - - execute 'set' 'statusline=" %t%= %A '.$RIGHTS.'%15E %20d "' - - layoutis({type}) - - Checks whether current interface layout is {type} or not, where {type} - can be: - only single-pane mode - split double-pane mode (either vertical or horizontal split) - vsplit vertical split (left and right panes) - hsplit horizontal split (top and bottom panes) - - Usage example: - - " automatically split vertically before enabling preview - :nnoremap w :if layoutis('only') | vsplit | endif | view! - - paneisat({loc}) - - Checks whether position of active pane in current layout matches one of - the following locations: - top pane reaches top border - bottom pane reaches bottom border - left pane reaches left border - right pane reaches right border - - system({command}) - - Runs the command in shell and returns its output (joined standard out- - put and standard error streams). All trailing newline characters are - stripped to allow easy appending to command output. Ctrl-C should in- - terrupt the command. - - Use this function to consume output of external commands that don't re- - quire user interaction and term() for interactive commands that make - use of terminal and are capable of handling stream redirection. - - Usage example: - - " command to enter .git/ directory of git-repository (when ran inside one) - command! cdgit :execute 'cd' fnameescape(system('git rev-parse --git-dir')) - - tabpagenr([{arg}]) - - When called without arguments returns number of current tab page base - one. - - When called with "$" as an argument returns number of the last tab page - base one, which is the same as number of tabs. - - term({command}) - - Same as system() function, but user interface is shutdown during the - execution of the command, which makes sure that external interactive - applications won't affect the way terminal is used by vifm. - - Usage example: - - " command to change directory by picking it via fzf - command! fzfcd :execute 'cd' - fnameescape(term('find -type d | fzf 2> /dev/tty')) - -Menus and dialogs - When navigating to some path from a menu there is a difference in end - location depending on whether path has trailing slash or not. Files - normally don't have trailing slashes so "file/" won't work and one can - only navigate to a file anyway. On the other hand with directories - there are two options: navigate to a directory or inside of it. To al- - low both use cases, the first one is used on paths like "dir" and the - second one for "dir/". - - Commands - - :range navigate to a menu line. - - :exi[t][!] :q[uit][!] :x[it][!] - leave menu mode. - - :noh[lsearch] - reset search match highlighting. - - :w[rite] {dest} - write all menu lines into file specified by {dest}. - - General - - j, Ctrl-N - move down. - k, Ctrl-P - move up. - Enter, l - select and exit the menu. - Ctrl-L - redraw the menu. - - Escape, Ctrl-C, ZZ, ZQ, q - quit. - - In all menus - - The following set of keys has the same meaning as in normal mode. - - Ctrl-B, Ctrl-F - Ctrl-D, Ctrl-U - Ctrl-E, Ctrl-Y - /, ? - n, N - [count]G, [count]gg - H, M, L - zb, zt, zz - - zh - scroll menu items [count] characters to the right. - zl - scroll menu items [count] characters to the left. - zH - scroll menu items half of screen width characters to the right. - zL - scroll menu items half of screen width characters to the left. - - : - enter command line mode for menus (currently only :exi[t], :q[uit], - :x[it] and :{range} are supported). - - b - interpret content of the menu as list of paths and use it to create - custom view in place of previously active pane. See "Custom views" - section below. - B - same as above, but creates unsorted view. - - v - load menu content into quickfix list of the editor (Vim compatible - by assumption) or if list doesn't have separators after file names - (colons) open each line as a file name. - - - Below is description of additional commands and reaction on selection - in some menus and dialogs. - - Apropos menu - - Selecting menu item runs man on a given topic. Menu won't be closed - automatically to allow view several pages one by one. - - Command-line mode abbreviations menu - - Type dd on an abbreviation to remove it. - - c leaves menu preserving file selection and inserts right-hand side of - selected command into command-line. - - Color scheme menu - - Selecting name of a color scheme applies it the same way as if ":col- - orscheme " was executed on the command-line. - - Commands menu - - Selecting command executes it with empty arguments (%a). - - dd on a command to remove. - - Marks menu - - Selecting mark navigates to it. - - dd on a mark to remove it. - - Bookmarks menu - - Selecting a bookmark navigates to it. - - Type dd on a bookmark to remove it. - - gf and e also work to make it more convenient to bookmark files. - - Trash (:lstrash) menu - - r on a file name to restore it from trash. - - dd deletes file under the cursor. - - Trashes (:trashes) menu - - dd empties selected trash in background. - - Directory history and Trashes menus - - Selecting directory name will change directory of the current view as - if :cd command was used. - - Directory stack menu - - Selecting directory name will rotate stack to put selected directory - pair at the top of the stack. - - File (:file) menu - - Commands from vifmrc or typed in command-line are displayed above empty - line. All commands below empty line are from .desktop files. - - c leaves menu preserving file selection and inserts command after :! in - command-line mode. - - Grep, find, locate, bookmarks and user menu with navigation (%M macro) - - gf - navigate previously active view to currently selected item. - Leaves menu mode except for grep menu. Pressing Enter key has the same - effect. - - e - open selected path in the editor, stays in menu mode. - - c - leave menu preserving file selection and insert file name after :! - in command-line mode. - - User menu without navigation (%m macro) - - c leaves menu preserving file selection and inserts whole line after :! - in command-line mode. - - Grep menu - - Selecting file (via Enter or l key) opens it in editor set by 'vicmd' - at given line number. Menu won't be closed automatically to allow - viewing more than one result. - - See above for "gf" and "e" keys description. - - Command-line history menu - - Selecting an item executes it as command-line command, search query or - local filter. - - c leaves menu preserving file selection and inserts line into command- - line of appropriate kind. - - Volumes menu - - Selecting a drive navigates previously active pane to the root of that - drive. - - Fileinfo dialog - - Enter, q - close dialog - - Sort dialog - - h, Space - switch ascending/descending. - q - close dialog - - One shortcut per sorting key (see the dialog). - - Attributes (permissions or properties) dialog - - h, Space - check/uncheck. - q - close dialog - - Item states: - - - * - checked flag. - - - X - means that it has different value for files in selection. - - - d (*nix only) - (only for execute flags) means u-x+X, g-x+X or o-x+X - argument for the chmod program. If you're not on OS X and want to - remove execute permission bit from all files, but preserve it for di- - rectories, set all execute flags to 'd' and check 'Set Recursively' - flag. - - Jobs menu - - dd requests cancellation of job under cursor. The job won't be removed - from the list, but marked as being cancelled (if cancellation was suc- - cessfully requested). A message will pop up if the job has already - stopped. Note that on Windows cancelling external programs like this - might not work, because their parent shell doesn't have any windows. - - e key displays errors of selected job if any were collected. They are - displayed in a new menu, but you can get back to jobs menu by pressing - h. - - - Undolist menu - - r - reset undo position to group under the cursor. - - - Media menu - - Selecting a device either mounts (if it wasn't mounted yet) or navi- - gates to its first mount point. - - Selecting a mount point navigates to it. - - Selecting "not mounted" line causes mounting. - - Selecting any other line does nothing. - - r - reload the list. - - m - mount/unmount device (cursor should be positioned on lines under - device information). - - [ - put cursor on the previous device. - - ] - put cursor on the next device. - - -Custom views - Definition - - Normally file views contain list of files from a single directory, but - sometimes it's useful to populate them with list of files that do not - belong to the same directory, which is what custom views are for. - - Presentation - - Custom views are still related to directory they were in before custom - list was loaded. Path to that directory (original directory) can be - seen in the title of a custom view. - - Files in same directory have to be named differently, this doesn't hold - for custom views thus seeing just file names might be rather confusing. - In order to give an idea where files come from and when possible, rela- - tive paths to original directory of the view is displayed, otherwise - full path is used instead. - - Custom views normally don't contain any inexistent files. - - Navigation - - Custom views have some differences related to navigation in regular - views. - - gf - acts similar to gf on symbolic links and navigates to the file at - its real - location. - - h - go to closes parent node in tree view, otherwise return to the - original directory. - - gh - return to the original directory. - - Opening ".." entry also causes return to the original directory. - - History - - Custom list exists only while it's visible, once left one can't return - to it, so there is no appearances of it in any history. - - Filters - - Only local filter affects content of the view. This is intentional, - presumably if one loads list, precisely that list should be displayed - (except for inexistent paths, which are ignored). - - Search - - Although directory names are visible in listing, they are not search- - able. Only file names are taken into account (might be changed in fu- - ture, searching whole lines seems quite reasonable). - - Sorting - - Contrary to search sorting by name works on whole visible part of file - path. - - Highlight - - Whole file name is highlighted as one entity, even if there are direc- - tory elements. - - Updates - - Reloads can occur, though they are not automatic due to files being - scattered among different places. On a reload, inexistent files are - removed and meta-data of all other files is updated. - - Once custom view forgets about the file, it won't add it back even if - it's created again. So not seeing file previously affected by an oper- - ation, which was undone is normal. - - Operations - - All operations that add files are forbidden for custom views. For ex- - ample, moving/copying/putting files into a custom view doesn't work, - because it doesn't make much sense. - - On the other hand, operations that use files of a custom view as a - source (e.g. yanking, copying, moving file from custom view, deletion) - and operations that modify names are all allowed. - -Compare views - Kinds - - :compare can produce four different results depending on arguments: - - single compare view (ofone and either listall or listdups); - - single custom view (ofone and listunique); - - two compare views (ofboth and either listall or listdups); - - two custom views (ofboth and listunique). - - The first two display files of one file system tree. Here duplicates - are files that have at least one copy in the same tree. The other two - kinds of operation compare two trees, in which duplicates are files - that are found in both trees. - - Lists of unique files are presented in custom views because there is no - file grouping to preserve as all file ids are guaranteed to be dis- - tinct. - - Creation - - Arguments passed to :compare form four categories each with its own - prefix and is responsible for particular property of operation. - - Which files to compare: - - ofboth - compares files of two panes against each other; - - ofone - compares files of the same directory. - - How files are compared: - - byname - by their name only; - - bysize - only by their size; - - bycontents - by data they contain (combination of size and hash of - small chunk of contents is used as first approximation, so don't worry - too much about large files). - - Which files to display: - - listall - all files; - - listunique - unique files only; - - listdups - only duplicated files. - - How results are grouped (has no effect if "ofone" specified): - - groupids - files considered identical are always adjacent in out- - put; - - grouppaths - file system ordering is preferred (this also enables - displaying identically named files as mismatches). - - Which files to omit: - - skipempty - ignore empty files. - - Each argument can appear multiple times, the rightmost one of the group - is considered. Arguments alter default behaviour instead of substitut- - ing it. - - Examples - - The defaults corresponds to probably the most common use case of com- - paring files in two trees with grouping by paths, so the following are - equivalent: - - :compare - :compare bycontents grouppaths - :compare bycontents listall ofboth grouppaths - - Another use case is to find duplicates in the current sub-tree: - - :compare listdups ofone - - The following command lists files that are unique to each pane: - - :compare listunique - - Look - - The view can't switch to ls-like view as it's unable to display diff- - like data. - - Comparison views have second column displaying id of the file, files - with same id are considered to be equal. The view columns configura- - tion is predefined. - - Behaviour - - When two views are being compared against each other the following - changes to the regular behaviour apply: - - views are scrolled synchronously (as if 'scrollbind' was set); - - views' cursors are synchronized; - - local filtering is disabled (its results wouldn't be meaningful); - - zd excludes groups of adjacent identical files, 1zd gives usual be- - haviour; - - sorting is permanently disabled (ordering is fixed); - - removed files hide their counter pairs; - - exiting one of the views terminates the other immediately; - - renaming files isn't blocked, but isn't taken into account and might - require regeneration of comparison; - - entries which indicate absence of equivalent file have empty names - and can be matched as such; - - when unique files of both views are listed custom views can be - empty, this absence of unique files is stated clearly. - - One compare view has similar properties (those that are applicable for - single pane). - - Files are gathered in this way: - - recursively starting at current location of the view; - - dot files are excluded if view hides them at the moment of compari- - son; - - directories are not taken into account; - - symbolic links to directories are ignored. - -Startup - On startup vifm determines several variables that are used during exe- - cution. They are determined in the order they appear below. - - On *nix systems $HOME is normally present and used as is. On Windows - systems vifm tries to find correct home directory in the following or- - der: - - $HOME variable; - - $USERPROFILE variable (on Windows only); - - a combination of $HOMEDRIVE and $HOMEPATH variables (on Windows - only). - - vifm tries to find correct configuration directory by checking the fol- - lowing places: - - $VIFM variable; - - parent directory of the executable file (on Windows only); - - $HOME/.vifm directory; - - $APPDATA/Vifm directory (on Windows only); - - $XDG_CONFIG_HOME/vifm directory; - - $HOME/.config/vifm directory. - - vifm tries to find correct configuration file by checking the following - places: - - $MYVIFMRC variable; - - vifmrc in parent directory of the executable file (on Windows only); - - $VIFM/vifmrc file. - -Configure - See "Startup" section above for the explanations on $VIFM and $MYV- - IFMRC. - - The vifmrc file contains commands that will be executed on vifm - startup. There are two such files: global and local. Global one is at - {prefix}/etc/vifm/vifmrc, see $MYVIFMRC variable description for the - search algorithm used to find local vifmrc. Global vifmrc is loaded - before the local one, so that the later one can redefine anything con- - figured globally. - - Use vifmrc to set settings, mappings, filetypes etc. To use multi line - commands precede each next line with a slash (whitespace before slash - is ignored, but all spaces at the end of the lines are saved). For ex- - ample: - - set - \smartcase - - equals "setsmartcase". When - - set - \ smartcase - - equals "set smartcase". - - The $VIFM/vifminfo file contains generic state of the application. You - can control what is stored in vifminfo by setting 'vifminfo' option. - Vifm always writes this file on exit unless 'vifminfo' option is empty. - Marks, bookmarks, commands, histories, filetypes, fileviewers and reg- - isters in the file are merged with vifm configuration (which has bigger - priority). - - Generally, runtime configuration has bigger priority during merging, - but there are some exceptions: - - - directory stack stored in the file is not overwritten unless some- - thing is changed in vifm instance that performs merge; - - - each mark or bookmark is marked with a timestamp, so that newer - value is not overwritten by older one, thus no matter from where it - comes, the newer one wins; - - - all histories are marked with timestamps on storing, this means - that last instance to quit puts its elements on top of the list; - - - tabs are merged only if both current instance and stored state con- - tain exactly one tab of any kind. - - The $VIFM/scripts directory can contain shell scripts. vifm modifies - its PATH environment variable to let user run those scripts without - specifying full path. All subdirectories of the $VIFM/scripts will be - added to PATH too. Script in a subdirectory overlaps script with the - same name in all its parent directories. - - The $VIFM/colors/ and {prefix}/etc/vifm/colors/ directories contain - color schemes. Available color schemes are searched in that order, so - on name conflict the one in $VIFM/colors/ wins. - - Each color scheme should have ".vifm" extension. This wasn't the case - before and for this reason the following rules apply during lookup: - - - if there is no file with .vifm extension, all regular files are - listed; - - - otherwise only files with .vifm extension are listed (with the ex- - tension being truncated). - -Sessions - Sessions provide a way to have multiple persistent runtime configura- - tions. Think of them as second-level vifminfo files in addition to the - first-level one used by all sessions. In other words, they aren't a - replacement for vifminfo file that exists without sessions, but an ad- - dition to it. One can empty 'vifminfo' option and rely solely on ses- - sions, but in practice one might want to share some state among in- - stances in different sessions or have an "out-of-sessions" state for - tasks that don't deserve a session of their own. - - This leads to a two-level structure where data in session files has - higher priority than data in vifminfo files (where this makes sense) - following the same rules that merging of vifminfo file obeys. In addi- - tion to that, history items from session files are never ordered before - history items from vifminfo file. - - Format - - Sessions have the format of vifminfo files, they do not consist of se- - quence of command-line commands and are not meant to be sourced via - :source command. - - Storage and naming - - `$VIFM/sessions/` directory serves as a storage for sessions. Conse- - quently names should be valid filenames. The structure of the storage - is flat meaning that there are no subdirectories, that's why names of - sessions can't contain slashes. - - Usage model - - Contrary to Vim, vifm automates basic management of sessions. You can - start, switch, stop or delete a session using builtin means. - - Current session is saved at the same time vifminfo is saved (on normal - exits or explicitly on :write command) and right before switching to - another session. To avoid saving in those cases use :session command - to detach (without saving) from a session before proceeding. - - Related topics - - Commands: :session, :delsession - Options: 'sessionoptions' - Variables: v:session - -Automatic FUSE mounts - vifm has a builtin support of automated FUSE file system mounts. It is - implemented using file associations mechanism. To enable automated - mounts, one needs to use a specially formatted program line in filetype - or filextype commands. These use special macros, which differ from - macros in commands unrelated to FUSE. Currently three formats are sup- - ported: - - 1) FUSE_MOUNT This format should be used in case when all information - needed for mounting all files of a particular type is the same. E.g. - mounting of tar files don't require any file specific options. - - Format line: - FUSE_MOUNT|mounter %SOURCE_FILE %DESTINATION_DIR [%FOREGROUND] - - Example filetype command: - - :filetype FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR - - 2) FUSE_MOUNT2 This format allows one to use specially formatted files - to perform mounting and is useful for mounting remotes, for example re- - mote file systems over ftp or ssh. - - Format line: - FUSE_MOUNT2|mounter %PARAM %DESTINATION_DIR [%FOREGROUND] - - Example filetype command: - - :filetype *.ssh FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR - - Example file content: - - root@127.0.0.1:/ - - 3) FUSE_MOUNT3 - - This format is equivalent to FUSE_MOUNT, but omits unmounting. It is - useful for cases, when unmounting isn't needed, like when using AVFS. - - Example :filetype command: - - :filetype *.tar,*.tar.bz2,*.tbz2,*.tgz,*.tar.gz,*.tar.xz,*.txz,*.deb - \ {Mount with avfs} - \ FUSE_MOUNT3|mount-avfs %DESTINATION_DIR %SOURCE_FILE - - Example `mount-avfs` helper script: - - #!/bin/sh - - dest=$1 - file=$2 - - rmdir "$dest" - ln -s "$HOME/.avfs$file#/" "$dest" - - All % macros are expanded by vifm at runtime and have the following - meaning: - - %SOURCE_FILE is replaced by full path to selected file; - - %DESTINATION_DIR is replaced by full path to mount directory, which - is created by vifm basing on the value of 'fusehome' option; - - %PARAM value is filled from the first line of file (whole line), - though in the future it can be changed to whole file content; - - %FOREGROUND means that you want to run mount command as a regular - command (required to be able to provide input for communication with - mounter in interactive way). - - %FOREGROUND is an optional macro. Other macros are not mandatory, but - mount commands likely won't work without them. - - %CLEAR is obsolete name of %FOREGROUND, which is still supported, but - might be removed in future. Its use is discouraged. - - Unlike macros elsewhere, these are recognized only if they appear at - the end of a command or are followed by a space. There is no way to - escape % either. These are historical limitations, which might be ad- - dressed in the future. - - The mounted FUSE file systems will be automatically unmounted in two - cases: - - - when vifm quits (with ZZ, :q, etc. or when killed by signal); - - - when you explicitly leave mount point going up to its parent direc- - tory (with h, Enter on "../" or ":cd ..") and other pane is not in - the same directory or its child directories. - -View look - vifm supports displaying of file list view in two different ways: - - - in a table mode, when multiple columns can be set using 'view- - columns' option (see "Column view" section below for details); - - - in a multicolumn list manner which looks almost like `ls -x` com- - mand output (see "ls-like view" section below for details). - - The look is local for each view and can be chosen by changing value of - the 'lsview' boolean option. - - Depending on view look some of keys change their meaning to allow more - natural cursor moving. This concerns mainly h, j, k, l and other simi- - lar navigation keys. - - Also some of options can be ignored if they don't affect view display- - ing in selected look. For example value of 'viewcolumns' when 'lsview' - is set. - -ls-like view - When this view look is enabled by setting 'lsview' option on, vifm will - display files in multiple columns. Number of columns depends on the - length of the longest file name present in current directory of the - view. Whole file list is automatically reflowed on directory change, - terminal or view resize. - - View looks close to output of `ls -x` command, so files are listed left - to right in rows. - - In this mode file manipulation commands (e.g. d) don't work line-wise - like they do in Vim, since such operations would be uncommon for file - manipulation tasks. Thus, for example, dd will remove only current - file. - - By default the view is filled by lines, 'lsoptions' can be used to get - filling by columns. - - Note that tree-view and compare view inhibit ls-like view. - -Column view - View columns are described by a comma-separated list of column descrip- - tions, each of which has the following format - [ '-' ] [ fw ( [ '.' tw ] | '%' ) ] '{' type '}' '.'{0,3} - where fw stands for full width and tw stands for text width. - - So it basically consists of four parts: - 1. Optional alignment specifier - 2. Optional width specifier - 3. Mandatory column name - 4. Optional cropping specifier - - Alignment specifier - - It's an optional minus or asterisk sign as the first symbol of the - string. - - Specifies type of text alignment within a column. Three types are sup- - ported: - - - left align - - set viewcolumns=-{name} - - - right align (default) - - set viewcolumns={name} - - - dynamic align - - It's like left alignment, but when the text is bigger than the col- - umn, the alignment is made at the right (so the part of the field is - always visible). - - set viewcolumns=*{name} - - Width specifier - - It's a number followed by a percent sign, two numbers (second one - should be less than or equal to the first one) separated with a dot or - a single number. - - Specifies column width and its units. There are three size types: - - - absolute size - column width is specified in characters - - set viewcolumns=-100{name},20.15{ext} - - results in two columns with lengths of 100 and 20 and a reserved - space of five characters on the left of second column. - - - relative (percent) size - column width is specified in percents of - view width - - set viewcolumns=-80%{name},15%{ext},5%{mtime} - - results in three columns with lengths of 80/100, 15/100 and 5/100 of - view width. - - - auto size (default) - column width is automatically determined - - set viewcolumns=-{name},{ext},{mtime} - - results in three columns with length of one third of view width. - There is no size adjustment to content, since it will slow down ren- - dering. - - Columns of different sizing types can be freely mixed in one view. - Though sometimes some of columns can be seen partly or be completely - invisible if there is not enough space to display them. - - Column name - - This is just a sort key surrounded with curly braces or {root}, e.g. - - {name},{ext},{mtime} - - {name} and {iname} keys are the same and present both for consistency - with 'sort' option. - - Following keys don't have corresponding sorting keys: - - - {root} - display name without extension (as a complement for - {ext}) - - - {fileroot} - display name without extension for anything except for - directories and symbolic links to directories (as a complement for - {fileext}) - - Empty curly braces ({}) are replaced with the default secondary column - for primary sort key. So after the next command view will be displayed - almost as if 'viewcolumns' is empty, but adding ellipsis for long file - names: - - set viewcolumns=-{name}..,6{}. - - Cropping specifier - - It's from one to three dots after closing curly brace in column format. - - Specifies type of text truncation if it doesn't fit in the column. - Currently three types are supported: - - - truncation - text is truncated - - set viewcolumns=-{name}. - - results in truncation of names that are too long too fit in the - view. - - - adding of ellipsis - ellipsis on the left or right are added when - needed - - set viewcolumns=-{name}.. - - results in that ellipsis are added at the end of too long file - names. - - - none (default) - text can pass column boundaries - - set viewcolumns=-{name}...,{ext} - - results in that long file names can partially be written on the ext - column. - -Color schemes - The color schemes in vifm can be applied in two different ways: - - - as the primary color scheme; - - - as local to a pane color scheme. - - Both types are set using :colorscheme command, but of different forms: - - - :colorscheme color_scheme_name - for the primary color scheme; - - - :colorscheme color_scheme_name directory - for local color schemes. - - Look of different parts of the TUI (Text User Interface) is determined - in this way: - - - Border, TabLine, TabLineSel, TopLineSel, TopLine, CmdLine, Er- - rorMsg, StatusLine, JobLine, SuggestBox and WildMenu are always de- - termined by the primary color scheme; - - - CurrLine, Selected, Directory, Link, BrokenLink, Socket, Device, - Executable, Fifo, CmpMismatch, Win, AuxWin and OtherWin are deter- - mined by primary color scheme and a set of local color schemes, - which can be empty. - - There might be a set of local color schemes because they are structured - hierarchically according to file system structure. For example, having - the following piece of file system: - - ~ - `-- bin - | - `-- my - - Two color schemes: - - # ~/.vifm/colors/for_bin - highlight Win cterm=none ctermfg=white ctermbg=red - highlight CurrLine cterm=none ctermfg=red ctermbg=black - - # ~/.vifm/colors/for_bin_my - highlight CurrLine cterm=none ctermfg=green ctermbg=black - - And these three commands in the vifmrc file: - - colorscheme Default - colorscheme for_bin ~/bin - colorscheme for_bin_my ~/bin/my - - File list will look in the following way for each level: - - - ~/ - Default color scheme - black background - cursor with blue background - - - ~/bin/ - mix of Default and for_bin color schemes - red background - cursor with black background and red foreground - - - ~/bin/my/ - mix of Default, for_bin and for_bin_my color schemes - red background - cursor with black background and green foreground - -Trash directory - vifm has support of trash directory, which is used as temporary storage - for deleted files or files that were cut. Using trash is controlled by - the 'trash' option, and exact path to the trash can be set with - 'trashdir' option. Trash directory in vifm differs from the system- - wide one by default, because of possible incompatibilities of storing - deleted files among different file managers. But one can set - 'trashdir' to "~/.local/share/Trash" to use a "standard" trash direc- - tory. - - There are two scenarios of using trash in vifm: - - 1. As a place for storing files that were cut by "d" and may be in- - serted to some other place in file system. - - 2. As a storage of files, that are deleted but not purged yet. - - The first scenario uses deletion ("d") operations to put files to trash - and put ("p") operations to restore files from trash directory. Note - that such operations move files to and from trash directory, which can - be long term operations in case of different partitions or remote - drives mounted locally. - - The second scenario uses deletion ("d") operations for moving files to - trash directory and :empty command-line command to purge all previously - deleted files. - - Deletion and put operations depend on registers, which can point to - files in trash directory. Normally, there are no nonexistent files in - registers, but vifm doesn't keep track of modifications under trash di- - rectory, so one shouldn't expect value of registers to be absolutely - correct if trash directory was modified not by operation that are meant - for it. But this won't lead to any issues with operations, since they - ignore nonexistent files. - -Client-Server - vifm supports remote execution of command-line mode commands, remote - changing of directories and expression evaluation. This is possible - using --remote and --remote-expr command-line arguments. - - To execute a command remotely combine --remote argument with -c or +. For example: - - vifm --remote -c 'cd /' - vifm --remote '+cd /' - - To change directory not using command-line mode commands one can spec- - ify paths right after --remote argument, like this: - - vifm --remote / - vifm --remote ~ - vifm --remote /usr/bin /tmp - - Evaluating expression remotely might be useful to query information - about an instance, for example its location: - - vifm --remote-expr 'expand("%d")' - - If there are several running instances, the target can be specified - with --server-name option (otherwise, the first one lexicographically - is used): - - vifm --server-name work --remote ~/work/project - - List of names of running instances can be obtained via --server-list - option. Name of the current one is available via v:servername. - - - v:servername - server name of the running vifm instance. Empty if client- - server feature is disabled. - -Plugin - Plugin for using vifm in vim as a file selector. - - Commands: - - :EditVifm select a file or files to open in the current buffer. - :Vifm alias for :EditVifm. - :SplitVifm split buffer and select a file or files to open. - :VsplitVifm vertically split buffer and select a file or files to - open. - :DiffVifm select a file or files to compare to the current file - with - :vert diffsplit. - :TabVifm select a file or files to open in tabs. - - Each command accepts up to two arguments: left pane directory and right - pane directory. After arguments are checked, vifm process is spawned - in a special "file-picker" mode. To pick files just open them either - by pressing l, i or Enter keys, or by running :edit command. If no - files are selected, file under the cursor is opened, otherwise whole - selection is passed to the plugin and opened in vim. - - The plugin have only two settings. It's a string variable named - g:vifm_term to let user specify command to run GUI terminal. By de- - fault it's equal to 'xterm -e'. And another string variable named - g:vifm_exec, which equals "vifm" by default and specifies path to - vifm's executable. To pass arguments to vifm use g:vifm_exec_args, - which is empty by default. - - To use the plugin copy the vifm.vim file to either the system wide - vim/plugin directory or into ~/.vim/plugin. - - If you would prefer not to use the plugin and it is in the system wide - plugin directory add - - let loaded_vifm=1 - - to your ~/.vimrc file. - -Reserved - The following command names are reserved and shouldn't be used for user - commands. - - g[lobal] - v[global] - -ENVIRONMENT - VIFM Points to main configuration directory (usually ~/.vifm/). - - MYVIFMRC - Points to main configuration file (usually ~/.vifm/vifmrc). - - These environment variables are valid inside vifm and also can be used - to configure it by setting some of them before running vifm. - - When $MYVIFMRC isn't set, it's made as $VIFM/vifmrc (exception for Win- - dows: vifmrc in the same directory as vifm.exe has higher priority than - $VIFM/vifmrc). - - See "Startup" section above for more details. - - VIFM_FUSE_FILE - On execution of external commands this variable is set to the - full path of file used to initiate FUSE mount of the closest - mount point from current pane's directory up. It's not set when - outside FUSE mount point. When vifm is used inside terminal - multiplexer, it tries to set this variable as well (it doesn't - work this way on its own). - -SEE ALSO - vifm-convert-dircolors(1), vifm-pause(1) - - Website: https://vifm.info/ - Wiki: https://wiki.vifm.info/ - - Esperanto translation of the documentation by Sebastian Cyprych: - http://cyprych.neostrada.pl/tekstoj/komputiloj/vifm-help.eo.html - -AUTHOR - Vifm was written by ksteen - And currently is developed by xaizek - - - -vifm 0.11 September 24, 2020 VIFM(1) diff --git a/.config/vifm/vifminfo.json b/.config/vifm/vifminfo.json deleted file mode 100644 index fdd98a4..0000000 --- a/.config/vifm/vifminfo.json +++ /dev/null @@ -1 +0,0 @@ -{"gtabs":[{"panes":[{"ptabs":[{}]},{"ptabs":[{}]}]}],"trash":[{"trashed":"/tmp/.vifm-Trash-1000/000_lagrange","original":"/tmp/aurutils-1000/view.EqoSDzH/lagrange"}]} \ No newline at end of file diff --git a/.config/vifm/vifmrc b/.config/vifm/vifmrc deleted file mode 100644 index 0af31e7..0000000 --- a/.config/vifm/vifmrc +++ /dev/null @@ -1,503 +0,0 @@ -" vim: filetype=vifm : -" Sample configuration file for vifm (last updated: 9 September, 2020) -" You can edit this file by hand. -" The " character at the beginning of a line comments out the line. -" Blank lines are ignored. -" The basic format for each item is shown with an example. - -" ------------------------------------------------------------------------------ - -" Command used to edit files in various contexts. The default is vim. -" If you would like to use another vi clone such as Elvis or Vile -" you will need to change this setting. - -set vicmd=vim -" set vicmd=elvis\ -G\ termcap -" set vicmd=vile - -" This makes vifm perform file operations on its own instead of relying on -" standard utilities like `cp`. While using `cp` and alike is a more universal -" solution, it's also much slower when processing large amounts of files and -" doesn't support progress measuring. - -set syscalls - -" Trash Directory -" The default is to move files that are deleted with dd or :d to -" the trash directory. If you change this you will not be able to move -" files by deleting them and then using p to put the file in the new location. -" I recommend not changing this until you are familiar with vifm. -" This probably shouldn't be an option. - -set trash - -" This is how many directories to store in the directory history. - -set history=100 - -" Automatically resolve symbolic links on l or Enter. - -set nofollowlinks - -" With this option turned on you can run partially entered commands with -" unambiguous beginning using :! (e.g. :!Te instead of :!Terminal or :!Te). - -" set fastrun - -" Natural sort of (version) numbers within text. - -set sortnumbers - -" Maximum number of changes that can be undone. - -set undolevels=100 - -" Use Vim's format of help file (has highlighting and "hyperlinks"). -" If you would rather use a plain text help file set novimhelp. - -set vimhelp - -" If you would like to run an executable file when you -" press Enter, l or Right Arrow, set this. - -set norunexec - -" List of color schemes to try (picks the first one supported by the terminal) - -colorscheme gruvbox - -" Format for displaying time in file list. For example: -" TIME_STAMP_FORMAT=%m/%d-%H:%M -" See man date or man strftime for details. - -set timefmt=%m/%d\ %H:%M - -" Show list of matches on tab completion in command-line mode - -set wildmenu - -" Display completions in a form of popup with descriptions of the matches - -set wildstyle=popup - -" Display suggestions in normal, visual and view modes for keys, marks and -" registers (at most 5 files). In other view, when available. - -set suggestoptions=normal,visual,view,otherpane,keys,marks,registers - -" Ignore case in search patterns unless it contains at least one uppercase -" letter - -set ignorecase -set smartcase - -" Don't highlight search results automatically - -set nohlsearch - -" Use increment searching (search while typing) -set incsearch - -" Try to leave some space from cursor to upper/lower border in lists - -set scrolloff=4 - -" Don't do too many requests to slow file systems - -if !has('win') - set slowfs=curlftpfs -endif - -" Set custom status line look - -set statusline=" Hint: %z%= %A %10u:%-7g %15s %20d " - -" ------------------------------------------------------------------------------ - -" :mark mark /full/directory/path [filename] - -mark b ~/bin/ -mark h ~/ - -" ------------------------------------------------------------------------------ - -" :com[mand][!] command_name action -" The following macros can be used in a command -" %a is replaced with the user arguments. -" %c the current file under the cursor. -" %C the current file under the cursor in the other directory. -" %f the current selected file, or files. -" %F the current selected file, or files in the other directory. -" %b same as %f %F. -" %d the current directory name. -" %D the other window directory name. -" %m run the command in a menu window - -command! df df -h %m 2> /dev/null -command! diff vim -d %f %F -command! zip zip -r %f.zip %f -command! run !! ./%f -command! make !!make %a -command! mkcd :mkdir %a | cd %a -command! vgrep vim "+grep %a" -command! reload :write | restart full - -" ------------------------------------------------------------------------------ - -" The file type is for the default programs to be used with -" a file extension. -" :filetype pattern1,pattern2 defaultprogram,program2 -" :fileviewer pattern1,pattern2 consoleviewer -" The other programs for the file type can be accessed with the :file command -" The command macros like %f, %F, %d, %D may be used in the commands. -" The %a macro is ignored. To use a % you must put %%. - -" For automated FUSE mounts, you must register an extension with :file[x]type -" in one of following formats: -" -" :filetype extensions FUSE_MOUNT|some_mount_command using %SOURCE_FILE and %DESTINATION_DIR variables -" %SOURCE_FILE and %DESTINATION_DIR are filled in by vifm at runtime. -" A sample line might look like this: -" :filetype *.zip,*.jar,*.war,*.ear FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR -" -" :filetype extensions FUSE_MOUNT2|some_mount_command using %PARAM and %DESTINATION_DIR variables -" %PARAM and %DESTINATION_DIR are filled in by vifm at runtime. -" A sample line might look like this: -" :filetype *.ssh FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR -" %PARAM value is filled from the first line of file (whole line). -" Example first line for SshMount filetype: root@127.0.0.1:/ -" -" You can also add %CLEAR if you want to clear screen before running FUSE -" program. - -" Pdf -filextype {*.pdf}, zathura %c %i &, apvlv %c, xpdf %c -fileviewer {*.pdf}, pdftotext -nopgbrk %c - - -" PostScript -filextype {*.ps,*.eps,*.ps.gz}, - \ {View in zathura} - \ zathura %f, - \ {View in gv} - \ gv %c %i &, - -" Djvu -filextype {*.djvu}, - \ {View in zathura} - \ zathura %f, - \ {View in apvlv} - \ apvlv %f, - -" Audio -filetype {*.wav,*.mp3,*.flac,*.m4a,*.wma,*.ape,*.ac3,*.og[agx],*.spx,*.opus}, - \