commit 34410860d1d6800578d2b46745e9a50eb13ee60a
parent 593c62a5ee27ae8b3f6fdde4916b4d7ec7e883ed
Author: andersuno <anders.hedman01@gmail.com>
Date: Wed, 9 Oct 2019 19:35:53 +0200
Changes to be committed:
new file: .config/bspwm/bspwmrc
new file: .config/compton.conf
new file: .config/dunst/dunstrc
new file: .config/i3/config
new file: .config/neofetch/config.conf
new file: .config/polybar/config
new file: .config/polybar/config.sample
new file: .config/ranger/bookmarks
new file: .config/ranger/commands.py
new file: .config/ranger/commands_full.py
new file: .config/ranger/history
new file: .config/ranger/rc.conf
new file: .config/ranger/rifle.conf
new file: .config/ranger/scope.sh
new file: .config/ranger/tagged
new file: .config/sxhkd/sxhkdrc
new file: .config/terminator/config
new file: .config/vifm/colors/Default.vifm
new file: .config/vifm/scripts/README
new file: .config/vifm/scripts/imgc
new file: .config/vifm/scripts/imgt
new file: .config/vifm/scripts/vifmimg
new file: .config/vifm/scripts/vifmrun
new file: .config/vifm/vifm-help.txt
new file: .config/vifm/vifminfo
new file: .config/vifm/vifmrc
new file: .config/vifm/vifmrc.orig
Diffstat:
27 files changed, 12410 insertions(+), 0 deletions(-)
diff --git a/.config/bspwm/bspwmrc b/.config/bspwm/bspwmrc
@@ -0,0 +1,26 @@
+#! /bin/sh
+
+#systemctl --user start sxhkd.service
+~/Scripts/sxhkd.sh
+~/.fehbg &
+~/Scripts/polybar.sh
+compton &
+
+bspc monitor -d I II III IV V VI VII VIII IX X
+
+bspc config border_width 1
+bspc config window_gap 0
+
+bspc config split_ratio 0.52
+bspc config borderless_monocle true
+bspc config gapless_monocle true
+
+bspc desktop II -l monocle
+
+bspc rule -a Chromium desktop='^2' follow=on
+bspc rule -a Timeshift-gtk state=floating
+
+bspc rule -a Gimp desktop='^8' state=floating follow=on
+bspc rule -a mplayer2 state=floating
+bspc rule -a Kupfer.py focus=on
+bspc rule -a Screenkey manage=off
diff --git a/.config/compton.conf b/.config/compton.conf
@@ -0,0 +1,29 @@
+opacity-rule = [
+ #"10:class_i = 'screenfetch'",
+ #"95:class_g = 'UXTerm' && focused",
+ #"80:class_g = 'UXTerm' && !focused"
+ "85:class_g *?= 'Terminator'",
+ "90:class_g *?= 'surf'",
+ "90:class_g *?= 'chromium'",
+ ];
+
+#################################
+#
+# Fading
+#
+#################################
+
+# Fade windows during opacity changes.
+fading = true;
+# The time between steps in a fade in milliseconds. (default 10).
+fade-delta = 4;
+# Opacity change between steps while fading in. (default 0.028).
+fade-in-step = 0.03;
+# Opacity change between steps while fading out. (default 0.03).
+fade-out-step = 0.03;
+# Fade windows in/out when opening/closing
+# no-fading-openclose = true;
+
+# Specify a list of conditions of windows that should not be faded.
+fade-exclude = [ ];
+
diff --git a/.config/dunst/dunstrc b/.config/dunst/dunstrc
@@ -0,0 +1,258 @@
+[global]
+font = Iosevka Term 11
+
+# Allow a small subset of html markup:
+# <b>bold</b>
+# <i>italic</i>
+# <s>strikethrough</s>
+# <u>underline</u>
+#
+# For a complete reference see
+# <http://developer.gnome.org/pango/stable/PangoMarkupFormat.html>.
+# If markup is not allowed, those tags will be stripped out of the
+# message.
+markup = yes
+plain_text = no
+
+# The format of the message. Possible variables are:
+# %a appname
+# %s summary
+# %b body
+# %i iconname (including its path)
+# %I iconname (without its path)
+# %p progress value if set ([ 0%] to [100%]) or nothing
+# Markup is allowed
+format = "<b>%s</b>\n%b"
+
+# Sort messages by urgency.
+sort = no
+
+# Show how many messages are currently hidden (because of geometry).
+indicate_hidden = yes
+
+# Alignment of message text.
+# Possible values are "left", "center" and "right".
+alignment = center
+
+# The frequency with wich text that is longer than the notification
+# window allows bounces back and forth.
+# This option conflicts with "word_wrap".
+# Set to 0 to disable.
+bounce_freq = 0
+
+# Show age of message if message is older than show_age_threshold
+# seconds.
+# Set to -1 to disable.
+show_age_threshold = 10
+
+# Split notifications into multiple lines if they don't fit into
+# geometry.
+word_wrap = yes
+
+# Ignore newlines '\n' in notifications.
+ignore_newline = no
+
+# Hide duplicate's count and stack them
+stack_duplicates = yes
+hide_duplicates_count = yes
+
+
+# The geometry of the window:
+# [{width}]x{height}[+/-{x}+/-{y}]
+# The geometry of the message window.
+# The height is measured in number of notifications everything else
+# in pixels. If the width is omitted but the height is given
+# ("-geometry x2"), the message window expands over the whole screen
+# (dmenu-like). If width is 0, the window expands to the longest
+# message displayed. A positive x is measured from the left, a
+# negative from the right side of the screen. Y is measured from
+# the top and down respectevly.
+# The width can be negative. In this case the actual width is the
+# screen width minus the width defined in within the geometry option.
+#geometry = "250x50-40+40"
+#geometry = "300x50-15+49"
+geometry = "300x50-15+15"
+
+# Shrink window if it's smaller than the width. Will be ignored if
+# width is 0.
+shrink = no
+
+# The transparency of the window. Range: [0; 100].
+# This option will only work if a compositing windowmanager is
+# present (e.g. xcompmgr, compiz, etc.).
+transparency = 5
+
+# Don't remove messages, if the user is idle (no mouse or keyboard input)
+# for longer than idle_threshold seconds.
+# Set to 0 to disable.
+idle_threshold = 20
+
+# Which monitor should the notifications be displayed on.
+monitor = 0
+
+# Display notification on focused monitor. Possible modes are:
+# mouse: follow mouse pointer
+# keyboard: follow window with keyboard focus
+# none: don't follow anything
+#
+# "keyboard" needs a windowmanager that exports the
+# _NET_ACTIVE_WINDOW property.
+# This should be the case for almost all modern windowmanagers.
+#
+# If this option is set to mouse or keyboard, the monitor option
+# will be ignored.
+follow = none
+
+# Should a notification popped up from history be sticky or timeout
+# as if it would normally do.
+sticky_history = yes
+
+# Maximum amount of notifications kept in history
+history_length = 15
+
+# Display indicators for URLs (U) and actions (A).
+show_indicators = no
+
+# The height of a single line. If the height is smaller than the
+# font height, it will get raised to the font height.
+# This adds empty space above and under the text.
+line_height = 3
+
+# Draw a line of "separatpr_height" pixel height between two
+# notifications.
+# Set to 0 to disable.
+separator_height = 2
+
+# Padding between text and separator.
+padding = 6
+
+# Horizontal padding.
+horizontal_padding = 6
+
+# Define a color for the separator.
+# possible values are:
+# * auto: dunst tries to find a color fitting to the background;
+# * foreground: use the same color as the foreground;
+# * frame: use the same color as the frame;
+# * anything else will be interpreted as a X color.
+separator_color = frame
+
+# Print a notification on startup.
+# This is mainly for error detection, since dbus (re-)starts dunst
+# automatically after a crash.
+startup_notification = false
+
+# dmenu path.
+dmenu = /usr/bin/dmenu -p dunst:
+
+# Browser for opening urls in context menu.
+browser = /usr/bin/firefox -new-tab
+
+# Align icons left/right/off
+icon_position = right
+max_icon_size = 80
+
+# Paths to default icons.
+icon_path = /usr/share/icons/Adwaita/48x48/mimetypes/:/usr/share/icons/Adwaita/48x48/status/:/usr/share/icons/Adwaita/48x48/devices/:/usr/share/icons/Adwaita/48x48/notifications/:/usr/share/icons/Adwaita/48x48/emblems/:/usr/share/icons/Adwaita/48x48/legacy/:/usr/share/icons/hicolor/48x48/apps/
+
+frame_width = 3
+frame_color = "#8EC07C"
+
+[shortcuts]
+
+# Shortcuts are specified as [modifier+][modifier+]...key
+# Available modifiers are "ctrl", "mod1" (the alt-key), "mod2",
+# "mod3" and "mod4" (windows-key).
+# Xev might be helpful to find names for keys.
+
+# Close notification.
+close = ctrl+space
+
+# Close all notifications.
+close_all = ctrl+shift+space
+
+# Redisplay last message(s).
+# On the US keyboard layout "grave" is normally above TAB and left
+# of "1".
+history = ctrl+grave
+
+# Context menu.
+context = ctrl+shift+period
+
+[urgency_low]
+# IMPORTANT: colors have to be defined in quotation marks.
+# Otherwise the "#" and following would be interpreted as a comment.
+frame_color = "#3B7C87"
+foreground = "#3B7C87"
+background = "#191311"
+#background = "#2B313C"
+timeout = 8
+
+[urgency_normal]
+frame_color = "#5B8234"
+foreground = "#5B8234"
+background = "#191311"
+#background = "#2B313C"
+timeout = 8
+
+[urgency_critical]
+frame_color = "#B7472A"
+foreground = "#B7472A"
+background = "#191311"
+#background = "#2B313C"
+timeout = 10
+
+
+# Every section that isn't one of the above is interpreted as a rules to
+# override settings for certain messages.
+# Messages can be matched by "appname", "summary", "body", "icon", "category",
+# "msg_urgency" and you can override the "timeout", "urgency", "foreground",
+# "background", "new_icon" and "format".
+# Shell-like globbing will get expanded.
+#
+# SCRIPTING
+# You can specify a script that gets run when the rule matches by
+# setting the "script" option.
+# The script will be called as follows:
+# script appname summary body icon urgency
+# where urgency can be "LOW", "NORMAL" or "CRITICAL".
+#
+# NOTE: if you don't want a notification to be displayed, set the format
+# to "".
+# NOTE: It might be helpful to run dunst -print in a terminal in order
+# to find fitting options for rules.
+
+#[espeak]
+# summary = "*"
+# script = dunst_espeak.sh
+
+#[script-test]
+# summary = "*script*"
+# script = dunst_test.sh
+
+#[ignore]
+# # This notification will not be displayed
+# summary = "foobar"
+# format = ""
+
+#[signed_on]
+# appname = Pidgin
+# summary = "*signed on*"
+# urgency = low
+#
+#[signed_off]
+# appname = Pidgin
+# summary = *signed off*
+# urgency = low
+#
+#[says]
+# appname = Pidgin
+# summary = *says*
+# urgency = critical
+#
+#[twitter]
+# appname = Pidgin
+# summary = *twitter.com*
+# urgency = normal
+#
+# vim: ft=cfg
diff --git a/.config/i3/config b/.config/i3/config
@@ -0,0 +1,225 @@
+# This file has been auto-generated by i3-config-wizard(1).
+# It will not be overwritten, so edit it as you like.
+#
+# Should you change your keyboard layout some time, delete
+# this file and re-run i3-config-wizard(1).
+#
+
+# i3 config file (v4)
+#
+# Please see https://i3wm.org/docs/userguide.html for a complete reference!
+
+set $mod Mod4
+
+# Font for window titles. Will also be used by the bar unless a different font
+# is used in the bar {} block below.
+font pango:monospace 9
+
+# This font is widely installed, provides lots of unicode glyphs, right-to-left
+# text rendering and scalability on retina/hidpi displays (thanks to pango).
+#font pango:DejaVu Sans Mono 8
+
+# Before i3 v4.8, we used to recommend this one as the default:
+# font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
+# The font above is very space-efficient, that is, it looks good, sharp and
+# clear in small sizes. However, its unicode glyph coverage is limited, the old
+# X core fonts rendering does not support right-to-left and this being a bitmap
+# font, it doesn’t scale on retina/hidpi displays.
+
+# Use Mouse+$mod to drag floating windows to their wanted position
+floating_modifier $mod
+
+# start a terminal
+bindsym $mod+Return exec --no-startup-id i3-sensible-terminal
+bindsym $mod+BackSpace exec --no-startup-id st
+# kill focused window
+bindsym $mod+Shift+q kill
+
+# start dmenu (a program launcher)
+bindsym $mod+d exec --no-startup-id dmenu_run
+# There also is the (new) i3-dmenu-desktop which only displays applications
+# shipping a .desktop file. It is a wrapper around dmenu, so you need that
+# installed.
+# bindsym $mod+d exec --no-startup-id i3-dmenu-desktop
+
+#Workspace names
+#set $ws1 "1:"
+#set $ws2 "2:"
+#set $ws3 "3:"
+#set $ws4 "4:"
+#set $ws5 "5:"
+#set $ws6 "6:"
+#set $ws7 "7:"
+#set $ws8 "8:"
+#set $ws9 "9:"
+#set $ws10 "10:"
+
+#Use xprop
+#class=WM_CLASS(STRING)
+#title=WM_NAME(STRING)
+for_window [class="^.*"] border pixel 1
+for_window [class="Firefox-esr"] border pixel 5
+for_window [class="keepassxc"] floating enable
+for_window [title="Terminator Preferences"] floating enable
+for_window [title="searchbuff"] floating enable, resize set 1300 100, move position 32 30, focus
+assign [class="Chromium"] $ws1
+
+#Gaps
+gaps inner 10
+gaps outer 5
+#gaps horizontal 10
+#gaps vertical 10
+#gaps top 10
+#gaps right 10
+#gaps bottom 10
+#gaps left 10
+
+
+
+# change focus
+bindsym $mod+j focus left
+bindsym $mod+k focus down
+bindsym $mod+l focus up
+bindsym $mod+semicolon focus right
+
+# alternatively, you can use the cursor keys:
+bindsym $mod+Left focus left
+bindsym $mod+Down focus down
+bindsym $mod+Up focus up
+bindsym $mod+Right focus right
+
+# move focused window
+bindsym $mod+Shift+j move left
+bindsym $mod+Shift+k move down
+bindsym $mod+Shift+l move up
+bindsym $mod+Shift+semicolon move right
+
+# alternatively, you can use the cursor keys:
+bindsym $mod+Shift+Left move left
+bindsym $mod+Shift+Down move down
+bindsym $mod+Shift+Up move up
+bindsym $mod+Shift+Right move right
+
+# split in horizontal orientation
+bindsym $mod+h split h
+
+# split in vertical orientation
+bindsym $mod+v split v
+
+# enter fullscreen mode for the focused container
+bindsym $mod+f fullscreen toggle
+
+# change container layout (stacked, tabbed, toggle split)
+bindsym $mod+s layout stacking
+bindsym $mod+w layout tabbed
+bindsym $mod+e layout toggle split
+
+# toggle tiling / floating
+bindsym $mod+Shift+space floating toggle
+
+# change focus between tiling / floating windows
+bindsym $mod+space focus mode_toggle
+
+# focus the parent container
+bindsym $mod+a focus parent
+
+# focus the child container
+#bindsym $mod+d focus child
+
+# Define names for default workspaces for which we configure key bindings later on.
+# We use variables to avoid repeating the names in multiple places.
+set $ws1 "1:"
+set $ws2 "2:"
+set $ws3 "3:"
+set $ws4 "4:"
+set $ws5 "5:"
+set $ws6 "6:"
+set $ws7 "7:"
+set $ws8 "8:"
+set $ws9 "9:"
+set $ws10 "10:"
+
+# switch to workspace
+bindsym $mod+1 workspace $ws1
+bindsym $mod+2 workspace $ws2
+bindsym $mod+3 workspace $ws3
+bindsym $mod+4 workspace $ws4
+bindsym $mod+5 workspace $ws5
+bindsym $mod+6 workspace $ws6
+bindsym $mod+7 workspace $ws7
+bindsym $mod+8 workspace $ws8
+bindsym $mod+9 workspace $ws9
+bindsym $mod+0 workspace $ws10
+
+# move focused container to workspace
+bindsym $mod+Shift+1 move container to workspace $ws1
+bindsym $mod+Shift+2 move container to workspace $ws2
+bindsym $mod+Shift+3 move container to workspace $ws3
+bindsym $mod+Shift+4 move container to workspace $ws4
+bindsym $mod+Shift+5 move container to workspace $ws5
+bindsym $mod+Shift+6 move container to workspace $ws6
+bindsym $mod+Shift+7 move container to workspace $ws7
+bindsym $mod+Shift+8 move container to workspace $ws8
+bindsym $mod+Shift+9 move container to workspace $ws9
+bindsym $mod+Shift+0 move container to workspace $ws10
+
+# reload the configuration file
+bindsym $mod+Shift+c reload
+# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
+bindsym $mod+Shift+r restart
+# exit i3 (logs you out of your X session)
+bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"
+
+# resize window (you can also use the mouse for that)
+mode "resize" {
+ # These bindings trigger as soon as you enter the resize mode
+
+ # Pressing left will shrink the window’s width.
+ # Pressing right will grow the window’s width.
+ # Pressing up will shrink the window’s height.
+ # Pressing down will grow the window’s height.
+ bindsym j resize shrink width 10 px or 10 ppt
+ bindsym k resize grow height 10 px or 10 ppt
+ bindsym l resize shrink height 10 px or 10 ppt
+ bindsym semicolon resize grow width 10 px or 10 ppt
+
+ # same bindings, but for the arrow keys
+ bindsym Left resize shrink width 10 px or 10 ppt
+ bindsym Down resize grow height 10 px or 10 ppt
+ bindsym Up resize shrink height 10 px or 10 ppt
+ bindsym Right resize grow width 10 px or 10 ppt
+
+ # back to normal: Enter or Escape or $mod+r
+ bindsym Return mode "default"
+ bindsym Escape mode "default"
+ bindsym $mod+r mode "default"
+}
+
+bindsym $mod+r mode "resize"
+
+# Start i3bar to display a workspace bar (plus the system information i3status
+# finds out, if available)
+bar {
+ status_command i3status
+}
+
+exec_always --no-startup-id compton
+exec_always --no-startup-id ~/.fehbg
+
+bindsym $mod+i exec --no-startup-id /home/anders/Scripts/.scriptmenu
+#bindsym $mod+o exec --no-startup-id chromium
+bindsym $mod+KP_Enter exec --no-startup-id i3lock-fancy
+bindsym $mod+KP_Add exec --no-startup-id "sudo /home/anders/Scripts/brightup.sh"
+bindsym $mod+KP_Subtract exec --no-startup-id "sudo /home/anders/Scripts/brightdown.sh"
+bindsym XF86MonBrightnessUp exec --no-startup-id "sudo /home/anders/Scripts/brightup.sh"
+bindsym XF86MonBrightnessDown exec --no-startup-id "sudo /home/anders/Scripts/brightdown.sh"
+bindsym XF86AudioRaiseVolume exec --no-startup-id "pactl set-sink-volume 0 +5%"
+bindsym XF86AudioLowerVolume exec --no-startup-id "pactl set-sink-volume 0 -5%"
+bindsym XF86AudioMute exec --no-startup-id "pactl set-sink-mute 0 toggle"
+
+bindsym $mod+p exec --no-startup-id "kpmenu -d /home/anders/.kp/Database.kdbx"
+bindsym $mod+Shift+p exec --no-startup-id "keepassxc"
+
+bindsym $mod+Shift+s exec --no-startup-id "/home/anders/Scripts/surfraw.sh"
+
+#bindsym $mod+ exec --no-startup-id
diff --git a/.config/neofetch/config.conf b/.config/neofetch/config.conf
@@ -0,0 +1,764 @@
+# See this wiki page for more info:
+# https://github.com/dylanaraps/neofetch/wiki/Customizing-Info
+print_info() {
+ info title
+ info underline
+
+ info "OS" distro
+ info "Host" model
+ info "Kernel" kernel
+ info "Uptime" uptime
+ info "Packages" packages
+ info "Shell" shell
+ info "Resolution" resolution
+ info "DE" de
+ info "WM" wm
+ info "WM Theme" wm_theme
+ info "Theme" theme
+ info "Icons" icons
+ info "Terminal" term
+ info "Terminal Font" term_font
+ info "CPU" cpu
+ info "GPU" gpu
+ info "Memory" memory
+
+ # info "GPU Driver" gpu_driver # Linux/macOS only
+ # info "CPU Usage" cpu_usage
+ # info "Disk" disk
+ # info "Battery" battery
+ # info "Font" font
+ # info "Song" song
+ # [[ $player ]] && prin "Music Player" "$player"
+ # info "Local IP" local_ip
+ # info "Public IP" public_ip
+ # info "Users" users
+ # info "Locale" locale # This only works on glibc systems.
+
+ info cols
+}
+
+
+# Kernel
+
+
+# Shorten the output of the kernel function.
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --kernel_shorthand
+# Supports: Everything except *BSDs (except PacBSD and PC-BSD)
+#
+# Example:
+# on: '4.8.9-1-ARCH'
+# off: 'Linux 4.8.9-1-ARCH'
+kernel_shorthand="on"
+
+
+# Distro
+
+
+# Shorten the output of the distro function
+#
+# Default: 'off'
+# Values: 'on', 'off', 'tiny'
+# Flag: --distro_shorthand
+# Supports: Everything except Windows and Haiku
+distro_shorthand="off"
+
+# Show/Hide OS Architecture.
+# Show 'x86_64', 'x86' and etc in 'Distro:' output.
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --os_arch
+#
+# Example:
+# on: 'Arch Linux x86_64'
+# off: 'Arch Linux'
+os_arch="on"
+
+
+# Uptime
+
+
+# Shorten the output of the uptime function
+#
+# Default: 'on'
+# Values: 'on', 'off', 'tiny'
+# Flag: --uptime_shorthand
+#
+# Example:
+# on: '2 days, 10 hours, 3 mins'
+# off: '2 days, 10 hours, 3 minutes'
+# tiny: '2d 10h 3m'
+uptime_shorthand="on"
+
+
+# Memory
+
+
+# Show memory pecentage in output.
+#
+# Default: 'off'
+# Values: 'on', 'off'
+# Flag: --memory_percent
+#
+# Example:
+# on: '1801MiB / 7881MiB (22%)'
+# off: '1801MiB / 7881MiB'
+memory_percent="off"
+
+
+# Packages
+
+
+# Show/Hide Package Manager names.
+#
+# Default: 'tiny'
+# Values: 'on', 'tiny' 'off'
+# Flag: --package_managers
+#
+# Example:
+# on: '998 (pacman), 8 (flatpak), 4 (snap)'
+# tiny: '908 (pacman, flatpak, snap)'
+# off: '908'
+package_managers="on"
+
+
+# Shell
+
+
+# Show the path to $SHELL
+#
+# Default: 'off'
+# Values: 'on', 'off'
+# Flag: --shell_path
+#
+# Example:
+# on: '/bin/bash'
+# off: 'bash'
+shell_path="off"
+
+# Show $SHELL version
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --shell_version
+#
+# Example:
+# on: 'bash 4.4.5'
+# off: 'bash'
+shell_version="on"
+
+
+# CPU
+
+
+# CPU speed type
+#
+# Default: 'bios_limit'
+# Values: 'scaling_cur_freq', 'scaling_min_freq', 'scaling_max_freq', 'bios_limit'.
+# Flag: --speed_type
+# Supports: Linux with 'cpufreq'
+# NOTE: Any file in '/sys/devices/system/cpu/cpu0/cpufreq' can be used as a value.
+speed_type="bios_limit"
+
+# CPU speed shorthand
+#
+# Default: 'off'
+# Values: 'on', 'off'.
+# Flag: --speed_shorthand
+# NOTE: This flag is not supported in systems with CPU speed less than 1 GHz
+#
+# Example:
+# on: 'i7-6500U (4) @ 3.1GHz'
+# off: 'i7-6500U (4) @ 3.100GHz'
+speed_shorthand="off"
+
+# Enable/Disable CPU brand in output.
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --cpu_brand
+#
+# Example:
+# on: 'Intel i7-6500U'
+# off: 'i7-6500U (4)'
+cpu_brand="on"
+
+# CPU Speed
+# Hide/Show CPU speed.
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --cpu_speed
+#
+# Example:
+# on: 'Intel i7-6500U (4) @ 3.1GHz'
+# off: 'Intel i7-6500U (4)'
+cpu_speed="on"
+
+# CPU Cores
+# Display CPU cores in output
+#
+# Default: 'logical'
+# Values: 'logical', 'physical', 'off'
+# Flag: --cpu_cores
+# Support: 'physical' doesn't work on BSD.
+#
+# Example:
+# logical: 'Intel i7-6500U (4) @ 3.1GHz' (All virtual cores)
+# physical: 'Intel i7-6500U (2) @ 3.1GHz' (All physical cores)
+# off: 'Intel i7-6500U @ 3.1GHz'
+cpu_cores="logical"
+
+# CPU Temperature
+# Hide/Show CPU temperature.
+# Note the temperature is added to the regular CPU function.
+#
+# Default: 'off'
+# Values: 'C', 'F', 'off'
+# Flag: --cpu_temp
+# Supports: Linux, BSD
+# NOTE: For FreeBSD and NetBSD-based systems, you'll need to enable
+# coretemp kernel module. This only supports newer Intel processors.
+#
+# Example:
+# C: 'Intel i7-6500U (4) @ 3.1GHz [27.2°C]'
+# F: 'Intel i7-6500U (4) @ 3.1GHz [82.0°F]'
+# off: 'Intel i7-6500U (4) @ 3.1GHz'
+cpu_temp="off"
+
+
+# GPU
+
+
+# Enable/Disable GPU Brand
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --gpu_brand
+#
+# Example:
+# on: 'AMD HD 7950'
+# off: 'HD 7950'
+gpu_brand="on"
+
+# Which GPU to display
+#
+# Default: 'all'
+# Values: 'all', 'dedicated', 'integrated'
+# Flag: --gpu_type
+# Supports: Linux
+#
+# Example:
+# all:
+# GPU1: AMD HD 7950
+# GPU2: Intel Integrated Graphics
+#
+# dedicated:
+# GPU1: AMD HD 7950
+#
+# integrated:
+# GPU1: Intel Integrated Graphics
+gpu_type="all"
+
+
+# Resolution
+
+
+# Display refresh rate next to each monitor
+# Default: 'off'
+# Values: 'on', 'off'
+# Flag: --refresh_rate
+# Supports: Doesn't work on Windows.
+#
+# Example:
+# on: '1920x1080 @ 60Hz'
+# off: '1920x1080'
+refresh_rate="off"
+
+
+# Gtk Theme / Icons / Font
+
+
+# Shorten output of GTK Theme / Icons / Font
+#
+# Default: 'off'
+# Values: 'on', 'off'
+# Flag: --gtk_shorthand
+#
+# Example:
+# on: 'Numix, Adwaita'
+# off: 'Numix [GTK2], Adwaita [GTK3]'
+gtk_shorthand="off"
+
+
+# Enable/Disable gtk2 Theme / Icons / Font
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --gtk2
+#
+# Example:
+# on: 'Numix [GTK2], Adwaita [GTK3]'
+# off: 'Adwaita [GTK3]'
+gtk2="on"
+
+# Enable/Disable gtk3 Theme / Icons / Font
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --gtk3
+#
+# Example:
+# on: 'Numix [GTK2], Adwaita [GTK3]'
+# off: 'Numix [GTK2]'
+gtk3="on"
+
+
+# IP Address
+
+
+# Website to ping for the public IP
+#
+# Default: 'http://ident.me'
+# Values: 'url'
+# Flag: --ip_host
+public_ip_host="http://ident.me"
+
+# Public IP timeout.
+#
+# Default: '2'
+# Values: 'int'
+# Flag: --ip_timeout
+public_ip_timeout=2
+
+
+# Disk
+
+
+# Which disks to display.
+# The values can be any /dev/sdXX, mount point or directory.
+# NOTE: By default we only show the disk info for '/'.
+#
+# Default: '/'
+# Values: '/', '/dev/sdXX', '/path/to/drive'.
+# Flag: --disk_show
+#
+# Example:
+# disk_show=('/' '/dev/sdb1'):
+# 'Disk (/): 74G / 118G (66%)'
+# 'Disk (/mnt/Videos): 823G / 893G (93%)'
+#
+# disk_show=('/'):
+# 'Disk (/): 74G / 118G (66%)'
+#
+disk_show=('/')
+
+# Disk subtitle.
+# What to append to the Disk subtitle.
+#
+# Default: 'mount'
+# Values: 'mount', 'name', 'dir'
+# Flag: --disk_subtitle
+#
+# Example:
+# name: 'Disk (/dev/sda1): 74G / 118G (66%)'
+# 'Disk (/dev/sdb2): 74G / 118G (66%)'
+#
+# mount: 'Disk (/): 74G / 118G (66%)'
+# 'Disk (/mnt/Local Disk): 74G / 118G (66%)'
+# 'Disk (/mnt/Videos): 74G / 118G (66%)'
+#
+# dir: 'Disk (/): 74G / 118G (66%)'
+# 'Disk (Local Disk): 74G / 118G (66%)'
+# 'Disk (Videos): 74G / 118G (66%)'
+disk_subtitle="mount"
+
+
+# Song
+
+
+# Manually specify a music player.
+#
+# Default: 'auto'
+# Values: 'auto', 'player-name'
+# Flag: --music_player
+#
+# Available values for 'player-name':
+#
+# amarok
+# audacious
+# banshee
+# bluemindo
+# clementine
+# cmus
+# deadbeef
+# deepin-music
+# dragon
+# elisa
+# exaile
+# gnome-music
+# gmusicbrowser
+# guayadeque
+# iTunes
+# juk
+# lollypop
+# mocp
+# mopidy
+# mpd
+# netease-cloud-music
+# pogo
+# pragha
+# qmmp
+# quodlibet
+# rhythmbox
+# sayonara
+# smplayer
+# spotify
+# tomahawk
+# vlc
+# xmms2d
+# yarock
+music_player="auto"
+
+# Format to display song information.
+#
+# Default: '%artist% - %album% - %title%'
+# Values: '%artist%', '%album%', '%title%'
+# Flag: --song_format
+#
+# Example:
+# default: 'Song: Jet - Get Born - Sgt Major'
+song_format="%artist% - %album% - %title%"
+
+# Print the Artist, Album and Title on separate lines
+#
+# Default: 'off'
+# Values: 'on', 'off'
+# Flag: --song_shorthand
+#
+# Example:
+# on: 'Artist: The Fratellis'
+# 'Album: Costello Music'
+# 'Song: Chelsea Dagger'
+#
+# off: 'Song: The Fratellis - Costello Music - Chelsea Dagger'
+song_shorthand="off"
+
+# 'mpc' arguments (specify a host, password etc).
+#
+# Default: ''
+# Example: mpc_args=(-h HOST -P PASSWORD)
+mpc_args=()
+
+
+# Text Colors
+
+
+# Text Colors
+#
+# Default: 'distro'
+# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num'
+# Flag: --colors
+#
+# Each number represents a different part of the text in
+# this order: 'title', '@', 'underline', 'subtitle', 'colon', 'info'
+#
+# Example:
+# colors=(distro) - Text is colored based on Distro colors.
+# colors=(4 6 1 8 8 6) - Text is colored in the order above.
+colors=(distro)
+
+
+# Text Options
+
+
+# Toggle bold text
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --bold
+bold="on"
+
+# Enable/Disable Underline
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --underline
+underline_enabled="on"
+
+# Underline character
+#
+# Default: '-'
+# Values: 'string'
+# Flag: --underline_char
+underline_char="-"
+
+
+# Info Separator
+# Replace the default separator with the specified string.
+#
+# Default: ':'
+# Flag: --separator
+#
+# Example:
+# separator="->": 'Shell-> bash'
+# separator=" =": 'WM = dwm'
+separator=":"
+
+
+# Color Blocks
+
+
+# Color block range
+# The range of colors to print.
+#
+# Default: '0', '7'
+# Values: 'num'
+# Flag: --block_range
+#
+# Example:
+#
+# Display colors 0-7 in the blocks. (8 colors)
+# neofetch --block_range 0 7
+#
+# Display colors 0-15 in the blocks. (16 colors)
+# neofetch --block_range 0 15
+block_range=(0 7)
+
+# Toggle color blocks
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --color_blocks
+color_blocks="on"
+
+# Color block width in spaces
+#
+# Default: '3'
+# Values: 'num'
+# Flag: --block_width
+block_width=3
+
+# Color block height in lines
+#
+# Default: '1'
+# Values: 'num'
+# Flag: --block_height
+block_height=1
+
+
+# Progress Bars
+
+
+# Bar characters
+#
+# Default: '-', '='
+# Values: 'string', 'string'
+# Flag: --bar_char
+#
+# Example:
+# neofetch --bar_char 'elapsed' 'total'
+# neofetch --bar_char '-' '='
+bar_char_elapsed="-"
+bar_char_total="="
+
+# Toggle Bar border
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --bar_border
+bar_border="on"
+
+# Progress bar length in spaces
+# Number of chars long to make the progress bars.
+#
+# Default: '15'
+# Values: 'num'
+# Flag: --bar_length
+bar_length=15
+
+# Progress bar colors
+# When set to distro, uses your distro's logo colors.
+#
+# Default: 'distro', 'distro'
+# Values: 'distro', 'num'
+# Flag: --bar_colors
+#
+# Example:
+# neofetch --bar_colors 3 4
+# neofetch --bar_colors distro 5
+bar_color_elapsed="distro"
+bar_color_total="distro"
+
+
+# Info display
+# Display a bar with the info.
+#
+# Default: 'off'
+# Values: 'bar', 'infobar', 'barinfo', 'off'
+# Flags: --cpu_display
+# --memory_display
+# --battery_display
+# --disk_display
+#
+# Example:
+# bar: '[---=======]'
+# infobar: 'info [---=======]'
+# barinfo: '[---=======] info'
+# off: 'info'
+cpu_display="off"
+memory_display="off"
+battery_display="off"
+disk_display="off"
+
+
+# Backend Settings
+
+
+# Image backend.
+#
+# Default: 'ascii'
+# Values: 'ascii', 'caca', 'chafa', 'jp2a', 'iterm2', 'off',
+# 'termpix', 'pixterm', 'tycat', 'w3m', 'kitty'
+# Flag: --backend
+image_backend="ascii"
+#image_backend="w3m"
+
+# Image Source
+#
+# Which image or ascii file to display.
+#
+# Default: 'auto'
+# Values: 'auto', 'ascii', 'wallpaper', '/path/to/img', '/path/to/ascii', '/path/to/dir/'
+# 'command output (neofetch --ascii "$(fortune | cowsay -W 30)")'
+# Flag: --source
+#
+# NOTE: 'auto' will pick the best image source for whatever image backend is used.
+# In ascii mode, distro ascii art will be used and in an image mode, your
+# wallpaper will be used.
+image_source="auto"
+#image_source="/home/anders/Images/archlogo.jpg"
+
+
+# Ascii Options
+
+
+# Ascii distro
+# Which distro's ascii art to display.
+#
+# Default: 'auto'
+# Values: 'auto', 'distro_name'
+# Flag: --ascii_distro
+#
+# NOTE: Arch and Ubuntu have 'old' logo variants.
+# Change this to 'arch_old' or 'ubuntu_old' to use the old logos.
+# NOTE: Ubuntu has flavor variants.
+# Change this to 'Lubuntu', 'Xubuntu', 'Ubuntu-GNOME' or 'Ubuntu-Budgie' to use the flavors.
+# NOTE: Arch, Crux and Gentoo have a smaller logo variant.
+# Change this to 'arch_small', 'crux_small' or 'gentoo_small' to use the small logos.
+ascii_distro="auto"
+#ascii_distro="arch_small"
+
+# Ascii Colors
+#
+# Default: 'distro'
+# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num'
+# Flag: --ascii_colors
+#
+# Example:
+# ascii_colors=(distro) - Ascii is colored based on Distro colors.
+# ascii_colors=(4 6 1 8 8 6) - Ascii is colored using these colors.
+ascii_colors=(distro)
+
+# Bold ascii logo
+# Whether or not to bold the ascii logo.
+#
+# Default: 'on'
+# Values: 'on', 'off'
+# Flag: --ascii_bold
+ascii_bold="on"
+
+
+# Image Options
+
+
+# Image loop
+# Setting this to on will make neofetch redraw the image constantly until
+# Ctrl+C is pressed. This fixes display issues in some terminal emulators.
+#
+# Default: 'off'
+# Values: 'on', 'off'
+# Flag: --loop
+image_loop="off"
+
+# Thumbnail directory
+#
+# Default: '~/.cache/thumbnails/neofetch'
+# Values: 'dir'
+thumbnail_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch"
+
+# Crop mode
+#
+# Default: 'normal'
+# Values: 'normal', 'fit', 'fill'
+# Flag: --crop_mode
+#
+# See this wiki page to learn about the fit and fill options.
+# https://github.com/dylanaraps/neofetch/wiki/What-is-Waifu-Crop%3F
+crop_mode="normal"
+
+# Crop offset
+# Note: Only affects 'normal' crop mode.
+#
+# Default: 'center'
+# Values: 'northwest', 'north', 'northeast', 'west', 'center'
+# 'east', 'southwest', 'south', 'southeast'
+# Flag: --crop_offset
+crop_offset="center"
+
+# Image size
+# The image is half the terminal width by default.
+#
+# Default: 'auto'
+# Values: 'auto', '00px', '00%', 'none'
+# Flags: --image_size
+# --size
+image_size="auto"
+
+# Gap between image and text
+#
+# Default: '3'
+# Values: 'num', '-num'
+# Flag: --gap
+gap=3
+
+# Image offsets
+# Only works with the w3m backend.
+#
+# Default: '0'
+# Values: 'px'
+# Flags: --xoffset
+# --yoffset
+yoffset=0
+xoffset=0
+
+# Image background color
+# Only works with the w3m backend.
+#
+# Default: ''
+# Values: 'color', 'blue'
+# Flag: --bg_color
+background_color=
+
+
+# Misc Options
+
+# Stdout mode
+# Turn off all colors and disables image backend (ASCII/Image).
+# Useful for piping into another command.
+# Default: 'off'
+# Values: 'on', 'off'
+stdout="off"
diff --git a/.config/polybar/config b/.config/polybar/config
@@ -0,0 +1,455 @@
+;==========================================================
+;
+;
+; ██████╗ ██████╗ ██╗ ██╗ ██╗██████╗ █████╗ ██████╗
+; ██╔══██╗██╔═══██╗██║ ╚██╗ ██╔╝██╔══██╗██╔══██╗██╔══██╗
+; ██████╔╝██║ ██║██║ ╚████╔╝ ██████╔╝███████║██████╔╝
+; ██╔═══╝ ██║ ██║██║ ╚██╔╝ ██╔══██╗██╔══██║██╔══██╗
+; ██║ ╚██████╔╝███████╗██║ ██████╔╝██║ ██║██║ ██║
+; ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝
+;
+;
+; To learn more about how to configure Polybar
+; go to https://github.com/jaagr/polybar
+;
+; The README contains alot of information
+;
+;==========================================================
+
+[colors]
+;background = ${xrdb:color0:#222}
+background = #222
+background-alt = #444
+;foreground = ${xrdb:color7:#222}
+foreground = #dfdfdf
+foreground-alt = #555
+primary = #ffb52a
+secondary = #e60053
+alert = #bd2c40
+
+;Xterm colors
+black = #000000
+maroon = #800000
+green = #008000
+olive = #808000
+navy = #000080
+purple = #800080
+teal = #008080
+silver = #c0c0c0
+grey = #808080
+red = #ff0000
+lime = #00ff00
+yellow = #ffff00
+blue = #0000ff
+fuchsia = #ff00ff
+aqua = #00ffff
+white = #ffffff
+
+[bar/mybar]
+;monitor = ${env:MONITOR:HDMI-1}
+width = 100%
+height = 20
+;offset-x = 1%
+;offset-y = 1%
+radius = 0.0
+fixed-center = false
+bottom = true
+
+background = ${colors.background}
+foreground = ${colors.foreground}
+
+line-size = 0
+line-color = #f00
+
+border-size = 0
+border-color = #00000000
+
+padding-left = 0
+padding-right = 2
+
+module-margin-left = 1
+module-margin-right = 2
+
+font-0 = fixed:pixelsize=10;1
+font-1 = unifont:fontformat=truetype:size=8:antialias=false;0
+font-2 = siji:pixelsize=10;1
+font-3 = FontAwesome:size=8
+
+modules-left = bspwm
+;modules-center = xwindow
+modules-right = wlan eth updates filesystem xbacklight pulseaudio memory cpu temperature battery date powermenu
+
+tray-position = right
+tray-padding = 0
+tray-background = ${colors.background}
+tray-detached = false
+tray-maxsize = 16
+
+
+wm-restack = bspwm
+;wm-restack = i3
+
+;override-redirect = true
+
+;scroll-up = bspwm-desknext
+;scroll-down = bspwm-deskprev
+
+;scroll-up = i3wm-wsnext
+;scroll-down = i3wm-wsprev
+
+cursor-click = pointer
+cursor-scroll = ns-resize
+
+[module/xwindow]
+type = internal/xwindow
+label = %title:0:30:...%
+
+[module/xkeyboard]
+type = internal/xkeyboard
+blacklist-0 = num lock
+
+format-prefix = " "
+format-prefix-foreground = ${colors.foreground-alt}
+format-prefix-underline = ${colors.secondary}
+
+label-layout = %layout%
+label-layout-underline = ${colors.secondary}
+
+label-indicator-padding = 2
+label-indicator-margin = 1
+label-indicator-background = ${colors.secondary}
+label-indicator-underline = ${colors.secondary}
+
+[module/filesystem]
+type = internal/fs
+interval = 25
+
+mount-0 = /
+
+;label-mounted = %{F#0a81f5}%mountpoint%%{F-}: %percentage_used%%
+label-mounted = %{F#0a81f5}%mountpoint%%{F-}: %free%
+label-unmounted = %mountpoint% not mounted
+label-unmounted-foreground = ${colors.foreground-alt}
+
+[module/bspwm]
+type = internal/bspwm
+
+ws-icon-0 = I;
+ws-icon-1 = II;
+;ws-icon-2 = III;♜
+;ws-icon-3 = IV;♝
+;ws-icon-4 = V;♞
+ws-icon-default =
+
+label-focused = [%index%]
+label-focused-background = ${colors.background-alt}
+label-focused-underline= ${colors.primary}
+label-focused-padding = 1
+
+label-occupied = %index%
+label-occupied-padding = 2
+
+label-urgent = %index%!
+label-urgent-background = ${colors.alert}
+label-urgent-padding = 2
+
+label-empty = %index%
+label-empty-foreground = ${colors.foreground-alt}
+label-empty-padding = 2
+
+; Separator in between workspaces
+; label-separator = |
+
+[module/mpd]
+type = internal/mpd
+format-online = <label-song> <icon-prev> <icon-stop> <toggle> <icon-next>
+
+icon-prev =
+icon-stop =
+icon-play =
+icon-pause =
+icon-next =
+
+label-song-maxlen = 25
+label-song-ellipsis = true
+
+[module/xbacklight]
+type = internal/xbacklight
+
+format = <ramp><label>
+label = %percentage%%
+
+ramp-0 = 🌕
+ramp-1 = 🌔
+ramp-2 = 🌓
+ramp-3 = 🌒
+ramp-4 = 🌑
+
+bar-width = 10
+bar-indicator = |
+bar-indicator-foreground = #fff
+bar-indicator-font = 2
+bar-fill = ─
+bar-fill-font = 2
+bar-fill-foreground = #9f78e1
+bar-empty = ─
+bar-empty-font = 2
+bar-empty-foreground = ${colors.foreground-alt}
+
+[module/backlight-acpi]
+inherit = module/xbacklight
+type = internal/backlight
+card = intel_backlight
+
+[module/cpu]
+type = internal/cpu
+interval = 2
+format-prefix = " "
+format-prefix-foreground = ${colors.foreground}
+format-underline = #f90000
+label = %percentage:2%%
+
+[module/memory]
+type = internal/memory
+interval = 2
+format-prefix = " "
+format-prefix-foreground = ${colors.foreground}
+format-underline = #4bffdc
+label = %gb_used%
+
+[module/wlan]
+type = internal/network
+interface = wlp2s0
+interval = 3.0
+
+format-connected = <ramp-signal> <label-connected>
+format-connected-underline = #9f78e1
+label-connected = %essid% | %local_ip%
+
+format-disconnected =
+;format-disconnected = <label-disconnected>
+;format-disconnected-underline = ${self.format-connected-underline}
+;label-disconnected = %ifname% disconnected
+;label-disconnected-foreground = ${colors.foreground-alt}
+
+ramp-signal-0 =
+ramp-signal-1 =
+ramp-signal-2 =
+ramp-signal-3 =
+ramp-signal-4 =
+;ramp-signal-foreground = ${colors.foreground}
+ramp-signal-foreground = ${colors.lime}
+
+[module/eth]
+type = internal/network
+interface = enp1s0f0
+interval = 3.0
+
+format-connected-underline = #55aa55
+format-connected-prefix = " "
+format-connected-prefix-foreground = ${colors.lime}
+label-connected = %local_ip%
+
+format-disconnected =
+;format-disconnected = <label-disconnected>
+;format-disconnected-underline = ${self.format-connected-underline}
+;label-disconnected = %ifname% disconnected
+;label-disconnected-foreground = ${colors.foreground-alt}
+
+[module/date]
+type = internal/date
+interval = 5
+
+date =
+date-alt = " %Y-%m-%d"
+
+time = %H:%M
+time-alt = %H:%M:%S
+
+;format-prefix =
+;format-prefix-foreground = ${colors.foreground-alt}
+format-underline = #0a6cf5
+
+label = %date% %time%
+
+[module/pulseaudio]
+type = internal/pulseaudio
+
+format-volume = <label-volume>
+; <bar-volume>
+label-volume = %percentage%%
+label-volume-foreground = ${root.foreground}
+
+label-muted = %percentage%%
+label-muted-foreground = #666
+
+bar-volume-width = 10
+bar-volume-foreground-0 = #55aa55
+bar-volume-foreground-1 = #55aa55
+bar-volume-foreground-2 = #55aa55
+bar-volume-foreground-3 = #55aa55
+bar-volume-foreground-4 = #55aa55
+bar-volume-foreground-5 = #f5a70a
+bar-volume-foreground-6 = #ff5555
+bar-volume-gradient = false
+bar-volume-indicator = |
+bar-volume-indicator-font = 2
+bar-volume-fill = ─
+bar-volume-fill-font = 2
+bar-volume-empty = ─
+bar-volume-empty-font = 2
+bar-volume-empty-foreground = ${colors.foreground-alt}
+
+[module/alsa]
+type = internal/alsa
+
+format-volume = <label-volume> <bar-volume>
+label-volume = VOL
+label-volume-foreground = ${root.foreground}
+
+format-muted-prefix = " "
+format-muted-foreground = ${colors.foreground-alt}
+label-muted = sound muted
+
+bar-volume-width = 10
+bar-volume-foreground-0 = #55aa55
+bar-volume-foreground-1 = #55aa55
+bar-volume-foreground-2 = #55aa55
+bar-volume-foreground-3 = #55aa55
+bar-volume-foreground-4 = #55aa55
+bar-volume-foreground-5 = #f5a70a
+bar-volume-foreground-6 = #ff5555
+bar-volume-gradient = false
+bar-volume-indicator = |
+bar-volume-indicator-font = 2
+bar-volume-fill = ─
+bar-volume-fill-font = 2
+bar-volume-empty = ─
+bar-volume-empty-font = 2
+bar-volume-empty-foreground = ${colors.foreground-alt}
+
+[module/battery]
+type = internal/battery
+battery = BAT1
+adapter = ACAD
+full-at = 100
+
+;<animation-charging>
+
+format-charging = <label-charging>
+format-charging-underline = #ffb52a
+
+format-discharging = <ramp-capacity> <label-discharging>
+format-discharging-underline = ${self.format-charging-underline}
+
+format-charging-prefix = " "
+format-charging-prefix-foreground = ${colors.lime}
+format-full-prefix = " "
+format-full-prefix-foreground = ${colors.lime}
+format-full-underline = ${self.format-charging-underline}
+
+ramp-capacity-0 =
+ramp-capacity-1 =
+ramp-capacity-2 =
+ramp-capacity-3 =
+ramp-capacity-4 =
+ramp-capacity-5 =
+ramp-capacity-6 =
+ramp-capacity-7 =
+ramp-capacity-8 =
+ramp-capacity-9 =
+ramp-capacity-0-foreground = ${colors.secondary}
+ramp-capacity-1-foreground = ${colors.secondary}
+ramp-capacity-2-foreground = ${colors.secondary}
+ramp-capacity-3-foreground = ${colors.primary}
+ramp-capacity-4-foreground = ${colors.primary}
+ramp-capacity-5-foreground = ${colors.primary}
+ramp-capacity-6-foreground = ${colors.primary}
+ramp-capacity-7-foreground = ${colors.lime}
+ramp-capacity-8-foreground = ${colors.lime}
+ramp-capacity-9-foreground = ${colors.lime}
+
+animation-charging-0 =
+animation-charging-1 =
+animation-charging-2 =
+animation-charging-foreground = ${colors.foreground}
+animation-charging-framerate = 750
+
+animation-discharging-0 =
+animation-discharging-1 =
+animation-discharging-2 =
+animation-discharging-foreground = ${colors.foreground}
+animation-discharging-framerate = 750
+
+[module/temperature]
+type = internal/temperature
+thermal-zone = 0
+warn-temperature = 60
+
+format = <ramp> <label>
+format-underline = #f50a4d
+format-warn = <ramp> <label-warn>
+format-warn-underline = ${self.format-underline}
+
+label = %temperature-c%
+label-warn = %temperature-c%
+label-warn-foreground = ${colors.secondary}
+
+ramp-0 =
+ramp-1 =
+ramp-2 =
+ramp-foreground = ${colors.foreground}
+
+[module/powermenu]
+type = custom/menu
+
+expand-right = true
+
+format-spacing = 1
+
+label-open =
+label-open-foreground = ${colors.secondary}
+label-close = cancel
+label-close-foreground = ${colors.secondary}
+label-separator = |
+label-separator-foreground = ${colors.foreground-alt}
+
+menu-0-0 = reboot
+menu-0-0-exec = menu-open-1
+menu-0-1 = power off
+menu-0-1-exec = menu-open-2
+
+menu-1-0 = cancel
+menu-1-0-exec = menu-open-0
+menu-1-1 = reboot
+menu-1-1-exec = sudo reboot
+
+menu-2-0 = power off
+menu-2-0-exec = sudo shutdown now
+menu-2-1 = cancel
+menu-2-1-exec = menu-open-0
+
+[module/updates]
+type = custom/script
+exec = ~/Scripts/pacmanupdates.sh
+interval = 3600
+
+format = : <label>
+format-background = ${colors.background}
+format-foreground = ${colors.foreground}
+format-prefix = " "
+format-prefix-foreground = ${colors.teal}
+
+[settings]
+screenchange-reload = true
+;compositing-background = xor
+;compositing-background = screen
+;compositing-foreground = source
+;compositing-border = over
+;pseudo-transparency = false
+
+[global/wm]
+margin-top = 0
+margin-bottom = 0
+
+; vim:ft=dosini
diff --git a/.config/polybar/config.sample b/.config/polybar/config.sample
@@ -0,0 +1,423 @@
+;==========================================================
+;
+;
+; ██████╗ ██████╗ ██╗ ██╗ ██╗██████╗ █████╗ ██████╗
+; ██╔══██╗██╔═══██╗██║ ╚██╗ ██╔╝██╔══██╗██╔══██╗██╔══██╗
+; ██████╔╝██║ ██║██║ ╚████╔╝ ██████╔╝███████║██████╔╝
+; ██╔═══╝ ██║ ██║██║ ╚██╔╝ ██╔══██╗██╔══██║██╔══██╗
+; ██║ ╚██████╔╝███████╗██║ ██████╔╝██║ ██║██║ ██║
+; ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝
+;
+;
+; To learn more about how to configure Polybar
+; go to https://github.com/jaagr/polybar
+;
+; The README contains alot of information
+;
+;==========================================================
+
+[colors]
+;background = ${xrdb:color0:#222}
+background = #222
+background-alt = #444
+;foreground = ${xrdb:color7:#222}
+foreground = #dfdfdf
+foreground-alt = #555
+primary = #ffb52a
+secondary = #e60053
+alert = #bd2c40
+
+[bar/example]
+;monitor = ${env:MONITOR:HDMI-1}
+width = 100%
+height = 27
+;offset-x = 1%
+;offset-y = 1%
+radius = 6.0
+fixed-center = false
+
+background = ${colors.background}
+foreground = ${colors.foreground}
+
+line-size = 3
+line-color = #f00
+
+border-size = 4
+border-color = #00000000
+
+padding-left = 0
+padding-right = 2
+
+module-margin-left = 1
+module-margin-right = 2
+
+font-0 = fixed:pixelsize=10;1
+font-1 = unifont:fontformat=truetype:size=8:antialias=false;0
+font-2 = siji:pixelsize=10;1
+
+modules-left = bspwm i3
+modules-center = xwindow
+modules-right = filesystem xbacklight alsa pulseaudio xkeyboard memory cpu wlan eth battery temperature date powermenu
+
+tray-position = right
+tray-padding = 2
+;tray-background = #0063ff
+
+;wm-restack = bspwm
+;wm-restack = i3
+
+;override-redirect = true
+
+;scroll-up = bspwm-desknext
+;scroll-down = bspwm-deskprev
+
+;scroll-up = i3wm-wsnext
+;scroll-down = i3wm-wsprev
+
+cursor-click = pointer
+cursor-scroll = ns-resize
+
+[module/xwindow]
+type = internal/xwindow
+label = %title:0:30:...%
+
+[module/xkeyboard]
+type = internal/xkeyboard
+blacklist-0 = num lock
+
+format-prefix = " "
+format-prefix-foreground = ${colors.foreground-alt}
+format-prefix-underline = ${colors.secondary}
+
+label-layout = %layout%
+label-layout-underline = ${colors.secondary}
+
+label-indicator-padding = 2
+label-indicator-margin = 1
+label-indicator-background = ${colors.secondary}
+label-indicator-underline = ${colors.secondary}
+
+[module/filesystem]
+type = internal/fs
+interval = 25
+
+mount-0 = /
+
+label-mounted = %{F#0a81f5}%mountpoint%%{F-}: %percentage_used%%
+label-unmounted = %mountpoint% not mounted
+label-unmounted-foreground = ${colors.foreground-alt}
+
+[module/bspwm]
+type = internal/bspwm
+
+label-focused = %index%
+label-focused-background = ${colors.background-alt}
+label-focused-underline= ${colors.primary}
+label-focused-padding = 2
+
+label-occupied = %index%
+label-occupied-padding = 2
+
+label-urgent = %index%!
+label-urgent-background = ${colors.alert}
+label-urgent-padding = 2
+
+label-empty = %index%
+label-empty-foreground = ${colors.foreground-alt}
+label-empty-padding = 2
+
+; Separator in between workspaces
+; label-separator = |
+
+[module/i3]
+type = internal/i3
+format = <label-state> <label-mode>
+index-sort = true
+wrapping-scroll = false
+
+; Only show workspaces on the same output as the bar
+;pin-workspaces = true
+
+label-mode-padding = 2
+label-mode-foreground = #000
+label-mode-background = ${colors.primary}
+
+; focused = Active workspace on focused monitor
+label-focused = %index%
+label-focused-background = ${module/bspwm.label-focused-background}
+label-focused-underline = ${module/bspwm.label-focused-underline}
+label-focused-padding = ${module/bspwm.label-focused-padding}
+
+; unfocused = Inactive workspace on any monitor
+label-unfocused = %index%
+label-unfocused-padding = ${module/bspwm.label-occupied-padding}
+
+; visible = Active workspace on unfocused monitor
+label-visible = %index%
+label-visible-background = ${self.label-focused-background}
+label-visible-underline = ${self.label-focused-underline}
+label-visible-padding = ${self.label-focused-padding}
+
+; urgent = Workspace with urgency hint set
+label-urgent = %index%
+label-urgent-background = ${module/bspwm.label-urgent-background}
+label-urgent-padding = ${module/bspwm.label-urgent-padding}
+
+; Separator in between workspaces
+; label-separator = |
+
+
+[module/mpd]
+type = internal/mpd
+format-online = <label-song> <icon-prev> <icon-stop> <toggle> <icon-next>
+
+icon-prev =
+icon-stop =
+icon-play =
+icon-pause =
+icon-next =
+
+label-song-maxlen = 25
+label-song-ellipsis = true
+
+[module/xbacklight]
+type = internal/xbacklight
+
+format = <label> <bar>
+label = BL
+
+bar-width = 10
+bar-indicator = |
+bar-indicator-foreground = #fff
+bar-indicator-font = 2
+bar-fill = ─
+bar-fill-font = 2
+bar-fill-foreground = #9f78e1
+bar-empty = ─
+bar-empty-font = 2
+bar-empty-foreground = ${colors.foreground-alt}
+
+[module/backlight-acpi]
+inherit = module/xbacklight
+type = internal/backlight
+card = intel_backlight
+
+[module/cpu]
+type = internal/cpu
+interval = 2
+format-prefix = " "
+format-prefix-foreground = ${colors.foreground-alt}
+format-underline = #f90000
+label = %percentage:2%%
+
+[module/memory]
+type = internal/memory
+interval = 2
+format-prefix = " "
+format-prefix-foreground = ${colors.foreground-alt}
+format-underline = #4bffdc
+label = %percentage_used%%
+
+[module/wlan]
+type = internal/network
+interface = wlp2s0
+interval = 3.0
+
+format-connected = <ramp-signal> <label-connected>
+format-connected-underline = #9f78e1
+label-connected = %essid%
+
+format-disconnected =
+;format-disconnected = <label-disconnected>
+;format-disconnected-underline = ${self.format-connected-underline}
+;label-disconnected = %ifname% disconnected
+;label-disconnected-foreground = ${colors.foreground-alt}
+
+ramp-signal-0 =
+ramp-signal-1 =
+ramp-signal-2 =
+ramp-signal-3 =
+ramp-signal-4 =
+ramp-signal-foreground = ${colors.foreground-alt}
+
+[module/eth]
+type = internal/network
+interface = enp1s0f0
+interval = 3.0
+
+format-connected-underline = #55aa55
+format-connected-prefix = " "
+format-connected-prefix-foreground = ${colors.foreground-alt}
+label-connected = %local_ip%
+
+format-disconnected =
+;format-disconnected = <label-disconnected>
+;format-disconnected-underline = ${self.format-connected-underline}
+;label-disconnected = %ifname% disconnected
+;label-disconnected-foreground = ${colors.foreground-alt}
+
+[module/date]
+type = internal/date
+interval = 5
+
+date =
+date-alt = " %Y-%m-%d"
+
+time = %H:%M
+time-alt = %H:%M:%S
+
+format-prefix =
+format-prefix-foreground = ${colors.foreground-alt}
+format-underline = #0a6cf5
+
+label = %date% %time%
+
+[module/pulseaudio]
+type = internal/pulseaudio
+
+format-volume = <label-volume> <bar-volume>
+label-volume = VOL %percentage%%
+label-volume-foreground = ${root.foreground}
+
+label-muted = 🔇 muted
+label-muted-foreground = #666
+
+bar-volume-width = 10
+bar-volume-foreground-0 = #55aa55
+bar-volume-foreground-1 = #55aa55
+bar-volume-foreground-2 = #55aa55
+bar-volume-foreground-3 = #55aa55
+bar-volume-foreground-4 = #55aa55
+bar-volume-foreground-5 = #f5a70a
+bar-volume-foreground-6 = #ff5555
+bar-volume-gradient = false
+bar-volume-indicator = |
+bar-volume-indicator-font = 2
+bar-volume-fill = ─
+bar-volume-fill-font = 2
+bar-volume-empty = ─
+bar-volume-empty-font = 2
+bar-volume-empty-foreground = ${colors.foreground-alt}
+
+[module/alsa]
+type = internal/alsa
+
+format-volume = <label-volume> <bar-volume>
+label-volume = VOL
+label-volume-foreground = ${root.foreground}
+
+format-muted-prefix = " "
+format-muted-foreground = ${colors.foreground-alt}
+label-muted = sound muted
+
+bar-volume-width = 10
+bar-volume-foreground-0 = #55aa55
+bar-volume-foreground-1 = #55aa55
+bar-volume-foreground-2 = #55aa55
+bar-volume-foreground-3 = #55aa55
+bar-volume-foreground-4 = #55aa55
+bar-volume-foreground-5 = #f5a70a
+bar-volume-foreground-6 = #ff5555
+bar-volume-gradient = false
+bar-volume-indicator = |
+bar-volume-indicator-font = 2
+bar-volume-fill = ─
+bar-volume-fill-font = 2
+bar-volume-empty = ─
+bar-volume-empty-font = 2
+bar-volume-empty-foreground = ${colors.foreground-alt}
+
+[module/battery]
+type = internal/battery
+battery = BAT1
+adapter = ACAD
+full-at = 98
+
+format-charging = <animation-charging> <label-charging>
+format-charging-underline = #ffb52a
+
+format-discharging = <animation-discharging> <label-discharging>
+format-discharging-underline = ${self.format-charging-underline}
+
+format-full-prefix = " "
+format-full-prefix-foreground = ${colors.foreground-alt}
+format-full-underline = ${self.format-charging-underline}
+
+ramp-capacity-0 =
+ramp-capacity-1 =
+ramp-capacity-2 =
+ramp-capacity-foreground = ${colors.foreground-alt}
+
+animation-charging-0 =
+animation-charging-1 =
+animation-charging-2 =
+animation-charging-foreground = ${colors.foreground-alt}
+animation-charging-framerate = 750
+
+animation-discharging-0 =
+animation-discharging-1 =
+animation-discharging-2 =
+animation-discharging-foreground = ${colors.foreground-alt}
+animation-discharging-framerate = 750
+
+[module/temperature]
+type = internal/temperature
+thermal-zone = 0
+warn-temperature = 60
+
+format = <ramp> <label>
+format-underline = #f50a4d
+format-warn = <ramp> <label-warn>
+format-warn-underline = ${self.format-underline}
+
+label = %temperature-c%
+label-warn = %temperature-c%
+label-warn-foreground = ${colors.secondary}
+
+ramp-0 =
+ramp-1 =
+ramp-2 =
+ramp-foreground = ${colors.foreground-alt}
+
+[module/powermenu]
+type = custom/menu
+
+expand-right = true
+
+format-spacing = 1
+
+label-open =
+label-open-foreground = ${colors.secondary}
+label-close = cancel
+label-close-foreground = ${colors.secondary}
+label-separator = |
+label-separator-foreground = ${colors.foreground-alt}
+
+menu-0-0 = reboot
+menu-0-0-exec = menu-open-1
+menu-0-1 = power off
+menu-0-1-exec = menu-open-2
+
+menu-1-0 = cancel
+menu-1-0-exec = menu-open-0
+menu-1-1 = reboot
+menu-1-1-exec = sudo reboot
+
+menu-2-0 = power off
+menu-2-0-exec = sudo poweroff
+menu-2-1 = cancel
+menu-2-1-exec = menu-open-0
+
+[settings]
+screenchange-reload = true
+;compositing-background = xor
+;compositing-background = screen
+;compositing-foreground = source
+;compositing-border = over
+;pseudo-transparency = false
+
+[global/wm]
+margin-top = 5
+margin-bottom = 5
+
+; vim:ft=dosini
diff --git a/.config/ranger/bookmarks b/.config/ranger/bookmarks
diff --git a/.config/ranger/commands.py b/.config/ranger/commands.py
@@ -0,0 +1,58 @@
+# This is a sample commands.py. You can add your own commands here.
+#
+# Please refer to commands_full.py for all the default commands and a complete
+# documentation. Do NOT add them all here, or you may end up with defunct
+# commands when upgrading ranger.
+
+# You always need to import ranger.api.commands here to get the Command class:
+from ranger.api.commands import *
+
+# A simple command for demonstration purposes follows.
+#------------------------------------------------------------------------------
+
+# You can import any python module as needed.
+import os
+
+# Any class that is a subclass of "Command" will be integrated into ranger as a
+# command. Try typing ":my_edit<ENTER>" in ranger!
+class my_edit(Command):
+ # The so-called doc-string of the class will be visible in the built-in
+ # help that is accessible by typing "?c" inside ranger.
+ """:my_edit <filename>
+
+ A sample command for demonstration purposes that opens a file in an editor.
+ """
+
+ # The execute method is called when you run this command in ranger.
+ def execute(self):
+ # self.arg(1) is the first (space-separated) argument to the function.
+ # This way you can write ":my_edit somefilename<ENTER>".
+ if self.arg(1):
+ # self.rest(1) contains self.arg(1) and everything that follows
+ target_filename = self.rest(1)
+ else:
+ # self.fm is a ranger.core.filemanager.FileManager object and gives
+ # you access to internals of ranger.
+ # self.fm.thisfile is a ranger.container.file.File object and is a
+ # reference to the currently selected file.
+ target_filename = self.fm.thisfile.path
+
+ # This is a generic function to print text in ranger.
+ self.fm.notify("Let's edit the file " + target_filename + "!")
+
+ # Using bad=True in fm.notify allows you to print error messages:
+ if not os.path.exists(target_filename):
+ self.fm.notify("The given file does not exist!", bad=True)
+ return
+
+ # This executes a function from ranger.core.acitons, a module with a
+ # variety of subroutines that can help you construct commands.
+ # Check out the source, or run "pydoc ranger.core.actions" for a list.
+ self.fm.edit_file(target_filename)
+
+ # The tab method is called when you press tab, and should return a list of
+ # suggestions that the user will tab through.
+ def tab(self):
+ # This is a generic tab-completion function that iterates through the
+ # content of the current directory.
+ return self._tab_directory_content()
diff --git a/.config/ranger/commands_full.py b/.config/ranger/commands_full.py
@@ -0,0 +1,1504 @@
+# -*- coding: utf-8 -*-
+# This file is part of ranger, the console file manager.
+# This configuration file is licensed under the same terms as ranger.
+# ===================================================================
+#
+# NOTE: If you copied this file to ~/.config/ranger/commands_full.py,
+# then it will NOT be loaded by ranger, and only serve as a reference.
+#
+# ===================================================================
+# This file contains ranger's commands.
+# It's all in python; lines beginning with # are comments.
+#
+# Note that additional commands are automatically generated from the methods
+# of the class ranger.core.actions.Actions.
+#
+# You can customize commands in the file ~/.config/ranger/commands.py.
+# It has the same syntax as this file. In fact, you can just copy this
+# file there with `ranger --copy-config=commands' and make your modifications.
+# But make sure you update your configs when you update ranger.
+#
+# ===================================================================
+# Every class defined here which is a subclass of `Command' will be used as a
+# command in ranger. Several methods are defined to interface with ranger:
+# execute(): called when the command is executed.
+# cancel(): called when closing the console.
+# tab(): called when <TAB> is pressed.
+# quick(): called after each keypress.
+#
+# The return values for tab() can be either:
+# None: There is no tab completion
+# A string: Change the console to this string
+# A list/tuple/generator: cycle through every item in it
+#
+# The return value for quick() can be:
+# False: Nothing happens
+# True: Execute the command afterwards
+#
+# The return value for execute() and cancel() doesn't matter.
+#
+# ===================================================================
+# Commands have certain attributes and methods that facilitate parsing of
+# the arguments:
+#
+# self.line: The whole line that was written in the console.
+# self.args: A list of all (space-separated) arguments to the command.
+# self.quantifier: If this command was mapped to the key "X" and
+# the user pressed 6X, self.quantifier will be 6.
+# self.arg(n): The n-th argument, or an empty string if it doesn't exist.
+# self.rest(n): The n-th argument plus everything that followed. For example,
+# if the command was "search foo bar a b c", rest(2) will be "bar a b c"
+# self.start(n): Anything before the n-th argument. For example, if the
+# command was "search foo bar a b c", start(2) will be "search foo"
+#
+# ===================================================================
+# And this is a little reference for common ranger functions and objects:
+#
+# self.fm: A reference to the "fm" object which contains most information
+# about ranger.
+# self.fm.notify(string): Print the given string on the screen.
+# self.fm.notify(string, bad=True): Print the given string in RED.
+# self.fm.reload_cwd(): Reload the current working directory.
+# self.fm.thisdir: The current working directory. (A File object.)
+# self.fm.thisfile: The current file. (A File object too.)
+# self.fm.thistab.get_selection(): A list of all selected files.
+# self.fm.execute_console(string): Execute the string as a ranger command.
+# self.fm.open_console(string): Open the console with the given string
+# already typed in for you.
+# self.fm.move(direction): Moves the cursor in the given direction, which
+# can be something like down=3, up=5, right=1, left=1, to=6, ...
+#
+# File objects (for example self.fm.thisfile) have these useful attributes and
+# methods:
+#
+# cf.path: The path to the file.
+# cf.basename: The base name only.
+# cf.load_content(): Force a loading of the directories content (which
+# obviously works with directories only)
+# cf.is_directory: True/False depending on whether it's a directory.
+#
+# For advanced commands it is unavoidable to dive a bit into the source code
+# of ranger.
+# ===================================================================
+
+from ranger.api.commands import *
+
+class alias(Command):
+ """:alias <newcommand> <oldcommand>
+
+ Copies the oldcommand as newcommand.
+ """
+
+ context = 'browser'
+ resolve_macros = False
+
+ def execute(self):
+ if not self.arg(1) or not self.arg(2):
+ self.fm.notify('Syntax: alias <newcommand> <oldcommand>', bad=True)
+ else:
+ self.fm.commands.alias(self.arg(1), self.rest(2))
+
+class cd(Command):
+ """:cd [-r] <dirname>
+
+ The cd command changes the directory.
+ The command 'cd -' is equivalent to typing ``.
+ Using the option "-r" will get you to the real path.
+ """
+
+ def execute(self):
+ import os.path
+ if self.arg(1) == '-r':
+ self.shift()
+ destination = os.path.realpath(self.rest(1))
+ if os.path.isfile(destination):
+ self.fm.select_file(destination)
+ return
+ else:
+ destination = self.rest(1)
+
+ if not destination:
+ destination = '~'
+
+ if destination == '-':
+ self.fm.enter_bookmark('`')
+ else:
+ self.fm.cd(destination)
+
+ def tab(self):
+ import os
+ from os.path import dirname, basename, expanduser, join
+
+ cwd = self.fm.thisdir.path
+ rel_dest = self.rest(1)
+
+ bookmarks = [v.path for v in self.fm.bookmarks.dct.values()
+ if rel_dest in v.path ]
+
+ # expand the tilde into the user directory
+ if rel_dest.startswith('~'):
+ rel_dest = expanduser(rel_dest)
+
+ # define some shortcuts
+ abs_dest = join(cwd, rel_dest)
+ abs_dirname = dirname(abs_dest)
+ rel_basename = basename(rel_dest)
+ rel_dirname = dirname(rel_dest)
+
+ try:
+ # are we at the end of a directory?
+ if rel_dest.endswith('/') or rel_dest == '':
+ _, dirnames, _ = next(os.walk(abs_dest))
+
+ # are we in the middle of the filename?
+ else:
+ _, dirnames, _ = next(os.walk(abs_dirname))
+ dirnames = [dn for dn in dirnames \
+ if dn.startswith(rel_basename)]
+ except (OSError, StopIteration):
+ # os.walk found nothing
+ pass
+ else:
+ dirnames.sort()
+ if self.fm.settings.cd_bookmarks:
+ dirnames = bookmarks + dirnames
+
+ # no results, return None
+ if len(dirnames) == 0:
+ return
+
+ # one result. since it must be a directory, append a slash.
+ if len(dirnames) == 1:
+ return self.start(1) + join(rel_dirname, dirnames[0]) + '/'
+
+ # more than one result. append no slash, so the user can
+ # manually type in the slash to advance into that directory
+ return (self.start(1) + join(rel_dirname, dirname) for dirname in dirnames)
+
+
+class chain(Command):
+ """:chain <command1>; <command2>; ...
+
+ Calls multiple commands at once, separated by semicolons.
+ """
+ def execute(self):
+ for command in self.rest(1).split(";"):
+ self.fm.execute_console(command)
+
+
+class shell(Command):
+ escape_macros_for_shell = True
+
+ def execute(self):
+ if self.arg(1) and self.arg(1)[0] == '-':
+ flags = self.arg(1)[1:]
+ command = self.rest(2)
+ else:
+ flags = ''
+ command = self.rest(1)
+
+ if not command and 'p' in flags:
+ command = 'cat %f'
+ if command:
+ if '%' in command:
+ command = self.fm.substitute_macros(command, escape=True)
+ self.fm.execute_command(command, flags=flags)
+
+ def tab(self):
+ from ranger.ext.get_executables import get_executables
+ if self.arg(1) and self.arg(1)[0] == '-':
+ command = self.rest(2)
+ else:
+ command = self.rest(1)
+ start = self.line[0:len(self.line) - len(command)]
+
+ try:
+ position_of_last_space = command.rindex(" ")
+ except ValueError:
+ return (start + program + ' ' for program \
+ in get_executables() if program.startswith(command))
+ if position_of_last_space == len(command) - 1:
+ selection = self.fm.thistab.get_selection()
+ if len(selection) == 1:
+ return self.line + selection[0].shell_escaped_basename + ' '
+ else:
+ return self.line + '%s '
+ else:
+ before_word, start_of_word = self.line.rsplit(' ', 1)
+ return (before_word + ' ' + file.shell_escaped_basename \
+ for file in self.fm.thisdir.files \
+ if file.shell_escaped_basename.startswith(start_of_word))
+
+class open_with(Command):
+ def execute(self):
+ app, flags, mode = self._get_app_flags_mode(self.rest(1))
+ self.fm.execute_file(
+ files = [f for f in self.fm.thistab.get_selection()],
+ app = app,
+ flags = flags,
+ mode = mode)
+
+ def tab(self):
+ return self._tab_through_executables()
+
+ def _get_app_flags_mode(self, string):
+ """Extracts the application, flags and mode from a string.
+
+ examples:
+ "mplayer f 1" => ("mplayer", "f", 1)
+ "aunpack 4" => ("aunpack", "", 4)
+ "p" => ("", "p", 0)
+ "" => None
+ """
+
+ app = ''
+ flags = ''
+ mode = 0
+ split = string.split()
+
+ if len(split) == 0:
+ pass
+
+ elif len(split) == 1:
+ part = split[0]
+ if self._is_app(part):
+ app = part
+ elif self._is_flags(part):
+ flags = part
+ elif self._is_mode(part):
+ mode = part
+
+ elif len(split) == 2:
+ part0 = split[0]
+ part1 = split[1]
+
+ if self._is_app(part0):
+ app = part0
+ if self._is_flags(part1):
+ flags = part1
+ elif self._is_mode(part1):
+ mode = part1
+ elif self._is_flags(part0):
+ flags = part0
+ if self._is_mode(part1):
+ mode = part1
+ elif self._is_mode(part0):
+ mode = part0
+ if self._is_flags(part1):
+ flags = part1
+
+ elif len(split) >= 3:
+ part0 = split[0]
+ part1 = split[1]
+ part2 = split[2]
+
+ if self._is_app(part0):
+ app = part0
+ if self._is_flags(part1):
+ flags = part1
+ if self._is_mode(part2):
+ mode = part2
+ elif self._is_mode(part1):
+ mode = part1
+ if self._is_flags(part2):
+ flags = part2
+ elif self._is_flags(part0):
+ flags = part0
+ if self._is_mode(part1):
+ mode = part1
+ elif self._is_mode(part0):
+ mode = part0
+ if self._is_flags(part1):
+ flags = part1
+
+ return app, flags, int(mode)
+
+ def _is_app(self, arg):
+ return not self._is_flags(arg) and not arg.isdigit()
+
+ def _is_flags(self, arg):
+ from ranger.core.runner import ALLOWED_FLAGS
+ return all(x in ALLOWED_FLAGS for x in arg)
+
+ def _is_mode(self, arg):
+ return all(x in '0123456789' for x in arg)
+
+
+class set_(Command):
+ """:set <option name>=<python expression>
+
+ Gives an option a new value.
+ """
+ name = 'set' # don't override the builtin set class
+ def execute(self):
+ name = self.arg(1)
+ name, value, _ = self.parse_setting_line()
+ self.fm.set_option_from_string(name, value)
+
+ def tab(self):
+ from ranger.gui.colorscheme import get_all_colorschemes
+ name, value, name_done = self.parse_setting_line()
+ settings = self.fm.settings
+ if not name:
+ return sorted(self.firstpart + setting for setting in settings)
+ if not value and not name_done:
+ return (self.firstpart + setting for setting in settings \
+ if setting.startswith(name))
+ if not value:
+ # Cycle through colorschemes when name, but no value is specified
+ if name == "colorscheme":
+ return (self.firstpart + colorscheme for colorscheme \
+ in get_all_colorschemes())
+ return self.firstpart + str(settings[name])
+ if bool in settings.types_of(name):
+ if 'true'.startswith(value.lower()):
+ return self.firstpart + 'True'
+ if 'false'.startswith(value.lower()):
+ return self.firstpart + 'False'
+ # Tab complete colorscheme values if incomplete value is present
+ if name == "colorscheme":
+ return (self.firstpart + colorscheme for colorscheme \
+ in get_all_colorschemes() if colorscheme.startswith(value))
+
+
+class setlocal(set_):
+ """:setlocal path=<python string> <option name>=<python expression>
+
+ Gives an option a new value.
+ """
+ PATH_RE = re.compile(r'^\s*path="?(.*?)"?\s*$')
+ def execute(self):
+ import os.path
+ match = self.PATH_RE.match(self.arg(1))
+ if match:
+ path = os.path.normpath(os.path.expanduser(match.group(1)))
+ self.shift()
+ elif self.fm.thisdir:
+ path = self.fm.thisdir.path
+ else:
+ path = None
+
+ if path:
+ name = self.arg(1)
+ name, value, _ = self.parse_setting_line()
+ self.fm.set_option_from_string(name, value, localpath=path)
+
+
+class setintag(setlocal):
+ """:setintag <tag or tags> <option name>=<option value>
+
+ Sets an option for directories that are tagged with a specific tag.
+ """
+ def execute(self):
+ tags = self.arg(1)
+ self.shift()
+ name, value, _ = self.parse_setting_line()
+ self.fm.set_option_from_string(name, value, tags=tags)
+
+
+class default_linemode(Command):
+ def execute(self):
+ import re
+ from ranger.container.fsobject import FileSystemObject
+
+ if len(self.args) < 2:
+ self.fm.notify("Usage: default_linemode [path=<regexp> | tag=<tag(s)>] <linemode>", bad=True)
+
+ # Extract options like "path=..." or "tag=..." from the command line
+ arg1 = self.arg(1)
+ method = "always"
+ argument = None
+ if arg1.startswith("path="):
+ method = "path"
+ argument = re.compile(arg1[5:])
+ self.shift()
+ elif arg1.startswith("tag="):
+ method = "tag"
+ argument = arg1[4:]
+ self.shift()
+
+ # Extract and validate the line mode from the command line
+ linemode = self.rest(1)
+ if linemode not in FileSystemObject.linemode_dict:
+ self.fm.notify("Invalid linemode: %s; should be %s" %
+ (linemode, "/".join(FileSystemObject.linemode_dict)), bad=True)
+
+ # Add the prepared entry to the fm.default_linemodes
+ entry = [method, argument, linemode]
+ self.fm.default_linemodes.appendleft(entry)
+
+ # Redraw the columns
+ if hasattr(self.fm.ui, "browser"):
+ for col in self.fm.ui.browser.columns:
+ col.need_redraw = True
+
+ def tab(self):
+ mode = self.arg(1)
+ return (self.arg(0) + " " + linemode
+ for linemode in self.fm.thisfile.linemode_dict.keys()
+ if linemode.startswith(self.arg(1)))
+
+
+class quit(Command):
+ """:quit
+
+ Closes the current tab. If there is only one tab, quit the program.
+ """
+
+ def execute(self):
+ if len(self.fm.tabs) <= 1:
+ self.fm.exit()
+ self.fm.tab_close()
+
+
+class quitall(Command):
+ """:quitall
+
+ Quits the program immediately.
+ """
+
+ def execute(self):
+ self.fm.exit()
+
+
+class quit_bang(quitall):
+ """:quit!
+
+ Quits the program immediately.
+ """
+ name = 'quit!'
+ allow_abbrev = False
+
+
+class terminal(Command):
+ """:terminal
+
+ Spawns an "x-terminal-emulator" starting in the current directory.
+ """
+ def execute(self):
+ import os
+ from ranger.ext.get_executables import get_executables
+ command = os.environ.get('TERMCMD', os.environ.get('TERM'))
+ if command not in get_executables():
+ command = 'x-terminal-emulator'
+ if command not in get_executables():
+ command = 'xterm'
+ self.fm.run(command, flags='f')
+
+
+class delete(Command):
+ """:delete
+
+ Tries to delete the selection.
+
+ "Selection" is defined as all the "marked files" (by default, you
+ can mark files with space or v). If there are no marked files,
+ use the "current file" (where the cursor is)
+
+ When attempting to delete non-empty directories or multiple
+ marked files, it will require a confirmation.
+ """
+
+ allow_abbrev = False
+
+ def execute(self):
+ import os
+ if self.rest(1):
+ self.fm.notify("Error: delete takes no arguments! It deletes "
+ "the selected file(s).", bad=True)
+ return
+
+ cwd = self.fm.thisdir
+ cf = self.fm.thisfile
+ if not cwd or not cf:
+ self.fm.notify("Error: no file selected for deletion!", bad=True)
+ return
+
+ confirm = self.fm.settings.confirm_on_delete
+ many_files = (cwd.marked_items or (cf.is_directory and not cf.is_link \
+ and len(os.listdir(cf.path)) > 0))
+
+ if confirm != 'never' and (confirm != 'multiple' or many_files):
+ self.fm.ui.console.ask("Confirm deletion of: %s (y/N)" %
+ ', '.join(f.basename for f in self.fm.thistab.get_selection()),
+ self._question_callback, ('n', 'N', 'y', 'Y'))
+ else:
+ # no need for a confirmation, just delete
+ for f in self.fm.tags.tags:
+ if str(f).startswith(self.fm.thisfile.path):
+ self.fm.tags.remove(f)
+ self.fm.delete()
+
+ def _question_callback(self, answer):
+ if answer == 'y' or answer == 'Y':
+ for f in self.fm.tags.tags:
+ if str(f).startswith(self.fm.thisfile.path):
+ self.fm.tags.remove(f)
+ self.fm.delete()
+
+
+class mark_tag(Command):
+ """:mark_tag [<tags>]
+
+ Mark all tags that are tagged with either of the given tags.
+ When leaving out the tag argument, all tagged files are marked.
+ """
+ do_mark = True
+
+ def execute(self):
+ cwd = self.fm.thisdir
+ tags = self.rest(1).replace(" ","")
+ if not self.fm.tags:
+ return
+ for fileobj in cwd.files:
+ try:
+ tag = self.fm.tags.tags[fileobj.realpath]
+ except KeyError:
+ continue
+ if not tags or tag in tags:
+ cwd.mark_item(fileobj, val=self.do_mark)
+ self.fm.ui.status.need_redraw = True
+ self.fm.ui.need_redraw = True
+
+
+class console(Command):
+ """:console <command>
+
+ Open the console with the given command.
+ """
+ def execute(self):
+ position = None
+ if self.arg(1)[0:2] == '-p':
+ try:
+ position = int(self.arg(1)[2:])
+ self.shift()
+ except:
+ pass
+ self.fm.open_console(self.rest(1), position=position)
+
+
+class load_copy_buffer(Command):
+ """:load_copy_buffer
+
+ Load the copy buffer from confdir/copy_buffer
+ """
+ copy_buffer_filename = 'copy_buffer'
+ def execute(self):
+ from ranger.container.file import File
+ from os.path import exists
+ try:
+ fname = self.fm.confpath(self.copy_buffer_filename)
+ f = open(fname, 'r')
+ except:
+ return self.fm.notify("Cannot open %s" % \
+ (fname or self.copy_buffer_filename), bad=True)
+ self.fm.copy_buffer = set(File(g) \
+ for g in f.read().split("\n") if exists(g))
+ f.close()
+ self.fm.ui.redraw_main_column()
+
+
+class save_copy_buffer(Command):
+ """:save_copy_buffer
+
+ Save the copy buffer to confdir/copy_buffer
+ """
+ copy_buffer_filename = 'copy_buffer'
+ def execute(self):
+ fname = None
+ try:
+ fname = self.fm.confpath(self.copy_buffer_filename)
+ f = open(fname, 'w')
+ except:
+ return self.fm.notify("Cannot open %s" % \
+ (fname or self.copy_buffer_filename), bad=True)
+ f.write("\n".join(f.path for f in self.fm.copy_buffer))
+ f.close()
+
+
+class unmark_tag(mark_tag):
+ """:unmark_tag [<tags>]
+
+ Unmark all tags that are tagged with either of the given tags.
+ When leaving out the tag argument, all tagged files are unmarked.
+ """
+ do_mark = False
+
+
+class mkdir(Command):
+ """:mkdir <dirname>
+
+ Creates a directory with the name <dirname>.
+ """
+
+ def execute(self):
+ from os.path import join, expanduser, lexists
+ from os import makedirs
+
+ dirname = join(self.fm.thisdir.path, expanduser(self.rest(1)))
+ if not lexists(dirname):
+ makedirs(dirname)
+ else:
+ self.fm.notify("file/directory exists!", bad=True)
+
+ def tab(self):
+ return self._tab_directory_content()
+
+
+class touch(Command):
+ """:touch <fname>
+
+ Creates a file with the name <fname>.
+ """
+
+ def execute(self):
+ from os.path import join, expanduser, lexists
+
+ fname = join(self.fm.thisdir.path, expanduser(self.rest(1)))
+ if not lexists(fname):
+ open(fname, 'a').close()
+ else:
+ self.fm.notify("file/directory exists!", bad=True)
+
+ def tab(self):
+ return self._tab_directory_content()
+
+
+class edit(Command):
+ """:edit <filename>
+
+ Opens the specified file in vim
+ """
+
+ def execute(self):
+ if not self.arg(1):
+ self.fm.edit_file(self.fm.thisfile.path)
+ else:
+ self.fm.edit_file(self.rest(1))
+
+ def tab(self):
+ return self._tab_directory_content()
+
+
+class eval_(Command):
+ """:eval [-q] <python code>
+
+ Evaluates the python code.
+ `fm' is a reference to the FM instance.
+ To display text, use the function `p'.
+
+ Examples:
+ :eval fm
+ :eval len(fm.directories)
+ :eval p("Hello World!")
+ """
+ name = 'eval'
+ resolve_macros = False
+
+ def execute(self):
+ if self.arg(1) == '-q':
+ code = self.rest(2)
+ quiet = True
+ else:
+ code = self.rest(1)
+ quiet = False
+ import ranger
+ global cmd, fm, p, quantifier
+ fm = self.fm
+ cmd = self.fm.execute_console
+ p = fm.notify
+ quantifier = self.quantifier
+ try:
+ try:
+ result = eval(code)
+ except SyntaxError:
+ exec(code)
+ else:
+ if result and not quiet:
+ p(result)
+ except Exception as err:
+ p(err)
+
+
+class rename(Command):
+ """:rename <newname>
+
+ Changes the name of the currently highlighted file to <newname>
+ """
+
+ def execute(self):
+ from ranger.container.file import File
+ from os import access
+
+ new_name = self.rest(1)
+
+ tagged = {}
+ old_name = self.fm.thisfile.basename
+ for f in self.fm.tags.tags:
+ if str(f).startswith(self.fm.thisfile.path):
+ tagged[f] = self.fm.tags.tags[f]
+ self.fm.tags.remove(f)
+
+ if not new_name:
+ return self.fm.notify('Syntax: rename <newname>', bad=True)
+
+ if new_name == self.fm.thisfile.basename:
+ return
+
+ if access(new_name, os.F_OK):
+ return self.fm.notify("Can't rename: file already exists!", bad=True)
+
+ if self.fm.rename(self.fm.thisfile, new_name):
+ f = File(new_name)
+ self.fm.thisdir.pointed_obj = f
+ self.fm.thisfile = f
+ for t in tagged:
+ self.fm.tags.tags[t.replace(old_name,new_name)] = tagged[t]
+ self.fm.tags.dump()
+
+ def tab(self):
+ return self._tab_directory_content()
+
+class rename_append(Command):
+ """:rename_append
+
+ Creates an open_console for the rename command, automatically placing the cursor before the file extension.
+ """
+
+ def execute(self):
+ cf = self.fm.thisfile
+ if cf.basename.find('.') != 0 and cf.basename.rfind('.') != -1 and not cf.is_directory:
+ self.fm.open_console('rename ' + cf.basename, position=(7 + cf.basename.rfind('.')))
+ else:
+ self.fm.open_console('rename ' + cf.basename)
+
+class chmod(Command):
+ """:chmod <octal number>
+
+ Sets the permissions of the selection to the octal number.
+
+ The octal number is between 0 and 777. The digits specify the
+ permissions for the user, the group and others.
+
+ A 1 permits execution, a 2 permits writing, a 4 permits reading.
+ Add those numbers to combine them. So a 7 permits everything.
+ """
+
+ def execute(self):
+ mode = self.rest(1)
+ if not mode:
+ mode = str(self.quantifier)
+
+ try:
+ mode = int(mode, 8)
+ if mode < 0 or mode > 0o777:
+ raise ValueError
+ except ValueError:
+ self.fm.notify("Need an octal number between 0 and 777!", bad=True)
+ return
+
+ for file in self.fm.thistab.get_selection():
+ try:
+ os.chmod(file.path, mode)
+ except Exception as ex:
+ self.fm.notify(ex)
+
+ try:
+ # reloading directory. maybe its better to reload the selected
+ # files only.
+ self.fm.thisdir.load_content()
+ except:
+ pass
+
+
+class bulkrename(Command):
+ """:bulkrename
+
+ This command opens a list of selected files in an external editor.
+ After you edit and save the file, it will generate a shell script
+ which does bulk renaming according to the changes you did in the file.
+
+ This shell script is opened in an editor for you to review.
+ After you close it, it will be executed.
+ """
+ def execute(self):
+ import sys
+ import tempfile
+ from ranger.container.file import File
+ from ranger.ext.shell_escape import shell_escape as esc
+ py3 = sys.version_info[0] >= 3
+
+ # Create and edit the file list
+ filenames = [f.relative_path for f in self.fm.thistab.get_selection()]
+ listfile = tempfile.NamedTemporaryFile(delete=False)
+ listpath = listfile.name
+
+ if py3:
+ listfile.write("\n".join(filenames).encode("utf-8"))
+ else:
+ listfile.write("\n".join(filenames))
+ listfile.close()
+ self.fm.execute_file([File(listpath)], app='editor')
+ listfile = open(listpath, 'r')
+ new_filenames = listfile.read().split("\n")
+ listfile.close()
+ os.unlink(listpath)
+ if all(a == b for a, b in zip(filenames, new_filenames)):
+ self.fm.notify("No renaming to be done!")
+ return
+
+ # Generate script
+ cmdfile = tempfile.NamedTemporaryFile()
+ script_lines = []
+ script_lines.append("# This file will be executed when you close the editor.\n")
+ script_lines.append("# Please double-check everything, clear the file to abort.\n")
+ script_lines.extend("mv -vi -- %s %s\n" % (esc(old), esc(new)) \
+ for old, new in zip(filenames, new_filenames) if old != new)
+ script_content = "".join(script_lines)
+ if py3:
+ cmdfile.write(script_content.encode("utf-8"))
+ else:
+ cmdfile.write(script_content)
+ cmdfile.flush()
+
+ # Open the script and let the user review it, then check if the script
+ # was modified by the user
+ self.fm.execute_file([File(cmdfile.name)], app='editor')
+ cmdfile.seek(0)
+ script_was_edited = (script_content != cmdfile.read())
+
+ # Do the renaming
+ self.fm.run(['/bin/sh', cmdfile.name], flags='w')
+ cmdfile.close()
+
+ # Retag the files, but only if the script wasn't changed during review,
+ # because only then we know which are the source and destination files.
+ if not script_was_edited:
+ tags_changed = False
+ for old, new in zip(filenames, new_filenames):
+ if old != new:
+ oldpath = self.fm.thisdir.path + '/' + old
+ newpath = self.fm.thisdir.path + '/' + new
+ if oldpath in self.fm.tags:
+ old_tag = self.fm.tags.tags[oldpath]
+ self.fm.tags.remove(oldpath)
+ self.fm.tags.tags[newpath] = old_tag
+ tags_changed = True
+ if tags_changed:
+ self.fm.tags.dump()
+ else:
+ fm.notify("files have not been retagged")
+
+class relink(Command):
+ """:relink <newpath>
+
+ Changes the linked path of the currently highlighted symlink to <newpath>
+ """
+
+ def execute(self):
+ from ranger.container.file import File
+
+ new_path = self.rest(1)
+ cf = self.fm.thisfile
+
+ if not new_path:
+ return self.fm.notify('Syntax: relink <newpath>', bad=True)
+
+ if not cf.is_link:
+ return self.fm.notify('%s is not a symlink!' % cf.basename, bad=True)
+
+ if new_path == os.readlink(cf.path):
+ return
+
+ try:
+ os.remove(cf.path)
+ os.symlink(new_path, cf.path)
+ except OSError as err:
+ self.fm.notify(err)
+
+ self.fm.reset()
+ self.fm.thisdir.pointed_obj = cf
+ self.fm.thisfile = cf
+
+ def tab(self):
+ if not self.rest(1):
+ return self.line+os.readlink(self.fm.thisfile.path)
+ else:
+ return self._tab_directory_content()
+
+
+class help_(Command):
+ """:help
+
+ Display ranger's manual page.
+ """
+ name = 'help'
+ def execute(self):
+ def callback(answer):
+ if answer == "q":
+ return
+ elif answer == "m":
+ self.fm.display_help()
+ elif answer == "c":
+ self.fm.dump_commands()
+ elif answer == "k":
+ self.fm.dump_keybindings()
+ elif answer == "s":
+ self.fm.dump_settings()
+
+ c = self.fm.ui.console.ask("View [m]an page, [k]ey bindings,"
+ " [c]ommands or [s]ettings? (press q to abort)", callback, list("mkcsq") + [chr(27)])
+
+
+class copymap(Command):
+ """:copymap <keys> <newkeys1> [<newkeys2>...]
+
+ Copies a "browser" keybinding from <keys> to <newkeys>
+ """
+ context = 'browser'
+
+ def execute(self):
+ if not self.arg(1) or not self.arg(2):
+ return self.fm.notify("Not enough arguments", bad=True)
+
+ for arg in self.args[2:]:
+ self.fm.ui.keymaps.copy(self.context, self.arg(1), arg)
+
+
+class copypmap(copymap):
+ """:copypmap <keys> <newkeys1> [<newkeys2>...]
+
+ Copies a "pager" keybinding from <keys> to <newkeys>
+ """
+ context = 'pager'
+
+
+class copycmap(copymap):
+ """:copycmap <keys> <newkeys1> [<newkeys2>...]
+
+ Copies a "console" keybinding from <keys> to <newkeys>
+ """
+ context = 'console'
+
+
+class copytmap(copymap):
+ """:copycmap <keys> <newkeys1> [<newkeys2>...]
+
+ Copies a "taskview" keybinding from <keys> to <newkeys>
+ """
+ context = 'taskview'
+
+
+class unmap(Command):
+ """:unmap <keys> [<keys2>, ...]
+
+ Remove the given "browser" mappings
+ """
+ context = 'browser'
+
+ def execute(self):
+ for arg in self.args[1:]:
+ self.fm.ui.keymaps.unbind(self.context, arg)
+
+
+class cunmap(unmap):
+ """:cunmap <keys> [<keys2>, ...]
+
+ Remove the given "console" mappings
+ """
+ context = 'browser'
+
+
+class punmap(unmap):
+ """:punmap <keys> [<keys2>, ...]
+
+ Remove the given "pager" mappings
+ """
+ context = 'pager'
+
+
+class tunmap(unmap):
+ """:tunmap <keys> [<keys2>, ...]
+
+ Remove the given "taskview" mappings
+ """
+ context = 'taskview'
+
+
+class map_(Command):
+ """:map <keysequence> <command>
+
+ Maps a command to a keysequence in the "browser" context.
+
+ Example:
+ map j move down
+ map J move down 10
+ """
+ name = 'map'
+ context = 'browser'
+ resolve_macros = False
+
+ def execute(self):
+ if not self.arg(1) or not self.arg(2):
+ return self.fm.notify("Not enough arguments", bad=True)
+
+ self.fm.ui.keymaps.bind(self.context, self.arg(1), self.rest(2))
+
+
+class cmap(map_):
+ """:cmap <keysequence> <command>
+
+ Maps a command to a keysequence in the "console" context.
+
+ Example:
+ cmap <ESC> console_close
+ cmap <C-x> console_type test
+ """
+ context = 'console'
+
+
+class tmap(map_):
+ """:tmap <keysequence> <command>
+
+ Maps a command to a keysequence in the "taskview" context.
+ """
+ context = 'taskview'
+
+
+class pmap(map_):
+ """:pmap <keysequence> <command>
+
+ Maps a command to a keysequence in the "pager" context.
+ """
+ context = 'pager'
+
+
+class scout(Command):
+ """:scout [-FLAGS] <pattern>
+
+ Swiss army knife command for searching, traveling and filtering files.
+ The command takes various flags as arguments which can be used to
+ influence its behaviour:
+
+ -a = automatically open a file on unambiguous match
+ -e = open the selected file when pressing enter
+ -f = filter files that match the current search pattern
+ -g = interpret pattern as a glob pattern
+ -i = ignore the letter case of the files
+ -k = keep the console open when changing a directory with the command
+ -l = letter skipping; e.g. allow "rdme" to match the file "readme"
+ -m = mark the matching files after pressing enter
+ -M = unmark the matching files after pressing enter
+ -p = permanent filter: hide non-matching files after pressing enter
+ -s = smart case; like -i unless pattern contains upper case letters
+ -t = apply filter and search pattern as you type
+ -v = inverts the match
+
+ Multiple flags can be combined. For example, ":scout -gpt" would create
+ a :filter-like command using globbing.
+ """
+ AUTO_OPEN = 'a'
+ OPEN_ON_ENTER = 'e'
+ FILTER = 'f'
+ SM_GLOB = 'g'
+ IGNORE_CASE = 'i'
+ KEEP_OPEN = 'k'
+ SM_LETTERSKIP = 'l'
+ MARK = 'm'
+ UNMARK = 'M'
+ PERM_FILTER = 'p'
+ SM_REGEX = 'r'
+ SMART_CASE = 's'
+ AS_YOU_TYPE = 't'
+ INVERT = 'v'
+
+ def __init__(self, *args, **kws):
+ Command.__init__(self, *args, **kws)
+ self._regex = None
+ self.flags, self.pattern = self.parse_flags()
+
+ def execute(self):
+ thisdir = self.fm.thisdir
+ flags = self.flags
+ pattern = self.pattern
+ regex = self._build_regex()
+ count = self._count(move=True)
+
+ self.fm.thistab.last_search = regex
+ self.fm.set_search_method(order="search")
+
+ if self.MARK in flags or self.UNMARK in flags:
+ value = flags.find(self.MARK) > flags.find(self.UNMARK)
+ if self.FILTER in flags:
+ for f in thisdir.files:
+ thisdir.mark_item(f, value)
+ else:
+ for f in thisdir.files:
+ if regex.search(f.basename):
+ thisdir.mark_item(f, value)
+
+ if self.PERM_FILTER in flags:
+ thisdir.filter = regex if pattern else None
+
+ # clean up:
+ self.cancel()
+
+ if self.OPEN_ON_ENTER in flags or \
+ self.AUTO_OPEN in flags and count == 1:
+ if os.path.exists(pattern):
+ self.fm.cd(pattern)
+ else:
+ self.fm.move(right=1)
+
+ if self.KEEP_OPEN in flags and thisdir != self.fm.thisdir:
+ # reopen the console:
+ if not pattern:
+ self.fm.open_console(self.line)
+ else:
+ self.fm.open_console(self.line[0:-len(pattern)])
+
+ if self.quickly_executed and thisdir != self.fm.thisdir and pattern != "..":
+ self.fm.block_input(0.5)
+
+ def cancel(self):
+ self.fm.thisdir.temporary_filter = None
+ self.fm.thisdir.refilter()
+
+ def quick(self):
+ asyoutype = self.AS_YOU_TYPE in self.flags
+ if self.FILTER in self.flags:
+ self.fm.thisdir.temporary_filter = self._build_regex()
+ if self.PERM_FILTER in self.flags and asyoutype:
+ self.fm.thisdir.filter = self._build_regex()
+ if self.FILTER in self.flags or self.PERM_FILTER in self.flags:
+ self.fm.thisdir.refilter()
+ if self._count(move=asyoutype) == 1 and self.AUTO_OPEN in self.flags:
+ return True
+ return False
+
+ def tab(self):
+ self._count(move=True, offset=1)
+
+ def _build_regex(self):
+ if self._regex is not None:
+ return self._regex
+
+ frmat = "%s"
+ flags = self.flags
+ pattern = self.pattern
+
+ if pattern == ".":
+ return re.compile("")
+
+ # Handle carets at start and dollar signs at end separately
+ if pattern.startswith('^'):
+ pattern = pattern[1:]
+ frmat = "^" + frmat
+ if pattern.endswith('$'):
+ pattern = pattern[:-1]
+ frmat += "$"
+
+ # Apply one of the search methods
+ if self.SM_REGEX in flags:
+ regex = pattern
+ elif self.SM_GLOB in flags:
+ regex = re.escape(pattern).replace("\\*", ".*").replace("\\?", ".")
+ elif self.SM_LETTERSKIP in flags:
+ regex = ".*".join(re.escape(c) for c in pattern)
+ else:
+ regex = re.escape(pattern)
+
+ regex = frmat % regex
+
+ # Invert regular expression if necessary
+ if self.INVERT in flags:
+ regex = "^(?:(?!%s).)*$" % regex
+
+ # Compile Regular Expression
+ options = re.LOCALE | re.UNICODE
+ if self.IGNORE_CASE in flags or self.SMART_CASE in flags and \
+ pattern.islower():
+ options |= re.IGNORECASE
+ try:
+ self._regex = re.compile(regex, options)
+ except:
+ self._regex = re.compile("")
+ return self._regex
+
+ def _count(self, move=False, offset=0):
+ count = 0
+ cwd = self.fm.thisdir
+ pattern = self.pattern
+
+ if not pattern:
+ return 0
+ if pattern == '.':
+ return 0
+ if pattern == '..':
+ return 1
+
+ deq = deque(cwd.files)
+ deq.rotate(-cwd.pointer - offset)
+ i = offset
+ regex = self._build_regex()
+ for fsobj in deq:
+ if regex.search(fsobj.basename):
+ count += 1
+ if move and count == 1:
+ cwd.move(to=(cwd.pointer + i) % len(cwd.files))
+ self.fm.thisfile = cwd.pointed_obj
+ if count > 1:
+ return count
+ i += 1
+
+ return count == 1
+
+
+class filter_inode_type(Command):
+ """
+ :filter_inode_type [dfl]
+
+ Displays only the files of specified inode type. Parameters
+ can be combined.
+
+ d display directories
+ f display files
+ l display links
+ """
+
+ FILTER_DIRS = 'd'
+ FILTER_FILES = 'f'
+ FILTER_LINKS = 'l'
+
+ def execute(self):
+ if not self.arg(1):
+ self.fm.thisdir.inode_type_filter = None
+ else:
+ self.fm.thisdir.inode_type_filter = lambda file: (
+ True if ((self.FILTER_DIRS in self.arg(1) and file.is_directory) or
+ (self.FILTER_FILES in self.arg(1) and file.is_file and not file.is_link) or
+ (self.FILTER_LINKS in self.arg(1) and file.is_link)) else False)
+ self.fm.thisdir.refilter()
+
+
+class grep(Command):
+ """:grep <string>
+
+ Looks for a string in all marked files or directories
+ """
+
+ def execute(self):
+ if self.rest(1):
+ action = ['grep', '--line-number']
+ action.extend(['-e', self.rest(1), '-r'])
+ action.extend(f.path for f in self.fm.thistab.get_selection())
+ self.fm.execute_command(action, flags='p')
+
+
+# Version control commands
+# --------------------------------
+class stage(Command):
+ """
+ :stage
+
+ Stage selected files for the corresponding version control system
+ """
+ def execute(self):
+ from ranger.ext.vcs import VcsError
+
+ filelist = [f.path for f in self.fm.thistab.get_selection()]
+ self.fm.thisdir.vcs_outdated = True
+# for f in self.fm.thistab.get_selection():
+# f.vcs_outdated = True
+
+ try:
+ self.fm.thisdir.vcs.add(filelist)
+ except VcsError:
+ self.fm.notify("Could not stage files.")
+
+ self.fm.reload_cwd()
+
+
+class unstage(Command):
+ """
+ :unstage
+
+ Unstage selected files for the corresponding version control system
+ """
+ def execute(self):
+ from ranger.ext.vcs import VcsError
+
+ filelist = [f.path for f in self.fm.thistab.get_selection()]
+ self.fm.thisdir.vcs_outdated = True
+# for f in self.fm.thistab.get_selection():
+# f.vcs_outdated = True
+
+ try:
+ self.fm.thisdir.vcs.reset(filelist)
+ except VcsError:
+ self.fm.notify("Could not unstage files.")
+
+ self.fm.reload_cwd()
+
+
+class diff(Command):
+ """
+ :diff
+
+ Displays a diff of selected files against the last committed version
+ """
+ def execute(self):
+ from ranger.ext.vcs import VcsError
+ import tempfile
+
+ L = self.fm.thistab.get_selection()
+ if len(L) == 0: return
+
+ filelist = [f.path for f in L]
+ vcs = L[0].vcs
+
+ diff = vcs.get_raw_diff(filelist=filelist)
+ if len(diff.strip()) > 0:
+ tmp = tempfile.NamedTemporaryFile()
+ tmp.write(diff.encode('utf-8'))
+ tmp.flush()
+
+ pager = os.environ.get('PAGER', ranger.DEFAULT_PAGER)
+ self.fm.run([pager, tmp.name])
+ else:
+ raise Exception("diff is empty")
+
+
+class log(Command):
+ """
+ :log
+
+ Displays the log of the current repo or files
+ """
+ def execute(self):
+ from ranger.ext.vcs import VcsError
+ import tempfile
+
+ L = self.fm.thistab.get_selection()
+ if len(L) == 0: return
+
+ filelist = [f.path for f in L]
+ vcs = L[0].vcs
+
+ log = vcs.get_raw_log(filelist=filelist)
+ tmp = tempfile.NamedTemporaryFile()
+ tmp.write(log.encode('utf-8'))
+ tmp.flush()
+
+ pager = os.environ.get('PAGER', ranger.DEFAULT_PAGER)
+ self.fm.run([pager, tmp.name])
+
+class flat(Command):
+ """
+ :flat <level>
+
+ Flattens the directory view up to the specified level.
+
+ -1 fully flattened
+ 0 remove flattened view
+ """
+
+ def execute(self):
+ try:
+ level = self.rest(1)
+ level = int(level)
+ except ValueError:
+ level = self.quantifier
+ if level < -1:
+ self.fm.notify("Need an integer number (-1, 0, 1, ...)", bad=True)
+ self.fm.thisdir.unload()
+ self.fm.thisdir.flat = level
+ self.fm.thisdir.load_content()
+
+
+# Metadata commands
+# --------------------------------
+
+class prompt_metadata(Command):
+ """
+ :prompt_metadata <key1> [<key2> [<key3> ...]]
+
+ Prompt the user to input metadata for multiple keys in a row.
+ """
+
+ _command_name = "meta"
+ _console_chain = None
+ def execute(self):
+ prompt_metadata._console_chain = self.args[1:]
+ self._process_command_stack()
+
+ def _process_command_stack(self):
+ if prompt_metadata._console_chain:
+ key = prompt_metadata._console_chain.pop()
+ self._fill_console(key)
+ else:
+ for col in self.fm.ui.browser.columns:
+ col.need_redraw = True
+
+ def _fill_console(self, key):
+ metadata = self.fm.metadata.get_metadata(self.fm.thisfile.path)
+ if key in metadata and metadata[key]:
+ existing_value = metadata[key]
+ else:
+ existing_value = ""
+ text = "%s %s %s" % (self._command_name, key, existing_value)
+ self.fm.open_console(text, position=len(text))
+
+
+class meta(prompt_metadata):
+ """
+ :meta <key> [<value>]
+
+ Change metadata of a file. Deletes the key if value is empty.
+ """
+
+ def execute(self):
+ key = self.arg(1)
+ value = self.rest(1)
+ update_dict = dict()
+ update_dict[key] = self.rest(2)
+ selection = self.fm.thistab.get_selection()
+ for f in selection:
+ self.fm.metadata.set_metadata(f.path, update_dict)
+ self._process_command_stack()
+
+ def tab(self):
+ key = self.arg(1)
+ metadata = self.fm.metadata.get_metadata(self.fm.thisfile.path)
+ if key in metadata and metadata[key]:
+ return [" ".join([self.arg(0), self.arg(1), metadata[key]])]
+ else:
+ return [self.arg(0) + " " + key for key in sorted(metadata)
+ if key.startswith(self.arg(1))]
+
+
+class linemode(default_linemode):
+ """
+ :linemode <mode>
+
+ Change what is displayed as a filename.
+
+ - "mode" may be any of the defined linemodes (see: ranger.core.linemode).
+ "normal" is mapped to "filename".
+ """
+
+ def execute(self):
+ mode = self.arg(1)
+
+ if mode == "normal":
+ mode = DEFAULT_LINEMODE
+
+ if mode not in self.fm.thisfile.linemode_dict:
+ self.fm.notify("Unhandled linemode: `%s'" % mode, bad=True)
+ return
+
+ self.fm.thisdir._set_linemode_of_children(mode)
+
+ # Ask the browsercolumns to redraw
+ for col in self.fm.ui.browser.columns:
+ col.need_redraw = True
diff --git a/.config/ranger/history b/.config/ranger/history
@@ -0,0 +1,22 @@
+help
+rename
+rename debian2.jpg
+rename gnu1.jpg
+rename gnu2.png
+rename debian2.png
+rename debian3.jpg
+set preview_images True
+set preview_images_method urxvt
+set preview_images_method urxvt-full
+search
+search Down
+search wal
+search wall
+search network
+search mnt
+search vir
+delete
+
+search usr
+search w
+search W
diff --git a/.config/ranger/rc.conf b/.config/ranger/rc.conf
@@ -0,0 +1,583 @@
+# ===================================================================
+# This file contains the default startup commands for ranger.
+# To change them, it is recommended to create the file
+# ~/.config/ranger/rc.conf and add your custom commands there.
+#
+# If you copy this whole file there, you may want to set the environment
+# variable RANGER_LOAD_DEFAULT_RC to FALSE to avoid loading it twice.
+#
+# The purpose of this file is mainly to define keybindings and settings.
+# For running more complex python code, please create a plugin in "plugins/" or
+# a command in "commands.py".
+#
+# Each line is a command that will be run before the user interface
+# is initialized. As a result, you can not use commands which rely
+# on the UI such as :delete or :mark.
+# ===================================================================
+
+# ===================================================================
+# == Options
+# ===================================================================
+
+# How many columns are there, and what are their relative widths?
+set column_ratios 1,3,4
+
+# Which files should be hidden? (regular expression)
+set hidden_filter ^\.|\.(?:pyc|pyo|bak|swp)$|^lost\+found$|^__(py)?cache__$
+
+# Show hidden files? You can toggle this by typing 'zh'
+set show_hidden true
+
+# Ask for a confirmation when running the "delete" command?
+# Valid values are "always", "never", "multiple" (default)
+# With "multiple", ranger will ask only if you delete multiple files at once.
+set confirm_on_delete multiple
+
+# Which script is used to generate file previews?
+# ranger ships with scope.sh, a script that calls external programs (see
+# README.md for dependencies) to preview images, archives, etc.
+set preview_script ~/.config/ranger/scope.sh
+
+# Use the external preview script or display simple plain text or image previews?
+set use_preview_script true
+
+# Automatically count files in the directory, even before entering them?
+set automatically_count_files true
+
+# Open all images in this directory when running certain image viewers
+# like feh or sxiv? You can still open selected files by marking them.
+set open_all_images true
+
+# Be aware of version control systems and display information.
+set vcs_aware false
+
+# State of the three backends git, hg, bzr. The possible states are
+# disabled, local (only show local info), enabled (show local and remote
+# information).
+set vcs_backend_git enabled
+set vcs_backend_hg disabled
+set vcs_backend_bzr disabled
+
+# Use one of the supported image preview protocols
+set preview_images true
+
+# Set the preview image method. Supported methods:
+#
+# * w3m (default):
+# Preview images in full color with the external command "w3mimgpreview"?
+# This requires the console web browser "w3m" and a supported terminal.
+# It has been successfully tested with "xterm" and "urxvt" without tmux.
+#
+# * iterm2:
+# Preview images in full color using iTerm2 image previews
+# (http://iterm2.com/images.html). This requires using iTerm2 compiled
+# with image preview support.
+set preview_images_method w3m
+#set preview_images_method urxvt
+
+# Use a unicode "..." character to mark cut-off filenames?
+set unicode_ellipsis false
+
+# Show dotfiles in the bookmark preview box?
+set show_hidden_bookmarks true
+
+# Which colorscheme to use? These colorschemes are available by default:
+# default, jungle, snow, solarized
+set colorscheme default
+
+# Preview files on the rightmost column?
+# And collapse (shrink) the last column if there is nothing to preview?
+set preview_files true
+set preview_directories true
+set collapse_preview true
+
+# Save the console history on exit?
+set save_console_history true
+
+# Draw the status bar on top of the browser window (default: bottom)
+set status_bar_on_top false
+
+# Draw a progress bar in the status bar which displays the average state of all
+# currently running tasks which support progress bars?
+set draw_progress_bar_in_status_bar true
+
+# Draw borders around columns?
+set draw_borders true
+
+# Display the directory name in tabs?
+set dirname_in_tabs false
+
+# Enable the mouse support?
+set mouse_enabled true
+
+# Display the file size in the main column or status bar?
+set display_size_in_main_column true
+set display_size_in_status_bar true
+
+# Display files tags in all columns or only in main column?
+set display_tags_in_all_columns true
+
+# Set a title for the window?
+set update_title false
+
+# Set the title to "ranger" in the tmux program?
+set update_tmux_title false
+
+# Shorten the title if it gets long? The number defines how many
+# directories are displayed at once, 0 turns off this feature.
+set shorten_title 3
+
+# Abbreviate $HOME with ~ in the titlebar (first line) of ranger?
+set tilde_in_titlebar false
+
+# How many directory-changes or console-commands should be kept in history?
+set max_history_size 20
+set max_console_history_size 50
+
+# Try to keep so much space between the top/bottom border when scrolling:
+set scroll_offset 8
+
+# Flush the input after each key hit? (Noticable when ranger lags)
+set flushinput true
+
+# Padding on the right when there's no preview?
+# This allows you to click into the space to run the file.
+set padding_right true
+
+# Save bookmarks (used with mX and `X) instantly?
+# This helps to synchronize bookmarks between multiple ranger
+# instances but leads to *slight* performance loss.
+# When false, bookmarks are saved when ranger is exited.
+set autosave_bookmarks true
+
+# You can display the "real" cumulative size of directories by using the
+# command :get_cumulative_size or typing "dc". The size is expensive to
+# calculate and will not be updated automatically. You can choose
+# to update it automatically though by turning on this option:
+set autoupdate_cumulative_size false
+
+# Turning this on makes sense for screen readers:
+set show_cursor false
+
+# One of: size, natural, basename, atime, ctime, mtime, type, random
+set sort natural
+
+# Additional sorting options
+set sort_reverse false
+set sort_case_insensitive true
+set sort_directories_first true
+set sort_unicode false
+
+# Enable this if key combinations with the Alt Key don't work for you.
+# (Especially on xterm)
+set xterm_alt_key false
+
+# Whether to include bookmarks in cd command
+set cd_bookmarks true
+
+# Avoid previewing files larger than this size, in bytes. Use a value of 0 to
+# disable this feature.
+set preview_max_size 0
+
+# Add the highlighted file to the path in the titlebar
+set show_selection_in_titlebar true
+
+# The delay that ranger idly waits for user input, in milliseconds, with a
+# resolution of 100ms. Lower delay reduces lag between directory updates but
+# increases CPU load.
+set idle_delay 2000
+
+# When the metadata manager module looks for metadata, should it only look for
+# a ".metadata.json" file in the current directory, or do a deep search and
+# check all directories above the current one as well?
+set metadata_deep_search false
+
+# ===================================================================
+# == Local Options
+# ===================================================================
+# You can set local options that only affect a single directory.
+
+# Examples:
+# setlocal path=~/downloads sort mtime
+
+# ===================================================================
+# == Command Aliases in the Console
+# ===================================================================
+
+alias e edit
+alias q quit
+alias q! quitall
+alias qa quitall
+alias qall quitall
+alias setl setlocal
+
+alias filter scout -prt
+alias find scout -aeit
+alias mark scout -mr
+alias unmark scout -Mr
+alias search scout -rs
+alias search_inc scout -rts
+alias travel scout -aefiklst
+
+# ===================================================================
+# == Define keys for the browser
+# ===================================================================
+
+# Basic
+map Q quit!
+map q quit
+copymap q ZZ ZQ
+
+map R reload_cwd
+map <C-r> reset
+map <C-l> redraw_window
+map <C-c> abort
+map <esc> change_mode normal
+
+map i display_file
+map ? help
+map W display_log
+map w taskview_open
+map S shell $SHELL
+
+map : console
+map ; console
+map ! console shell%space
+map @ console -p6 shell %%s
+map # console shell -p%space
+map s console shell%space
+map r chain draw_possible_programs; console open_with%space
+map f console find%space
+map cd console cd%space
+
+# Change the line mode
+map Mf linemode filename
+map Mi linemode fileinfo
+map Mp linemode permissions
+map Mt linemode metatitle
+
+# Tagging / Marking
+map t tag_toggle
+map ut tag_remove
+map "<any> tag_toggle tag=%any
+map <Space> mark_files toggle=True
+map v mark_files all=True toggle=True
+map uv mark_files all=True val=False
+map V toggle_visual_mode
+map uV toggle_visual_mode reverse=True
+
+# For the nostalgics: Midnight Commander bindings
+map <F1> help
+map <F3> display_file
+map <F4> edit
+map <F5> copy
+map <F6> cut
+map <F7> console mkdir%space
+map <F8> console delete
+map <F10> exit
+
+# In case you work on a keyboard with dvorak layout
+map <UP> move up=1
+map <DOWN> move down=1
+map <LEFT> move left=1
+map <RIGHT> move right=1
+map <HOME> move to=0
+map <END> move to=-1
+map <PAGEDOWN> move down=1 pages=True
+map <PAGEUP> move up=1 pages=True
+map <CR> move right=1
+#map <DELETE> console delete
+map <INSERT> console touch%space
+
+# VIM-like
+copymap <UP> k
+copymap <DOWN> j
+copymap <LEFT> h
+copymap <RIGHT> l
+copymap <HOME> gg
+copymap <END> G
+copymap <PAGEDOWN> <C-F>
+copymap <PAGEUP> <C-B>
+
+map J move down=3
+#map J move down=0.5 pages=True
+map K move up=3
+#map K move up=0.5 pages=True
+copymap J <C-D>
+copymap K <C-U>
+
+# Jumping around
+map H history_go -1
+map L history_go 1
+map ] move_parent 1
+map [ move_parent -1
+map } traverse
+
+map gh cd ~
+map ge cd /etc
+map gu cd /usr
+map gd cd /dev
+map gl cd -r .
+map gL cd -r %f
+map go cd /opt
+map gv cd /var
+map gm cd /media
+map gM cd /mnt
+map gs cd /srv
+map gr cd /
+map gR eval fm.cd(ranger.RANGERDIR)
+map g/ cd /
+map g? cd /usr/share/doc/ranger
+
+# External Programs
+map E edit
+map du shell -p du --max-depth=1 -h --apparent-size
+map dU shell -p du --max-depth=1 -h --apparent-size | sort -rh
+map yp shell -f echo -n %d/%f | xsel -i; xsel -o | xsel -i -b
+map yd shell -f echo -n %d | xsel -i; xsel -o | xsel -i -b
+map yn shell -f echo -n %f | xsel -i; xsel -o | xsel -i -b
+
+# Filesystem Operations
+map = chmod
+
+map cw console rename%space
+map a rename_append
+map A eval fm.open_console('rename ' + fm.thisfile.basename)
+map I eval fm.open_console('rename ' + fm.thisfile.basename, position=7)
+
+map pp paste
+map po paste overwrite=True
+map pl paste_symlink relative=False
+map pL paste_symlink relative=True
+map phl paste_hardlink
+map pht paste_hardlinked_subtree
+
+map dD console delete
+
+map dd cut
+map ud uncut
+map da cut mode=add
+map dr cut mode=remove
+
+map yy copy
+map uy uncut
+map ya copy mode=add
+map yr copy mode=remove
+
+# Temporary workarounds
+map dgg eval fm.cut(dirarg=dict(to=0), narg=quantifier)
+map dG eval fm.cut(dirarg=dict(to=-1), narg=quantifier)
+map dj eval fm.cut(dirarg=dict(down=1), narg=quantifier)
+map dk eval fm.cut(dirarg=dict(up=1), narg=quantifier)
+map ygg eval fm.copy(dirarg=dict(to=0), narg=quantifier)
+map yG eval fm.copy(dirarg=dict(to=-1), narg=quantifier)
+map yj eval fm.copy(dirarg=dict(down=1), narg=quantifier)
+map yk eval fm.copy(dirarg=dict(up=1), narg=quantifier)
+
+# Searching
+map / console search%space
+map n search_next
+map N search_next forward=False
+map ct search_next order=tag
+map cs search_next order=size
+map ci search_next order=mimetype
+map cc search_next order=ctime
+map cm search_next order=mtime
+map ca search_next order=atime
+
+# Tabs
+map <C-n> tab_new ~
+map <C-w> tab_close
+map <TAB> tab_move 1
+map <S-TAB> tab_move -1
+map <A-Right> tab_move 1
+map <A-Left> tab_move -1
+map gt tab_move 1
+map gT tab_move -1
+map gn tab_new ~
+map gc tab_close
+map uq tab_restore
+map <a-1> tab_open 1
+map <a-2> tab_open 2
+map <a-3> tab_open 3
+map <a-4> tab_open 4
+map <a-5> tab_open 5
+map <a-6> tab_open 6
+map <a-7> tab_open 7
+map <a-8> tab_open 8
+map <a-9> tab_open 9
+
+# Sorting
+map or toggle_option sort_reverse
+map oz set sort=random
+map os chain set sort=size; set sort_reverse=False
+map ob chain set sort=basename; set sort_reverse=False
+map on chain set sort=natural; set sort_reverse=False
+map om chain set sort=mtime; set sort_reverse=False
+map oc chain set sort=ctime; set sort_reverse=False
+map oa chain set sort=atime; set sort_reverse=False
+map ot chain set sort=type; set sort_reverse=False
+map oe chain set sort=extension; set sort_reverse=False
+
+map oS chain set sort=size; set sort_reverse=True
+map oB chain set sort=basename; set sort_reverse=True
+map oN chain set sort=natural; set sort_reverse=True
+map oM chain set sort=mtime; set sort_reverse=True
+map oC chain set sort=ctime; set sort_reverse=True
+map oA chain set sort=atime; set sort_reverse=True
+map oT chain set sort=type; set sort_reverse=True
+map oE chain set sort=extension; set sort_reverse=True
+
+map dc get_cumulative_size
+
+# Settings
+map zc toggle_option collapse_preview
+map zd toggle_option sort_directories_first
+map zh toggle_option show_hidden
+map <C-h> toggle_option show_hidden
+map zi toggle_option flushinput
+map zm toggle_option mouse_enabled
+map zp toggle_option preview_files
+map zP toggle_option preview_directories
+map zs toggle_option sort_case_insensitive
+map zu toggle_option autoupdate_cumulative_size
+map zv toggle_option use_preview_script
+map zf console filter%space
+
+# Bookmarks
+map `<any> enter_bookmark %any
+map '<any> enter_bookmark %any
+map m<any> set_bookmark %any
+map um<any> unset_bookmark %any
+
+map m<bg> draw_bookmarks
+copymap m<bg> um<bg> `<bg> '<bg>
+
+# Generate all the chmod bindings with some python help:
+eval for arg in "rwxXst": cmd("map +u{0} shell -f chmod u+{0} %s".format(arg))
+eval for arg in "rwxXst": cmd("map +g{0} shell -f chmod g+{0} %s".format(arg))
+eval for arg in "rwxXst": cmd("map +o{0} shell -f chmod o+{0} %s".format(arg))
+eval for arg in "rwxXst": cmd("map +a{0} shell -f chmod a+{0} %s".format(arg))
+eval for arg in "rwxXst": cmd("map +{0} shell -f chmod u+{0} %s".format(arg))
+
+eval for arg in "rwxXst": cmd("map -u{0} shell -f chmod u-{0} %s".format(arg))
+eval for arg in "rwxXst": cmd("map -g{0} shell -f chmod g-{0} %s".format(arg))
+eval for arg in "rwxXst": cmd("map -o{0} shell -f chmod o-{0} %s".format(arg))
+eval for arg in "rwxXst": cmd("map -a{0} shell -f chmod a-{0} %s".format(arg))
+eval for arg in "rwxXst": cmd("map -{0} shell -f chmod u-{0} %s".format(arg))
+
+# ===================================================================
+# == Define keys for the console
+# ===================================================================
+# Note: Unmapped keys are passed directly to the console.
+
+# Basic
+cmap <tab> eval fm.ui.console.tab()
+cmap <s-tab> eval fm.ui.console.tab(-1)
+cmap <ESC> eval fm.ui.console.close()
+cmap <CR> eval fm.ui.console.execute()
+cmap <C-l> redraw_window
+
+copycmap <ESC> <C-c>
+copycmap <CR> <C-j>
+
+# Move around
+cmap <up> eval fm.ui.console.history_move(-1)
+cmap <down> eval fm.ui.console.history_move(1)
+cmap <left> eval fm.ui.console.move(left=1)
+cmap <right> eval fm.ui.console.move(right=1)
+cmap <home> eval fm.ui.console.move(right=0, absolute=True)
+cmap <end> eval fm.ui.console.move(right=-1, absolute=True)
+
+# Line Editing
+cmap <backspace> eval fm.ui.console.delete(-1)
+cmap <delete> eval fm.ui.console.delete(0)
+cmap <C-w> eval fm.ui.console.delete_word()
+cmap <C-k> eval fm.ui.console.delete_rest(1)
+cmap <C-u> eval fm.ui.console.delete_rest(-1)
+cmap <C-y> eval fm.ui.console.paste()
+
+# And of course the emacs way
+copycmap <up> <C-p>
+copycmap <down> <C-n>
+copycmap <left> <C-b>
+copycmap <right> <C-f>
+copycmap <home> <C-a>
+copycmap <end> <C-e>
+copycmap <delete> <C-d>
+copycmap <backspace> <C-h>
+
+# Note: There are multiple ways to express backspaces. <backspace> (code 263)
+# and <backspace2> (code 127). To be sure, use both.
+copycmap <backspace> <backspace2>
+
+# This special expression allows typing in numerals:
+cmap <allow_quantifiers> false
+
+# ===================================================================
+# == Pager Keybindings
+# ===================================================================
+
+# Movement
+pmap <down> pager_move down=1
+pmap <up> pager_move up=1
+pmap <left> pager_move left=4
+pmap <right> pager_move right=4
+pmap <home> pager_move to=0
+pmap <end> pager_move to=-1
+pmap <pagedown> pager_move down=1.0 pages=True
+pmap <pageup> pager_move up=1.0 pages=True
+pmap <C-d> pager_move down=0.5 pages=True
+pmap <C-u> pager_move up=0.5 pages=True
+
+copypmap <UP> k <C-p>
+copypmap <DOWN> j <C-n> <CR>
+copypmap <LEFT> h
+copypmap <RIGHT> l
+copypmap <HOME> g
+copypmap <END> G
+copypmap <C-d> d
+copypmap <C-u> u
+copypmap <PAGEDOWN> n f <C-F> <Space>
+copypmap <PAGEUP> p b <C-B>
+
+# Basic
+pmap <C-l> redraw_window
+pmap <ESC> pager_close
+copypmap <ESC> q Q i <F3>
+pmap E edit_file
+
+# ===================================================================
+# == Taskview Keybindings
+# ===================================================================
+
+# Movement
+tmap <up> taskview_move up=1
+tmap <down> taskview_move down=1
+tmap <home> taskview_move to=0
+tmap <end> taskview_move to=-1
+tmap <pagedown> taskview_move down=1.0 pages=True
+tmap <pageup> taskview_move up=1.0 pages=True
+tmap <C-d> taskview_move down=0.5 pages=True
+tmap <C-u> taskview_move up=0.5 pages=True
+
+copytmap <UP> k <C-p>
+copytmap <DOWN> j <C-n> <CR>
+copytmap <HOME> g
+copytmap <END> G
+copytmap <C-u> u
+copytmap <PAGEDOWN> n f <C-F> <Space>
+copytmap <PAGEUP> p b <C-B>
+
+# Changing priority and deleting tasks
+tmap J eval -q fm.ui.taskview.task_move(-1)
+tmap K eval -q fm.ui.taskview.task_move(0)
+tmap dd eval -q fm.ui.taskview.task_remove()
+tmap <pagedown> eval -q fm.ui.taskview.task_move(-1)
+tmap <pageup> eval -q fm.ui.taskview.task_move(0)
+tmap <delete> eval -q fm.ui.taskview.task_remove()
+
+# Basic
+tmap <C-l> redraw_window
+tmap <ESC> taskview_close
+copytmap <ESC> q Q w <C-c>
diff --git a/.config/ranger/rifle.conf b/.config/ranger/rifle.conf
@@ -0,0 +1,197 @@
+# vim: ft=cfg
+#
+# This is the configuration file of "rifle", ranger's file executor/opener.
+# Each line consists of conditions and a command. For each line the conditions
+# are checked and if they are met, the respective command is run.
+#
+# Syntax:
+# <condition1> , <condition2> , ... = command
+#
+# The command can contain these environment variables:
+# $1-$9 | The n-th selected file
+# $@ | All selected files
+#
+# If you use the special command "ask", rifle will ask you what program to run.
+#
+# Prefixing a condition with "!" will negate its result.
+# These conditions are currently supported:
+# match <regexp> | The regexp matches $1
+# ext <regexp> | The regexp matches the extension of $1
+# mime <regexp> | The regexp matches the mime type of $1
+# name <regexp> | The regexp matches the basename of $1
+# path <regexp> | The regexp matches the absolute path of $1
+# has <program> | The program is installed (i.e. located in $PATH)
+# env <variable> | The environment variable "variable" is non-empty
+# file | $1 is a file
+# directory | $1 is a directory
+# number <n> | change the number of this command to n
+# terminal | stdin, stderr and stdout are connected to a terminal
+# X | $DISPLAY is not empty (i.e. Xorg runs)
+#
+# There are also pseudo-conditions which have a "side effect":
+# flag <flags> | Change how the program is run. See below.
+# label <label> | Assign a label or name to the command so it can
+# | be started with :open_with <label> in ranger
+# | or `rifle -p <label>` in the standalone executable.
+# else | Always true.
+#
+# Flags are single characters which slightly transform the command:
+# f | Fork the program, make it run in the background.
+# | New command = setsid $command >& /dev/null &
+# r | Execute the command with root permissions
+# | New command = sudo $command
+# t | Run the program in a new terminal. If $TERMCMD is not defined,
+# | rifle will attempt to extract it from $TERM.
+# | New command = $TERMCMD -e $command
+# Note: The "New command" serves only as an illustration, the exact
+# implementation may differ.
+# Note: When using rifle in ranger, there is an additional flag "c" for
+# only running the current file even if you have marked multiple files.
+
+#-------------------------------------------
+# Websites
+#-------------------------------------------
+# Rarely installed browsers get higher priority; It is assumed that if you
+# install a rare browser, you probably use it. Firefox/konqueror/w3m on the
+# other hand are often only installed as fallback browsers.
+ext x?html?, has surf, X, flag f = surf -- file://"$1"
+ext x?html?, has vimprobable, X, flag f = vimprobable -- "$@"
+ext x?html?, has vimprobable2, X, flag f = vimprobable2 -- "$@"
+ext x?html?, has dwb, X, flag f = dwb -- "$@"
+ext x?html?, has jumanji, X, flag f = jumanji -- "$@"
+ext x?html?, has luakit, X, flag f = luakit -- "$@"
+ext x?html?, has uzbl, X, flag f = uzbl -- "$@"
+ext x?html?, has uzbl-browser, X, flag f = uzbl-browser -- "$@"
+ext x?html?, has uzbl-core, X, flag f = uzbl-core -- "$@"
+ext x?html?, has midori, X, flag f = midori -- "$@"
+ext x?html?, has chromium, X, flag f = chromium -- "$@"
+ext x?html?, has opera, X, flag f = opera -- "$@"
+ext x?html?, has firefox, X, flag f = firefox -- "$@"
+ext x?html?, has seamonkey, X, flag f = seamonkey -- "$@"
+ext x?html?, has iceweasel, X, flag f = iceweasel -- "$@"
+ext x?html?, has epiphany, X, flag f = epiphany -- "$@"
+ext x?html?, has konqueror, X, flag f = konqueror -- "$@"
+ext x?html?, has elinks, terminal = elinks "$@"
+ext x?html?, has links2, terminal = links2 "$@"
+ext x?html?, has links, terminal = links "$@"
+ext x?html?, has lynx, terminal = lynx -- "$@"
+ext x?html?, has w3m, terminal = w3m "$@"
+
+#-------------------------------------------
+# Misc
+#-------------------------------------------
+# Define the "editor" for text files as first action
+mime ^text, label editor = $EDITOR -- "$@"
+mime ^text, label pager = "$PAGER" -- "$@"
+!mime ^text, label editor, ext xml|csv|tex|py|pl|rb|js|sh|php = $EDITOR -- "$@"
+!mime ^text, label pager, ext xml|csv|tex|py|pl|rb|js|sh|php = "$PAGER" -- "$@"
+
+ext 1 = man "$1"
+ext s[wmf]c, has zsnes, X = zsnes "$1"
+ext s[wmf]c, has snes9x-gtk,X = snes9x-gtk "$1"
+ext nes, has fceux, X = fceux "$1"
+ext exe = wine "$1"
+name ^[mM]akefile$ = make
+
+#--------------------------------------------
+# Code
+#-------------------------------------------
+ext py = python -- "$1"
+ext pl = perl -- "$1"
+ext rb = ruby -- "$1"
+ext js = node -- "$1"
+ext sh = sh -- "$1"
+ext php = php -- "$1"
+
+#--------------------------------------------
+# Audio without X
+#-------------------------------------------
+mime ^audio|ogg$, terminal, has mplayer = mplayer -- "$@"
+mime ^audio|ogg$, terminal, has mplayer2 = mplayer2 -- "$@"
+mime ^audio|ogg$, terminal, has mpv = mpv -- "$@"
+ext midi?, terminal, has wildmidi = wildmidi -- "$@"
+
+#--------------------------------------------
+# Video/Audio with a GUI
+#-------------------------------------------
+mime ^video|audio, has gmplayer, X, flag f = gmplayer -- "$@"
+mime ^video|audio, has smplayer, X, flag f = smplayer "$@"
+mime ^video, has mpv, X, flag f = mpv -- "$@"
+mime ^video, has mpv, X, flag f = mpv --fs -- "$@"
+mime ^video, has mplayer2, X, flag f = mplayer2 -- "$@"
+mime ^video, has mplayer2, X, flag f = mplayer2 -fs -- "$@"
+mime ^video, has mplayer, X, flag f = mplayer -- "$@"
+mime ^video, has mplayer, X, flag f = mplayer -fs -- "$@"
+mime ^video|audio, has vlc, X, flag f = vlc -- "$@"
+mime ^video|audio, has totem, X, flag f = totem -- "$@"
+mime ^video|audio, has totem, X, flag f = totem --fullscreen -- "$@"
+
+#--------------------------------------------
+# Video without X:
+#-------------------------------------------
+mime ^video, terminal, !X, has mpv = mpv -- "$@"
+mime ^video, terminal, !X, has mplayer2 = mplayer2 -- "$@"
+mime ^video, terminal, !X, has mplayer = mplayer -- "$@"
+
+#-------------------------------------------
+# Documents
+#-------------------------------------------
+ext pdf, has llpp, X, flag f = llpp "$@"
+ext pdf, has zathura, X, flag f = zathura -- "$@"
+ext pdf, has mupdf, X, flag f = mupdf -- "$@"
+ext pdf, has apvlv, X, flag f = apvlv -- "$@"
+ext pdf, has xpdf, X, flag f = xpdf -- "$@"
+ext pdf, has evince, X, flag f = evince -- "$@"
+ext pdf, has atril, X, flag f = atril -- "$@"
+ext pdf, has okular, X, flag f = okular -- "$@"
+ext pdf, has epdfview, X, flag f = epdfview -- "$@"
+ext pdf, has qpdfview, X, flag f = qpdfview "$@"
+
+ext docx?, has catdoc, terminal = catdoc -- "$@" | "$PAGER"
+
+ext sxc|xlsx?|xlt|xlw|gnm|gnumeric, has gnumeric, X, flag f = gnumeric -- "$@"
+ext sxc|xlsx?|xlt|xlw|gnm|gnumeric, has kspread, X, flag f = kspread -- "$@"
+ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has libreoffice, X, flag f = libreoffice "$@"
+ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has soffice, X, flag f = soffice "$@"
+ext pptx?|od[dfgpst]|docx?|sxc|xlsx?|xlt|xlw|gnm|gnumeric, has ooffice, X, flag f = ooffice "$@"
+
+ext djvu, has evince, X, flag f = evince -- "$@"
+ext djvu, has atril, X, flag f = atril -- "$@"
+
+#-------------------------------------------
+# Image Viewing:
+#-------------------------------------------
+mime ^image, has sxiv, X, flag f = sxiv -- "$@"
+mime ^image, has feh, X, flag f = feh -- "$@"
+mime ^image, has mirage, X, flag f = mirage -- "$@"
+mime ^image, has ristretto, X, flag f = ristretto "$@"
+mime ^image, has eog, X, flag f = eog -- "$@"
+mime ^image, has eom, X, flag f = eom -- "$@"
+mime ^image, has gimp, X, flag f = gimp -- "$@"
+ext xcf, X, flag f = gimp -- "$@"
+
+#-------------------------------------------
+# Archives
+#-------------------------------------------
+# This requires atool
+ext 7z|ace|ar|arc|bz2?|cab|cpio|cpt|deb|dgc|dmg|gz, has als = als -- "$@" | "$PAGER"
+ext iso|jar|msi|pkg|rar|shar|tar|tgz|xar|xpi|xz|zip, has als = als -- "$@" | "$PAGER"
+ext 7z|ace|ar|arc|bz2?|cab|cpio|cpt|deb|dgc|dmg|gz, has aunpack = aunpack -- "$@"
+ext iso|jar|msi|pkg|rar|shar|tar|tgz|xar|xpi|xz|zip, has aunpack = aunpack -- "$@"
+
+# Fallback:
+ext tar|gz, has tar = tar vvtf "$@" | "$PAGER"
+ext tar|gz, has tar = tar vvxf "$@"
+
+#-------------------------------------------
+# Misc
+#-------------------------------------------
+label wallpaper, number 11, mime ^image, X = feh --bg-scale "$1"
+label wallpaper, number 12, mime ^image, X = feh --bg-tile "$1"
+label wallpaper, number 13, mime ^image, X = feh --bg-center "$1"
+label wallpaper, number 14, mime ^image, X = feh --bg-fill "$1"
+
+# Define the editor for non-text files + pager as last action
+ !mime ^text, !ext xml|csv|tex|py|pl|rb|js|sh|php = ask
+label editor, !mime ^text, !ext xml|csv|tex|py|pl|rb|js|sh|php = $EDITOR -- "$@"
+label pager, !mime ^text, !ext xml|csv|tex|py|pl|rb|js|sh|php = "$PAGER" -- "$@"
diff --git a/.config/ranger/scope.sh b/.config/ranger/scope.sh
@@ -0,0 +1,89 @@
+#!/usr/bin/env sh
+# ranger supports enhanced previews. If the option "use_preview_script"
+# is set to True and this file exists, this script will be called and its
+# output is displayed in ranger. ANSI color codes are supported.
+
+# NOTES: This script is considered a configuration file. If you upgrade
+# ranger, it will be left untouched. (You must update it yourself.)
+# Also, ranger disables STDIN here, so interactive scripts won't work properly
+
+# Meanings of exit codes:
+# code | meaning | action of ranger
+# -----+------------+-------------------------------------------
+# 0 | success | success. display stdout as preview
+# 1 | no preview | failure. display no preview at all
+# 2 | plain text | display the plain content of the file
+# 3 | fix width | success. Don't reload when width changes
+# 4 | fix height | success. Don't reload when height changes
+# 5 | fix both | success. Don't ever reload
+# 6 | image | success. display the image $cached points to as an image preview
+
+# Meaningful aliases for arguments:
+path="$1" # Full path of the selected file
+width="$2" # Width of the preview pane (number of fitting characters)
+height="$3" # Height of the preview pane (number of fitting characters)
+cached="$4" # Path that should be used to cache image previews
+
+maxln=200 # Stop after $maxln lines. Can be used like ls | head -n $maxln
+
+# Find out something about the file:
+mimetype=$(file --mime-type -Lb "$path")
+extension=$(/bin/echo -E "${path##*.}" | tr "[:upper:]" "[:lower:]")
+
+# Functions:
+# runs a command and saves its output into $output. Useful if you need
+# the return value AND want to use the output in a pipe
+try() { output=$(eval '"$@"'); }
+
+# writes the output of the previously used "try" command
+dump() { /bin/echo -E "$output"; }
+
+# a common post-processing function used after most commands
+trim() { head -n "$maxln"; }
+
+# wraps highlight to treat exit code 141 (killed by SIGPIPE) as success
+highlight() { command highlight "$@"; test $? = 0 -o $? = 141; }
+
+case "$extension" in
+ # Archive extensions:
+ 7z|a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\
+ rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip)
+ try als "$path" && { dump | trim; exit 0; }
+ try acat "$path" && { dump | trim; exit 3; }
+ try bsdtar -lf "$path" && { dump | trim; exit 0; }
+ exit 1;;
+ rar)
+ try unrar -p- lt "$path" && { dump | trim; exit 0; } || exit 1;;
+ # PDF documents:
+ pdf)
+ try pdftotext -l 10 -nopgbrk -q "$path" - && \
+ { dump | trim | fmt -s -w $width; exit 0; } || exit 1;;
+ # BitTorrent Files
+ torrent)
+ try transmission-show "$path" && { dump | trim; exit 5; } || exit 1;;
+ # HTML Pages:
+ htm|html|xhtml)
+ try w3m -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; }
+ try lynx -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; }
+ try elinks -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; }
+ ;; # fall back to highlight/cat if the text browsers fail
+esac
+
+case "$mimetype" in
+ # Syntax highlight for text files:
+ text/* | */xml)
+ try highlight --out-format=ansi "$path" && { dump | trim; exit 5; } || exit 2;;
+ # Ascii-previews of images:
+ image/*)
+ img2txt --gamma=0.6 --width="$width" "$path" && exit 4 || exit 1;;
+ # Image preview for videos, disabled by default:
+ # video/*)
+ # ffmpegthumbnailer -i "$path" -o "$cached" -s 0 && exit 6 || exit 1;;
+ # Display information about media files:
+ video/* | audio/*)
+ exiftool "$path" && exit 5
+ # Use sed to remove spaces so the output fits into the narrow window
+ try mediainfo "$path" && { dump | trim | sed 's/ \+:/: /;'; exit 5; } || exit 1;;
+esac
+
+exit 1
diff --git a/.config/ranger/tagged b/.config/ranger/tagged
diff --git a/.config/sxhkd/sxhkdrc b/.config/sxhkd/sxhkdrc
@@ -0,0 +1,193 @@
+#XF86Audio{Prev,Next}
+# mpc -q {prev,next}
+#
+#@XF86LaunchA
+# scrot -s -e 'image_viewer $f'
+#
+#super + shift + equal
+# sxiv -rt "$HOME/image"
+#
+#XF86LaunchB
+# xdotool selectwindow | xsel -bi
+#
+#super + {h,j,k,l}
+# bspc node -f {west,south,north,east}
+#
+#super + alt + {0-9}
+# mpc -q seek {0-9}0%
+#
+#super + {alt,ctrl,alt + ctrl} + XF86Eject
+# sudo systemctl {suspend,reboot,poweroff}
+#
+#super + {_,shift + }{h,j,k,l}
+# bspc node -{f,s} {west,south,north,east}
+#
+#
+#
+#super + alt + control + {h,j,k,l} ; {0-9}
+# bspc node @{west,south,north,east} -r 0.{0-9}
+#
+#super + alt + p
+# bspc config focus_follows_pointer {true,false}
+
+#
+# wm independent hotkeys
+#
+
+#Program launcher
+super + @p ; {b,c,e,p,t}
+ {sudo timeshift-launcher,chromium,geany,keepassxc,terminator}
+
+#Script launcher
+super + s
+ /home/anders/Scripts/.scriptmenu
+
+# terminal emulator
+super + Return
+ terminator
+
+# terminal emulator
+super + shift + Return
+ st
+
+#Keepass menu
+super + shift + p
+ kpmenu -d /home/anders/.kp/Database.kdbx
+
+#i3Lock
+super + KP_Enter
+ i3lock-fancy
+
+#Volume
+XF86Audio{Raise,Lower}Volume
+ pactl set-sink-volume 0 {+,-}5%
+
+XF86AudioMute
+ pactl set-sink-mute 0 toggle
+
+#Brightness
+XF86MonBrightness{Down,Up}
+ sudo /home/anders/Scripts/bright{down,up}.sh
+
+super + KP_{Subtract,Add}
+ sudo /home/anders/Scripts/bright{down,up}.sh
+
+# program launcher
+super + d
+ dmenu_run
+
+# make sxhkd reload its configuration files:
+super + Escape
+ pkill -USR1 -x sxhkd
+
+#
+# bspwm hotkeys
+#
+
+# quit/restart bspwm
+super + alt + {q,r}
+ bspc {quit,wm -r}
+
+# close and kill
+super + {_,shift + }w
+ bspc node -{c,k}
+
+# alternate between the tiled and monocle layout
+super + m
+ bspc desktop -l next
+
+# send the newest marked node to the newest preselected node
+super + y
+ bspc node newest.marked.local -n newest.!automatic.local
+
+# swap the current node and the biggest node
+super + g
+ bspc node -s biggest
+
+#
+# state/flags
+#
+
+# set the window state
+super + {t,shift + t,f,shift + f}
+ bspc node -t {tiled,pseudo_tiled,floating,fullscreen}
+
+# set the node flags
+super + ctrl + {m,x,y,z}
+ bspc node -g {marked,locked,sticky,private}
+
+#
+# focus/swap
+#
+
+# focus the node in the given direction
+super + {_,shift + }{h,j,k,l}
+ bspc node -{f,s} {west,south,north,east}
+
+# focus the node for the given path jump
+super + {p,b,comma,period}
+ bspc node -f @{parent,brother,first,second}
+
+# focus the next/previous node in the current desktop
+super + {_,shift + }c
+ bspc node -f {next,prev}.local
+
+# focus the next/previous desktop in the current monitor
+#super + bracket{left,right}
+# bspc desktop -f {prev,next}.local
+
+# focus the last node/desktop
+super + {grave,Tab}
+ bspc {node,desktop} -f last
+
+# focus the older or newer node in the focus history
+super + {o,i}
+ bspc wm -h off; \
+ bspc node {older,newer} -f; \
+ bspc wm -h on
+
+# focus or send to the given desktop
+super + {_,shift + }{1-9,0}
+ bspc {desktop -f,node -d} '^{1-9,10}'
+
+#
+# preselect
+#
+
+# preselect the direction
+super + ctrl + {h,j,k,l}
+ bspc node -p {west,south,north,east}
+
+# preselect the ratio
+super + ctrl + {1-9}
+ bspc node -o 0.{1-9}
+
+# cancel the preselection for the focused node
+super + ctrl + space
+ bspc node -p cancel
+
+# cancel the preselection for the focused desktop
+super + ctrl + shift + space
+ bspc query -N -d | xargs -I id -n 1 bspc node id -p cancel
+
+#
+# move/resize
+#
+
+# resize gaps
+super + alt + {8,9}
+ bspc config window_gap $((`bspc config window_gap` {-,+} 5))
+super + alt + 0
+ bspc config window_gap 0
+
+# expand a window by moving one of its side outward
+super + alt + {h,j,k,l}
+ bspc node -z {left -20 0,bottom 0 20,top 0 -20,right 20 0}
+
+# contract a window by moving one of its side inward
+super + alt + shift + {h,j,k,l}
+ bspc node -z {right -20 0,top 0 20,bottom 0 -20,left 20 0}
+
+# move a floating window
+super + {Left,Down,Up,Right}
+ bspc node -v {-20 0,0 20,0 -20,20 0}
diff --git a/.config/terminator/config b/.config/terminator/config
@@ -0,0 +1,22 @@
+[global_config]
+[keybindings]
+ help = F11
+[layouts]
+ [[default]]
+ [[[child1]]]
+ parent = window0
+ type = Terminal
+ [[[window0]]]
+ parent = ""
+ type = Window
+[plugins]
+[profiles]
+ [[default]]
+ cursor_color = "#aaaaaa"
+ font = DejaVu Sans Mono 10
+ foreground_color = "#ffffff"
+ palette = "#000000:#cd0000:#00cd00:#cdcd00:#0000ee:#cd00cd:#00cdcd:#e5e5e5:#7f7f7f:#ff0000:#00ff00:#ffff00:#5c5cff:#ff00ff:#00ffff:#ffffff"
+ scrollback_lines = 1000
+ scrollbar_position = hidden
+ show_titlebar = False
+ use_system_font = False
diff --git a/.config/vifm/colors/Default.vifm b/.config/vifm/colors/Default.vifm
@@ -0,0 +1,80 @@
+" You can edit this file by hand.
+" The " character at the beginning of a line comments out the line.
+" Blank lines are ignored.
+
+" The Default color scheme is used for any directory that does not have
+" a specified scheme and for parts of user interface like menus. A
+" color scheme set for a base directory will also
+" be used for the sub directories.
+
+" The standard ncurses colors are:
+" Default = -1 = None, can be used for transparency or default color
+" Black = 0
+" Red = 1
+" Green = 2
+" Yellow = 3
+" Blue = 4
+" Magenta = 5
+" Cyan = 6
+" White = 7
+
+" Light versions of colors are also available (set bold attribute):
+" LightBlack
+" LightRed
+" LightGreen
+" LightYellow
+" LightBlue
+" LightMagenta
+" LightCyan
+" LightWhite
+
+" Available attributes (some of them can be combined):
+" bold
+" underline
+" reverse or inverse
+" standout
+" italic (on unsupported systems becomes reverse)
+" none
+
+" Vifm supports 256 colors you can use color numbers 0-255
+" (requires properly set up terminal: set your TERM environment variable
+" (directly or using resources) to some color terminal name (e.g.
+" xterm-256color) from /usr/lib/terminfo/; you can check current number
+" of colors in your terminal with tput colors command)
+
+" highlight group cterm=attrs ctermfg=foreground_color ctermbg=background_color
+
+highlight clear
+
+highlight Win cterm=none ctermfg=white ctermbg=black
+highlight Directory cterm=bold ctermfg=cyan ctermbg=default
+highlight Link cterm=bold ctermfg=yellow ctermbg=default
+highlight BrokenLink cterm=bold ctermfg=red ctermbg=default
+highlight Socket cterm=bold ctermfg=magenta ctermbg=default
+highlight Device cterm=bold ctermfg=red ctermbg=default
+highlight Fifo cterm=bold ctermfg=cyan ctermbg=default
+highlight Executable cterm=bold ctermfg=green ctermbg=default
+highlight Selected cterm=bold ctermfg=magenta ctermbg=default
+highlight CurrLine cterm=bold,reverse ctermfg=default ctermbg=default
+highlight TopLine cterm=none ctermfg=black ctermbg=white
+highlight TopLineSel cterm=bold ctermfg=black ctermbg=default
+highlight StatusLine cterm=bold ctermfg=black ctermbg=white
+highlight WildMenu cterm=underline,reverse ctermfg=white ctermbg=black
+highlight CmdLine cterm=none ctermfg=white ctermbg=black
+highlight ErrorMsg cterm=none ctermfg=red ctermbg=black
+highlight Border cterm=none ctermfg=black ctermbg=white
+highlight JobLine cterm=bold,reverse ctermfg=black ctermbg=white
+highlight SuggestBox cterm=bold ctermfg=default ctermbg=default
+highlight CmpMismatch cterm=bold ctermfg=white ctermbg=red
+highlight AuxWin cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight TabLine cterm=none ctermfg=white ctermbg=black
+highlight TabLineSel cterm=bold,reverse ctermfg=default ctermbg=default
+highlight User1 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight User2 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight User3 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight User4 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight User5 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight User6 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight User7 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight User8 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
+highlight User9 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default
diff --git a/.config/vifm/scripts/README b/.config/vifm/scripts/README
@@ -0,0 +1,6 @@
+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/scripts/imgc b/.config/vifm/scripts/imgc
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+W3MIMGDISPLAY="/usr/lib/w3m/w3mimgdisplay"
+FONTH=18 # Size of one terminal row
+FONTW=9 # Size of one terminal column
+
+X=$1
+Y=$2
+COLUMNS=$3
+LINES=$4
+
+x=$((FONTW * X))
+y=$((FONTH * Y))
+
+erase="6;$x;$y;$(( FONTW*COLUMNS ));$(( FONTH*LINES ))\n3;"
+echo -e "$erase" | $W3MIMGDISPLAY
diff --git a/.config/vifm/scripts/imgt b/.config/vifm/scripts/imgt
@@ -0,0 +1,38 @@
+#!/bin/bash
+#
+# Based on script by z3bra -- 2014-01-21
+
+W3MIMGDISPLAY="/usr/lib/w3m/w3mimgdisplay"
+FONTH=16 # Size of one terminal row
+FONTW=9 # Size of one terminal column
+
+X=$1
+Y=$2
+COLUMNS=$3
+LINES=$4
+FILENAME=$5
+
+read width height <<< `echo "5;$FILENAME" | $W3MIMGDISPLAY`
+if [ -z "$width" -o -z "$height" ]; then
+ echo 'Error: Failed to obtain image size.'
+ exit 1
+fi
+
+x=$((FONTW * X))
+y=$((FONTH * Y))
+
+max_width=$((FONTW * COLUMNS))
+max_height=$((FONTH * LINES))
+
+if [ "$width" -gt "$max_width" ]; then
+ height=$((height * max_width / width))
+ width=$max_width
+fi
+if [ "$height" -gt "$max_height" ]; then
+ width=$((width * max_height / height))
+ height=$max_height
+fi
+
+w3m_command="0;1;$x;$y;$width;$height;;;;;$FILENAME\n4;\n3;"
+
+echo -e "$w3m_command" | $W3MIMGDISPLAY
diff --git a/.config/vifm/scripts/vifmimg b/.config/vifm/scripts/vifmimg
@@ -0,0 +1,53 @@
+#!/usr/bin/env bash
+readonly ID_PREVIEW="preview"
+
+#AUTO_REMOVE="yes"
+# By enabling this option the script will remove the preview file after it is drawn
+# and by doing so the preview will always be up-to-date with the file.
+# This however, requires more CPU and therefore affects the overall performance.
+
+if [ -e "$FIFO_UEBERZUG" ]; then
+ if [[ "$1" == "draw" ]]; then
+ declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW"
+ [x]="$2" [y]="$3" [width]="$4" [height]="$5" \
+ [path]="${PWD}/$6") \
+ > "$FIFO_UEBERZUG"
+
+ elif [[ "$1" == "videopreview" ]]; then
+ echo -e "Loading preview..\nFile: $6"
+ [[ ! -d "/tmp${PWD}/$6/" ]] && mkdir -p "/tmp${PWD}/$6/"
+ [[ ! -f "/tmp${PWD}/$6.png" ]] && ffmpegthumbnailer -i "${PWD}/$6" -o "/tmp${PWD}/$6.png" -s 0 -q 10
+ declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW"
+ [x]="$2" [y]="$3" [width]="$4" [height]="$5" \
+ [path]="/tmp${PWD}/$6.png") \
+ > "$FIFO_UEBERZUG"
+
+ elif [[ "$1" == "gifpreview" ]]; then
+ echo -e "Loading preview..\nFile: $6"
+ [[ ! -d "/tmp${PWD}/$6/" ]] && mkdir -p "/tmp${PWD}/$6/" && convert -coalesce "${PWD}/$6" "/tmp${PWD}/$6/$6.png"
+ for frame in $(ls -1 /tmp${PWD}/$6/$6*.png | sort -V); do
+ declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW"
+ [x]="$2" [y]="$3" [width]="$4" [height]="$5" \
+ [path]="$frame") \
+ > "$FIFO_UEBERZUG"
+ # Sleep between frames to make the animation smooth.
+ sleep .07
+ done
+
+ elif [[ "$1" == "pdfpreview" ]]; then
+ echo -e "Loading preview..\nFile: $6"
+ [[ ! -d "/tmp${PWD}/$6/" ]] && mkdir -p "/tmp${PWD}/$6/"
+ [[ ! -f "/tmp${PWD}/$6.png" ]] && pdftoppm -png -singlefile "$6" "/tmp${PWD}/$6"
+ declare -p -A cmd=([action]=add [identifier]="$ID_PREVIEW"
+ [x]="$2" [y]="$3" [width]="$4" [height]="$5" \
+ [path]="/tmp${PWD}/$6.png") \
+ > "$FIFO_UEBERZUG"
+
+ elif [[ "$1" == "clear" ]]; then
+ declare -p -A cmd=([action]=remove [identifier]="$ID_PREVIEW") \
+ > "$FIFO_UEBERZUG"
+ [[ ! -z $AUTO_REMOVE ]] && [[ -f "/tmp${PWD}/$6.png" ]] && rm -f "/tmp${PWD}/$6.png"
+ [[ ! -z $AUTO_REMOVE ]] && [[ -d "/tmp${PWD}/$6/" ]] && rm -rf "/tmp${PWD}/$6/"
+
+ fi
+fi
diff --git a/.config/vifm/scripts/vifmrun b/.config/vifm/scripts/vifmrun
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+export FIFO_UEBERZUG="/tmp/vifm-ueberzug-${PPID}"
+
+function cleanup {
+ rm "$FIFO_UEBERZUG" 2>/dev/null
+ pkill -P $$ 2>/dev/null
+}
+
+rm "$FIFO_UEBERZUG" 2>/dev/null
+mkfifo "$FIFO_UEBERZUG"
+trap cleanup EXIT
+tail --follow "$FIFO_UEBERZUG" | ueberzug layer --silent --parser bash &
+
+vifm
+cleanup
diff --git a/.config/vifm/vifm-help.txt b/.config/vifm/vifm-help.txt
@@ -0,0 +1,5899 @@
+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
+ directory 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.
+
+ <path> Starts Vifm in the specified path.
+
+ <path> <path>
+ Starts Vifm in the specified paths.
+
+ Specifying two directories triggers split view even when vifm was in
+ single-view mode on finishing previous session. To suppress this be-
+ haviour :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 <path>
+ 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 <path>|-
+ Sets output file to write selection into on exit instead of
+ opening files. "-" means standard output. Use empty value to
+ disable it.
+
+ --choose-dir <path>|-
+ Sets output file to write last visited directory into on exit.
+ "-" means standard output. Use empty value to disable it.
+
+ --delimiter <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 <command>
+ 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[=<startup log path>]
+ 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>
+ 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 <command> or +<com-
+ mand> 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 <command> or +<command>
+ Run command-line mode <command> 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
+ directory node in tree view), otherwise move left one file.
+
+ l when 'lsview' is off move into a directory or launches a file,
+ otherwise move right one file.
+
+ 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.
+
+ 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'
+ options affect case sensitivity of search queries.
+
+
+ [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 (excluding "." and ".." special directories, whose
+ appearance is controlled by the 'dotdirs' option);
+
+ - manual filter for file names;
+
+ - automatic filter for file names;
+
+ - local filter for file names (see description of the "=" normal mode
+ command).
+
+ Performing operations on manual filter for file names automatically
+ does the same on automatic one. The file name filter is separated
+ mainly for convenience purpose and to get more deterministic behaviour.
+
+ The basic vim folding key bindings are used for filtering files.
+
+ 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. For this a slash is
+ appended to a directory name before testing whether it matches the fil-
+ ter. 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.
+
+ za toggle visibility of dot files.
+
+ zo show dot files.
+
+ zm hide dot files.
+
+ zf add selected files to file name filter.
+
+ zO show files hidden by file name filter.
+
+ zM restore all filters.
+
+ zR remove all filters.
+
+ zr remove local filter.
+
+ zd exclude selection or current file from a custom view. Does
+ nothing for regular view. For tree view excluding directory
+ excludes that sub-tree. For compare views zd hides group of
+ adjacent 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]!<selector>
+ 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, <tab> and <c-i> switch active
+ pane just like <space> does, otherwise it goes forward through
+ directory history of current view. Nonexistent directories are
+ automatically skipped.
+
+ Ctrl-G create a window showing detailed information about the current
+ file.
+
+ Shift-Tab
+ enters 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
+ directory.
+
+ 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).
+
+ 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<selector>
+ 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<selector>
+ 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}).
+
+ [count]C
+ clone file [count] times.
+
+ [count]dd or d[count]selector
+ move selected file or files to trash directory (if 'trash'
+ option is set, otherwise delete). See "Trash directory" section
+ below.
+
+ [count]DD or D[count]selector
+ like dd and d<selector>, 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
+ important 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 session (does nothing right after startup or :restart com-
+ mand). 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 to 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
+ region;
+
+ - invert - amend selection by inverting selection of elements in
+ selection 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
+ occurrence).
+
+ [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
+ option.
+
+ 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
+ active 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 automatic filter of the active pane.
+
+ Ctrl-X m
+ value of manual filter 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<Enter>
+
+ 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
+ allowed.
+
+ 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
+ escaped:
+
+ :[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 stdout like "ls" create an error message showing
+ partial output 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
+ default the command relies on the external "apropos" utility,
+ which can be customized by altering value of the 'aproposprg'
+ option.
+
+ :autocmd
+
+ :au[tocmd] {event} {pat} {cmd}
+ register autocommand for the {event}, which can be:
+ - DirEnter - performed on entering a directory
+ 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.
+
+ :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.
+
+ :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
+ accepted in rhs of mappings (see "Mappings" section below).
+ Abbreviations are expanded non-recursively.
+
+ :cnoreabbrev
+
+ :cnorea[bbrev]
+ display menu of command-line mode abbreviations.
+
+ :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.
+
+ :change
+
+ :c[hange]
+ create a menu window to alter a files properties.
+
+ :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
+ recursively.
+
+ :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
+ directory specific colorscheme fits current path. It's also
+ used to set border color (except view titles) and colors in
+ menus and dialogs.
+
+ :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).
+
+ :comclear
+
+ :comc[lear]
+ remove all user defined commands.
+
+ :command
+
+ :com[mand]
+ display a menu of user commands.
+
+ :com[mand] beginning
+ display user defined commands that start with the beginning.
+
+ :com[mand] name action
+ set a new user command.
+ Trying to use a reserved command name will result in an error
+ message.
+ Use :com[mand]! to overwrite a previously set command.
+ Unlike vim user commands do not have to start with a capital
+ letter. User commands are run in a shell by default. To run a
+ command in the background you must set it as a background com-
+ mand with & at the end of the commands action (:com rm rm %f &).
+ Command name cannot contain numbers or special symbols (except
+ '?' and '!').
+
+ :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
+ example:
+
+ " 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] cmd :commands
+ set kind of an alias for internal command (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.
+
+ :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.
+
+ :echo
+
+ :ec[ho] [<expr>...]
+ evaluate each argument as an expression and output them sepa-
+ rated with a space. See help on :let command for a definition
+ of <expr>.
+
+ :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
+ directories (see "Trash directory" section below). Trash direc-
+ tories which are specified via %r and/or %u also get deleted
+ completely. 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] [<expr>...]
+ 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 <expr>.
+
+ :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.
+
+ :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
+ appended 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.
+ See also "Automatic 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. See also "Automatic FUSE
+ mounts" section 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 presence of $DIS-
+ PLAY 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
+ selected 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.
+ Ignores 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
+ request inversion of search (look for lines that do not match
+ pattern). 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 altering 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][!]
+ repeats 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-<something>
+ to get help on vifm (tab completion works). This form of the
+ command doesn't work when 'vimhelp' option is off.
+
+ :highlight
+
+ :hi[ghlight]
+ display information about all highlight groups active at the
+ moment.
+
+ :hi[ghlight] clear
+ reset all highlighting to builtin defaults and removed all file-
+ name-specific rules.
+
+ :hi[ghlight] clear ( {pat1,pat2,...} | /regexp/ )
+ removes 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
+ - Border - color of vertical parts of the border
+ - TabLine - tab line color
+ - TabLineSel - color of the tip of selected tab
+ - TopLineSel - top line color of the current pane
+ - TopLine - top line color of the other 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
+ - Selected - color of selected files
+ - Directory - color of directories
+ - Link - color of symbolic links in the views
+ - BrokenLink - color of broken symbolic links
+ - 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
+ attribute. 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 background colors independently, but for consistency with terminal
+ emulators this is available only implicitly by using light versions of
+ colors. 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
+ depends 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
+ AuxWin
+ File name specific highlights
+ Directory
+ Link
+ BrokenLink
+ Socket
+ Device
+ Fifo
+ Executable
+ Selected
+ CurrLine
+ OtherLine
+ TopLine
+ TopLineSel
+ TabLine
+ TabLineSel
+
+ "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]
+ creates a pop-up menu of directories visited.
+
+ :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 renaming).
+ fi[lter] or = show filter history (see description of the "="
+ normal mode command).
+
+ :histnext
+
+ :histnext
+ same as <c-i>. The main use case for this command is to work
+ around the common pain point of <tab> and <c-i> 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 <f1> :histnext<cr>` in vifm, add "t" flag to the
+ 'cpoptions', and thus have both <c-i> and <tab> working as
+ expected.
+
+ :histprev
+
+ :histprev
+ same as <c-o>.
+
+ :if
+
+ :if {expr1}
+ starts 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 shows menu of current backgrounded processes.
+
+ :let
+
+ :let $ENV_VAR = <expr>
+ sets environment variable. Warning: setting environment vari-
+ able to an empty string on Windows removes it.
+
+ :let $ENV_VAR .= <expr>
+ append value to environment variable.
+
+ :let &[l:|g:]opt = <expr>
+ sets option value.
+
+ :let &[l:|g:]opt .= <expr>
+ append value to string option.
+
+ :let &[l:|g:]opt += <expr>
+ increasing option value, adding sub-values.
+
+ :let &[l:|g:]opt -= <expr>
+ decreasing option value, removing sub-values.
+
+ Where <expr> 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
+ already built), which can be customized by altering value of the
+ 'locateprg' option.
+
+ :locate
+ repeats 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
+ displays a menu with list of files in trash. Each element of
+ the list is original path of a deleted file, thus the list can
+ contain duplicates.
+
+ :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.
+
+ :marks list ...
+ display the contents of the marks that are mentioned in list.
+
+ :media
+
+ :media only for *nix
+ display media management menu. 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
+ <esc> or <c-c> was typed. A ":" should be completed as well.
+ Commands can't start with a space, so put a count of 1 (one)
+ before 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
+ instead 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 changes 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 and vifmrc files and run startup commands passed in the
+ argument list, thus losing all unsaved changes (e.g. recent his-
+ tory or keys mapped in current session).
+
+ :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
+ enabled.
+
+ 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.
+
+ :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 and option-=x
+ - for enumeration options - option=x, option+=x and option-=x
+ - for set options - option=x, option+=x and option-=x
+ - for charset options - option=x, option+=x, option-=x and
+ option^=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
+ options.
+
+ :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, when one can
+ select 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).
+
+ :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
+ allowed.
+
+ :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
+ "location");
+
+ - 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.
+
+ :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
+ update 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
+ automatically 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.
+
+ :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. 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.
+
+ :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
+ directory 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 vifminfo file.
+
+ :wq
+
+ :wq[!] same as :quit, but ! only disables check of backgrounded com-
+ mands. :wqall
+
+ :wqa[ll][!]
+ same as :qall, but ! only disables check of backgrounded com-
+ mands.
+
+ :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 the mapping of lhs from normal and visual modes.
+
+ :unm[ap]! lhs
+ remove the mapping of lhs from command line mode.
+
+ :cunmap :dunmap :munmap :nunmap :qunmap
+ :vunmap
+
+ :cu[nmap] lhs
+ remove the mapping of lhs from command line mode.
+
+ :du[nmap] lhs
+ remove the mapping of lhs from dialog modes.
+
+ :mu[nmap] lhs
+ remove the mapping of lhs from menu mode.
+
+ :nun[map] lhs
+ remove the mapping of lhs from normal mode.
+
+ :qun[map] lhs
+ remove the mapping of lhs from view mode.
+
+ :vu[nmap] lhs
+ remove the 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.
+
+ %F %"F All of the selected files in the other directory list.
+
+ %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 end of the main command and beginning of the clear command
+ for graphical preview, which is invoked on closing preview of a
+ file.
+
+ 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
+ description.
+
+ 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<Enter>
+ will list the directory contents of the current directory.
+
+ :lsl filename<Enter>
+ 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. Currently job
+ cannot be stopped or paused.
+
+ You can see if command is still running in the :jobs menu. Back-
+ grounded commands have progress instead of process id at the line
+ beginning.
+
+ 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,
+ :locate.
+
+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. [!]<comma-separated-mime-type-globs>
+
+ 6. undecorated-pattern
+
+ 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").
+
+ 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:
+ <text/plain>{*.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:
+ <text/plain>{*.vifm},<application/pdf>{*.pdf}
+
+ Five first 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.
+
+ Regular expression patterns are case insensitive by default, see
+ description of commands, which might override default behaviour.
+
+ "Globs" section below provides short overview of globs and some impor-
+ tant points that one needs to know about them.
+
+ 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.
+
+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.
+
+ ? means any character at this position. E.g.
+
+ :fileviewer ?.out file %c
+
+ calls file tool for all files which has 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 negotiation
+ 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 single
+ digit in their name.
+
+: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
+ exception 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
+ enables behaviour of older versions of vifm. Flags:
+ - f - when included, running :filter command results in not
+ inverted (matching files are filtered out) and :filter! in
+ inverted (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, <tab> (thus <c-i>) behave as <space> and
+ switches active pane, otherwise <tab> and <c-i> go forward in
+ the view history. It's possible to make both <tab> and <c-i> to
+ work as expected by setting up the terminal to emit a custom
+ sequence when <c-i> 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
+ 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
+
+ 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<tab>).
+
+ '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 expanding of macros, spe-
+ cific for a particular *prg option, and %% sequence for insert-
+ ing percent sign literally. This option should include the %s
+ macro to specify placement of list of paths to search in and %a
+ or %A macro to specify placement of arguments passed to the
+ :find command. If some of the macros are not used, they will be
+ implicitly added after a space to the value of the option in the
+ following order: %s, %a. Note that when neither %a nor %A are
+ specified, it's %a which is added implicitly.
+
+ The macros can slightly change their meaning depending on :find
+ command arguments. When the first argument points to an exist-
+ ing directory, %s is assigned all arguments and %a/%A are left
+ empty. Otherwise, %s is assigned a dot (".") meaning current
+ directory or list of selected file names, if any. %a/%A are
+ assigned arguments when first argument starts with a dash ("-"),
+ otherwise %a gets an escaped version of arguments, prepended by
+ "-name" (on *nix) or "-iname" (on Windows) predicate.
+
+ %a and %A macros contain almost the same value, the difference
+ is that %a can be escaped and %A is never escaped. %A is to be
+ used mainly on Windows, where shell escaping is a mess and can
+ break command execution.
+
+ Optional %u or %U macro could be used (if both specified %U is
+ chosen) to force redirection to custom or unsorted custom view
+ respectively.
+
+ Starting from Windows Server 2003 a where command is available,
+ 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 in this case.
+ The command looks for files only completely ignoring directo-
+ ries.
+
+ 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
+ "$envname"), which will be expanded (prepend it with a slash to
+ prevent expansion). The value should expand to an absolute
+ path.
+
+ If you change this option, vifm won't remount anything. It
+ affects 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
+ results is requested, %a or %A macro to specify placement of
+ arguments passed to the :grep command and the %s macro to spec-
+ ify 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
+ directory 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
+ Highlight all matches of search pattern.
+
+ '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)
+ and characters after f and F commands. It doesn't affect file
+ filtering.
+
+ '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 and udisks
+ {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")
+ - mount-point= - specifies a mount point (can be absent or
+ appear 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 error
+ stream and exit code of `mount` and `unmount` is taken into
+ account to determine whether operation was performed success-
+ fully.
+
+ '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"
+ 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
+
+ *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.
+
+ 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
+ between subsequent input polls, which affects various asynchro-
+ nous operations (detecting changes made by external applica-
+ tions, 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'
+ option 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
+ %% - 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.
+
+ Example:
+
+ set rulerformat='%2l-%S%[ +%x%]'
+
+ 'runexec'
+ type: boolean
+ default: false
+ Run executable file on Enter or l.
+
+ '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).
+
+ '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.
+
+ 'shortmess' 'shm'
+ type: charset
+ default: "p"
+ Contains a sequence of single-character flags. Each flag
+ enables shortening of some message displayed by vifm in the TUI.
+ Flags:
+ - 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).
+
+ Numbers are rounded from zero. Trailing zeros are dropped.
+
+ Example:
+
+ set sizefmt=units:iec,precision:2
+
+
+ '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
+ directory (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 the search pattern contains
+ at least one upper case character. Only used when ignorecase
+ option is enabled. It doesn't affect file filtering.
+
+ '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
+ implicitly: when "dir" is not specified, sorting behaves as if
+ it was the first key in the list. That's why if one wants sort-
+ ing 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 to use for
+ group sorting, double comma is literal comma. Each expression
+ should contain at least one group or its value will be consid-
+ ered to be always empty. Only first match of each regular
+ expression is considered. Groups are considered from right to
+ first similar to 'sort', first group divides list of files into
+ sub-groups, each of which is sorted by the second group and so
+ on.
+
+ Example:
+ set sortgroups=-(done|todo).*
+ this would put files with "-done" in their names above all files
+ with "-todo".
+
+ '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
+
+ - %{<expr>} - evaluate arbitrary vifm expression '<expr>', 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
+ default), '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
+ instead (much faster and supports progress tracking). The
+ option should eventually be removed. Mostly *nix-like systems
+ are affected.
+
+ '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.
+
+ '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.
+
+ '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
+ element starts with "%r/". Value of the option can contain
+ environment variables (of form "$envname"), which will be
+ expanded (prepend $ with a slash to prevent expansion). Envi-
+ ronment 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: "ps"
+ 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 "...").
+
+ '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"
+ The actual command used to start vi. Ampersand sign at the end
+ (regardless whether it's preceded by space or not) means back-
+ grounding 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 X.
+
+ 'vifminfo'
+ type: set
+ default: bookmarks,bmarks
+ Controls what will be saved in the $VIFM/vifminfo file.
+
+ bmarks - named bookmarks
+ 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 (requires dhistory)
+ 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 session is empty
+ registers - registers content
+ 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 <c-w> <a-b><a-d>
+
+ 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:
+
+ <silent>
+ Postpone UI updates until RHS is completely processed.
+
+ <wait> In case of builtin mapping causing conflict for a user-defined
+ mapping (e.g., `t` builtin to a partially typed `ta` user-
+ defined 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 <wait> tw :set wrap!<cr>
+ nnoremap <wait> tn :set number!<cr>
+ nnoremap <wait> tr :set relativenumber!<cr>
+
+ 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:
+
+ <cr> Enter key.
+
+ <esc> Escape key.
+
+ <space>
+ Space key.
+
+ <lt> Less-than character (<).
+
+ <nop> provides a way to disable a mapping (by mapping it to <nop>).
+
+ <bs> Backspace key (see key conflict description below).
+
+ <tab> <s-tab>
+ Tabulation and Shift+Tabulation keys.
+
+ <home> <end>
+ Home/End.
+
+ <left> <right> <up> <down>
+ Arrow keys.
+
+ <pageup> <pagedown>
+ PageUp/PageDown.
+
+ <del> <delete>
+ Delete key. <del> and <delete> mean different codes, but
+ <delete> is more common.
+
+ <insert>
+ Insert key.
+
+ <c-a>,<c-b>,...,<c-z>,<c-[>,<c->,<c-]>,<c-^>,<c-_>
+ Control + some key (see key conflict description below).
+
+ <c-@> only for *nix
+ Control + Space.
+
+ <a-a>,<a-b>,...,<a-z>
+ <m-a>,<m-b>,...,<m-z> Alt + some key.
+
+ <a-c-a>,<a-c-b>,...,<a-c-z>
+ <m-c-a>,<m-c-b>,...,<m-c-z> only for *nix
+ Alt + Ctrl + some key.
+
+ <f0> - <f63>
+ Functional keys.
+
+ <c-f1> - <c-f12>
+ only for MS-Windows
+ functional keys with Control key pressed.
+
+ <a-f1> - <a-f12>
+ only for MS-Windows
+ functional keys with Alt key pressed.
+
+ <s-f1> - <s-f12>
+ 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:
+
+ - <cr> and <c-m>;
+
+ - <tab> and <c-i>;
+
+ - <c-h> and <bs>;
+
+ - etc.
+
+ Most of the time they are defined consistently and don't cause sur-
+ prises, but <c-h> and <bs> 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 <c-
+ h> or <bs> 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 <c-h> in the LHS work
+ map <c-h> <bs>
+ " if mappings with <bs> in the LHS work
+ map <bs> <c-h>
+
+ Whitespace
+
+ vifm removes whitespace characters at the beginning and end of com-
+ mands. That's why you may want to use <space> at the end of rhs in
+ mappings. For example:
+
+ cmap <f1> man<space>
+
+ will put "man " in line when you hit the <f1> 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 <bs>
+ \e escape <esc>
+ \n newline
+ \r return <cr>
+ \t tab <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
+ pass
+ count to a different command.
+ v:count1
+ same as v:count, but 1 by default.
+ 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}.
+ 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
+ describing 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')
+
+ 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 appear)
+
+ 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 horizon 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!<cr>
+
+ 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
+ interrupt the command.
+
+ Use this function to consume output of external commands that don't
+ require 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' 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' "'".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
+ allow 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 <name>" 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 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.
+
+ Filetype 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
+ directories, 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
+
+ r - reload the list.
+
+ m - mount/unmount device (cursor should be positioned on lines under
+ device information).
+
+
+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
+ future, 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
+ example, 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 combination of size and hash of file contents.
+
+ 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 the
+ session. 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
+ order:
+ - $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
+ example:
+
+ set
+ \smartcase
+
+ equals "setsmartcase". When
+
+ set<space here>
+ \ smartcase
+
+ equals "set smartcase".
+
+ The $VIFM/vifminfo file contains session settings. You may edit it by
+ hand to change the settings, but it's not recommended to do that, edit
+ vifmrc instead. You can control what settings will be saved 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 registers 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 session 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.
+
+ 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
+ extension being truncated).
+
+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. Currently two formats are supported:
+
+ 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
+ remote file systems over ftp or ssh.
+
+ Format line:
+ FUSE_MOUNT2|mounter %PARAM %DESTINATION_DIR [%FOREGROUND]
+
+ Example filetype command:
+
+ :filetype FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR
+
+ Example file content:
+
+ root@127.0.0.1:/
+
+ 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.
+
+ 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})
+
+ 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,
+ ErrorMsg, StatusLine, JobLine, SuggestBox and WildMenu are always
+ determined by the primary color scheme;
+
+ - CurrLine, Selected, Directory, Link, BrokenLink, Socket, Device,
+ Executable, Fifo, CmpMismatch, Win and AuxWin are determined 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
+ inserted 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
+ directory, 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 <com-
+ mand> or +<command>. 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.
+ :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
+ default 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 closes
+ mount point from current pane 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 <ksteen@users.sourceforge.net>
+ And currently is developed by xaizek <xaizek@posteo.net>
+
+
+
+vifm 0.10 November 11, 2018 VIFM(1)
diff --git a/.config/vifm/vifminfo b/.config/vifm/vifminfo
@@ -0,0 +1,456 @@
+# You can edit this file by hand, but it's recommended not to do that.
+
+# Marks:
+'h
+ /home/anders/
+ ..
+1556806737
+
+# Bookmarks:
+
+# TUI:
+al
+q0
+v2
+ov
+m-1
+l2
+r2
+
+# Left window history (oldest to newest):
+d/usr/share/icons/hicolor/48x48
+ apps
+3
+d/usr/share/icons/hicolor
+ 48x48
+6
+d/usr/share/icons
+ Adwaita
+1
+d/usr/share/icons/Adwaita
+ 48x48
+6
+d/usr/share/icons/Adwaita/48x48
+ categories
+3
+d/usr/share/icons/Adwaita
+ 16x16
+2
+d/usr/share/icons/Adwaita/16x16
+ devices
+4
+d/usr/share/icons/Adwaita/16x16/devices
+ auth-smartcard-symbolic.symbolic.png
+11
+d/usr/share/icons/Adwaita/16x16
+ devices
+4
+d/usr/share/icons/Adwaita
+ 22x22
+3
+d/usr/share/icons/Adwaita/22x22
+ ..
+0
+d/usr/share/icons/Adwaita
+ 22x22
+3
+d/usr/share/icons/Adwaita/22x22
+ devices
+1
+d/usr/share/icons/Adwaita/22x22/devices
+ audio-headset.png
+2
+d/usr/share/icons/Adwaita/22x22
+ devices
+1
+d/usr/share/icons/Adwaita
+ 48x48
+6
+d/usr/share/icons/Adwaita/48x48
+ devices
+4
+d/usr/share/icons/Adwaita/48x48/devices
+ audio-headphones.png
+4
+d/usr/share/icons/Adwaita/48x48
+ devices
+4
+d/usr/share/icons/Adwaita
+ 48x48
+6
+d/usr/share/icons
+ hicolor
+4
+d/usr/share/icons/hicolor
+ 48x48
+6
+d/usr/share/icons/hicolor/48x48
+ apps
+3
+d/usr/share/icons/hicolor/48x48/apps
+ keepassxc.png
+17
+d/usr/share/icons/hicolor/48x48
+ apps
+3
+d/usr/share/icons/hicolor
+ 48x48
+6
+d/usr/share/icons
+ hicolor
+4
+d/usr/share
+ icons
+33
+d/usr
+ share
+8
+d/
+ keybase
+5
+d/keybase
+ public
+2
+d/keybase/public
+ scienta
+2
+d/keybase/public/scienta
+
+2
+d/keybase
+ ..
+0
+d/
+ home
+4
+d/home
+ anders
+1
+d/home/anders
+ .config
+2
+d/home/anders/Wallpapers
+ matrix.jpg
+13
+d/
+ home
+4
+d/home
+ anders
+1
+d/home/anders
+ .config
+2
+d/home
+ anders
+1
+d/
+ home
+4
+d/home
+ anders
+1
+d/home/anders
+ .config
+2
+d/home/anders/.config
+ Keybase
+1
+d/home/anders/.config/Keybase
+ ..
+0
+d/home/anders
+ Repos
+15
+d/
+ tmp
+17
+d/tmp
+ ..
+0
+d/
+ home
+4
+d/home
+ anders
+1
+d/home/anders
+ Repos
+15
+d/home
+ anders
+1
+d/
+ home
+4
+d/home
+ anders
+1
+d/home/anders
+ Downloads
+13
+d/home/anders/Downloads
+ hq-pfSense-UDP4-1194-config.ovpn
+7
+d/home/anders
+ Scripts
+16
+d/home/anders/Scripts
+ ..
+0
+d/home/anders
+ Scripts
+16
+d/home/anders/Scripts
+ ..
+0
+d/home/anders
+ Scripts
+16
+d/home/anders/Scripts
+ ..
+0
+d/home/anders
+ Documents
+12
+d/home
+ anders
+1
+d/
+ home
+4
+d/home/anders
+ Documents
+12
+d/home
+ anders
+1
+d/
+ home
+4
+d/home/anders
+ Scripts
+16
+d/home/anders/Scripts
+ ..
+0
+d/home/anders
+ Scripts
+16
+d/home/anders/Scripts
+ ..
+0
+d/home/anders
+ Scripts
+16
+d/home/anders/Scripts
+ ..
+0
+d/home/anders
+ Scripts
+16
+d/home
+ anders
+1
+d/home/anders
+ Scripts
+16
+d/home/anders/Scripts
+ .scriptmenu
+1
+d/home/anders
+ Documents
+12
+d/home/anders/Scripts
+ .scriptmenu
+1
+d/home/anders
+ Documents
+12
+d/home/anders/Scripts
+ .scriptmenu
+1
+d/home/anders
+ Downloads
+13
+d/home/anders/Downloads
+ dunstrc1
+6
+d/home/anders
+ .config
+2
+d/home/anders/.config
+ chromium
+4
+d/usr/share
+ doc
+4
+d/usr/share/doc
+ polybar
+36
+d/usr/share/doc/polybar
+ config
+1
+d/home/anders
+ Documents
+12
+d/home
+ anders
+1
+d/
+ keybase
+5
+d/keybase
+ private
+1
+d/keybase/private
+ andersuno
+1
+d/keybase/private/andersuno
+ test
+1
+d/keybase/private
+ andersuno
+1
+d/keybase
+ private
+1
+d/home/anders
+ Documents
+12
+d
+
+# Right window history (oldest to newest):
+D/home/anders/tmp
+ keybase
+3
+D/home/anders/.config/vifm/scripts
+ ..
+0
+D/home/anders/.config/vifm
+ ..
+0
+D/home/anders/.config
+ vifm
+13
+D/home/anders
+ ..
+0
+D/home/anders/tmp
+ anders
+1
+D/home/anders
+ Downloads
+13
+D/home/anders/Downloads
+ ..
+0
+D/home/anders
+ Documents
+12
+D/home/anders/Documents
+ iptelefoni
+1
+D/home/anders/Documents/iptelefoni
+ linl_2018-09-11_10-02-19_28.pdf
+5
+D/home/anders/Documents
+ iptelefoni
+1
+D/home/anders
+ Documents
+12
+D/home/anders/Documents
+ netsec
+2
+D/home/anders/Documents/netsec
+ linl_2018-06-20_15-47-17_31.pdf
+3
+D/home/anders/Documents
+ netsec
+2
+D/home/anders/Documents/netsec
+ linl_2018-06-20_15-47-17_31.pdf
+3
+D/home/anders
+ .config
+2
+D/home/anders/.config
+ vifm
+23
+D/home/anders
+ .config
+2
+D/home/anders/.config
+ polybar
+16
+D/home/anders/.config/polybar
+ ..
+0
+D
+
+# Command line history (oldest to newest):
+:screen
+:goto ~
+:goto ~/
+:goto ~/.
+:g
+:rename Projekt
+:rename Projekt projekt
+:rename projekt
+:echo
+:/home
+:goto /home/
+: 2h
+:2h
+:goto /tmp
+:goto /home
+:goto /home/anders/
+:goto /
+:goto /home/anders/Documents/
+:goto /usr/share/doc/
+:q
+
+# Search history (oldest to newest):
+/W
+/ico
+/doc
+/pol
+
+# Prompt history (oldest to newest):
+pnetsece
+pnetsec
+
+# Local filter history (oldest to newest):
+
+# Registers:
+""/home/anders/.local/share/vifm/Trash/000_linl_2017-09-18_08-27-06_10.pdf
+""/home/anders/.local/share/vifm/Trash/000_linl_2018-06-20_15-47-17_31.pdf
+""/home/anders/.local/share/vifm/Trash/000_linl_2018-09-11_10-02-19_14.pdf
+
+# Directory stack (oldest to newest):
+
+# Trash content:
+t/home/anders/.local/share/vifm/Trash/000_linl_2017-09-11_13-39-43_1.pdf
+ /home/anders/Downloads/linl_2017-09-11_13-39-43_1.pdf
+t/home/anders/.local/share/vifm/Trash/000_linl_2018-06-20_15-47-17_15.pdf
+ /home/anders/Downloads/linl_2018-06-20_15-47-17_15.pdf
+t/home/anders/.local/share/vifm/Trash/000_linl_2018-09-11_10-02-19_28.pdf
+ /home/anders/Downloads/linl_2018-09-11_10-02-19_28.pdf
+t/home/anders/.local/share/vifm/Trash/000_linl_2017-09-18_08-27-06_10.pdf
+ /home/anders/Downloads/linl_2017-09-18_08-27-06_10.pdf
+t/home/anders/.local/share/vifm/Trash/000_linl_2018-06-20_15-47-17_31.pdf
+ /home/anders/Downloads/linl_2018-06-20_15-47-17_31.pdf
+t/home/anders/.local/share/vifm/Trash/000_linl_2018-09-11_10-02-19_14.pdf
+ /home/anders/Downloads/linl_2018-09-11_10-02-19_14.pdf
+
+# State:
+f
+i1
+[.0
+[F
+F
+I1
+].0
+]F
+s0
diff --git a/.config/vifm/vifmrc b/.config/vifm/vifmrc
@@ -0,0 +1,527 @@
+" ____ _____
+" | _ \_ _| Derek Taylor (DistroTube)
+" | | | || | http://www.youtube.com/c/DistroTube
+" | |_| || | http://www.gitlab.com/dwt1/
+" |____/ |_|
+
+" vim: filetype=vifm :
+" Sample configuration file for vifm (last updated: 20 July, 2018)
+" 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.
+
+" ------------------------------------------------------------------------------
+
+" This is the actual command used to start vi. 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<tab>).
+
+" set fastrun
+
+" Natural sort of (version) numbers within text.
+
+set sortnumbers
+
+" Maximum number of changes that can be undone.
+
+set undolevels=100
+
+" If you installed the vim.txt help file set vimhelp.
+" If would rather use a plain text help file set novimhelp.
+
+set novimhelp
+
+" If you would like to run an executable file when you
+" press return on the file name set this.
+
+set norunexec
+
+" Selected color scheme
+
+colorscheme Default
+
+" 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 "
+
+" Set line numbers to show
+
+" ------------------------------------------------------------------------------
+
+" :mark mark /full/directory/path [filename]
+
+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
+
+" ------------------------------------------------------------------------------
+
+" 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 %f, %F, %d, %F 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
+ \ vifmimg pdfpreview %px %py %pw %ph %c
+ \ %pc
+ \ vifmimg clear
+ " \ 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
+ \ {Play using ffplay}
+ \ ffplay -nodisp -autoexit %c,
+ \ {Play using MPlayer}
+ \ mplayer %f,
+fileviewer *.mp3 mp3info
+fileviewer *.flac soxi
+
+" Video
+filextype *.avi,*.mp4,*.wmv,*.dat,*.3gp,*.ogv,*.mkv,*.mpg,*.mpeg,*.vob,
+ \*.fl[icv],*.m2v,*.mov,*.webm,*.ts,*.mts,*.m4v,*.r[am],*.qt,*.divx,
+ \*.as[fx]
+ \ {View using ffplay}
+ \ ffplay -fs -autoexit %f,
+ \ {View using Dragon}
+ \ dragon %f:p,
+ \ {View using mplayer}
+ \ mplayer %f,
+fileviewer *.avi,*.mp4,*.wmv,*.dat,*.3gp,*.ogv,*.mkv,*.mpg,*.mpeg,*.vob,
+ \*.fl[icv],*.m2v,*.mov,*.webm,*.ts,*.mts,*.m4v,*.r[am],*.qt,*.divx,
+ \*.as[fx]
+ \ vifmimg videopreview %px %py %pw %ph %c
+ \ %pc
+ \ vifmimg clear
+ " \ ffprobe -pretty %c 2>&1
+
+" Web
+filextype *.html,*.htm
+ \ {Open with dwb}
+ \ dwb %f %i &,
+ \ {Open with firefox}
+ \ firefox %f &,
+ \ {Open with uzbl}
+ \ uzbl-browser %f %i &,
+filetype *.html,*.htm links, lynx
+
+" Object
+filetype *.o nm %f | less
+
+" Man page
+filetype *.[1-8] man ./%c
+fileviewer *.[1-8] man ./%c | col -b
+
+" Images
+filextype *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm
+ \ {View in sxiv}
+ \ sxiv -ia %c %d &,
+ \ {View in imv}
+ \ imv -b 1D2330 -d %d &,
+ \ {View in feh}
+ \ feh %d &,
+ \ {View in cacaview}
+ \ cacaview %c &,
+fileviewer *.bmp,*.jpg,*.jpeg,*.png,*.xpm
+ \ vifmimg draw %px %py %pw %ph %c
+ \ %pc
+ \ vifmimg clear
+ " Get w3m image previews inside vifm
+ " \ imgt %px %py %pw %ph %c
+ " \ %pc
+ " \ imgc %px %py %pw %ph NOT NEEDED IN XTERM
+fileviewer *.gif
+ \ vifmimg gifpreview %px %py %pw %ph %c
+ \ %pc
+ \ vifmimg clear
+
+" OpenRaster
+filextype *.ora
+ \ {Edit in MyPaint}
+ \ mypaint %f,
+
+" Mindmap
+filextype *.vym
+ \ {Open with VYM}
+ \ vym %f &,
+
+" MD5
+filetype *.md5
+ \ {Check MD5 hash sum}
+ \ md5sum -c %f %S,
+
+" SHA1
+filetype *.sha1
+ \ {Check SHA1 hash sum}
+ \ sha1sum -c %f %S,
+
+" SHA256
+filetype *.sha256
+ \ {Check SHA256 hash sum}
+ \ sha256sum -c %f %S,
+
+" SHA512
+filetype *.sha512
+ \ {Check SHA512 hash sum}
+ \ sha512sum -c %f %S,
+
+" GPG signature
+filetype *.asc
+ \ {Check signature}
+ \ !!gpg --verify %c,
+
+" Torrent
+filetype *.torrent ktorrent %f &
+fileviewer *.torrent dumptorrent -v %c
+
+" FuseZipMount
+filetype *.zip,*.jar,*.war,*.ear,*.oxt,*.apkg
+ \ {Mount with fuse-zip}
+ \ FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR,
+ \ {View contents}
+ \ zip -sf %c | less,
+ \ {Extract here}
+ \ tar -xf %c,
+fileviewer *.zip,*.jar,*.war,*.ear,*.oxt zip -sf %c
+
+" ArchiveMount
+filetype *.tar,*.tar.bz2,*.tbz2,*.tgz,*.tar.gz,*.tar.xz,*.txz
+ \ {Mount with archivemount}
+ \ FUSE_MOUNT|archivemount %SOURCE_FILE %DESTINATION_DIR,
+fileviewer *.tgz,*.tar.gz tar -tzf %c
+fileviewer *.tar.bz2,*.tbz2 tar -tjf %c
+fileviewer *.tar.txz,*.txz xz --list %c
+fileviewer *.tar tar -tf %c
+
+" Rar2FsMount and rar archives
+filetype *.rar
+ \ {Mount with rar2fs}
+ \ FUSE_MOUNT|rar2fs %SOURCE_FILE %DESTINATION_DIR,
+fileviewer *.rar unrar v %c
+
+" IsoMount
+filetype *.iso
+ \ {Mount with fuseiso}
+ \ FUSE_MOUNT|fuseiso %SOURCE_FILE %DESTINATION_DIR,
+
+" SshMount
+filetype *.ssh
+ \ {Mount with sshfs}
+ \ FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR %FOREGROUND,
+
+" FtpMount
+filetype *.ftp
+ \ {Mount with curlftpfs}
+ \ FUSE_MOUNT2|curlftpfs -o ftp_port=-,,disable_eprt %PARAM %DESTINATION_DIR %FOREGROUND,
+
+" Fuse7z and 7z archives
+filetype *.7z
+ \ {Mount with fuse-7z}
+ \ FUSE_MOUNT|fuse-7z %SOURCE_FILE %DESTINATION_DIR,
+fileviewer *.7z 7z l %c
+
+" Office files
+filextype *.odt,*.doc,*.docx,*.xls,*.xlsx,*.odp,*.pptx libreoffice %f &
+fileviewer *.doc catdoc %c
+fileviewer *.docx docx2txt.pl %f -
+
+" TuDu files
+filetype *.tudu tudu -f %c
+
+" Qt projects
+filextype *.pro qtcreator %f &
+
+" Directories
+filextype */
+ \ {View in thunar}
+ \ Thunar %f &,
+
+" Syntax highlighting in preview
+"
+" Explicitly set highlight type for some extensions
+"
+" 256-color terminal
+" fileviewer *.[ch],*.[ch]pp highlight -O xterm256 -s dante --syntax c %c
+" fileviewer Makefile,Makefile.* highlight -O xterm256 -s dante --syntax make %c
+"
+" 16-color terminal
+" fileviewer *.c,*.h highlight -O ansi -s dante %c
+"
+" Or leave it for automatic detection
+"
+" fileviewer *[^/] pygmentize -O style=monokai -f console256 -g
+
+" Displaying pictures in terminal
+"
+" fileviewer *.jpg,*.png shellpic %c
+
+" Open all other files with default system programs (you can also remove all
+" :file[x]type commands above to ensure they don't interfere with system-wide
+" settings). By default all unknown files are opened with 'vi[x]cmd'
+" uncommenting one of lines below will result in ignoring 'vi[x]cmd' option
+" for unknown file types.
+" For *nix:
+" filetype * xdg-open
+" For OS X:
+" filetype * open
+" For Windows:
+" filetype * start, explorer
+
+" GETTING ICONS TO DISPLAY IN VIFM
+" You need the next 14 lines!
+
+" ::*.sh::, ::*.[hc]pp::, ::*.[hc]::,
+
+" file types
+set classify=' :dir:/, :exe:, :reg:, :link:'
+" various file names
+set classify+=' ::../::, ::/^copying|license$/::, ::.git/,,*.git/::, ::*.epub,,*.fb2,,*.djvu::, ::*.pdf::, ::*.htm,,*.html,,**.[sx]html,,*.xml::'
+" archives
+set classify+=' ::*.7z,,*.ace,,*.arj,,*.bz2,,*.cpio,,*.deb,,*.dz,,*.gz,,*.jar,,*.lzh,,*.lzma,,*.rar,,*.rpm,,*.rz,,*.tar,,*.taz,,*.tb2,,*.tbz,,*.tbz2,,*.tgz,,*.tlz,,*.trz,,*.txz,,*.tz,,*.tz2,,*.xz,,*.z,,*.zip,,*.zoo::'
+" images
+set classify+=' ::*.bmp,,*.gif,,*.jpeg,,*.jpg,,*.ico,,*.png,,*.ppm,,*.svg,,*.svgz,,*.tga,,*.tif,,*.tiff,,*.xbm,,*.xcf,,*.xpm,,*.xspf,,*.xwd::'
+" audio
+set classify+=' ::*.aac,,*.anx,,*.asf,,*.au,,*.axa,,*.flac,,*.m2a,,*.m4a,,*.mid,,*.midi,,*.mp3,,*.mpc,,*.oga,,*.ogg,,*.ogx,,*.ra,,*.ram,,*.rm,,*.spx,,*.wav,,*.wma,,*.ac3::'
+" media
+set classify+=' ::*.avi,,*.ts,,*.axv,,*.divx,,*.m2v,,*.m4p,,*.m4v,,.mka,,*.mkv,,*.mov,,*.mp4,,*.flv,,*.mp4v,,*.mpeg,,*.mpg,,*.nuv,,*.ogv,,*.pbm,,*.pgm,,*.qt,,*.vob,,*.wmv,,*.xvid::'
+" office files
+set classify+=' ::*.doc,,*.docx::, ::*.xls,,*.xls[mx]::, ::*.pptx,,*.ppt::'
+
+" ------------------------------------------------------------------------------
+
+" What should be saved automatically between vifm runs
+" Like in previous versions of vifm
+" set vifminfo=options,filetypes,commands,bookmarks,dhistory,state,cs
+" Like in vi
+set vifminfo=dhistory,savedirs,chistory,state,tui,shistory,
+ \phistory,fhistory,dirstack,registers,bookmarks,bmarks
+
+" ------------------------------------------------------------------------------
+
+" Examples of configuring both panels
+
+" Customize view columns a bit (enable ellipsis for truncated file names)
+"
+" set viewcolumns=-{name}..,6{}.
+
+" Filter-out build and temporary files
+"
+" filter! /^.*\.(lo|o|d|class|py[co])$|.*~$/
+
+" ------------------------------------------------------------------------------
+
+" Sample mappings
+
+" Start shell in current directory
+nnoremap s :shell<cr>
+
+" Display sorting dialog
+nnoremap S :sort<cr>
+
+" Toggle visibility of preview window
+nnoremap w :view<cr>
+vnoremap w :view<cr>gv
+
+" Open file in existing instance of gvim
+nnoremap o :!gvim --remote-tab-silent %f<cr>
+" Open file in new instance of gvim
+nnoremap O :!gvim %f<cr>
+
+" Open file in the background using its default program
+nnoremap gb :file &<cr>l
+
+" Goto home
+nnoremap gh :goto /home/anders/Documents/<cr>
+nnoremap gs :goto /home/anders/Scripts/.scriptmenu<cr>
+
+" Yank current directory path into the clipboard
+nnoremap yd :!echo %d | xclip %i<cr>
+
+" Yank current file path into the clipboard
+nnoremap yf :!echo %c:p | xclip %i<cr>
+
+" Mappings for faster renaming
+nnoremap I cw<c-a>
+nnoremap cc cw<c-u>
+nnoremap A cw
+
+" Open console in current directory
+nnoremap ,t :!xterm &<cr>
+
+" Open editor to edit vifmrc and apply settings after returning to vifm
+nnoremap ,c :write | edit $MYVIFMRC | restart<cr>
+" Open gvim to edit vifmrc
+nnoremap ,C :!gvim --remote-tab-silent $MYVIFMRC &<cr>
+
+" Toggle wrap setting on ,w key
+nnoremap ,w :set wrap!<cr>
+
+" Example of standard two-panel file managers mappings
+nnoremap <f3> :!less %f<cr>
+nnoremap <f4> :edit<cr>
+nnoremap <f5> :copy<cr>
+nnoremap <f6> :move<cr>
+nnoremap <f7> :mkdir<space>
+nnoremap <f8> :delete<cr>
+
+" Faster jk movement
+nnoremap J 3j
+nnoremap K 3k
+vnoremap J 3j
+vnoremap K 3k
+
+" ------------------------------------------------------------------------------
+
+" Various customization examples
+
+" Use ag (the silver searcher) instead of grep
+"
+" set grepprg='ag --line-numbers %i %a %s'
+
+" Add additional place to look for executables
+"
+" let $PATH = $HOME.'/bin/fuse:'.$PATH
+
+" Block particular shortcut
+"
+" nnoremap <left> <nop>
+
+" Export IPC name of current instance as environment variable and use it to
+" communicate with the instance later.
+"
+" It can be used in some shell script that gets run from inside vifm, for
+" example, like this:
+" vifm --server-name "$VIFM_SERVER_NAME" --remote +"cd '$PWD'"
+"
+" let $VIFM_SERVER_NAME = v:servername
diff --git a/.config/vifm/vifmrc.orig b/.config/vifm/vifmrc.orig
@@ -0,0 +1,471 @@
+" vim: filetype=vifm :
+" Sample configuration file for vifm (last updated: 20 July, 2018)
+" 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.
+
+" ------------------------------------------------------------------------------
+
+" This is the actual command used to start vi. 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<tab>).
+
+" set fastrun
+
+" Natural sort of (version) numbers within text.
+
+set sortnumbers
+
+" Maximum number of changes that can be undone.
+
+set undolevels=100
+
+" If you installed the vim.txt help file set vimhelp.
+" If would rather use a plain text help file set novimhelp.
+
+set novimhelp
+
+" If you would like to run an executable file when you
+" press return on the file name set this.
+
+set norunexec
+
+" Selected color scheme
+
+colorscheme Default
+
+" 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
+
+" ------------------------------------------------------------------------------
+
+" 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 %f, %F, %d, %F 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
+ \ {Play using ffplay}
+ \ ffplay -nodisp -autoexit %c,
+ \ {Play using MPlayer}
+ \ mplayer %f,
+fileviewer *.mp3 mp3info
+fileviewer *.flac soxi
+
+" Video
+filextype *.avi,*.mp4,*.wmv,*.dat,*.3gp,*.ogv,*.mkv,*.mpg,*.mpeg,*.vob,
+ \*.fl[icv],*.m2v,*.mov,*.webm,*.ts,*.mts,*.m4v,*.r[am],*.qt,*.divx,
+ \*.as[fx]
+ \ {View using ffplay}
+ \ ffplay -fs -autoexit %f,
+ \ {View using Dragon}
+ \ dragon %f:p,
+ \ {View using mplayer}
+ \ mplayer %f,
+fileviewer *.avi,*.mp4,*.wmv,*.dat,*.3gp,*.ogv,*.mkv,*.mpg,*.mpeg,*.vob,
+ \*.fl[icv],*.m2v,*.mov,*.webm,*.ts,*.mts,*.m4v,*.r[am],*.qt,*.divx,
+ \*.as[fx]
+ \ ffprobe -pretty %c 2>&1
+
+" Web
+filextype *.html,*.htm
+ \ {Open with dwb}
+ \ dwb %f %i &,
+ \ {Open with firefox}
+ \ firefox %f &,
+ \ {Open with uzbl}
+ \ uzbl-browser %f %i &,
+filetype *.html,*.htm links, lynx
+
+" Object
+filetype *.o nm %f | less
+
+" Man page
+filetype *.[1-8] man ./%c
+fileviewer *.[1-8] man ./%c | col -b
+
+" Images
+filextype *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm
+ \ {View in sxiv}
+ \ sxiv %f,
+ \ {View in gpicview}
+ \ gpicview %c,
+ \ {View in shotwell}
+ \ shotwell,
+fileviewer *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm
+ \ convert -identify %f -verbose /dev/null
+
+" OpenRaster
+filextype *.ora
+ \ {Edit in MyPaint}
+ \ mypaint %f,
+
+" Mindmap
+filextype *.vym
+ \ {Open with VYM}
+ \ vym %f &,
+
+" MD5
+filetype *.md5
+ \ {Check MD5 hash sum}
+ \ md5sum -c %f %S,
+
+" SHA1
+filetype *.sha1
+ \ {Check SHA1 hash sum}
+ \ sha1sum -c %f %S,
+
+" SHA256
+filetype *.sha256
+ \ {Check SHA256 hash sum}
+ \ sha256sum -c %f %S,
+
+" SHA512
+filetype *.sha512
+ \ {Check SHA512 hash sum}
+ \ sha512sum -c %f %S,
+
+" GPG signature
+filetype *.asc
+ \ {Check signature}
+ \ !!gpg --verify %c,
+
+" Torrent
+filetype *.torrent ktorrent %f &
+fileviewer *.torrent dumptorrent -v %c
+
+" FuseZipMount
+filetype *.zip,*.jar,*.war,*.ear,*.oxt,*.apkg
+ \ {Mount with fuse-zip}
+ \ FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR,
+ \ {View contents}
+ \ zip -sf %c | less,
+ \ {Extract here}
+ \ tar -xf %c,
+fileviewer *.zip,*.jar,*.war,*.ear,*.oxt zip -sf %c
+
+" ArchiveMount
+filetype *.tar,*.tar.bz2,*.tbz2,*.tgz,*.tar.gz,*.tar.xz,*.txz
+ \ {Mount with archivemount}
+ \ FUSE_MOUNT|archivemount %SOURCE_FILE %DESTINATION_DIR,
+fileviewer *.tgz,*.tar.gz tar -tzf %c
+fileviewer *.tar.bz2,*.tbz2 tar -tjf %c
+fileviewer *.tar.txz,*.txz xz --list %c
+fileviewer *.tar tar -tf %c
+
+" Rar2FsMount and rar archives
+filetype *.rar
+ \ {Mount with rar2fs}
+ \ FUSE_MOUNT|rar2fs %SOURCE_FILE %DESTINATION_DIR,
+fileviewer *.rar unrar v %c
+
+" IsoMount
+filetype *.iso
+ \ {Mount with fuseiso}
+ \ FUSE_MOUNT|fuseiso %SOURCE_FILE %DESTINATION_DIR,
+
+" SshMount
+filetype *.ssh
+ \ {Mount with sshfs}
+ \ FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR %FOREGROUND,
+
+" FtpMount
+filetype *.ftp
+ \ {Mount with curlftpfs}
+ \ FUSE_MOUNT2|curlftpfs -o ftp_port=-,,disable_eprt %PARAM %DESTINATION_DIR %FOREGROUND,
+
+" Fuse7z and 7z archives
+filetype *.7z
+ \ {Mount with fuse-7z}
+ \ FUSE_MOUNT|fuse-7z %SOURCE_FILE %DESTINATION_DIR,
+fileviewer *.7z 7z l %c
+
+" Office files
+filextype *.odt,*.doc,*.docx,*.xls,*.xlsx,*.odp,*.pptx libreoffice %f &
+fileviewer *.doc catdoc %c
+fileviewer *.docx docx2txt.pl %f -
+
+" TuDu files
+filetype *.tudu tudu -f %c
+
+" Qt projects
+filextype *.pro qtcreator %f &
+
+" Directories
+filextype */
+ \ {View in thunar}
+ \ Thunar %f &,
+
+" Syntax highlighting in preview
+"
+" Explicitly set highlight type for some extensions
+"
+" 256-color terminal
+" fileviewer *.[ch],*.[ch]pp highlight -O xterm256 -s dante --syntax c %c
+" fileviewer Makefile,Makefile.* highlight -O xterm256 -s dante --syntax make %c
+"
+" 16-color terminal
+" fileviewer *.c,*.h highlight -O ansi -s dante %c
+"
+" Or leave it for automatic detection
+"
+" fileviewer *[^/] pygmentize -O style=monokai -f console256 -g
+
+" Displaying pictures in terminal
+"
+" fileviewer *.jpg,*.png shellpic %c
+
+" Open all other files with default system programs (you can also remove all
+" :file[x]type commands above to ensure they don't interfere with system-wide
+" settings). By default all unknown files are opened with 'vi[x]cmd'
+" uncommenting one of lines below will result in ignoring 'vi[x]cmd' option
+" for unknown file types.
+" For *nix:
+" filetype * xdg-open
+" For OS X:
+" filetype * open
+" For Windows:
+" filetype * start, explorer
+
+" ------------------------------------------------------------------------------
+
+" What should be saved automatically between vifm runs
+" Like in previous versions of vifm
+" set vifminfo=options,filetypes,commands,bookmarks,dhistory,state,cs
+" Like in vi
+set vifminfo=dhistory,savedirs,chistory,state,tui,shistory,
+ \phistory,fhistory,dirstack,registers,bookmarks,bmarks
+
+" ------------------------------------------------------------------------------
+
+" Examples of configuring both panels
+
+" Customize view columns a bit (enable ellipsis for truncated file names)
+"
+" set viewcolumns=-{name}..,6{}.
+
+" Filter-out build and temporary files
+"
+" filter! /^.*\.(lo|o|d|class|py[co])$|.*~$/
+
+" ------------------------------------------------------------------------------
+
+" Sample mappings
+
+" Start shell in current directory
+nnoremap s :shell<cr>
+
+" Display sorting dialog
+nnoremap S :sort<cr>
+
+" Toggle visibility of preview window
+nnoremap w :view<cr>
+vnoremap w :view<cr>gv
+
+" Open file in existing instance of gvim
+nnoremap o :!gvim --remote-tab-silent %f<cr>
+" Open file in new instance of gvim
+nnoremap O :!gvim %f<cr>
+
+" Open file in the background using its default program
+nnoremap gb :file &<cr>l
+
+" Yank current directory path into the clipboard
+nnoremap yd :!echo %d | xclip %i<cr>
+
+" Yank current file path into the clipboard
+nnoremap yf :!echo %c:p | xclip %i<cr>
+
+" Mappings for faster renaming
+nnoremap I cw<c-a>
+nnoremap cc cw<c-u>
+nnoremap A cw
+
+" Open console in current directory
+nnoremap ,t :!xterm &<cr>
+
+" Open editor to edit vifmrc and apply settings after returning to vifm
+nnoremap ,c :write | edit $MYVIFMRC | restart<cr>
+" Open gvim to edit vifmrc
+nnoremap ,C :!gvim --remote-tab-silent $MYVIFMRC &<cr>
+
+" Toggle wrap setting on ,w key
+nnoremap ,w :set wrap!<cr>
+
+" Example of standard two-panel file managers mappings
+nnoremap <f3> :!less %f<cr>
+nnoremap <f4> :edit<cr>
+nnoremap <f5> :copy<cr>
+nnoremap <f6> :move<cr>
+nnoremap <f7> :mkdir<space>
+nnoremap <f8> :delete<cr>
+
+" ------------------------------------------------------------------------------
+
+" Various customization examples
+
+" Use ag (the silver searcher) instead of grep
+"
+" set grepprg='ag --line-numbers %i %a %s'
+
+" Add additional place to look for executables
+"
+" let $PATH = $HOME.'/bin/fuse:'.$PATH
+
+" Block particular shortcut
+"
+" nnoremap <left> <nop>
+
+" Export IPC name of current instance as environment variable and use it to
+" communicate with the instance later.
+"
+" It can be used in some shell script that gets run from inside vifm, for
+" example, like this:
+" vifm --server-name "$VIFM_SERVER_NAME" --remote +"cd '$PWD'"
+"
+" let $VIFM_SERVER_NAME = v:servername