+** polybar
+
+*** config
+:PROPERTIES:
+:header-args+: :tangle ~/.config/polybar/config
+:END:
+
+#+begin_src conf :tangle no
+;=====================================================
+;
+; 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 = #eee
+foreground-alt = #888
+primary = #ffb52a
+secondary = #e60053
+alert = #bd2c40
+
+[bar/main]
+;monitor = ${env:MONITOR:HDMI-1}
+width = 100%
+height = 27
+;offset-x = 1%
+;offset-y = 1%
+radius = 3.0
+fixed-center = true
+
+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 = 2
+module-margin-right = 2
+
+font-0 = Ubuntu:fontformat=truetype:antialias=true:pixelsize=9;1
+font-1 = unifont:fontformat=truetype:size=8:antialias=false;0
+font-2 = Wuncon Siji:pixelsize=10;1
+font-3 = FontAwesome:pixelsize=10;1
+
+modules-left = bspwm xwindow
+modules-center =
+modules-right = volume filesystem mail xkeyboard memory cpu temperature date powermenu
+
+tray-position = right
+tray-padding = 1
+;tray-transparent = true
+;tray-background = #0063ff
+tray-maxsize = 18
+
+wm-restack = bspwm
+
+;override-redirect = true
+
+scroll-up = bspwm-desknext
+scroll-down = bspwm-deskprev
+
+[module/xwindow]
+type = internal/xwindow
+label = %title:0:50:...%
+
+[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
+
+[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}
+
+[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 = #ff
+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
+card = mba6x_backlight
+
+[module/cpu]
+type = internal/cpu
+interval = 2
+format-prefix = " "
+format-prefix-foreground = ${colors.foreground-alt}
+format-underline = #f90000
+label = %percentage%%
+
+[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 =
+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 =
+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/volume]
+type = internal/volume
+
+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 = mute
+
+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 = BAT0
+adapter = ADP1
+full-at = 64
+
+format-charging = <animation-charging> <label-charging>
+format-charging-underline = #ffb52a
+
+format-discharging = <ramp-capacity> <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
+
+[module/temperature]
+type = internal/temperature
+thermal-zone = 1
+warn-temperature = 66
+
+format = <ramp> <label>
+format-underline = #f50a4d
+format-warn = <ramp> <label-warn>
+format-warn-underline = ${self.format-underline}
+
+label = %temperature%
+label-warn = %temperature%
+label-warn-foreground = ${colors.secondary}
+
+ramp-0 =
+ramp-1 =
+ramp-2 =
+ramp-foreground = ${colors.foreground-alt}
+
+[module/powermenu]
+type = custom/menu
+
+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
+
+[module/mail]
+type = custom/script
+interval = 60
+format = <label>
+format-prefix = " "
+format-prefix-foreground = ${colors.foreground-alt}
+format-underline = #0a6cf5
+exec = notmuch count tag:unread
+
+[settings]
+screenchange-reload = true
+;compositing-background = xor
+;compositing-background = screen
+;compositing-foreground = source
+;compositing-border = over
+
+[global/wm]
+margin-top = 0
+margin-bottom = 0
+
+; vim:ft=dosini
+#+end_src
+
+*** polybar-launch
+:PROPERTIES:
+:header-args+: :tangle ~/.local/bin/polybar-launch
+:END:
+
+#+begin_src sh :shebang "#!/bin/sh" :tangle no
+# Terminate already running bar instances
+killall -q polybar
+
+# Wait until the processes have been shut down
+while pgrep -x polybar >/dev/null; do sleep 1; done
+
+# Launch main bar
+polybar main &
+
+echo "Bars launched..."
+#+end_src
+
+** ranger
+
+*** rc.conf
+:PROPERTIES:
+:header-args+: :tangle ~/.config/ranger/rc.conf
+:END:
+
+#+begin_src conf :tangle no
+# ===================================================================
+# 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 false
+
+# Ask for a confirmation when running the "delete" command?
+# Valid values are "always" (default), "never", "multiple"
+# 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 for dependencies) to preview images, archives, etc.
+set preview_script ~/.config/ranger/scope.sh
+
+# Use the external preview script or display simple plain text previews?
+set use_preview_script 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
+
+# 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.
+set preview_images true
+
+# 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
+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, basename, mtime, type
+set sort natural
+
+# Additional sorting options
+set sort_reverse false
+set sort_case_insensitive true
+set sort_directories_first true
+
+# Enable this if key combinations with the Alt Key don't work for you.
+# (Especially on xterm)
+set xterm_alt_key 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 qall quitall
+alias setl setlocal
+
+alias filter scout -prt
+alias find scout -aet
+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
+map @ console -p6 shell %%s
+map # console shell -p
+map s console shell
+map r chain draw_possible_programs; console open_with
+map f console find
+map cd console cd
+
+# 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
+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
+
+# 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=0.5 pages=True
+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 -d echo -n %d/%f | xsel -i
+map yd shell -d echo -n %d | xsel -i
+map yn shell -d echo -n %f | xsel -i
+
+# Filesystem Operations
+map = chmod
+
+map cw console rename
+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 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
+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 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 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 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
+
+# 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 -d chmod u+{0} %s".format(arg))
+eval for arg in "rwxXst": cmd("map +g{0} shell -d chmod g+{0} %s".format(arg))
+eval for arg in "rwxXst": cmd("map +o{0} shell -d chmod o+{0} %s".format(arg))
+eval for arg in "rwxXst": cmd("map +a{0} shell -d chmod a+{0} %s".format(arg))
+eval for arg in "rwxXst": cmd("map +{0} shell -d chmod u+{0} %s".format(arg))
+
+eval for arg in "rwxXst": cmd("map -u{0} shell -d chmod u-{0} %s".format(arg))
+eval for arg in "rwxXst": cmd("map -g{0} shell -d chmod g-{0} %s".format(arg))
+eval for arg in "rwxXst": cmd("map -o{0} shell -d chmod o-{0} %s".format(arg))
+eval for arg in "rwxXst": cmd("map -a{0} shell -d chmod a-{0} %s".format(arg))
+eval for arg in "rwxXst": cmd("map -{0} shell -d 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 <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 <ESC> taskview_close
+copytmap <ESC> q Q w <C-c>
+#+end_src
+
+*** scope.sh
+:PROPERTIES:
+:header-args+: :tangle ~/.config/ranger/scope.sh
+:END:
+
+#+begin_src sh :shebang "#!/bin/sh" :tangle no
+# 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
+
+# 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)
+
+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=${path##*.}
+
+# 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 previouosly used "try" command
+dump() { echo "$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;;
+ # 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
+#+end_src
+