diff --git a/aliases/zsh_aliases b/aliases/zsh_aliases index 124fea6..a9b2b12 100644 --- a/aliases/zsh_aliases +++ b/aliases/zsh_aliases @@ -120,6 +120,7 @@ alias lc="f ~/linux-config/" function glc() { grep $1 ~/linux-config/aliases/zsh_aliases ; } alias lca="f ~/linux-config/aliases" +source ~/.shortcuts alias vv="ni ~/.vimrc" alias vu="ni ~/.Xresources" alias vzb="ni ~/.zshrc" @@ -149,7 +150,9 @@ silent="> /dev/null 2>&1& " alias ran="ranger" # okular -function ok() { nohup okular $1 > /dev/null 2>&1& ; } +# function ok() { nohup okular $1 > /dev/null 2>&1& ; } +# zathura +function za() { nohup zathura $1 > /dev/null 2>&1& ; } # xviewer function xv() { nohup xviewer $1 > /dev/null 2>&1& ; } function chr() { google-chrome $1 ; } diff --git a/configs/i3/config b/configs/i3/config index 44f71c9..571a9e0 100644 --- a/configs/i3/config +++ b/configs/i3/config @@ -35,6 +35,7 @@ bindsym Mod4+p workspace $ws4; exec pgadmin3 # bindsym Mod4+p exec pycharm # bindsym Mod4+r exec urxvt -e ranger bindsym Mod4+r exec $runelite +bindsym control+$mod+s exec systemctl suspend bindsym Mod4+x exec $swex bindsym Print exec ksnapshot # }}} app shortcuts # diff --git a/configs/ranger/bookmarks b/configs/ranger/bookmarks index 404b68b..d960c95 100644 --- a/configs/ranger/bookmarks +++ b/configs/ranger/bookmarks @@ -1 +1 @@ -':/home/kevin/coding/spotify-lib-vis/src +':/home/kevin/Downloads diff --git a/configs/ranger/history b/configs/ranger/history index 17d1705..ff699ab 100644 --- a/configs/ranger/history +++ b/configs/ranger/history @@ -1,2 +1,3 @@ rename rocket-league rename rocket-league.png +find d diff --git a/configs/ranger/rc.conf b/configs/ranger/rc.conf index b27e378..b689ae0 100644 --- a/configs/ranger/rc.conf +++ b/configs/ranger/rc.conf @@ -68,7 +68,7 @@ set vcs_backend_bzr disabled set vcs_backend_svn disabled # Use one of the supported image preview protocols -set preview_images false +set preview_images true # Set the preview image method. Supported methods: # @@ -659,7 +659,6 @@ copytmap q Q w # }}} # # preview images -set preview_images true set preview_images_method urxvt # editing ranger config @@ -667,6 +666,7 @@ map R chain shell nvim -p ~/.config/ranger/rc.conf %rangerdir/config/rc.conf; so map rr source ~/.config/ranger/rc.conf # backgrounds +map fd cd ~/Downloads map bg cd ~/Pictures/Backgrounds map w shell ~/.local/bin/wal -i %f map md shell mv %f dim @@ -674,3 +674,4 @@ map mb shell mv %f vibrant # bulk rename map cw eval fm.execute_console("bulkrename") if fm.thisdir.marked_items else fm.open_console("rename ") +source /home/kevin/.config/ranger/shortcuts.conf diff --git a/configs/ranger/scope.sh b/configs/ranger/scope.sh index 514d8f9..ce9ee57 100755 --- a/configs/ranger/scope.sh +++ b/configs/ranger/scope.sh @@ -1,179 +1,89 @@ -#!/usr/bin/env bash +#!/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. -set -o noclobber -o noglob -o nounset -o pipefail -IFS=$'\n' - -# If the option `use_preview_script` is set to `true`, -# then this script will be called and its output will be displayed in ranger. -# ANSI color codes are supported. -# STDIN is disabled, so interactive scripts won't work properly - -# This script is considered a configuration file and must be updated manually. -# It will be left untouched if you upgrade ranger. +# 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 | Display stdout as preview -# 1 | no preview | Display no preview at all -# 2 | plain text | Display the plain content of the file -# 3 | fix width | Don't reload when width changes -# 4 | fix height | Don't reload when height changes -# 5 | fix both | Don't ever reload -# 6 | image | Display the image `$IMAGE_CACHE_PATH` points to as an image preview -# 7 | image | Display the file directly as an image - -# Script arguments -FILE_PATH="${1}" # Full path of the highlighted file -PV_WIDTH="${2}" # Width of the preview pane (number of fitting characters) -PV_HEIGHT="${3}" # Height of the preview pane (number of fitting characters) -IMAGE_CACHE_PATH="${4}" # Full path that should be used to cache image preview -PV_IMAGE_ENABLED="${5}" # 'True' if image previews are enabled, 'False' otherwise. - -FILE_EXTENSION="${FILE_PATH##*.}" -FILE_EXTENSION_LOWER=$(echo ${FILE_EXTENSION} | tr '[:upper:]' '[:lower:]') - -# Settings -HIGHLIGHT_SIZE_MAX=262143 # 256KiB -HIGHLIGHT_TABWIDTH=8 -HIGHLIGHT_STYLE='pablo' -PYGMENTIZE_STYLE='autumn' - - -handle_extension() { - case "${FILE_EXTENSION_LOWER}" in - # Archive - 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) - atool --list -- "${FILE_PATH}" && exit 5 - bsdtar --list --file "${FILE_PATH}" && exit 5 - exit 1;; - rar) - # Avoid password prompt by providing empty password - unrar lt -p- -- "${FILE_PATH}" && exit 5 - exit 1;; - 7z) - # Avoid password prompt by providing empty password - 7z l -p -- "${FILE_PATH}" && exit 5 - exit 1;; - - # PDF - pdf) - # Preview as text conversion - pdftotext -l 10 -nopgbrk -q -- "${FILE_PATH}" - && exit 5 - # pdftoppm -jpeg -singlefile "$path" "${cached//.jpg}" && exit 6 || exit 1;; - exiftool "${FILE_PATH}" && exit 5 - exit 1;; - - # BitTorrent - torrent) - transmission-show -- "${FILE_PATH}" && exit 5 - exit 1;; - - # OpenDocument - odt|ods|odp|sxw) - # Preview as text conversion - odt2txt "${FILE_PATH}" && exit 5 - exit 1;; - - # HTML - htm|html|xhtml) - # Preview as text conversion - w3m -dump "${FILE_PATH}" && exit 5 - lynx -dump -- "${FILE_PATH}" && exit 5 - elinks -dump "${FILE_PATH}" && exit 5 - ;; # Continue with next handler on failure - esac -} - -handle_image() { - local mimetype="${1}" - case "${mimetype}" in - # SVG - # image/svg+xml) - # convert "${FILE_PATH}" "${IMAGE_CACHE_PATH}" && exit 6 - # exit 1;; - - # Image - image/*) - local orientation - orientation="$( identify -format '%[EXIF:Orientation]\n' -- "${FILE_PATH}" )" - # If orientation data is present and the image actually - # needs rotating ("1" means no rotation)... - if [[ -n "$orientation" && "$orientation" != 1 ]]; then - # ...auto-rotate the image according to the EXIF data. - convert -- "${FILE_PATH}" -auto-orient "${IMAGE_CACHE_PATH}" && exit 6 - fi - - # `w3mimgdisplay` will be called for all images (unless overriden as above), - # but might fail for unsupported types. - exit 7;; - - # Video - # video/*) - # # Thumbnail - # ffmpegthumbnailer -i "${FILE_PATH}" -o "${IMAGE_CACHE_PATH}" -s 0 && exit 6 - # exit 1;; - # PDF - # application/pdf) - # pdftoppm -f 1 -l 1 \ - # -scale-to-x 1920 \ - # -scale-to-y -1 \ - # -singlefile \ - # -jpeg -tiffcompression jpeg \ - # -- "${FILE_PATH}" "${IMAGE_CACHE_PATH%.*}" \ - # && exit 6 || exit 1;; - esac -} - -handle_mime() { - local mimetype="${1}" - case "${mimetype}" in - # Text - text/* | */xml) - # Syntax highlight - if [[ "$( stat --printf='%s' -- "${FILE_PATH}" )" -gt "${HIGHLIGHT_SIZE_MAX}" ]]; then - exit 2 - fi - if [[ "$( tput colors )" -ge 256 ]]; then - local pygmentize_format='terminal256' - local highlight_format='xterm256' - else - local pygmentize_format='terminal' - local highlight_format='ansi' - fi - highlight --replace-tabs="${HIGHLIGHT_TABWIDTH}" --out-format="${highlight_format}" \ - --style="${HIGHLIGHT_STYLE}" --force -- "${FILE_PATH}" && exit 5 - # pygmentize -f "${pygmentize_format}" -O "style=${PYGMENTIZE_STYLE}" -- "${FILE_PATH}" && exit 5 - exit 2;; - - # Image - image/*) - # Preview as text conversion - # img2txt --gamma=0.6 --width="${PV_WIDTH}" -- "${FILE_PATH}" && exit 4 - exiftool "${FILE_PATH}" && exit 5 - exit 1;; - - # Video and audio - video/* | audio/*) - mediainfo "${FILE_PATH}" && exit 5 - exiftool "${FILE_PATH}" && exit 5 - exit 1;; - esac -} - -handle_fallback() { - echo '----- File Type Classification -----' && file --dereference --brief -- "${FILE_PATH}" && exit 5 - exit 1 -} - - -MIMETYPE="$( file --dereference --brief --mime-type -- "${FILE_PATH}" )" -if [[ "${PV_IMAGE_ENABLED}" == 'True' ]]; then - handle_image "${MIMETYPE}" -fi -handle_extension -handle_mime "${MIMETYPE}" -handle_fallback +# 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/configs/ranger/shortcuts.conf b/configs/ranger/shortcuts.conf new file mode 100644 index 0000000..7db0801 --- /dev/null +++ b/configs/ranger/shortcuts.conf @@ -0,0 +1,4 @@ +map gd cd ~/Downloads +map td tab_new ~/Downloads +map md shell mv -v %s ~/Downloads +map Yd shell cp -rv %s ~/Downloads diff --git a/dotfiles/vimrc b/dotfiles/vimrc index cb445c1..b34dce6 100644 --- a/dotfiles/vimrc +++ b/dotfiles/vimrc @@ -71,7 +71,7 @@ Plug '907th/vim-auto-save' Plug 'lervag/vimtex' au BufWritePost *.tex silent call Tex_RunLaTeX() au BufWritePost *.tex silent !pkill -USR1 xdvi.bin - let g:vimtex_view_general_viewer = 'okular' + let g:vimtex_view_general_viewer = 'zathura' " auto-completion for various languages Plug 'Valloric/YouCompleteMe' @@ -237,10 +237,11 @@ autocmd Filetype tex inoremap g \geq autocmd Filetype tex inoremap i \in autocmd Filetype tex inoremap l \leq autocmd Filetype tex inoremap lr \Leftrightarrow -autocmd Filetype tex inoremap n \neg +" autocmd Filetype tex inoremap n \neg +autocmd Filetype tex inoremap n \neq autocmd Filetype tex inoremap N \mathbb{N} autocmd Filetype tex inoremap q \qquad -autocmd Filetype tex inoremap R \Rightarrow +autocmd Filetype tex inoremap r \Rightarrow autocmd Filetype tex inoremap st such that autocmd Filetype tex inoremap S \Sigma autocmd Filetype tex inoremap t \times diff --git a/dotfiles/zshrc b/dotfiles/zshrc index bc85d17..2bdec54 100644 --- a/dotfiles/zshrc +++ b/dotfiles/zshrc @@ -110,3 +110,4 @@ then # enable horizontal scrolling synclient HorizTwoFingerScroll=1 fi +source /home/kevin/.shortcuts diff --git a/key_dirs.txt b/key_dirs.txt new file mode 100644 index 0000000..5142a72 --- /dev/null +++ b/key_dirs.txt @@ -0,0 +1,3 @@ +D ~/Documents +d ~/Downloads +ho ~/ diff --git a/shortcuts.sh b/shortcuts.sh new file mode 100755 index 0000000..8f2b9dc --- /dev/null +++ b/shortcuts.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +# Shell rc file (i.e. bash vs. zsh, etc.) +shellrc="$HOME/.zshrc" + +# Config locations +folders="$HOME/linux-config/key_dirs.txt" +configs="$HOME/.key_files" + +# Output locations +shell_shortcuts="$HOME/.shortcuts" +ranger_shortcuts="$HOME/.config/ranger/shortcuts.conf" + +# Remove +rm -f "$ranger_shortcuts" 2>/dev/null +echo "alias \\" > "$shell_shortcuts" + +# Ensure text of argument 1 exists in the file argument 2 +ensure() { (grep "$1" "$2")>/dev/null 2>&1 || echo "$1" >> "$2" ;} + +ensure "source $shell_shortcuts" "$shellrc" +ensure "source $HOME/.config/ranger/shortcuts.conf" "$HOME/.config/ranger/rc.conf" + +# Format the `folders` file in the correct syntax and sent it to all three configs. +sed "s/#.*$//;/^$/d" "$folders" | tee >(awk '{print $1"=\"cd "$2" && ls -a\" \\"}' >> "$shell_shortcuts") \ + | awk '{print "map g"$1" cd "$2"\nmap t"$1" tab_new "$2"\nmap m"$1" shell mv -v %s "$2"\nmap Y"$1" shell cp -rv %s "$2}' >> "$ranger_shortcuts" + +# Format the `configs` file in the correct syntax and sent it to both configs. +sed "s/#.*$//;/^$/d" "$configs" | tee >(awk '{print $1"=\"$EDITOR "$2"\" \\"}' >> "$shell_shortcuts") \ + | awk '{print "map "$1" shell $EDITOR "$2}' >> "$ranger_shortcuts"