Преглед изворни кода

Initial commit of configs

master
Immanuel пре 4 година
комит
9401c4c0da
88 измењених фајлова са 14871 додато и 0 уклоњено
  1. +327
    -0
      .bashrc
  2. +36
    -0
      .profile
  3. +1152
    -0
      ckb-next/ckb-next.conf
  4. +206
    -0
      cmus/autosave
  5. BIN
      cmus/cache
  6. +18
    -0
      cmus/command-history
  7. +1295
    -0
      cmus/lib.pl
  8. +10
    -0
      cmus/playlists/default
  9. +8
    -0
      cmus/playlists/night
  10. +100
    -0
      cmus/search-history
  11. +35
    -0
      compton/compton.conf
  12. +73
    -0
      liferea/feedlist.opml
  13. +73
    -0
      liferea/feedlist.opml.backup
  14. +115
    -0
      liferea/liferea.css
  15. +2
    -0
      liferea/mime.xml
  16. +7
    -0
      lutris/games/albion-online-desktopapp.yml
  17. +7
    -0
      lutris/games/battle-for-wesnoth-114-desktopapp.yml
  18. +7
    -0
      lutris/games/dead-cells-desktopapp.yml
  19. +4
    -0
      lutris/games/enter-the-gungeon-1577079283.yml
  20. +17
    -0
      lutris/games/forager-1571288689.yml
  21. +2
    -0
      lutris/games/pillars-of-eternity-ii-deadfi-gog-1577232735.yml
  22. +4
    -0
      lutris/games/rise-to-ruins-1577304968.yml
  23. +21
    -0
      lutris/lutris.conf
  24. +5
    -0
      mpv/input.conf
  25. +1
    -0
      mpv/watch_later/A7194328C257CC39AAA0063BC6647E85
  26. +3
    -0
      mpv/watch_later/EE0A97D6FD10A16BA8E0600A6659C32E
  27. +0
    -0
      nnn/.selection
  28. +17
    -0
      nnn/plugins/imgthumb
  29. +60
    -0
      nnn/plugins/imgview
  30. +229
    -0
      nnn/plugins/preview-tui
  31. +58
    -0
      nnn/plugins/x2sel
  32. +28
    -0
      openbox/autostart
  33. +14
    -0
      openbox/environment
  34. +35
    -0
      openbox/menu.xml
  35. +914
    -0
      openbox/rc.xml
  36. +62
    -0
      ranger/tmp/commands.py
  37. +1836
    -0
      ranger/tmp/commands_full.py
  38. +725
    -0
      ranger/tmp/rc.conf
  39. +256
    -0
      ranger/tmp/rifle.conf
  40. +216
    -0
      ranger/tmp/scope.sh
  41. +9
    -0
      tmux/plugins/tpm/.gitattributes
  42. +4
    -0
      tmux/plugins/tpm/.gitignore
  43. +3
    -0
      tmux/plugins/tpm/.gitmodules
  44. +19
    -0
      tmux/plugins/tpm/.travis.yml
  45. +83
    -0
      tmux/plugins/tpm/CHANGELOG.md
  46. +2
    -0
      tmux/plugins/tpm/HOW_TO_PLUGIN.md
  47. +20
    -0
      tmux/plugins/tpm/LICENSE.md
  48. +113
    -0
      tmux/plugins/tpm/README.md
  49. +14
    -0
      tmux/plugins/tpm/bin/clean_plugins
  50. +14
    -0
      tmux/plugins/tpm/bin/install_plugins
  51. +24
    -0
      tmux/plugins/tpm/bin/update_plugins
  52. +19
    -0
      tmux/plugins/tpm/bindings/clean_plugins
  53. +19
    -0
      tmux/plugins/tpm/bindings/install_plugins
  54. +49
    -0
      tmux/plugins/tpm/bindings/update_plugins
  55. +12
    -0
      tmux/plugins/tpm/docs/automatic_tpm_installation.md
  56. +14
    -0
      tmux/plugins/tpm/docs/changing_plugins_install_dir.md
  57. +108
    -0
      tmux/plugins/tpm/docs/how_to_create_plugin.md
  58. +36
    -0
      tmux/plugins/tpm/docs/managing_plugins_via_cmd_line.md
  59. +96
    -0
      tmux/plugins/tpm/docs/tpm_not_working.md
  60. +78
    -0
      tmux/plugins/tpm/scripts/check_tmux_version.sh
  61. +41
    -0
      tmux/plugins/tpm/scripts/clean_plugins.sh
  62. +104
    -0
      tmux/plugins/tpm/scripts/helpers/plugin_functions.sh
  63. +7
    -0
      tmux/plugins/tpm/scripts/helpers/shell_echo_functions.sh
  64. +28
    -0
      tmux/plugins/tpm/scripts/helpers/tmux_echo_functions.sh
  65. +3
    -0
      tmux/plugins/tpm/scripts/helpers/tmux_utils.sh
  66. +17
    -0
      tmux/plugins/tpm/scripts/helpers/utility.sh
  67. +66
    -0
      tmux/plugins/tpm/scripts/install_plugins.sh
  68. +41
    -0
      tmux/plugins/tpm/scripts/source_plugins.sh
  69. +71
    -0
      tmux/plugins/tpm/scripts/update_plugin.sh
  70. +18
    -0
      tmux/plugins/tpm/scripts/update_plugin_prompt_handler.sh
  71. +13
    -0
      tmux/plugins/tpm/scripts/variables.sh
  72. +36
    -0
      tmux/plugins/tpm/tests/expect_failed_plugin_download
  73. +35
    -0
      tmux/plugins/tpm/tests/expect_successful_clean_plugins
  74. +44
    -0
      tmux/plugins/tpm/tests/expect_successful_multiple_plugins_download
  75. +50
    -0
      tmux/plugins/tpm/tests/expect_successful_plugin_download
  76. +55
    -0
      tmux/plugins/tpm/tests/expect_successful_update_of_a_single_plugin
  77. +59
    -0
      tmux/plugins/tpm/tests/expect_successful_update_of_all_plugins
  78. +13
    -0
      tmux/plugins/tpm/tests/helpers/tpm.sh
  79. +67
    -0
      tmux/plugins/tpm/tests/test_plugin_clean.sh
  80. +284
    -0
      tmux/plugins/tpm/tests/test_plugin_installation.sh
  81. +100
    -0
      tmux/plugins/tpm/tests/test_plugin_installation_legacy.sh
  82. +78
    -0
      tmux/plugins/tpm/tests/test_plugin_sourcing.sh
  83. +60
    -0
      tmux/plugins/tpm/tests/test_plugin_update.sh
  84. +72
    -0
      tmux/plugins/tpm/tpm
  85. +76
    -0
      tmux/tmux.conf
  86. +892
    -0
      xfiles/Xresources
  87. +1917
    -0
      xkb/custom.xkb
  88. +1910
    -0
      xkb/output.xkb

+ 327
- 0
.bashrc Прегледај датотеку

@@ -0,0 +1,327 @@
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar

# make less more friendly for non-text input files, see lesspipe(1)
#[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color|*-256color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi

if [ "$color_prompt" = yes ]; then
#PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[\033[01;34m\]\W §\[\033[00m\] '
PS4='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[\033[01;34m\]\W §\[\033[00m\] '
# PROMPT_DIRTRIM=3
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
*)
;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'

#alias grep='grep --color=auto'
#alias fgrep='fgrep --color=auto'
#alias egrep='egrep --color=auto'
fi

# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# some more ls aliases
#alias ll='ls -l'
#alias la='ls -A'
#alias l='ls -CF'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
#Special Settings
set -o vi

#Directory changes
alias cdn='cd $HOME/Notes/; vim "+CtrlP"'
alias cdd='cd $HOME/Downloads/'
alias cdo='cd $HOME/Source/'
alias cdc='cd $HOME/.config/'
alias cd-projects='cd $HOME/Projects/'
alias cd-x='cd $HOME/Encrypted/x/'
alias cd-vim='cd /usr/share/vim/vim82/pack/my-plugins/start'

#General
alias v='vim'
alias yt='youtube-dl'
alias ytb='youtube-dl --no-progress'
alias depth='echo $SHLVL'
alias lsg='ls -la | grep' #Determines if a file or folder with a name containing a sequence of characters is in the current directory
alias show='apt show'
alias lynx='lynx -vikeys'
alias lsa='ls -laF'
alias doihave='apt list --installed'

#Utilities
alias ins='sudo apt-get install'
alias uns='sudo apt-get purge'
alias update='sudo apt-get update; sudo apt-get upgrade;'
alias rn='ranger'
alias nnn='nnn -xE'
alias util-dropdown="st -c 'DROPDOWN_TERM' -e 'tmux' &"


#Programming
alias py='ipython3 --TerminalInteractiveShell.editing_mode=vi'
alias gc='git clone'

# Edit config and system files
alias edit-bashrc='vim $HOME/.bashrc'
alias edit-profile='vim $HOME/.profile'
alias edit-vimrc='sudo vim /etc/vim/vimrc.local'
alias edit-xkb='vim $HOME/.config/xkb/custom.xkb'
alias edit-xr='vim ~/.config/xfiles/Xresources'
alias edit-sources='sudo vim /etc/apt/sources.list'
alias edit-tmux='vim $HOME/.config/tmux/tmux.conf'
alias load-xr='xrdb ~/.config/xfiles/Xresources'
alias load-xkb='xkbcomp $HOME/.config/xkb/custom.xkb $DISPLAY'
alias load-xt='xrdb $HOME/.config/Xresources'
alias load-profile='source $HOME/.profile'
alias lo='load-profile'
alias betterXev="xev | awk -F'[ )]+' '/^KeyPress/ { a[NR+2] } NR in a { printf \"%-3s %s\\n\", $5, $8 }'"


#Encryption
alias mntx='encfs $HOME/Encrypted/.x/ $HOME/Encrypted/x/'
alias umntx='encfs -u $HOME/Encrypted/x/'

#Applications
alias scan='sudo arp-scan 192.168.0.1/24'
alias weechat='weechat -d "$XDG_CONFIG_HOME"/weechat'

#BASE16_SHELL="$HOME/.config/base16-shell/"
# [ -n "$PS1" ] && \
# [ -s "$BASE16_SHELL/profile_helper.sh" ] && \
# eval "$("$BASE16_SHELL/profile_helper.sh")"


#Special functions! :D
search () {
apt search $@ | less


}
clean () {
#Check if there is too many arguments
if [ "$#" -gt "1" ]
then
echo "Too many arguments. There are $#."
return
fi
case "$1" in
'')
;;
soft)
history -c ;;
hard)
history -c
rm -r $HOME/tmp/; mkdir $HOME/tmp/ ;;
*)
echo "Invalid arguments"; return ;;
esac

echo "History clear"
sudo apt-get autoremove #Cleanup packages
echo "Clean complete"
}

wall(){
if [ "$#" -gt "1" ]
then
echo "Too many arguments. There are $#."
return
fi
case "$1" in
on)
sudo iptables -F

#Allows lo, allows SSH in, allows packets related to connections established with output
sudo iptables -A walkin -i lo -j ACCEPT
sudo iptables -A walkin -p tcp --dport 22 -j ACCEPT
sudo iptables -A walkin -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

#Allows lo, allows ssh out, allows connections out that are owned by root, allows vpn
sudo iptables -A walkout -o lo -j ACCEPT
sudo iptables -A walkout -p tcp --dport 22 -j ACCEPT
sudo iptables -A walkout -m owner --uid-owner root -j ACCEPT
sudo iptables -A walkout -o tun0 -j ACCEPT

sudo iptables -A INPUT -j walkin
sudo iptables -A INPUT -j DROP

sudo iptables -A OUTPUT -j walkout
sudo iptables -A OUTPUT -j DROP
#Not needed
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
echo "Firewall is on"
;;
off)
sudo iptables -F
sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
echo "Firewall is off"
;;
*)
echo "Invalid arguments"; return ;;
esac
}

#adb commands for moving files between the desktop and an android.
apull () {
adb shell ls '/storage/self/primary/Download/'$1 | tr -d '\r' | xargs -n1 adb pull
}

als(){
adb shell ls /storage/self/primary/Download/$1
}

apush() {
adb push "$1" /storage/self/primary/Download;
}

poly() {
# Terminate already running bar instances
killall -q polybar

# Wait until the processes have been shut down
while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done

cp -r $XDG_CONFIG_HOME/polybar/bars/polybar-$1/* $XDG_CONFIG_HOME/polybar/
cp -r $XDG_CONFIG_HOME/polybar/fonts/* ~/.local/share/fonts
fc-cache
$XDG_CONFIG_HOME/polybar/launch.sh
}

vpn() {
nmcli connect $1 $2.protonvpn.com.udp
}

define() {
dict $1 | less;
}
n () {
# Block nesting of nnn in subshells
if [ -n $NNNLVL ] && [ "${NNNLVL:-0}" -ge 1 ]; then
echo "nnn is already running"
return
fi

# The default behaviour is to cd on quit (nnn checks if NNN_TMPFILE is set)
# To cd on quit only on ^G, remove the "export" as in:
# NNN_TMPFILE="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.lastd"
# NOTE: NNN_TMPFILE is fixed, should not be modified
NNN_TMPFILE="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.lastd"

# Unmask ^Q (, ^V etc.) (if required, see `stty -a`) to Quit nnn
# stty start undef
# stty stop undef
# stty lwrap undef
# stty lnext undef

nnn "$@"

if [ -f "$NNN_TMPFILE" ]; then
. "$NNN_TMPFILE"
rm -f "$NNN_TMPFILE" > /dev/null
fi
}

compare() {
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative $1..$2;
}

blaunch() {
BASE16_SHELL="$HOME/.config/base16-shell/"
[ -n "$PS1" ] && \
[ -s "$BASE16_SHELL/profile_helper.sh" ] && \
eval "$("$BASE16_SHELL/profile_helper.sh")"
}


+ 36
- 0
.profile Прегледај датотеку

@@ -0,0 +1,36 @@
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi

export PATH="$HOME/Macros:$HOME/go/bin:/usr/lib/go/bin:$PATH"
export GOPATH="$HOME/go"
export GO111MODULE=on
export VISUAL='ewrap'
export EDITOR='vim'
export PAGER='less'
export NNN_BMS='h:~/;c:~/.config;n:~/Notes;'
export NNN_FIFO=/tmp/nnn.fifo
export NNN_PLUG='p:preview-tui;c:x2sel;i:imgview'
export USE_PISTOL=0
export XDG_CONFIG_HOME=$HOME/.config
export XDG_CACHE_HOME=$HOME/.cache
export XDG_DATA_HOME=$HOME/.local/share

+ 1152
- 0
ckb-next/ckb-next.conf
Разлика између датотеке није приказан због своје велике величине
Прегледај датотеку


+ 206
- 0
cmus/autosave Прегледај датотеку

@@ -0,0 +1,206 @@
set aaa_mode=all
set altformat_current= %F
set altformat_playlist= %f%= %d
set altformat_title=%f
set altformat_trackwin= %f%= %d
set auto_expand_albums_follow=true
set auto_expand_albums_search=true
set auto_expand_albums_selcur=true
set auto_reshuffle=true
set buffer_seconds=10
set color_cmdline_attr=default
set color_cmdline_bg=default
set color_cmdline_fg=default
set color_cur_sel_attr=default
set color_error=124
set color_info=172
set color_separator=246
set color_statusline_attr=default
set color_statusline_bg=237
set color_statusline_fg=72
set color_titleline_attr=default
set color_titleline_bg=236
set color_titleline_fg=142
set color_trackwin_album_attr=bold
set color_trackwin_album_bg=default
set color_trackwin_album_fg=default
set color_win_attr=default
set color_win_bg=default
set color_win_cur=175
set color_win_cur_attr=default
set color_win_cur_sel_attr=default
set color_win_cur_sel_bg=237
set color_win_cur_sel_fg=175
set color_win_dir=229
set color_win_fg=default
set color_win_inactive_cur_sel_attr=default
set color_win_inactive_cur_sel_bg=236
set color_win_inactive_cur_sel_fg=175
set color_win_inactive_sel_attr=default
set color_win_inactive_sel_bg=236
set color_win_inactive_sel_fg=229
set color_win_sel_attr=default
set color_win_sel_bg=237
set color_win_sel_fg=229
set color_win_title_attr=default
set color_win_title_bg=246
set color_win_title_fg=235
set confirm_run=true
set continue=true
set device=/dev/cdrom
set display_artist_sort_name=false
set dsp.alsa.device=
set dsp.ao.buffer_size=16384
set dsp.ao.device_interface=
set dsp.ao.driver=
set dsp.ao.wav_counter=1
set dsp.ao.wav_dir=/home/immanuel
set dsp.jack.resampling_quality=2
set dsp.jack.server_name=
set follow=false
set format_current= %a - %l -%3n. %t%= %y
set format_playlist= %-21%a %3n. %t%= %y %d %{?X!=0?%3X ? }
set format_playlist_va= %-21%A %3n. %t (%a)%= %y %d %{?X!=0?%3X ? }
set format_statusline= %{status} %{?show_playback_position?%{position} %{?duration?/ %{duration} }?%{?duration?%{duration} }}- %{total} %{?bpm>0?at %{bpm} BPM }%{?volume>=0?vol: %{?lvolume!=rvolume?%{lvolume},%{rvolume} ?%{volume} }}%{?stream?buf: %{buffer} }%{?show_current_bitrate & bitrate>=0? %{bitrate} kbps }%=%{?repeat_current?repeat current?%{?play_library?%{playlist_mode} from %{?play_sorted?sorted }library?playlist}} | %1{continue}%1{follow}%1{repeat}%1{shuffle}
set format_title=%a - %l - %t (%y)
set format_trackwin=%3n. %t%= %y %d
set format_trackwin_album= %l
set format_trackwin_va=%3n. %t (%a)%= %y %d
set format_treewin= %l
set format_treewin_artist=%a
set icecast_default_charset=ISO-8859-1
set id3_default_charset=ISO-8859-1
set input.aac.priority=50
set input.cdio.cddb_url=freedb.freedb.org:8880
set input.cdio.priority=50
set input.cue.priority=50
set input.ffmpeg.priority=30
set input.flac.priority=50
set input.mad.priority=55
set input.modplug.priority=50
set input.mpc.priority=50
set input.opus.priority=50
set input.vorbis.priority=50
set input.wav.priority=50
set input.wavpack.priority=50
set lib_add_filter=
set lib_sort=albumartist date album discnumber tracknumber title filename play_count
set mixer.alsa.channel=
set mixer.alsa.device=
set mixer.pulse.restore_volume=1
set mouse=false
set mpris=true
set output_plugin=pulse
set passwd=
set pl_sort=
set play_library=true
set play_sorted=false
set repeat=true
set repeat_current=false
set replaygain=disabled
set replaygain_limit=true
set replaygain_preamp=0.000000
set resume=false
set rewind_offset=5
set scroll_offset=2
set set_term_title=true
set show_all_tracks=true
set show_current_bitrate=false
set show_hidden=false
set show_playback_position=true
set show_remaining_time=true
set shuffle=false
set skip_track_info=false
set smart_artist_sort=true
set softvol=false
set softvol_state=0 0
set start_view=tree
set status_display_program=
set time_show_leading_zero=true
set wrap_search=true
bind browser backspace browser-up
bind browser i toggle show_hidden
bind browser space win-activate
bind browser u win-update
bind common ! push shell
bind common + vol +10%
bind common , seek -1m
bind common - vol -10%
bind common . seek +1m
bind common 1 view tree
bind common 2 view sorted
bind common 3 view playlist
bind common 4 view queue
bind common 5 view browser
bind common 6 view filters
bind common 7 view settings
bind common = vol +10%
bind common C toggle continue
bind common D win-remove
bind common E win-add-Q
bind common F push filter
bind common G win-bottom
bind common I echo {}
bind common L push live-filter
bind common M toggle play_library
bind common N search-prev
bind common P win-mv-before
bind common U win-update-cache
bind common [ vol +1% +0
bind common ] vol +0 +1%
bind common ^B win-page-up
bind common ^C echo Type :quit<enter> to exit cmus.
bind common ^E win-scroll-down
bind common ^F win-page-down
bind common ^L refresh
bind common ^R toggle repeat_current
bind common ^Y win-scroll-up
bind common a win-add-l
bind common b player-next
bind common c player-pause
bind common delete win-remove
bind common down win-down
bind common e win-add-q
bind common end win-bottom
bind common enter win-activate
bind common f toggle follow
bind common g win-top
bind common h seek -5
bind common home win-top
bind common i win-sel-cur
bind common j win-down
bind common k win-up
bind common l seek +5
bind common left seek -5
bind common m toggle aaa_mode
bind common mlb_click_selected win-activate
bind common mouse_scroll_down win-down
bind common mouse_scroll_up win-up
bind common n search-next
bind common o toggle play_sorted
bind common p win-mv-after
bind common page_down win-page-down
bind common page_up win-page-up
bind common q quit -i
bind common r toggle repeat
bind common right seek +5
bind common s toggle shuffle
bind common space win-toggle
bind common t toggle show_remaining_time
bind common tab win-next
bind common u update-cache
bind common up win-up
bind common v player-stop
bind common x player-play
bind common y win-add-p
bind common z player-prev
bind common { vol -1% -0
bind common } vol -0 -1%
fset 90s=date>=1990&date<2000
fset classical=genre="Classical"
fset missing-tag=!stream&(artist=""|album=""|title=""|tracknumber=-1|date=-1)
fset mp3=filename="*.mp3"
fset ogg=filename="*.ogg"
fset ogg-or-mp3=ogg|mp3
fset unheard=play_count=0
factivate


+ 18
- 0
cmus/command-history Прегледај датотеку

@@ -0,0 +1,18 @@
colorscheme
colo
live-filter
live-filter el hu
help
colorscheme gruvbox
cd ~
pl-create night
colorscheme dracula
quit
delete ALL
delete all
qa
refresh
add .
add
load
import

+ 1295
- 0
cmus/lib.pl
Разлика између датотеке није приказан због своје велике величине
Прегледај датотеку


+ 10
- 0
cmus/playlists/default Прегледај датотеку

@@ -0,0 +1,10 @@
/home/immanuel/Music/02 Kevin Gates - Change Lanes.mp3
/home/immanuel/Music/Kevin Gates - Really Really.webm
/home/immanuel/Music/Roy Woods - Say Less (2017) Mp3 (320kbps) [Hunter]/Roy Woods - Say Less (2017)/04 Take Time (feat. 24Hrs).mp3
/home/immanuel/Music/Lil Baby and Drake - Yes Indeed (CDQ).mp3
/home/immanuel/Music/Rae Sremmurd - Look Alive (Radio Rip).mp3
/home/immanuel/Music/01 Unforgettable (feat. Swae Lee).mp3
/home/immanuel/Music/Pop Smoke - Dior (Official Audio)-goYgHnsQdtY.webm
/home/immanuel/Music/Lil Durk - Gucci Gucci feat. Gunna (Official Audio)-HE4ZfIRMVOg.webm
/home/immanuel/Music/POP SMOKE - DIOR (REMIX) ft. Gunna (Official Audio)-YlRxTNDh4A4.webm
/home/immanuel/Music/01 Mi Gente.mp3

+ 8
- 0
cmus/playlists/night Прегледај датотеку

@@ -0,0 +1,8 @@
/home/immanuel/Music/Pop Smoke - Dior (Official Audio)-goYgHnsQdtY.webm
/home/immanuel/Music/Lil Durk - Gucci Gucci feat. Gunna (Official Audio)-HE4ZfIRMVOg.webm
/home/immanuel/Music/POP SMOKE - DIOR (REMIX) ft. Gunna (Official Audio)-YlRxTNDh4A4.webm
/home/immanuel/Music/Future - Life Is Good (Audio) ft. Drake-ZBOoVj6IW3s.webm
/home/immanuel/Music/Ghetto Sage - Häagen Dazs-kgKzFC_zd2Y.webm
/home/immanuel/Music/SAINt JHN - 'Roses' Imanbek Remix (Official Audio)-ele2DMU49Jk.webm
/home/immanuel/Music/ROSALÍA, J Balvin - Con Altura (Official Video) ft. El Guincho-p7bfOZek9t4.webm
/home/immanuel/Music/SAINt JHN - 'Roses' Imanbek Remix (Official Audio)-ele2DMU49Jk.webm

+ 100
- 0
cmus/search-history Прегледај датотеку

@@ -0,0 +1,100 @@
two ano
two
el hue
el
denni
take time
take time
hel h
make
gucci
roy woo
El Huer
el h
TFN
Full
Full N
Full Nerd
Full ner
full
full nerd
full ner
econ
econo//
darj
daijj
?44
44
funk
mati
wann
mem
tomor
home
Bal
iman
denn
make it ra
el huervo
el d
make it
make
mus
guc
wave
all
styl
No
no sy
riv
river
groove
life
con
Con
altur
con alt
mala
alad
ala
dior
gucc
durk
pop
kam
kame
yes in
yes
young
MA
BIG
lif
toos
toosie
sund
surfac
tick
WHO
life
Life
pi
mine
jax
hag
pic
mann
Manis
Manish
manish
Man
manis
pict
ashan
bab
shor
travis
boy
the boy
slid
pictu
haa

+ 35
- 0
compton/compton.conf Прегледај датотеку

@@ -0,0 +1,35 @@
backend = "glx";
glx-no-stencil = true;
vsync = true;
unredir-if-possible = true;

# Shadow
shadow = true; # Enabled client-side shadows on windows.
shadow-radius = 7; # The blur radius for shadows. (default 12)
shadow-offset-x = -7; # The left offset for shadows. (default -15)
shadow-offset-y = -7; # The top offset for shadows. (default -15)
shadow-exclude = [
"n:e:Notification",
"n:e:Docky",
"g:e:Synapse",
"g:e:Conky",
"n:w:*Firefox*",
"n:w:*Chromium*",
"n:w:*dockbarx*",
"class_g ?= 'Cairo-dock'",
"class_g ?= 'Xfce4-notifyd'",
"class_g ?= 'Xfce4-power-manager'",
"class_g ?= 'Notify-osd'",
"_GTK_FRAME_EXTENTS@:c"
];

# Opacity
detect-client-opacity = true;

# Window type settings
wintypes:
{
dock = { shadow = false; };
dnd = { shadow = false; };
tooltip = { shadow = false; };
};

+ 73
- 0
liferea/feedlist.opml Прегледај датотеку

@@ -0,0 +1,73 @@
<?xml version="1.0"?>
<opml version="1.0">
<head>
<title>Liferea Feed List Export</title>
</head>
<body>
<outline title="Example Feeds" text="Example Feeds" description="Example Feeds" type="folder" id="ftwxcvr" sortColumn="time" expanded="true">
<outline title="Music Blogs" text="Music Blogs" description="Music Blogs" type="folder" id="eojsqse" sortColumn="time" collapsed="true">
<outline title="Free Music Archive" text="Free Music Archive" description="Free Music Archive" type="atom" id="grwqrth" sortColumn="time" xmlUrl="https://freemusicarchive.org/recent.atom" htmlUrl="" updateInterval="-1" collapsed="true"/>
<outline title="Gorilla vs. Bear" text="Gorilla vs. Bear" description="Gorilla vs. Bear" type="rss" id="qlthvor" sortColumn="time" xmlUrl="https://www.gorillavsbear.net/category/mp3/feed/" htmlUrl="https://www.gorillavsbear.net" updateInterval="-1" collapsed="true"/>
<outline title="KEXP" text="KEXP" description="KEXP" id="ividqvs" sortColumn="time" xmlUrl="https://www.kexp.org/read/kexp/songoftheday/" htmlUrl="" updateInterval="-1" collapsed="true"/>
<outline title="Fluxblog" text="Fluxblog" description="Fluxblog" type="rss" id="ywlfjmf" sortColumn="time" xmlUrl="http://www.fluxblog.org/feed/" htmlUrl="http://www.fluxblog.org" updateInterval="-1" collapsed="true"/>
</outline>
</outline>
<outline title="Unread" text="Unread" description="Unread" type="vfolder" id="wrdkgnf" sortColumn="time" matchType="any" collapsed="true">
<outline type="rule" text="Read status" rule="unread" value="" additive="true"/>
</outline>
<outline title="Important" text="Important" description="Important" type="vfolder" id="gptkwpb" sortColumn="time" matchType="any" collapsed="true">
<outline type="rule" text="Flag status" rule="flagged" value="" additive="true"/>
</outline>
<outline title="Podcasts" text="Podcasts" description="Podcasts" type="folder" id="xlrmdwu" sortColumn="time" expanded="true">
<outline title="EscapePod" text="EscapePod" description="EscapePod" type="atom" id="qvymrig" sortColumn="time" xmlUrl="https://escapepod.org/feed/atom/" htmlUrl="https://escapepod.org/feed/atom/" updateInterval="-1" collapsed="true"/>
<outline title="Reply All" text="Reply All" description="Reply All" type="rss" id="vpeidch" sortColumn="time" xmlUrl="http://feeds.megaphone.fm/GLT6865004529" htmlUrl="http://gimletmedia.com/shows/reply-all" updateInterval="-1" collapsed="true"/>
<outline title="Gaming On Linux Podcasts" text="Gaming On Linux Podcasts" description="Gaming On Linux Podcasts" type="rss" id="ldtbvtw" sortColumn="time" xmlUrl="https://www.gamingonlinux.com/podcast_rss_mp3.php" htmlUrl="http://www.gamingonlinux.com/" updateInterval="-1" collapsed="true"/>
</outline>
<outline title="Comics" text="Comics" description="Comics" type="folder" id="devsajl" sortColumn="time" expanded="true">
<outline title="xkcd" text="xkcd" description="xkcd" type="atom" id="nnxnsff" sortColumn="time" xmlUrl="https://xkcd.com/atom.xml" htmlUrl="https://xkcd.com/" updateInterval="-1" collapsed="true"/>
</outline>
<outline title="Favorites" text="Favorites" description="Favorites" type="folder" id="hkvxljw" sortColumn="time" expanded="true">
<outline title="Wired" text="Wired" description="Wired" type="rss" id="mgjptmb" sortColumn="time" xmlUrl="https://www.wired.com/feed/rss" htmlUrl="https://www.wired.com" updateInterval="-1" collapsed="true"/>
<outline title="NYT &gt; Top Stories" text="NYT &gt; Top Stories" description="NYT &gt; Top Stories" type="rss" id="sktjqbn" sortColumn="time" xmlUrl="https://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml" htmlUrl="https://www.nytimes.com" updateInterval="-1" collapsed="true"/>
<outline title="Politics &#x2013; FiveThirtyEight" text="Politics &#x2013; FiveThirtyEight" description="Politics &#x2013; FiveThirtyEight" type="rss" id="ysorjyn" sortColumn="time" xmlUrl="https://fivethirtyeight.com/politics/feed/" htmlUrl="https://fivethirtyeight.com" updateInterval="-1" collapsed="true"/>
<outline title="Foreign Affairs Feed" text="Foreign Affairs Feed" description="Foreign Affairs Feed" type="rss" id="jeccrun" sortColumn="time" xmlUrl="https://www.foreignaffairs.com/rss.xml" htmlUrl="https://www.foreignaffairs.com/" updateInterval="-1" collapsed="true"/>
<outline title="The Latest from Luke" text="The Latest from Luke" description="The Latest from Luke" type="rss" id="uxkoheo" sortColumn="time" xmlUrl="https://lukesmith.xyz/rss.xml" htmlUrl="https://lukesmith.xyz/rss.xml" updateInterval="-1" collapsed="true"/>
<outline title="Luke Smith" text="Luke Smith" description="Luke Smith" type="atom" id="savvrcl" sortColumn="time" xmlUrl="https://lukesmith.xyz/youtube.xml" htmlUrl="https://www.youtube.com/channel/UC2eYFnH61tmytImy1mTYvhA" updateInterval="-1" collapsed="true"/>
<outline title="Not Related! A Big-Braned Podcast" text="Not Related! A Big-Braned Podcast" description="Not Related! A Big-Braned Podcast" type="rss" id="wkormra" sortColumn="time" xmlUrl="https://notrelated.libsyn.com/rss" htmlUrl="http://notrelated.libsyn.com/website" updateInterval="-1" collapsed="true"/>
<outline title="Features &#x2013; FiveThirtyEight" text="Features &#x2013; FiveThirtyEight" description="Features &#x2013; FiveThirtyEight" type="rss" id="gbmlbav" sortColumn="time" xmlUrl="https://fivethirtyeight.com/features/feed/" htmlUrl="https://fivethirtyeight.com" updateInterval="-1" collapsed="true"/>
<outline title="ITS Tactical" text="ITS Tactical" description="ITS Tactical" type="rss" id="uoguveg" sortColumn="time" xmlUrl="https://www.itstactical.com/feed/" htmlUrl="https://www.itstactical.com" updateInterval="-1" collapsed="true"/>
<outline title="Michael Shermer" text="Michael Shermer" description="Michael Shermer" type="rss" id="eoegpmr" sortColumn="time" xmlUrl="https://michaelshermer.com/feed/" htmlUrl="https://michaelshermer.com" updateInterval="-1" collapsed="true"/>
<outline title="Recent News" text="Recent News" description="Recent News" type="rss" id="dskpfiq" sortColumn="time" xmlUrl="https://www.rasmussenreports.com/rss/most_recent" htmlUrl="https://www.rasmussenreports.com" updateInterval="-1" collapsed="true"/>
<outline title="Politics, Policy, Political News Top Stories" text="Politics, Policy, Political News Top Stories" description="Politics, Policy, Political News Top Stories" type="rss" id="bymuntj" sortColumn="time" xmlUrl="https://www.politico.com/rss/politicopicks.xml" htmlUrl="https://www.politico.com/" updateInterval="-1" collapsed="true"/>
<outline title="gHacks Technology News" text="gHacks Technology News" description="gHacks Technology News" type="rss" id="emqlvgh" sortColumn="time" xmlUrl="https://www.ghacks.net/feed/" htmlUrl="https://www.ghacks.net" updateInterval="-1" collapsed="true"/>
</outline>
<outline title="Open Source" text="Open Source" description="Open Source" type="folder" id="fkfpokk" sortColumn="time" expanded="true">
<outline title="Planet GNU" text="Planet GNU" description="Planet GNU" type="atom" id="wbvyonm" sortColumn="time" xmlUrl="https://planet.gnu.org/atom.xml" htmlUrl="https://planet.gnu.org/" updateInterval="-1" collapsed="true"/>
<outline title="Purism" text="Purism" description="Purism" type="rss" id="aodllhr" sortColumn="time" xmlUrl="https://puri.sm/feed/" htmlUrl="https://puri.sm/" updateInterval="-1" collapsed="true"/>
<outline title="Linux Journal News" text="Linux Journal News" description="Linux Journal News" type="rss" id="bguijxq" sortColumn="time" xmlUrl="https://www.linuxjournal.com/news/feed" htmlUrl="https://www.linuxjournal.com/news/feed" updateInterval="-1" collapsed="true"/>
<outline title="Containers" text="Containers" description="Containers" type="rss" id="otdhtmv" sortColumn="time" xmlUrl="https://www.linuxjournal.com/taxonomy/term/978/feed" htmlUrl="https://www.linuxjournal.com/tag/containers" updateInterval="-1" collapsed="true"/>
<outline title="Networking" text="Networking" description="Networking" type="rss" id="mivleas" sortColumn="time" xmlUrl="https://www.linuxjournal.com/taxonomy/term/256/feed" htmlUrl="https://www.linuxjournal.com/tag/networking" updateInterval="-1" collapsed="true"/>
<outline title="Privacy" text="Privacy" description="Privacy" type="rss" id="cpbdnhm" sortColumn="time" xmlUrl="https://www.linuxjournal.com/taxonomy/term/352/feed" htmlUrl="https://www.linuxjournal.com/tag/privacy" updateInterval="-1" collapsed="true"/>
<outline title="PCWorld" text="PCWorld" description="PCWorld" type="rss" id="ogccxnf" sortColumn="time" xmlUrl="https://www.pcworld.com/index.rss" htmlUrl="https://www.pcworld.com" updateInterval="-1" collapsed="true"/>
<outline title="Best Podcasts" text="Best Podcasts" description="Best Podcasts" type="rss" id="wyuxngk" sortColumn="time" xmlUrl="https://bestpodcasts.com/feed/" htmlUrl="https://bestpodcasts.com" updateInterval="-1" collapsed="true"/>
<outline title="Phoronix" text="Phoronix" description="Phoronix" type="rss" id="rkectec" sortColumn="time" xmlUrl="https://www.phoronix.com/rss.php" htmlUrl="https://www.phoronix.com/" updateInterval="-1" collapsed="true"/>
<outline title="New Subscription" text="New Subscription" description="New Subscription" id="ajgwruo" sortColumn="time" xmlUrl="https://theintelligence.economist.com/" htmlUrl="" updateInterval="-1" collapsed="true"/>
<outline title="r/Privacy" text="r/Privacy" description="r/Privacy" type="atom" id="jeededm" sortColumn="time" xmlUrl="https://www.reddit.com/r/privacy.rss" htmlUrl="https://www.reddit.com/r/privacy" updateInterval="-1" collapsed="true"/>
<outline title="PCWorld The Full Nerd" text="PCWorld The Full Nerd" description="PCWorld The Full Nerd" type="rss" id="thvldva" sortColumn="time" xmlUrl="https://www.pcworld.com/column/the-full-nerd/index.rss" htmlUrl="https://www.pcworld.com" updateInterval="-1" collapsed="true"/>
<outline title="New Subscription" text="New Subscription" description="New Subscription" id="odfwlom" sortColumn="time" xmlUrl="https://www.technologyreview.com/" htmlUrl="" updateInterval="-1" collapsed="true"/>
<outline title="Planet Debian" text="Planet Debian" description="Planet Debian" type="rss" id="oyviimx" sortColumn="time" xmlUrl="https://planet.debian.org/rss20.xml" htmlUrl="https://planet.debian.org/" updateInterval="-1" collapsed="true"/>
<outline title="Liferea Blog" text="Liferea Blog" description="Liferea Blog" type="atom" id="pwiblpi" sortColumn="time" xmlUrl="http://feeds.feedburner.com/LifereaBlog" htmlUrl="http://feeds.feedburner.com/LifereaBlog" updateInterval="-1" collapsed="true"/>
<outline title="Planet GNOME" text="Planet GNOME" description="Planet GNOME" type="atom" id="yodrgab" sortColumn="time" xmlUrl="http://planet.gnome.org/atom.xml" htmlUrl="https://planet.gnome.org/" updateInterval="-1" collapsed="true"/>
</outline>
<outline title="News" text="News" description="News" type="folder" id="etncpql" sortColumn="time" expanded="true">
<outline title="Ars Technica" text="Ars Technica" description="Ars Technica" type="rss" id="ueiuccq" sortColumn="time" xmlUrl="http://feeds.arstechnica.com/arstechnica/index" htmlUrl="https://arstechnica.com" updateInterval="-1" collapsed="true"/>
<outline title="Slashdot" text="Slashdot" description="Slashdot" type="rss" id="oepdafo" sortColumn="time" xmlUrl="http://rss.slashdot.org/Slashdot/slashdot" htmlUrl="https://slashdot.org/" updateInterval="-1" collapsed="true"/>
<outline title="BBC" text="BBC" description="BBC" type="rss" id="mrckhom" sortColumn="time" xmlUrl="http://feeds.bbci.co.uk/news/rss.xml?edition=int" htmlUrl="https://www.bbc.co.uk/news/" updateInterval="-1" collapsed="true"/>
<outline title="Science News" text="Science News" description="Science News" type="rss" id="bvqutio" sortColumn="time" xmlUrl="https://www.sciencenews.org/feed" htmlUrl="https://www.sciencenews.org" updateInterval="-1" collapsed="true"/>
<outline title="Articles and Investigations - ProPublica" text="Articles and Investigations - ProPublica" description="Articles and Investigations - ProPublica" type="rss" id="rmavaij" sortColumn="time" xmlUrl="http://feeds.propublica.org/propublica/main" htmlUrl="https://www.propublica.org/feeds/54Ghome" updateInterval="-1" collapsed="true"/>
</outline>
<outline title="Media Bias/Fact Check" text="Media Bias/Fact Check" description="Media Bias/Fact Check" type="rss" id="wxhugyp" sortColumn="time" xmlUrl="https://mediabiasfactcheck.com/feed/" htmlUrl="https://mediabiasfactcheck.com" updateInterval="-1" collapsed="true"/>
<outline title="Brookings" text="Brookings" description="Brookings" type="rss" id="wbbbfct" sortColumn="time" xmlUrl="https://www.brookings.edu/feed/" htmlUrl="https://www.brookings.edu" updateInterval="-1" collapsed="true"/>
<outline title="The Independent" text="The Independent" description="The Independent" type="rss" id="ujnssve" sortColumn="time" xmlUrl="http://www.independent.co.uk/rss" htmlUrl="http://www.independent.co.uk/rss" updateInterval="-1" collapsed="true"/>
</body>
</opml>

+ 73
- 0
liferea/feedlist.opml.backup Прегледај датотеку

@@ -0,0 +1,73 @@
<?xml version="1.0"?>
<opml version="1.0">
<head>
<title>Liferea Feed List Export</title>
</head>
<body>
<outline title="Example Feeds" text="Example Feeds" description="Example Feeds" type="folder" id="ftwxcvr" sortColumn="time" expanded="true">
<outline title="Music Blogs" text="Music Blogs" description="Music Blogs" type="folder" id="eojsqse" sortColumn="time" collapsed="true">
<outline title="Free Music Archive" text="Free Music Archive" description="Free Music Archive" type="atom" id="grwqrth" sortColumn="time" xmlUrl="https://freemusicarchive.org/recent.atom" htmlUrl="" updateInterval="-1" collapsed="true"/>
<outline title="Gorilla vs. Bear" text="Gorilla vs. Bear" description="Gorilla vs. Bear" type="rss" id="qlthvor" sortColumn="time" xmlUrl="https://www.gorillavsbear.net/category/mp3/feed/" htmlUrl="https://www.gorillavsbear.net" updateInterval="-1" collapsed="true"/>
<outline title="KEXP" text="KEXP" description="KEXP" id="ividqvs" sortColumn="time" xmlUrl="https://www.kexp.org/read/kexp/songoftheday/" htmlUrl="" updateInterval="-1" collapsed="true"/>
<outline title="Fluxblog" text="Fluxblog" description="Fluxblog" type="rss" id="ywlfjmf" sortColumn="time" xmlUrl="http://www.fluxblog.org/feed/" htmlUrl="http://www.fluxblog.org" updateInterval="-1" collapsed="true"/>
</outline>
</outline>
<outline title="Unread" text="Unread" description="Unread" type="vfolder" id="wrdkgnf" sortColumn="time" matchType="any" collapsed="true">
<outline type="rule" text="Read status" rule="unread" value="" additive="true"/>
</outline>
<outline title="Important" text="Important" description="Important" type="vfolder" id="gptkwpb" sortColumn="time" matchType="any" collapsed="true">
<outline type="rule" text="Flag status" rule="flagged" value="" additive="true"/>
</outline>
<outline title="Podcasts" text="Podcasts" description="Podcasts" type="folder" id="xlrmdwu" sortColumn="time" expanded="true">
<outline title="EscapePod" text="EscapePod" description="EscapePod" type="atom" id="qvymrig" sortColumn="time" xmlUrl="https://escapepod.org/feed/atom/" htmlUrl="https://escapepod.org/feed/atom/" updateInterval="-1" collapsed="true"/>
<outline title="Reply All" text="Reply All" description="Reply All" type="rss" id="vpeidch" sortColumn="time" xmlUrl="http://feeds.megaphone.fm/GLT6865004529" htmlUrl="http://gimletmedia.com/shows/reply-all" updateInterval="-1" collapsed="true"/>
<outline title="Gaming On Linux Podcasts" text="Gaming On Linux Podcasts" description="Gaming On Linux Podcasts" type="rss" id="ldtbvtw" sortColumn="time" xmlUrl="https://www.gamingonlinux.com/podcast_rss_mp3.php" htmlUrl="http://www.gamingonlinux.com/" updateInterval="-1" collapsed="true"/>
</outline>
<outline title="Comics" text="Comics" description="Comics" type="folder" id="devsajl" sortColumn="time" expanded="true">
<outline title="xkcd" text="xkcd" description="xkcd" type="atom" id="nnxnsff" sortColumn="time" xmlUrl="https://xkcd.com/atom.xml" htmlUrl="https://xkcd.com/" updateInterval="-1" collapsed="true"/>
</outline>
<outline title="Favorites" text="Favorites" description="Favorites" type="folder" id="hkvxljw" sortColumn="time" expanded="true">
<outline title="Wired" text="Wired" description="Wired" type="rss" id="mgjptmb" sortColumn="time" xmlUrl="https://www.wired.com/feed/rss" htmlUrl="https://www.wired.com" updateInterval="-1" collapsed="true"/>
<outline title="NYT &gt; Top Stories" text="NYT &gt; Top Stories" description="NYT &gt; Top Stories" type="rss" id="sktjqbn" sortColumn="time" xmlUrl="https://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml" htmlUrl="https://www.nytimes.com" updateInterval="-1" collapsed="true"/>
<outline title="Politics &#x2013; FiveThirtyEight" text="Politics &#x2013; FiveThirtyEight" description="Politics &#x2013; FiveThirtyEight" type="rss" id="ysorjyn" sortColumn="time" xmlUrl="https://fivethirtyeight.com/politics/feed/" htmlUrl="https://fivethirtyeight.com" updateInterval="-1" collapsed="true"/>
<outline title="Foreign Affairs Feed" text="Foreign Affairs Feed" description="Foreign Affairs Feed" type="rss" id="jeccrun" sortColumn="time" xmlUrl="https://www.foreignaffairs.com/rss.xml" htmlUrl="https://www.foreignaffairs.com/" updateInterval="-1" collapsed="true"/>
<outline title="The Latest from Luke" text="The Latest from Luke" description="The Latest from Luke" type="rss" id="uxkoheo" sortColumn="time" xmlUrl="https://lukesmith.xyz/rss.xml" htmlUrl="https://lukesmith.xyz/rss.xml" updateInterval="-1" collapsed="true"/>
<outline title="Luke Smith" text="Luke Smith" description="Luke Smith" type="atom" id="savvrcl" sortColumn="time" xmlUrl="https://lukesmith.xyz/youtube.xml" htmlUrl="https://www.youtube.com/channel/UC2eYFnH61tmytImy1mTYvhA" updateInterval="-1" collapsed="true"/>
<outline title="Not Related! A Big-Braned Podcast" text="Not Related! A Big-Braned Podcast" description="Not Related! A Big-Braned Podcast" type="rss" id="wkormra" sortColumn="time" xmlUrl="https://notrelated.libsyn.com/rss" htmlUrl="http://notrelated.libsyn.com/website" updateInterval="-1" collapsed="true"/>
<outline title="Features &#x2013; FiveThirtyEight" text="Features &#x2013; FiveThirtyEight" description="Features &#x2013; FiveThirtyEight" type="rss" id="gbmlbav" sortColumn="time" xmlUrl="https://fivethirtyeight.com/features/feed/" htmlUrl="https://fivethirtyeight.com" updateInterval="-1" collapsed="true"/>
<outline title="ITS Tactical" text="ITS Tactical" description="ITS Tactical" type="rss" id="uoguveg" sortColumn="time" xmlUrl="https://www.itstactical.com/feed/" htmlUrl="https://www.itstactical.com" updateInterval="-1" collapsed="true"/>
<outline title="Michael Shermer" text="Michael Shermer" description="Michael Shermer" type="rss" id="eoegpmr" sortColumn="time" xmlUrl="https://michaelshermer.com/feed/" htmlUrl="https://michaelshermer.com" updateInterval="-1" collapsed="true"/>
<outline title="Recent News" text="Recent News" description="Recent News" type="rss" id="dskpfiq" sortColumn="time" xmlUrl="https://www.rasmussenreports.com/rss/most_recent" htmlUrl="https://www.rasmussenreports.com" updateInterval="-1" collapsed="true"/>
<outline title="Politics, Policy, Political News Top Stories" text="Politics, Policy, Political News Top Stories" description="Politics, Policy, Political News Top Stories" type="rss" id="bymuntj" sortColumn="time" xmlUrl="https://www.politico.com/rss/politicopicks.xml" htmlUrl="https://www.politico.com/" updateInterval="-1" collapsed="true"/>
<outline title="gHacks Technology News" text="gHacks Technology News" description="gHacks Technology News" type="rss" id="emqlvgh" sortColumn="time" xmlUrl="https://www.ghacks.net/feed/" htmlUrl="https://www.ghacks.net" updateInterval="-1" collapsed="true"/>
</outline>
<outline title="Open Source" text="Open Source" description="Open Source" type="folder" id="fkfpokk" sortColumn="time" expanded="true">
<outline title="Planet GNU" text="Planet GNU" description="Planet GNU" type="atom" id="wbvyonm" sortColumn="time" xmlUrl="https://planet.gnu.org/atom.xml" htmlUrl="https://planet.gnu.org/" updateInterval="-1" collapsed="true"/>
<outline title="Purism" text="Purism" description="Purism" type="rss" id="aodllhr" sortColumn="time" xmlUrl="https://puri.sm/feed/" htmlUrl="https://puri.sm/" updateInterval="-1" collapsed="true"/>
<outline title="Linux Journal News" text="Linux Journal News" description="Linux Journal News" type="rss" id="bguijxq" sortColumn="time" xmlUrl="https://www.linuxjournal.com/news/feed" htmlUrl="https://www.linuxjournal.com/news/feed" updateInterval="-1" collapsed="true"/>
<outline title="Containers" text="Containers" description="Containers" type="rss" id="otdhtmv" sortColumn="time" xmlUrl="https://www.linuxjournal.com/taxonomy/term/978/feed" htmlUrl="https://www.linuxjournal.com/tag/containers" updateInterval="-1" collapsed="true"/>
<outline title="Networking" text="Networking" description="Networking" type="rss" id="mivleas" sortColumn="time" xmlUrl="https://www.linuxjournal.com/taxonomy/term/256/feed" htmlUrl="https://www.linuxjournal.com/tag/networking" updateInterval="-1" collapsed="true"/>
<outline title="Privacy" text="Privacy" description="Privacy" type="rss" id="cpbdnhm" sortColumn="time" xmlUrl="https://www.linuxjournal.com/taxonomy/term/352/feed" htmlUrl="https://www.linuxjournal.com/tag/privacy" updateInterval="-1" collapsed="true"/>
<outline title="PCWorld" text="PCWorld" description="PCWorld" type="rss" id="ogccxnf" sortColumn="time" xmlUrl="https://www.pcworld.com/index.rss" htmlUrl="https://www.pcworld.com" updateInterval="-1" collapsed="true"/>
<outline title="Best Podcasts" text="Best Podcasts" description="Best Podcasts" type="rss" id="wyuxngk" sortColumn="time" xmlUrl="https://bestpodcasts.com/feed/" htmlUrl="https://bestpodcasts.com" updateInterval="-1" collapsed="true"/>
<outline title="Phoronix" text="Phoronix" description="Phoronix" type="rss" id="rkectec" sortColumn="time" xmlUrl="https://www.phoronix.com/rss.php" htmlUrl="https://www.phoronix.com/" updateInterval="-1" collapsed="true"/>
<outline title="New Subscription" text="New Subscription" description="New Subscription" id="ajgwruo" sortColumn="time" xmlUrl="https://theintelligence.economist.com/" htmlUrl="" updateInterval="-1" collapsed="true"/>
<outline title="r/Privacy" text="r/Privacy" description="r/Privacy" type="atom" id="jeededm" sortColumn="time" xmlUrl="https://www.reddit.com/r/privacy.rss" htmlUrl="https://www.reddit.com/r/privacy" updateInterval="-1" collapsed="true"/>
<outline title="PCWorld The Full Nerd" text="PCWorld The Full Nerd" description="PCWorld The Full Nerd" type="rss" id="thvldva" sortColumn="time" xmlUrl="https://www.pcworld.com/column/the-full-nerd/index.rss" htmlUrl="https://www.pcworld.com" updateInterval="-1" collapsed="true"/>
<outline title="New Subscription" text="New Subscription" description="New Subscription" id="odfwlom" sortColumn="time" xmlUrl="https://www.technologyreview.com/" htmlUrl="" updateInterval="-1" collapsed="true"/>
<outline title="Planet Debian" text="Planet Debian" description="Planet Debian" type="rss" id="oyviimx" sortColumn="time" xmlUrl="https://planet.debian.org/rss20.xml" htmlUrl="https://planet.debian.org/" updateInterval="-1" collapsed="true"/>
<outline title="Liferea Blog" text="Liferea Blog" description="Liferea Blog" type="atom" id="pwiblpi" sortColumn="time" xmlUrl="http://feeds.feedburner.com/LifereaBlog" htmlUrl="http://feeds.feedburner.com/LifereaBlog" updateInterval="-1" collapsed="true"/>
<outline title="Planet GNOME" text="Planet GNOME" description="Planet GNOME" type="atom" id="yodrgab" sortColumn="time" xmlUrl="http://planet.gnome.org/atom.xml" htmlUrl="https://planet.gnome.org/" updateInterval="-1" collapsed="true"/>
</outline>
<outline title="News" text="News" description="News" type="folder" id="etncpql" sortColumn="time" expanded="true">
<outline title="Ars Technica" text="Ars Technica" description="Ars Technica" type="rss" id="ueiuccq" sortColumn="time" xmlUrl="http://feeds.arstechnica.com/arstechnica/index" htmlUrl="https://arstechnica.com" updateInterval="-1" collapsed="true"/>
<outline title="Slashdot" text="Slashdot" description="Slashdot" type="rss" id="oepdafo" sortColumn="time" xmlUrl="http://rss.slashdot.org/Slashdot/slashdot" htmlUrl="https://slashdot.org/" updateInterval="-1" collapsed="true"/>
<outline title="BBC" text="BBC" description="BBC" type="rss" id="mrckhom" sortColumn="time" xmlUrl="http://feeds.bbci.co.uk/news/rss.xml?edition=int" htmlUrl="https://www.bbc.co.uk/news/" updateInterval="-1" collapsed="true"/>
<outline title="Science News" text="Science News" description="Science News" type="rss" id="bvqutio" sortColumn="time" xmlUrl="https://www.sciencenews.org/feed" htmlUrl="https://www.sciencenews.org" updateInterval="-1" collapsed="true"/>
<outline title="Articles and Investigations - ProPublica" text="Articles and Investigations - ProPublica" description="Articles and Investigations - ProPublica" type="rss" id="rmavaij" sortColumn="time" xmlUrl="http://feeds.propublica.org/propublica/main" htmlUrl="https://www.propublica.org/feeds/54Ghome" updateInterval="-1" collapsed="true"/>
</outline>
<outline title="Media Bias/Fact Check" text="Media Bias/Fact Check" description="Media Bias/Fact Check" type="rss" id="wxhugyp" sortColumn="time" xmlUrl="https://mediabiasfactcheck.com/feed/" htmlUrl="https://mediabiasfactcheck.com" updateInterval="-1" collapsed="true"/>
<outline title="Brookings" text="Brookings" description="Brookings" type="rss" id="wbbbfct" sortColumn="time" xmlUrl="https://www.brookings.edu/feed/" htmlUrl="https://www.brookings.edu" updateInterval="-1" collapsed="true"/>
<outline title="The Independent" text="The Independent" description="The Independent" type="rss" id="ujnssve" sortColumn="time" xmlUrl="http://www.independent.co.uk/rss" htmlUrl="http://www.independent.co.uk/rss" updateInterval="-1" collapsed="true"/>
</body>
</opml>

+ 115
- 0
liferea/liferea.css Прегледај датотеку

@@ -0,0 +1,115 @@
/**
This is a template file which you can use to redefine the Liferea
CSS definitions use to render items. Below you find empty class
definitions including comments describing what they are used for.
Before you start customizing...

Reloading:
==========

For performance reasons Liferea will read this CSS file only
on startup. So when you modify it please restart Liferea for
changes to take effect.

About Font Definitions:
=======================
You should avoid setting absolute font sizes. This allows Liferea
to follow the GNOME font and font size. Use relative definitions
instead (e.g. "1.2em" or "0.8em").

Color Definitions:
==================
Try to reuse GTK theme colors. Liferea uses the following definitions
and will be replace them on the fly:
GTK-COLOR-FG
GTK-COLOR-BG
GTK-COLOR-LIGHT
GTK-COLOR-DARK
GTK-COLOR-MID
GTK-COLOR-BASE
GTK-COLOR-TEXT
GTK-COLOR-NORMAL-LINK
GTK-COLOR-VISITED-LINK


Inspecting the HTML:
====================

If the definitions below do not help you, run Liferea with
the parameter "--debug-html". Then Liferea will dump HTML
into

~/.cache/liferea/output.xhtml

each time it renders an item or a feed. So you can check for
style classes and the layout you want to affect.

*/

/* Item display rendering header table (with title, categories...) */
// table.itemhead { }

/* Feed display rendering header table (with title, categories...) */
// table.feedhead { }

/* Left <td> of feed/item table display containing favicon */
// td.headleft { }
// a.favicon { }
// a.favicon img { }

/* Right <td> of feed/item table display containing title */
// td.headright { }

/* Metadata display table (inside header table) */
// table.headmeta { }

/* 2 pane mode: Item menu definitions */
// .itemmenu { }
// .itemmenu a { }
// .itemmenu a:hover { }
// .itemmenu * span { }
// .itemmenu * img { }

/* Header table fields to different item metadata */
// .author, .categories, .source { }
// .date { }

/* Item/feed description */
// div.content { }

/* Comment rendering */
// div.comment { }
// div.comment_body { }
// div.comment_title { }

/* Styles for the HTTP error box at the beginning
of the feed description and for item comment feeds */
// #errors, #commentFeedError { }
// #parseError, #filterError, #updateError { }
// div.xmlparseroutput { }
// span.details, span.detaillink { }
// span.details { }
// span.showmore { }

/* namespace specific styles */
// div.blogchanneltitle { }
// div.photoheader { }

/* Gravatar embedding */
// img.gravatar { }

/* OpenStreeMap embedded map*/
// #map img { }

/* Slashdot Header */
// .slash { }
// .slashSection, .slashDepartment { }
// .slashValue { }



+ 2
- 0
liferea/mime.xml Прегледај датотеку

@@ -0,0 +1,2 @@
<?xml version="1.0"?>
<types/>

+ 7
- 0
lutris/games/albion-online-desktopapp.yml Прегледај датотеку

@@ -0,0 +1,7 @@
game:
appid: sandbox-interactive_com-albiononline_1
args: ''
exe: /home/immanuel/albiononline/Albion-Online
linux: {}
system:
disable_runtime: true

+ 7
- 0
lutris/games/battle-for-wesnoth-114-desktopapp.yml Прегледај датотеку

@@ -0,0 +1,7 @@
game:
appid: wesnoth-1.14
args: ''
exe: /usr/games/wesnoth-1.14-nolog
linux: {}
system:
disable_runtime: true

+ 7
- 0
lutris/games/dead-cells-desktopapp.yml Прегледај датотеку

@@ -0,0 +1,7 @@
game:
appid: gog_com-Dead_Cells_1
args: '""'
exe: /home/immanuel/Games/Dead Cells/start.sh
linux: {}
system:
disable_runtime: true

+ 4
- 0
lutris/games/enter-the-gungeon-1577079283.yml Прегледај датотеку

@@ -0,0 +1,4 @@
game:
exe: /home/immanuel/Games/Enter the Gungeon/EtG.exe
system: {}
wine: {}

+ 17
- 0
lutris/games/forager-1571288689.yml Прегледај датотеку

@@ -0,0 +1,17 @@
game:
exe: /home/immanuel/Games/Forager.v2.0.2/Forager.exe
system:
disable_runtime: false
prefer_system_libs: true
terminal: false
vk_icd: ''
wine:
ShowCrashDialog: true
StrictDrawOrdering: disabled
UseGLSL: enabled
autoconf_joypad: true
d9vk: false
dxvk: false
dxvk_version: 1.2.3
esync: false
version: system

+ 2
- 0
lutris/games/pillars-of-eternity-ii-deadfi-gog-1577232735.yml Прегледај датотеку

@@ -0,0 +1,2 @@
game:
exe: start.sh

+ 4
- 0
lutris/games/rise-to-ruins-1577304968.yml Прегледај датотеку

@@ -0,0 +1,4 @@
game:
exe: /home/immanuel/Games/Rise to Ruins/RtR64.exe
system: {}
wine: {}

+ 21
- 0
lutris/lutris.conf Прегледај датотеку

@@ -0,0 +1,21 @@
[lutris]
migration_version = 5
filter_installed = False
view_type = grid
dont-support-lutris = True
width = 991
height = 600
maximized = False
runners_manager_width = 800
runners_manager_height = 800
show_advanced_options = True

[list view]
name_column_width = 200
year_column_width = 60
runner_column_width = 120
platform_column_width = 120
lastplayed_column_width = 120
installedat_column_width = 120
playtime_column_width = 100


+ 5
- 0
mpv/input.conf Прегледај датотеку

@@ -0,0 +1,5 @@
# increase subtitle font size
ALT+k add sub-scale +0.1

# decrease subtitle font size
ALT+j add sub-scale -0.1

+ 1
- 0
mpv/watch_later/A7194328C257CC39AAA0063BC6647E85 Прегледај датотеку

@@ -0,0 +1 @@
start=2347.679000

+ 3
- 0
mpv/watch_later/EE0A97D6FD10A16BA8E0600A6659C32E Прегледај датотеку

@@ -0,0 +1,3 @@
start=1460.333333
pause=yes
fullscreen=yes

+ 0
- 0
nnn/.selection Прегледај датотеку


+ 17
- 0
nnn/plugins/imgthumb Прегледај датотеку

@@ -0,0 +1,17 @@
#!/usr/bin/env sh

# Description: View thumbnail of an image or a directory of images with lsix
#
# Shell: POSIX compliant
# Author: Arun Prakash Jana

if ! [ -z "$1" ]; then
if [ -d "$1" ]; then
lsix "$1"/*
else
lsix "$1"
fi

printf "Press any key to exit..."
read -r _
fi

+ 60
- 0
nnn/plugins/imgview Прегледај датотеку

@@ -0,0 +1,60 @@
#!/usr/bin/env sh

# Description: Open images in hovered directory and thumbnails
# open hovered image in sxiv or viu and browse other images in the directory
# Dependencies: imv (https://github.com/eXeC64/imv) or,
# sxiv (https://github.com/muennich/sxiv) or,
# viu (https://github.com/atanunq/viu), less
#
# Shell: POSIX compliant
# Author: Arun Prakash Jana

abspath() {
case "$1" in
/*) printf "%s\n" "$1";;
*) printf "%s\n" "$PWD/$1";;
esac
}

listimages() {
find -L "$(dirname "$target")" -maxdepth 1 -type f -iregex \
'.*\(jpe?g\|bmp\|webp\|png\|gif\)$' -print0 | sort -z
}

view_dir() {
target="$(abspath "$2")"
count="$(listimages | grep -a -m 1 -ZznF "$target" | cut -d: -f1)"

if [ -n "$count" ]; then
listimages | xargs -0 "$1" -n "$count" --
else
shift
"$1" -- "$@" # fallback
fi
}

if [ -z "$1" ] || ! [ -s "$1" ]; then
printf "empty file"
read -r _
exit 1
fi

if command -v imvr >/dev/null 2>&1; then
if [ -f "$1" ]; then
view_dir imvr "$1" >/dev/null 2>&1 &
elif [ -d "$1" ] || [ -h "$1" ]; then
imvr "$1" >/dev/null 2>&1 &
fi
elif command -v sxiv >/dev/null 2>&1; then
if [ -f "$1" ]; then
view_dir sxiv "$1" >/dev/null 2>&1 &
elif [ -d "$1" ] || [ -h "$1" ]; then
sxiv -qt "$1" >/dev/null 2>&1 &
fi
elif command -v viu >/dev/null 2>&1; then
viu -n "$1" | less -R
else
printf "install imv/sxiv/viu"
read -r _
exit 2
fi

+ 229
- 0
nnn/plugins/preview-tui Прегледај датотеку

@@ -0,0 +1,229 @@
#!/usr/bin/env sh

# Description: Terminal based file previewer
#
# Note: This plugin needs a "NNN_FIFO" to work. See man.
#
# Dependencies:
# - Supports 3 independent methods to preview with:
# - tmux (>=3.0), or
# - kitty with allow_remote_control on, or
# - $TERMINAL set to a terminal (it's xterm by default).
# - less or $PAGER
# - tree or exa or ls
# - mediainfo or file
# - unzip
# - tar
# - man
# - optional: bat for code syntax highlighting
# - optional: kitty terminal or catimg for images
# - optional: scope.sh file viewer from ranger.
# To use:
# 1. drop scope.sh executable in $PATH
# 2. set/export $USE_SCOPE as 1
# - optional: pistol file viewer (https://github.com/doronbehar/pistol).
# To use:
# 1. install pistol
# 2. set/export $USE_PISTOL as 1
#
# Usage:
# You need to set a NNN_FIFO path and a key for the plugin with NNN_PLUG,
# then start `nnn`:
#
# $ nnn -a
#
# or
#
# $ NNN_FIFO=/tmp/nnn.fifo nnn
#
# Then in `nnn`, launch the `preview-tui` plugin.
#
# If you provide the same NNN_FIFO to all nnn instances, there will be a
# single common preview window. I you provide different FIFO path (e.g.
# with -a), they will be independent.
#
# The previews will be shown in a tmux split. If that isn't possible, it
# will try to use a kitty terminal split. And as a final fallback, a
# different terminal window will be used ($TERMINAL).
#
# Tmux and kitty users can configure $SPLIT to either "h" or "v" to set a
# 'h'orizontal split or a 'v'ertical split (as in, the line that splits the
# windows will be horizontal or vertical).
#
# Kitty users need `allow_remote_control` set to `yes`. To customize the
# window split, `enabled_layouts` has to be set to `all` or `splits` (the
# former is the default value). This terminal is also able to show images
# without extra dependencies.
#
# Shell: POSIX compliant
# Authors: Todd Yamakawa, Léo Villeveygoux, @Recidiviste, Mario Ortiz Manero

SPLIT="$SPLIT" # you can set a permanent split here
TERMINAL="$TERMINAL" # same goes for the terminal
USE_SCOPE="${USE_SCOPE:-0}"
USE_PISTOL="${USE_PISTOL:-0}"
PAGER="${PAGER:-less -R}"

if [ -e "${TMUX%%,*}" ] && tmux -V | grep -q '[ -][3456789]\.'; then
TERMINAL=tmux
elif [ -n "$KITTY_WINDOW_ID" ] && kitty @ ls >/dev/null 2>&1; then
TERMINAL=kitty
else
TERMINAL="${TERMINAL:-xterm}"
fi

if [ -z "$SPLIT" ] && [ $(($(tput lines) * 2)) -gt "$(tput cols)" ]; then
SPLIT='h'
elif [ "$SPLIT" != 'h' ]; then
SPLIT='v'
fi

exists() {
command -v "$1" >/dev/null 2>&1
}

fifo_pager() {
cmd="$1"
shift

# We use a FIFO to access $PAGER PID in jobs control
tmpfifopath="${TMPDIR:-/tmp}/nnn-preview-tui-fifo.$$"
mkfifo "$tmpfifopath" || return

$PAGER < "$tmpfifopath" &

(
exec > "$tmpfifopath"
"$cmd" "$@" &
)

rm "$tmpfifopath"
}

# Binary file: show file info inside the pager
print_bin_info() {
printf -- "-------- \033[1;31mBinary file\033[0m --------\n"
if exists mediainfo; then
mediainfo "$1" 2>/dev/null
else
file -b "$1"
fi
}

preview_file () {
kill %- %+ 2>/dev/null && wait %- %+ 2>/dev/null
clear

# Trying to use pistol if it's available.
if [ "$USE_PISTOL" -ne 0 ] && exists pistol; then
fifo_pager pistol "$1"
return
fi

# Trying to use scope.sh if it's available.
if [ "$USE_SCOPE" -ne 0 ] && exists scope.sh; then
fifo_pager scope.sh "$1" "$cols" "$lines" "$(mktemp -d)" \
"True" 2>/dev/null
return
fi

# Detecting the exact type of the file: the encoding, mime type, and
# extension in lowercase.
encoding="$(file -Lb --mime-encoding -- "$1")"
mimetype="$(file -Lb --mime-type -- "$1")"
ext="${1##*.}"
if [ -n "$ext" ]; then
ext="$(printf "%s" "${ext}" | tr '[:upper:]' '[:lower:]')"
fi
lines=$(($(tput lines)-1))
cols=$(tput cols)

# Otherwise, falling back to the defaults.
if [ -d "$1" ]; then
cd "$1" || return
if exists tree; then
fifo_pager tree -L 3 -F
elif exists exa; then
fifo_pager exa -G --colour=always 2>/dev/null
else
fifo_pager ls --color=always
fi
elif [ "$encoding" = "binary" ]; then
if [ "${mimetype%%/*}" = "image" ] ; then
if [ "$TERMINAL" = "kitty" ]; then
# Kitty terminal users can use the native image preview method.
kitty +kitten icat --silent --transfer-mode=stream --stdin=no \
"$1" &
elif exists catimg; then
catimg "$1"
elif exists viu; then
viu -t "$1"
else
fifo_pager print_bin_info "$1"
fi
elif [ "$mimetype" = "application/zip" ] ; then
fifo_pager unzip -l "$1"
elif [ "$ext" = "gz" ] || [ "$ext" = "bz2" ] ; then
fifo_pager tar -tvf "$1"
else
fifo_pager print_bin_info "$1"
fi
elif [ "$mimetype" = "text/troff" ] ; then
fifo_pager man -Pcat -l "$1"
else
if exists bat; then
fifo_pager bat --paging=never --decorations=always --color=always \
"$1" 2>/dev/null
else
$PAGER "$1" &
fi
fi
}

if [ "$PREVIEW_MODE" ] ; then
if [ ! -r "$NNN_FIFO" ] ; then
echo "No FIFO available! (\$NNN_FIFO='$NNN_FIFO')" >&2
read -r
exit 1
fi

preview_file "$1"

# use cat instead of 'exec <' to avoid issues with dash shell
# shellcheck disable=SC2002
cat "$NNN_FIFO" |\
while read -r selection ; do
preview_file "$selection"
done

# Restoring the previous layout for kitty users. This will only work for
# kitty >= 0.18.0.
if [ "$TERMINAL" = "kitty" ]; then
kitty @ last-used-layout --no-response >/dev/null 2>&1
fi

exit 0
fi

if [ "$TERMINAL" = "tmux" ]; then
# tmux splits are inverted
if [ "$SPLIT" = "v" ]; then SPLIT="h"; else SPLIT="v"; fi

tmux split-window -e "NNN_FIFO=$NNN_FIFO" -e "PREVIEW_MODE=1" -d"$SPLIT" "$0" "$1"
elif [ "$TERMINAL" = "kitty" ]; then
# Setting the layout for the new window. It will be restored after the
# script ends.
kitty @ goto-layout splits >/dev/null

# Trying to use kitty's integrated window management as the split window.
# All environmental variables that will be used in the new window must
# be explicitly passed.
kitty @ launch --no-response --title "nnn preview" --keep-focus \
--cwd "$PWD" --env "PATH=$PATH" --env "NNN_FIFO=$NNN_FIFO" \
--env "PREVIEW_MODE=1" --env "PAGER=$PAGER" \
--env "USE_SCOPE=$USE_SCOPE" --env "SPLIT=$SPLIT" \
--env "USE_PISTOL=$USE_PISTOL" \
--location "${SPLIT}split" "$0" "$1" >/dev/null
else
PREVIEW_MODE=1 $TERMINAL -e "$0" "$1" &
fi

+ 58
- 0
nnn/plugins/x2sel Прегледај датотеку

@@ -0,0 +1,58 @@
#!/usr/bin/env sh

# Description: Copy system clipboard newline-separated file list to selection
# Dependencies:
# - tr
# - xclip/xsel (Linux)
# - pbpaste (macOS)
# - termux-clipboard-get (Termux)
# - powershell (WSL)
# - cygwim's /dev/clipboard (Cygwin)
# - wl-paste (Wayland)
#
# Limitation: breaks if a filename has newline in it
#
# Shell: POSIX compliant
# Author: Léo Villeveygoux, after Arun Prakash Jana's .cbcp

IFS="$(printf '%b_' '\n')"; IFS="${IFS%_}" # protect trailing \n

selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}

getclip () {

if which xsel >/dev/null 2>&1; then
# Linux
xsel -bo
elif which xclip >/dev/null 2>&1; then
# Linux
xclip -sel clip -o
elif which pbpaste >/dev/null 2>&1; then
# macOS
pbpaste
elif which termux-clipboard-get >/dev/null 2>&1; then
# Termux
termux-clipboard-get
elif which powershell.exe >/dev/null 2>&1; then
# WSL
powershell.exe Get-Clipboard
elif [ -r /dev/clipboard ] ; then
# Cygwin
cat /dev/clipboard
elif which wl-paste >/dev/null 2>&1; then
# Wayland
wl-paste
fi

}

CLIPBOARD=$(getclip)

# Check if clipboard actually contains a file list
for file in $CLIPBOARD ; do
if [ ! -e "$file" ] ; then
exit 1;
fi
done

printf "%s" "$CLIPBOARD" | tr '\n' '\0' > "$selection"

+ 28
- 0
openbox/autostart Прегледај датотеку

@@ -0,0 +1,28 @@
#!/bin/sh
#
# These things are run when an Openbox X Session is started.
# You may place a similar script in $HOME/.config/openbox/autostart
# to run user-specific things.
#

# If you want to use GNOME config tools...
#
#if test -x /usr/lib/x86_64-linux-gnu/gnome-settings-daemon >/dev/null; then
# /usr/lib/x86_64-linux-gnu/gnome-settings-daemon &
#elif which gnome-settings-daemon >/dev/null 2>&1; then
# gnome-settings-daemon &
#fi

# If you want to use XFCE config tools...
#
#xfce-mcs-manager &
#XDG_CONFIG_HOME="/home/immanuel/.config"
#HOME="/home/immanuel"
#source $XDG_CONFIG_HOME/openbox/environment
source $HOME/.profile

xrdb /home/immanuel/.config/Xresources
feh --bg-fill $HOME/Pictures/Wallpapers/$WALLPAPER
compton -b &
xkbcomp $XDG_CONFIG_HOME/xkb/custom.xkb :0 &
st -c 'DROPDOWN_TERM' -e 'tmux' &

+ 14
- 0
openbox/environment Прегледај датотеку

@@ -0,0 +1,14 @@
#!/bin/sh
#
# Set system-wide environment variables here for Openbox
# User-specific variables should be placed in $HOME/.config/openbox/environment
#

# To set your language for displaying messages and time/date formats, use the following:
#LANG=en_CA.UTF8

# To set your keyboard layout, you need to modify your X config:
# http://www.google.com/search?q=how+to+set+keyboard+layout+xorg
export WALLPAPER=lamp.jpg
export XDG_CONFIG_HOME=/home/immanuel/.config
export HOME=/home/immanuel

+ 35
- 0
openbox/menu.xml Прегледај датотеку

@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>

<openbox_menu xmlns="http://openbox.org/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://openbox.org/
file:///usr/share/openbox/menu.xsd">

<menu id="root-menu" label="Openbox 3">
<item label="Terminal emulator">
<action name="Execute"><execute>x-terminal-emulator</execute></action>
</item>
<item label="Web browser">
<action name="Execute"><execute>x-www-browser</execute></action>
</item>
<!-- This requires the presence of the 'obamenu' package to work -->
<menu id="/Debian" />
<separator />
<menu id="applications-menu" label="Applications" execute="/usr/bin/obamenu"/>
<separator />
<item label="ObConf">
<action name="Execute"><execute>obconf</execute></action>
</item>
<item label="Reconfigure">
<action name="Reconfigure" />
</item>
<item label="Restart">
<action name="Restart" />
</item>
<separator />
<item label="Exit">
<action name="Exit" />
</item>
</menu>

</openbox_menu>

+ 914
- 0
openbox/rc.xml Прегледај датотеку

@@ -0,0 +1,914 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Do not edit this file, it will be overwritten on install.
Copy the file to $HOME/.config/openbox/ instead. -->
<openbox_config xmlns="http://openbox.org/3.4/rc" xmlns:xi="http://www.w3.org/2001/XInclude">
<resistance>
<strength>10</strength>
<screen_edge_strength>20</screen_edge_strength>
</resistance>
<focus>
<focusNew>yes</focusNew>
<!-- always try to focus new windows when they appear. other rules do
apply -->
<followMouse>no</followMouse>
<!-- move focus to a window when you move the mouse into it -->
<focusLast>yes</focusLast>
<!-- focus the last used window when changing desktops, instead of the one
under the mouse pointer. when followMouse is enabled -->
<underMouse>no</underMouse>
<!-- move focus under the mouse, even when the mouse is not moving -->
<focusDelay>200</focusDelay>
<!-- when followMouse is enabled, the mouse must be inside the window for
this many milliseconds (1000 = 1 sec) before moving focus to it -->
<raiseOnFocus>no</raiseOnFocus>
<!-- when followMouse is enabled, and a window is given focus by moving the
mouse into it, also raise the window -->
</focus>
<placement>
<policy>Smart</policy>
<!-- 'Smart' or 'UnderMouse' -->
<center>yes</center>
<!-- whether to place windows in the center of the free area found or
the top left corner -->
<monitor>Primary</monitor>
<!-- with Smart placement on a multi-monitor system, try to place new windows
on: 'Any' - any monitor, 'Mouse' - where the mouse is, 'Active' - where
the active window is, 'Primary' - only on the primary monitor -->
<primaryMonitor>1</primaryMonitor>
<!-- The monitor where Openbox should place popup dialogs such as the
focus cycling popup, or the desktop switch popup. It can be an index
from 1, specifying a particular monitor. Or it can be one of the
following: 'Mouse' - where the mouse is, or
'Active' - where the active window is -->
</placement>
<theme>
<name>Nightmare-02</name>
<titleLayout>NLIMC</titleLayout>
<!--
available characters are NDSLIMC, each can occur at most once.
N: window icon
L: window label (AKA title).
I: iconify
M: maximize
C: close
S: shade (roll up/down)
D: omnipresent (on all desktops).
-->
<keepBorder>yes</keepBorder>
<animateIconify>yes</animateIconify>
<font place="ActiveWindow">
<name>sans</name>
<size>8</size>
<!-- font size in points -->
<weight>bold</weight>
<!-- 'bold' or 'normal' -->
<slant>normal</slant>
<!-- 'italic' or 'normal' -->
</font>
<font place="InactiveWindow">
<name>sans</name>
<size>8</size>
<!-- font size in points -->
<weight>bold</weight>
<!-- 'bold' or 'normal' -->
<slant>normal</slant>
<!-- 'italic' or 'normal' -->
</font>
<font place="MenuHeader">
<name>sans</name>
<size>9</size>
<!-- font size in points -->
<weight>normal</weight>
<!-- 'bold' or 'normal' -->
<slant>normal</slant>
<!-- 'italic' or 'normal' -->
</font>
<font place="MenuItem">
<name>sans</name>
<size>9</size>
<!-- font size in points -->
<weight>normal</weight>
<!-- 'bold' or 'normal' -->
<slant>normal</slant>
<!-- 'italic' or 'normal' -->
</font>
<font place="ActiveOnScreenDisplay">
<name>Sans</name>
<size>9</size>
<!-- font size in points -->
<weight>Normal</weight>
<!-- 'bold' or 'normal' -->
<slant>Normal</slant>
<!-- 'italic' or 'normal' -->
</font>
<font place="InactiveOnScreenDisplay">
<name>DejaVu Sans</name>
<size>9</size>
<!-- font size in points -->
<weight>Bold</weight>
<!-- 'bold' or 'normal' -->
<slant>Normal</slant>
<!-- 'italic' or 'normal' -->
</font>
</theme>
<desktops>
<!-- this stuff is only used at startup, pagers allow you to change them
during a session

these are default values to use when other ones are not already set
by other applications, or saved in your session

use obconf if you want to change these without having to log out
and back in -->
<number>4</number>
<firstdesk>1</firstdesk>
<names>
<!-- set names up here if you want to, like this:
<name>desktop 1</name>
<name>desktop 2</name>
-->
</names>
<popupTime>875</popupTime>
<!-- The number of milliseconds to show the popup for when switching
desktops. Set this to 0 to disable the popup. -->
</desktops>
<resize>
<drawContents>no</drawContents>
<popupShow>Nonpixel</popupShow>
<!-- 'Always', 'Never', or 'Nonpixel' (xterms and such) -->
<popupPosition>Center</popupPosition>
<!-- 'Center', 'Top', or 'Fixed' -->
<popupFixedPosition>
<!-- these are used if popupPosition is set to 'Fixed' -->
<x>10</x>
<!-- positive number for distance from left edge, negative number for
distance from right edge, or 'Center' -->
<y>10</y>
<!-- positive number for distance from top edge, negative number for
distance from bottom edge, or 'Center' -->
</popupFixedPosition>
</resize>
<!-- You can reserve a portion of your screen where windows will not cover when
they are maximized, or when they are initially placed.
Many programs reserve space automatically, but you can use this in other
cases. -->
<margins>
<top>0</top>
<bottom>0</bottom>
<left>0</left>
<right>0</right>
</margins>
<dock>
<position>TopLeft</position>
<!-- (Top|Bottom)(Left|Right|)|Top|Bottom|Left|Right|Floating -->
<floatingX>0</floatingX>
<floatingY>0</floatingY>
<noStrut>no</noStrut>
<stacking>Above</stacking>
<!-- 'Above', 'Normal', or 'Below' -->
<direction>Vertical</direction>
<!-- 'Vertical' or 'Horizontal' -->
<autoHide>no</autoHide>
<hideDelay>300</hideDelay>
<!-- in milliseconds (1000 = 1 second) -->
<showDelay>300</showDelay>
<!-- in milliseconds (1000 = 1 second) -->
<moveButton>Middle</moveButton>
<!-- 'Left', 'Middle', 'Right' -->
</dock>
<keyboard>
<chainQuitKey>C-g</chainQuitKey>
<!-- Keybindings for desktop switching -->
<keybind key="F9">
<action class='DROPDOWN_TERM' name="Focus"></action>
<action class='DROPDOWN_TERM' name="Focus"></action>
</keybind>
<keybind key="F10">
<action name="Iconify"></action>
</keybind>
<keybind key="F11">
<action name="Execute">
<command>wmctrl -x -b 'toggle,hidden' -r 'DROPDOWN_TERM'</command>
</action>
</keybind>
<keybind key="F12">
<action name="Execute">
<command>wmctrl -xa 'DROPDOWN_TERM'</command>
</action>
</keybind>
<keybind key="XF86AudioMute">
<action name="Execute">
<command>amixer -q sset Master toggle</command>
</action>
</keybind>
<keybind key="XF86AudioLowerVolume">
<action name="Execute">
<command>amixer -q sset Master 3%-</command>
</action>
</keybind>
<keybind key="XF86AudioRaiseVolume">
<action name="Execute">
<command>amixer -q sset Master 3%+</command>
</action>
</keybind>
<keybind key="XF86MonBrightnessUp">
<action name="Execute">
<startupnotify>
<enabled>true</enabled>
<name>BrightnessDown</name>
</startupnotify>
<command>xbacklight -inc 10</command>
</action>
</keybind>
<keybind key="XF86MonBrightnessDown">
<action name="Execute">
<startupnotify>
<enabled>true</enabled>
<name>BrightnessDown</name>
</startupnotify>
<command>xbacklight -dec 10</command>
</action>
</keybind>
<keybind key="Super_L">
<action name="Execute">
<enabled>true</enabled>
<name>Run</name>
<command>dmenu_run</command>
</action>
</keybind>
<keybind key='Mod5-space'>
<action name="Execute">
<command>guake --hide</command>
</action>
</keybind>
<keybind key='Mod5-g'>
<action name="Execute">
<command>guake -t</command>
</action>
</keybind>
<keybind key="Mod5-p">
<action name="Execute">
<startupnotify>
<enabled>true</enabled>
<name>Run</name>
</startupnotify>
<command>xpad -t</command>
</action>
</keybind>
<keybind key="C-A-Left">
<action name="GoToDesktop">
<to>left</to>
<wrap>no</wrap>
</action>
</keybind>
<keybind key="C-A-Right">
<action name="GoToDesktop">
<to>right</to>
<wrap>no</wrap>
</action>
</keybind>
<keybind key="C-A-Up">
<action name="GoToDesktop">
<to>up</to>
<wrap>no</wrap>
</action>
</keybind>
<keybind key="C-A-Down">
<action name="GoToDesktop">
<to>down</to>
<wrap>no</wrap>
</action>
</keybind>
<keybind key="S-A-Left">
<action name="SendToDesktop">
<to>left</to>
<wrap>no</wrap>
</action>
</keybind>
<keybind key="S-A-Right">
<action name="SendToDesktop">
<to>right</to>
<wrap>no</wrap>
</action>
</keybind>
<keybind key="S-A-Up">
<action name="SendToDesktop">
<to>up</to>
<wrap>no</wrap>
</action>
</keybind>
<keybind key="S-A-Down">
<action name="SendToDesktop">
<to>down</to>
<wrap>no</wrap>
</action>
</keybind>
<keybind key="Mod5-F1">
<action name="GoToDesktop">
<to>1</to>
</action>
</keybind>
<keybind key="Mod5-F2">
<action name="GoToDesktop">
<to>2</to>
</action>
</keybind>
<keybind key="Mod5-F3">
<action name="GoToDesktop">
<to>3</to>
</action>
</keybind>
<keybind key="Mod5-F4">
<action name="GoToDesktop">
<to>4</to>
</action>
</keybind>
<keybind key="Mod5-d">
<action name="ToggleShowDesktop"/>
</keybind>
<!-- Keybindings for windows -->
<keybind key="A-F4, Mod5-x">
<action name="Close"/>
</keybind>
<keybind key="A-Escape">
<action name="Lower"/>
<action name="FocusToBottom"/>
<action name="Unfocus"/>
</keybind>
<keybind key="A-space">
<action name="ShowMenu">
<menu>client-menu</menu>
</action>
</keybind>
<!-- Take a screenshot of the current window with scrot when Alt+Print are pressed -->
<keybind key="A-Print">
<action name="Execute">
<command>scrot -s</command>
</action>
</keybind>
<!-- Keybindings for window switching -->
<keybind key="A-Tab">
<action name="NextWindow">
<finalactions>
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</finalactions>
</action>
</keybind>
<keybind key="A-S-Tab">
<action name="PreviousWindow">
<finalactions>
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</finalactions>
</action>
</keybind>
<keybind key="C-A-Tab">
<action name="NextWindow">
<panels>yes</panels>
<desktop>yes</desktop>
<finalactions>
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</finalactions>
</action>
</keybind>
<!-- Keybindings for window switching with the arrow keys -->
<keybind key="Mod5-S-Right">
<action name="DirectionalCycleWindows">
<direction>right</direction>
</action>
</keybind>
<keybind key="Mod5-S-Left">
<action name="DirectionalCycleWindows">
<direction>left</direction>
</action>
</keybind>
<keybind key="Mod5-S-Up">
<action name="DirectionalCycleWindows">
<direction>up</direction>
</action>
</keybind>
<keybind key="Mod5-S-Down">
<action name="DirectionalCycleWindows">
<direction>down</direction>
</action>
</keybind>
<!-- Keybindings for running applications -->
<keybind key="Mod5-e">
<action name="Execute">
<startupnotify>
<enabled>true</enabled>
<name>Konqueror</name>
</startupnotify>
<command>kfmclient openProfile filemanagement</command>
</action>
</keybind>
<!-- Launch scrot when Print is pressed -->
<keybind key="Print">
<action name="Execute">
<command>scrot</command>
</action>
</keybind>
</keyboard>
<mouse>
<dragThreshold>1</dragThreshold>
<!-- number of pixels the mouse must move before a drag begins -->
<doubleClickTime>500</doubleClickTime>
<!-- in milliseconds (1000 = 1 second) -->
<screenEdgeWarpTime>400</screenEdgeWarpTime>
<!-- Time before changing desktops when the pointer touches the edge of the
screen while moving a window, in milliseconds (1000 = 1 second).
Set this to 0 to disable warping -->
<screenEdgeWarpMouse>false</screenEdgeWarpMouse>
<!-- Set this to TRUE to move the mouse pointer across the desktop when
switching due to hitting the edge of the screen -->
<context name="Frame">
<mousebind button="A-Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="A-Left" action="Click">
<action name="Unshade"/>
</mousebind>
<mousebind button="A-Left" action="Drag">
<action name="Move"/>
</mousebind>
<mousebind button="A-Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="A-Right" action="Drag">
<action name="Resize"/>
</mousebind>
<mousebind button="A-Middle" action="Press">
<action name="Lower"/>
<action name="FocusToBottom"/>
<action name="Unfocus"/>
</mousebind>
<mousebind button="A-Up" action="Click">
<action name="GoToDesktop">
<to>previous</to>
</action>
</mousebind>
<mousebind button="A-Down" action="Click">
<action name="GoToDesktop">
<to>next</to>
</action>
</mousebind>
<mousebind button="C-A-Up" action="Click">
<action name="GoToDesktop">
<to>previous</to>
</action>
</mousebind>
<mousebind button="C-A-Down" action="Click">
<action name="GoToDesktop">
<to>next</to>
</action>
</mousebind>
<mousebind button="A-S-Up" action="Click">
<action name="SendToDesktop">
<to>previous</to>
</action>
</mousebind>
<mousebind button="A-S-Down" action="Click">
<action name="SendToDesktop">
<to>next</to>
</action>
</mousebind>
</context>
<context name="Titlebar">
<mousebind button="Left" action="Drag">
<action name="Move"/>
</mousebind>
<mousebind button="Left" action="DoubleClick">
<action name="ToggleMaximize"/>
</mousebind>
<mousebind button="Up" action="Click">
<action name="if">
<shaded>no</shaded>
<then>
<action name="Shade"/>
<action name="FocusToBottom"/>
<action name="Unfocus"/>
<action name="Lower"/>
</then>
</action>
</mousebind>
<mousebind button="Down" action="Click">
<action name="if">
<shaded>yes</shaded>
<then>
<action name="Unshade"/>
<action name="Raise"/>
</then>
</action>
</mousebind>
</context>
<context name="Titlebar Top Right Bottom Left TLCorner TRCorner BRCorner BLCorner">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Middle" action="Press">
<action name="Lower"/>
<action name="FocusToBottom"/>
<action name="Unfocus"/>
</mousebind>
<mousebind button="Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="ShowMenu">
<menu>client-menu</menu>
</action>
</mousebind>
</context>
<context name="Top">
<mousebind button="Left" action="Drag">
<action name="Resize">
<edge>top</edge>
</action>
</mousebind>
</context>
<context name="Left">
<mousebind button="Left" action="Drag">
<action name="Resize">
<edge>left</edge>
</action>
</mousebind>
</context>
<context name="Right">
<mousebind button="Left" action="Drag">
<action name="Resize">
<edge>right</edge>
</action>
</mousebind>
</context>
<context name="Bottom">
<mousebind button="Left" action="Drag">
<action name="Resize">
<edge>bottom</edge>
</action>
</mousebind>
<mousebind button="Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="ShowMenu">
<menu>client-menu</menu>
</action>
</mousebind>
</context>
<context name="TRCorner BRCorner TLCorner BLCorner">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Left" action="Drag">
<action name="Resize"/>
</mousebind>
</context>
<context name="Client">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="Middle" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
</context>
<context name="Icon">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
<action name="ShowMenu">
<menu>client-menu</menu>
</action>
</mousebind>
<mousebind button="Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="ShowMenu">
<menu>client-menu</menu>
</action>
</mousebind>
</context>
<context name="AllDesktops">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Left" action="Click">
<action name="ToggleOmnipresent"/>
</mousebind>
</context>
<context name="Shade">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="Left" action="Click">
<action name="ToggleShade"/>
</mousebind>
</context>
<context name="Iconify">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="Left" action="Click">
<action name="Iconify"/>
</mousebind>
</context>
<context name="Maximize">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Middle" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Left" action="Click">
<action name="ToggleMaximize"/>
</mousebind>
<mousebind button="Middle" action="Click">
<action name="ToggleMaximize">
<direction>vertical</direction>
</action>
</mousebind>
<mousebind button="Right" action="Click">
<action name="ToggleMaximize">
<direction>horizontal</direction>
</action>
</mousebind>
</context>
<context name="Close">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Left" action="Click">
<action name="Close"/>
</mousebind>
</context>
<context name="Desktop">
<mousebind button="Up" action="Click">
<action name="GoToDesktop">
<to>previous</to>
</action>
</mousebind>
<mousebind button="Down" action="Click">
<action name="GoToDesktop">
<to>next</to>
</action>
</mousebind>
<mousebind button="A-Up" action="Click">
<action name="GoToDesktop">
<to>previous</to>
</action>
</mousebind>
<mousebind button="A-Down" action="Click">
<action name="GoToDesktop">
<to>next</to>
</action>
</mousebind>
<mousebind button="C-A-Up" action="Click">
<action name="GoToDesktop">
<to>previous</to>
</action>
</mousebind>
<mousebind button="C-A-Down" action="Click">
<action name="GoToDesktop">
<to>next</to>
</action>
</mousebind>
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
</context>
<context name="Root">
<!-- Menus -->
<mousebind button="Middle" action="Press">
<action name="ShowMenu">
<menu>client-list-combined-menu</menu>
</action>
</mousebind>
<mousebind button="Right" action="Press">
<action name="ShowMenu">
<menu>root-menu</menu>
</action>
</mousebind>
</context>
<context name="MoveResize">
<mousebind button="Up" action="Click">
<action name="GoToDesktop">
<to>previous</to>
</action>
</mousebind>
<mousebind button="Down" action="Click">
<action name="GoToDesktop">
<to>next</to>
</action>
</mousebind>
<mousebind button="A-Up" action="Click">
<action name="GoToDesktop">
<to>previous</to>
</action>
</mousebind>
<mousebind button="A-Down" action="Click">
<action name="GoToDesktop">
<to>next</to>
</action>
</mousebind>
</context>
</mouse>
<menu>
<!-- You can specify more than one menu file in here and they are all loaded,
just don't make menu ids clash or, well, it'll be kind of pointless -->
<!-- default menu file (or custom one in $HOME/.config/openbox/) -->
<!-- system menu files on Debian systems -->
<file>/var/lib/openbox/debian-menu.xml</file>
<file>menu.xml</file>
<hideDelay>200</hideDelay>
<!-- if a press-release lasts longer than this setting (in milliseconds), the
menu is hidden again -->
<middle>no</middle>
<!-- center submenus vertically about the parent entry -->
<submenuShowDelay>100</submenuShowDelay>
<!-- time to delay before showing a submenu after hovering over the parent
entry.
if this is a negative value, then the delay is infinite and the
submenu will not be shown until it is clicked on -->
<submenuHideDelay>400</submenuHideDelay>
<!-- time to delay before hiding a submenu when selecting another
entry in parent menu
if this is a negative value, then the delay is infinite and the
submenu will not be hidden until a different submenu is opened -->
<showIcons>yes</showIcons>
<!-- controls if icons appear in the client-list-(combined-)menu -->
<manageDesktops>yes</manageDesktops>
<!-- show the manage desktops section in the client-list-(combined-)menu -->
</menu>
<applications>
<!--
# this is an example with comments through out. use these to make your
# own rules, but without the comments of course.
# you may use one or more of the name/class/role/title/type rules to specify
# windows to match

<application name="the window's _OB_APP_NAME property (see obxprop)"
class="the window's _OB_APP_CLASS property (see obxprop)"
groupname="the window's _OB_APP_GROUP_NAME property (see obxprop)"
groupclass="the window's _OB_APP_GROUP_CLASS property (see obxprop)"
role="the window's _OB_APP_ROLE property (see obxprop)"
title="the window's _OB_APP_TITLE property (see obxprop)"
type="the window's _OB_APP_TYPE property (see obxprob)..
(if unspecified, then it is 'dialog' for child windows)">
# you may set only one of name/class/role/title/type, or you may use more
# than one together to restrict your matches.

# the name, class, role, and title use simple wildcard matching such as those
# used by a shell. you can use * to match any characters and ? to match
# any single character.

# the type is one of: normal, dialog, splash, utility, menu, toolbar, dock,
# or desktop

# when multiple rules match a window, they will all be applied, in the
# order that they appear in this list


# each rule element can be left out or set to 'default' to specify to not
# change that attribute of the window

<decor>yes</decor>
# enable or disable window decorations

<shade>no</shade>
# make the window shaded when it appears, or not

<position force="no">
# the position is only used if both an x and y coordinate are provided
# (and not set to 'default')
# when force is "yes", then the window will be placed here even if it
# says you want it placed elsewhere. this is to override buggy
# applications who refuse to behave
<x>center</x>
# a number like 50, or 'center' to center on screen. use a negative number
# to start from the right (or bottom for <y>), ie -50 is 50 pixels from
# the right edge (or bottom). use 'default' to specify using value
# provided by the application, or chosen by openbox, instead.
<y>200</y>
<monitor>1</monitor>
# specifies the monitor in a xinerama setup.
# 1 is the first head, or 'mouse' for wherever the mouse is
</position>

<size>
# the size to make the window.
<width>20</width>
# a number like 20, or 'default' to use the size given by the application.
# you can use fractions such as 1/2 or percentages such as 75% in which
# case the value is relative to the size of the monitor that the window
# appears on.
<height>30%</height>
</size>

<focus>yes</focus>
# if the window should try be given focus when it appears. if this is set
# to yes it doesn't guarantee the window will be given focus. some
# restrictions may apply, but Openbox will try to

<desktop>1</desktop>
# 1 is the first desktop, 'all' for all desktops

<layer>normal</layer>
# 'above', 'normal', or 'below'

<iconic>no</iconic>
# make the window iconified when it appears, or not

<skip_pager>no</skip_pager>
# asks to not be shown in pagers

<skip_taskbar>no</skip_taskbar>
# asks to not be shown in taskbars. window cycling actions will also
# skip past such windows

<fullscreen>yes</fullscreen>
# make the window in fullscreen mode when it appears

<maximized>true</maximized>
# 'Horizontal', 'Vertical' or boolean (yes/no)
</application>

# end of the example
-->
<application class="*">
<decor>no</decor>
</application>
<application class="DROPDOWN_TERM">

<decor>no</decor>

<shade>no</shade>

<position force="no">
<x>center</x>
<y>200</y>
<monitor>1</monitor>
</position>

<size>
<width>50%</width>
<height>60%</height>
</size>

<focus>yes</focus>
<!-- # if the window should try be given focus when it appears. if this is set -->
<!-- # to yes it doesn't guarantee the window will be given focus. some -->
<!-- # restrictions may apply, but Openbox will try to -->

<desktop>1</desktop>
<layer>normal</layer>
<iconic>no</iconic>
<skip_pager>no</skip_pager>
<!-- # asks to not be shown in pagers -->

<skip_taskbar>no</skip_taskbar>
<!-- # asks to not be shown in taskbars. window cycling actions will also -->
<!-- # skip past such windows -->

<!-- <fullscreen>yes</fullscreen> -->

<!-- <maximized>true</maximized> -->
<!-- # 'Horizontal', 'Vertical' or boolean (yes/no) -->
</application>
</applications>
</openbox_config>

+ 62
- 0
ranger/tmp/commands.py Прегледај датотеку

@@ -0,0 +1,62 @@
# 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.

# A simple command for demonstration purposes follows.
# -----------------------------------------------------------------------------

from __future__ import (absolute_import, division, print_function)

# You can import any python module as needed.
import os

# You always need to import ranger.api.commands here to get the Command class:
from ranger.api.commands import Command


# 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.
# tabnum is 1 for <TAB> and -1 for <S-TAB> by default
def tab(self, tabnum):
# This is a generic tab-completion function that iterates through the
# content of the current directory.
return self._tab_directory_content()

+ 1836
- 0
ranger/tmp/commands_full.py
Разлика између датотеке није приказан због своје велике величине
Прегледај датотеку


+ 725
- 0
ranger/tmp/rc.conf Прегледај датотеку

@@ -0,0 +1,725 @@
# ===================================================================
# This file contains the default startup commands for ranger.
# To change them, it is recommended to create either /etc/ranger/rc.conf
# (system-wide) or ~/.config/ranger/rc.conf (per user) 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
# ===================================================================

# Which viewmode should be used? Possible values are:
# miller: Use miller columns which show multiple levels of the hierarchy
# multipane: Midnight-commander like multipane view showing all tabs next
# to each other
set viewmode miller
#set viewmode multipane

# 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", "never", "multiple" (default)
# With "multiple", ranger will ask only if you delete multiple files at once.
set confirm_on_delete multiple

# Use non-default path for file preview script?
# 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 four backends git, hg, bzr, svn. 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
set vcs_backend_svn disabled

# Use one of the supported image preview protocols
set preview_images false

# 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.
#
# This feature relies on the dimensions of the terminal's font. By default, a
# width of 8 and height of 11 are used. To use other values, set the options
# iterm2_font_width and iterm2_font_height to the desired values.
#
# * terminology:
# Previews images in full color in the terminology terminal emulator.
# Supports a wide variety of formats, even vector graphics like svg.
#
# * urxvt:
# Preview images in full color using urxvt image backgrounds. This
# requires using urxvt compiled with pixbuf support.
#
# * urxvt-full:
# The same as urxvt but utilizing not only the preview pane but the
# whole terminal window.
#
# * kitty:
# Preview images in full color using kitty image protocol.
# Requires python PIL or pillow library.
# If ranger does not share the local filesystem with kitty
# the transfer method is changed to encode the whole image;
# while slower, this allows remote previews,
# for example during an ssh session.
# Tmux is unsupported.
set preview_images_method w3m

# Delay in seconds before displaying an image with the w3m method.
# Increase it in case of experiencing display corruption.
set w3m_delay 0.02

# Default iTerm2 font size (see: preview_images_method: iterm2)
set iterm2_font_width 8
set iterm2_font_height 11

# Use a unicode "..." character to mark cut-off filenames?
set unicode_ellipsis false

# BIDI support - try to properly display file names in RTL languages (Hebrew, Arabic).
# Requires the python-bidi pip package
set bidi_support 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? (separators, outline, both, or none)
# Separators are vertical lines between columns.
# Outline draws a box around all the columns.
# Both combines the two.
set draw_borders none

# 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 the free disk space in the status bar?
set display_free_space_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 true

# 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

# Show hostname in titlebar?
set hostname_in_titlebar true

# 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? (Noticeable 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

# Save the "`" bookmark to disk. This can be used to switch to the last
# directory by typing "``".
set save_backtick_bookmark 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

# Changes case sensitivity for the cd command tab completion
set cd_tab_case sensitive

# Use fuzzy tab completion with the "cd" command. For example,
# ":cd /u/lo/b<tab>" expands to ":cd /usr/local/bin".
set cd_tab_fuzzy false

# Avoid previewing files larger than this size, in bytes. Use a value of 0 to
# disable this feature.
set preview_max_size 0

# The key hint lists up to this size have their sublists expanded.
# Otherwise the submaps are replaced with "...".
set hint_collapse_threshold 10

# 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

# Clear all existing filters when leaving a directory
set clear_filters_on_dir_change false

# Disable displaying line numbers in main column.
# Possible values: false, absolute, relative.
set line_numbers false

# When line_numbers=relative show the absolute line number in the
# current line.
set relative_current_zero false

# Start line numbers from 1 instead of 0
set one_indexed false

# Save tabs on exit
set save_tabs_on_exit false

# Enable scroll wrapping - moving down while on the last item will wrap around to
# the top and vice versa.
set wrap_scroll false

# Set the global_inode_type_filter to nothing. Possible options: d, f and l for
# directories, files and symlinks respectively.
set global_inode_type_filter

# This setting allows to freeze the list of files to save I/O bandwidth. It
# should be 'false' during start-up, but you can toggle it by pressing F.
set freeze_files 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! quit!
alias qa quitall
alias qa! quitall!
alias qall quitall
alias qall! quitall!
alias setl setlocal

alias filter scout -prts
alias find scout -aets
alias mark scout -mr
alias unmark scout -Mr
alias search scout -rs
alias search_inc scout -rts
alias travel scout -aefklst

# ===================================================================
# == Define keys for the browser
# ===================================================================

# Basic
map Q quitall
map q quit
copymap q ZZ ZQ

map R reload_cwd
map F set freeze_files!
map <C-r> reset
map <C-l> redraw_window
map <C-c> abort
map <esc> change_mode normal
map ~ set viewmode!

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

map <C-p> chain console; eval fm.ui.console.history_move(-1)

# Change the line mode
map Mf linemode filename
map Mi linemode fileinfo
map Mm linemode mtime
map Mp linemode permissions
map Ms linemode sizemtime
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 <F2> rename_append
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=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 { traverse_backwards
map ) jump_non

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 gi eval fm.cd('/run/media/' + os.getenv('USER'))
map gM cd /mnt
map gs cd /srv
map gp cd /tmp
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 yank path
map yd yank dir
map yn yank name
map y. yank name_without_extension

# Filesystem Operations
map = chmod

map cw console rename%space
map a rename_append
map A eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%"))
map I eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%"), position=7)

map pp paste
map po paste overwrite=True
map pP paste append=True
map pO paste overwrite=True append=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 dt cut mode=toggle

map yy copy
map uy uncut
map ya copy mode=add
map yr copy mode=remove
map yt copy mode=toggle

# 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
map <a-r> tab_shift 1
map <a-l> tab_shift -1

# Sorting
map or set 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 set collapse_preview!
map zd set sort_directories_first!
map zh set show_hidden!
map <C-h> set show_hidden!
copymap <C-h> <backspace>
copymap <backspace> <backspace2>
map zI set flushinput!
map zi set preview_images!
map zm set mouse_enabled!
map zp set preview_files!
map zP set preview_directories!
map zs set sort_case_insensitive!
map zu set autoupdate_cumulative_size!
map zv set use_preview_script!
map zf console filter%space
copymap zf zz

# Filter stack
map .n console filter_stack add name%space
map .m console filter_stack add mime%space
map .d filter_stack add type d
map .f filter_stack add type f
map .l filter_stack add type l
map .| filter_stack add or
map .& filter_stack add and
map .! filter_stack add not
map .r console filter_stack rotate
map .c filter_stack clear
map .* filter_stack decompose
map .p filter_stack pop
map .. filter_stack show

# 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)
cmap <a-b> eval fm.ui.console.move_word(left=1)
cmap <a-f> eval fm.ui.console.move_word(right=1)

copycmap <a-b> <a-left>
copycmap <a-f> <a-right>

# 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 <A-d> eval fm.ui.console.delete_word(backward=False)
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 <ESC> <C-g>
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>

+ 256
- 0
ranger/tmp/rifle.conf Прегледај датотеку

@@ -0,0 +1,256 @@
# 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 qutebrowser, X, flag f = qutebrowser -- "$@"
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-tabbed, X, flag f = uzbl-tabbed -- "$@"
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-browser, X, flag f = chromium-browser -- "$@"
ext x?html?, has chromium, X, flag f = chromium -- "$@"
ext x?html?, has google-chrome, X, flag f = google-chrome -- "$@"
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 = ${VISUAL:-$EDITOR} -- "$@"
mime ^text, label pager = "$PAGER" -- "$@"
!mime ^text, label editor, ext xml|json|csv|tex|py|pl|rb|js|sh|php = ${VISUAL:-$EDITOR} -- "$@"
!mime ^text, label pager, ext xml|json|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 = python3 -- "$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 mpv = mpv -- "$@"
mime ^audio|ogg$, terminal, has mplayer2 = mplayer2 -- "$@"
mime ^audio|ogg$, terminal, has mplayer = mplayer -- "$@"
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 mupdf-x11,X, flag f = mupdf-x11 "$@"
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 pdf, has open, X, flag f = open "$@"

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 zathura,X, flag f = zathura -- "$@"
ext djvu, has evince, X, flag f = evince -- "$@"
ext djvu, has atril, X, flag f = atril -- "$@"
ext djvu, has djview, X, flag f = djview -- "$@"

ext epub, has ebook-viewer, X, flag f = ebook-viewer -- "$@"
ext mobi, has ebook-viewer, X, flag f = ebook-viewer -- "$@"

#-------------------------------------------
# Image Viewing:
#-------------------------------------------
mime ^image/svg, has inkscape, X, flag f = inkscape -- "$@"
mime ^image/svg, has display, X, flag f = display -- "$@"

mime ^image, has pqiv, X, flag f = pqiv -- "$@"
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 nomacs, X, flag f = nomacs -- "$@"
mime ^image, has geeqie, X, flag f = geeqie -- "$@"
mime ^image, has gwenview, X, flag f = gwenview -- "$@"
mime ^image, has gimp, X, flag f = gimp -- "$@"
ext xcf, X, flag f = gimp -- "$@"

#-------------------------------------------
# Archives
#-------------------------------------------

# avoid password prompt by providing empty password
ext 7z, has 7z = 7z -p l "$@" | "$PAGER"
# This requires atool
ext ace|ar|arc|bz2?|cab|cpio|cpt|deb|dgc|dmg|gz, has atool = atool --list --each -- "$@" | "$PAGER"
ext iso|jar|msi|pkg|rar|shar|tar|tgz|xar|xpi|xz|zip, has atool = atool --list --each -- "$@" | "$PAGER"
ext 7z|ace|ar|arc|bz2?|cab|cpio|cpt|deb|dgc|dmg|gz, has atool = atool --extract --each -- "$@"
ext iso|jar|msi|pkg|rar|shar|tar|tgz|xar|xpi|xz|zip, has atool = atool --extract --each -- "$@"

# Listing and extracting archives without atool:
ext tar|gz|bz2|xz, has tar = tar vvtf "$1" | "$PAGER"
ext tar|gz|bz2|xz, has tar = for file in "$@"; do tar vvxf "$file"; done
ext bz2, has bzip2 = for file in "$@"; do bzip2 -dk "$file"; done
ext zip, has unzip = unzip -l "$1" | "$PAGER"
ext zip, has unzip = for file in "$@"; do unzip -d "${file%.*}" "$file"; done
ext ace, has unace = unace l "$1" | "$PAGER"
ext ace, has unace = for file in "$@"; do unace e "$file"; done
ext rar, has unrar = unrar l "$1" | "$PAGER"
ext rar, has unrar = for file in "$@"; do unrar x "$file"; done

#-------------------------------------------
# Flag t fallback terminals
#-------------------------------------------
# Rarely installed terminal emulators get higher priority; It is assumed that
# if you install a rare terminal emulator, you probably use it.
# gnome-terminal/konsole/xterm on the other hand are often installed as part of
# a desktop environment or as fallback terminal emulators.
mime ^ranger/x-terminal-emulator, has terminology = terminology -e "$@"
mime ^ranger/x-terminal-emulator, has kitty = kitty -- "$@"
mime ^ranger/x-terminal-emulator, has alacritty = alacritty -e "$@"
mime ^ranger/x-terminal-emulator, has sakura = sakura -e "$@"
mime ^ranger/x-terminal-emulator, has lilyterm = lilyterm -e "$@"
#mime ^ranger/x-terminal-emulator, has cool-retro-term = cool-retro-term -e "$@"
mime ^ranger/x-terminal-emulator, has termite = termite -x '"$@"'
#mime ^ranger/x-terminal-emulator, has yakuake = yakuake -e "$@"
mime ^ranger/x-terminal-emulator, has guake = guake -ne "$@"
mime ^ranger/x-terminal-emulator, has tilda = tilda -c "$@"
mime ^ranger/x-terminal-emulator, has st = st -e "$@"
mime ^ranger/x-terminal-emulator, has terminator = terminator -x "$@"
mime ^ranger/x-terminal-emulator, has urxvt = urxvt -e "$@"
mime ^ranger/x-terminal-emulator, has pantheon-terminal = pantheon-terminal -e "$@"
mime ^ranger/x-terminal-emulator, has lxterminal = lxterminal -e "$@"
mime ^ranger/x-terminal-emulator, has mate-terminal = mate-terminal -x "$@"
mime ^ranger/x-terminal-emulator, has xfce4-terminal = xfce4-terminal -x "$@"
mime ^ranger/x-terminal-emulator, has konsole = konsole -e "$@"
mime ^ranger/x-terminal-emulator, has gnome-terminal = gnome-terminal -- "$@"
mime ^ranger/x-terminal-emulator, has xterm = xterm -e "$@"

#-------------------------------------------
# Misc
#-------------------------------------------
label wallpaper, number 11, mime ^image, has feh, X = feh --bg-scale "$1"
label wallpaper, number 12, mime ^image, has feh, X = feh --bg-tile "$1"
label wallpaper, number 13, mime ^image, has feh, X = feh --bg-center "$1"
label wallpaper, number 14, mime ^image, has feh, X = feh --bg-fill "$1"

# Define the editor for non-text files + pager as last action
!mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php = ask
label editor, !mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php = ${VISUAL:-$EDITOR} -- "$@"
label pager, !mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php = "$PAGER" -- "$@"

# The very last action, so that it's never triggered accidentally, is to execute a program:
mime application/x-executable = "$1"

+ 216
- 0
ranger/tmp/scope.sh Прегледај датотеку

@@ -0,0 +1,216 @@
#!/usr/bin/env bash

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.

# 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}" - | fmt -w ${PV_WIDTH} && exit 5
mutool draw -F txt -i -- "${FILE_PATH}" 1-10 | fmt -w ${PV_WIDTH} && exit 5
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;;

# Preview archives using the first image inside.
# (Very useful for comic book collections for example.)
# application/zip|application/x-rar|application/x-7z-compressed|\
# application/x-xz|application/x-bzip2|application/x-gzip|application/x-tar)
# local fn=""; local fe=""
# local zip=""; local rar=""; local tar=""; local bsd=""
# case "${mimetype}" in
# application/zip) zip=1 ;;
# application/x-rar) rar=1 ;;
# application/x-7z-compressed) ;;
# *) tar=1 ;;
# esac
# { [ "$tar" ] && fn=$(tar --list --file "${FILE_PATH}"); } || \
# { fn=$(bsdtar --list --file "${FILE_PATH}") && bsd=1 && tar=""; } || \
# { [ "$rar" ] && fn=$(unrar lb -p- -- "${FILE_PATH}"); } || \
# { [ "$zip" ] && fn=$(zipinfo -1 -- "${FILE_PATH}"); } || return
#
# fn=$(echo "$fn" | python -c "import sys; import mimetypes as m; \
# [ print(l, end='') for l in sys.stdin if \
# (m.guess_type(l[:-1])[0] or '').startswith('image/') ]" |\
# sort -V | head -n 1)
# [ "$fn" = "" ] && return
# [ "$bsd" ] && fn=$(printf '%b' "$fn")
#
# [ "$tar" ] && tar --extract --to-stdout \
# --file "${FILE_PATH}" -- "$fn" > "${IMAGE_CACHE_PATH}" && exit 6
# fe=$(echo -n "$fn" | sed 's/[][*?\]/\\\0/g')
# [ "$bsd" ] && bsdtar --extract --to-stdout \
# --file "${FILE_PATH}" -- "$fe" > "${IMAGE_CACHE_PATH}" && exit 6
# [ "$bsd" ] || [ "$tar" ] && rm -- "${IMAGE_CACHE_PATH}"
# [ "$rar" ] && unrar p -p- -inul -- "${FILE_PATH}" "$fn" > \
# "${IMAGE_CACHE_PATH}" && exit 6
# [ "$zip" ] && unzip -pP "" -- "${FILE_PATH}" "$fe" > \
# "${IMAGE_CACHE_PATH}" && exit 6
# [ "$rar" ] || [ "$zip" ] && rm -- "${IMAGE_CACHE_PATH}"
# ;;
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

exit 1

+ 9
- 0
tmux/plugins/tpm/.gitattributes Прегледај датотеку

@@ -0,0 +1,9 @@
# Force text files to have unix eols, so Windows/Cygwin does not break them
*.* eol=lf

# These files are unfortunately not recognized as text files so
# explicitly listing them here
tpm eol=lf
bin/* eol=lf
bindings/* eol=lf
tests/* eol=lf

+ 4
- 0
tmux/plugins/tpm/.gitignore Прегледај датотеку

@@ -0,0 +1,4 @@
**/.vagrant/
run_tests
tests/run_tests_in_isolation
tests/helpers/helpers.sh

+ 3
- 0
tmux/plugins/tpm/.gitmodules Прегледај датотеку

@@ -0,0 +1,3 @@
[submodule "lib/tmux-test"]
path = lib/tmux-test
url = https://github.com/tmux-plugins/tmux-test.git

+ 19
- 0
tmux/plugins/tpm/.travis.yml Прегледај датотеку

@@ -0,0 +1,19 @@
# generic packages and tmux
before_install:
- sudo apt-get update
- sudo apt-get install -y git-core expect
- sudo apt-get install -y python-software-properties software-properties-common
- sudo apt-get install -y libevent-dev libncurses-dev
- git clone https://github.com/tmux/tmux.git
- cd tmux
- git checkout 2.0
- sh autogen.sh
- ./configure && make && sudo make install

install:
- git fetch --unshallow --recurse-submodules || git fetch --recurse-submodules
# manual `git clone` required for testing `tmux-test` plugin itself
- git clone https://github.com/tmux-plugins/tmux-test lib/tmux-test; true
- lib/tmux-test/setup

script: ./tests/run_tests_in_isolation

+ 83
- 0
tmux/plugins/tpm/CHANGELOG.md Прегледај датотеку

@@ -0,0 +1,83 @@
# Changelog

### master
- upgrade to new version of `tmux-test`
- bug: when using `emacs` copy mode, Enter does not quit screen after tpm
installation/update. Fix by making `Escape` the key for emacs mode.
- add a doc with troubleshooting instructions
- add `.gitattributes` file that forces linefeed characters (classic `\n`) as
line endings - helps with misconfigured git on windows/cygwin
- readme update: announce Cygwin support
- un-deprecate old plugin definition syntax: `set -g @tpm_plugins`

### v3.0.0, 2015-08-03
- refactor `shared_set_tpm_path_constant` function
- move all instructions to `docs/` dir
- add `bin/install_plugins` cli executable script
- improved test runner function
- switch to using [tmux-test](https://github.com/tmux-plugins/tmux-test)
framework
- add `bin/update_plugins` cli executable script
- refactor test `expect` scripts, make them simpler and ensure they properly
assert expectations
- refactor code that sets 'TMUX_PLUGIN_MANAGER_PATH' global env var
- stop using global variable for 'tpm path'
- support defining plugins via `set -g @plugin` in sourced files as well

### v2.0.0, 2015-07-07
- enable overriding default key bindings
- start using `C-c` to clear screen
- add uninstall/clean procedure and keybinding (prefix+alt+u) (@chilicuil)
- add new `set @plugin 'repo'` plugin definition syntax (@chilicuil)
- revert back to using `-g` flag in new plugin definition syntax
- permit leading whitespace with new plugin definition syntax (thanks @chilicuil)
- make sure `TMUX_PLUGIN_MANAGER_PATH` always has trailng slash
- ensure old/deprecated plugin syntax `set -g @tpm_plugins` works alongside new
`set -g @plugin` syntax

### v1.2.2, 2015-02-08
- set GIT_TERMINAL_PROMPT=0 when doing `git clone`, `pull` or `submodule update`
to ensure git does not prompt for username/password in any case

### v1.2.1, 2014-11-21
- change the way plugin name is expanded. It now uses the http username
and password by default, like this: `https://git::@github.com/`. This prevents
username and password prompt (and subsequently tmux install hanging) with old
git versions. Fixes #7.

### v1.2.0, 2014-11-20
- refactor tests so they can be used on travis
- add travis.yml, add travis badge to the readme

### v1.1.0, 2014-11-19
- if the plugin is not downloaded do not source it
- remove `PLUGINS.md`, an obsolete list of plugins
- update readme with instructions about uninstalling plugins
- tilde char and `$HOME` in `TMUX_SHARED_MANAGER_PATH` couldn't be used because
they are just plain strings. Fixing the problem by manually expanding them.
- bugfix: fragile `*.tmux` file globbing (@majutsushi)

### v1.0.0, 2014-08-05
- update readme because of github organization change to
[tmux-plugins](https://github.com/tmux-plugins)
- update tests to pass
- update README to suggest different first plugin
- update list of plugins in the README
- remove README 'about' section
- move key binding to the main file. Delete `key_binding.sh`.
- rename `display_message` -> `echo_message`
- installing plugins installs just new plugins. Already installed plugins aren't
updated.
- add 'update plugin' binding and functionality
- add test for updating a plugin

### v0.0.2, 2014-07-17
- run all *.tmux plugin files as executables
- fix all redirects to /dev/null
- fix bug: TPM shared path is created before sync (cloning plugins from github
is done)
- add test suite running in Vagrant
- add Tmux version check. `TPM` won't run if Tmux version is less than 1.9.

### v0.0.1, 2014-05-21
- get TPM up and running

+ 2
- 0
tmux/plugins/tpm/HOW_TO_PLUGIN.md Прегледај датотеку

@@ -0,0 +1,2 @@
Instructions moved to
[docs/how_to_create_plugin.md](docs/how_to_create_plugin.md).

+ 20
- 0
tmux/plugins/tpm/LICENSE.md Прегледај датотеку

@@ -0,0 +1,20 @@
MIT license
Copyright (C) 2014 Bruno Sutic

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 113
- 0
tmux/plugins/tpm/README.md Прегледај датотеку

@@ -0,0 +1,113 @@
# Tmux Plugin Manager

[![Build Status](https://travis-ci.org/tmux-plugins/tpm.svg?branch=master)](https://travis-ci.org/tmux-plugins/tpm)

Installs and loads `tmux` plugins.

Tested and working on Linux, OSX, and Cygwin.

### Installation

Requirements: `tmux` version 1.9 (or higher), `git`, `bash`.

Clone TPM:

```bash
$ git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
```

Put this at the bottom of `~/.tmux.conf` (`$XDG_CONFIG_HOME/tmux/tmux.conf`
works too):

```bash
# List of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'

# Other examples:
# set -g @plugin 'github_username/plugin_name'
# set -g @plugin 'git@github.com/user/plugin'
# set -g @plugin 'git@bitbucket.com/user/plugin'

# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run -b '~/.tmux/plugins/tpm/tpm'
```

Reload TMUX environment so TPM is sourced:

```bash
# type this in terminal if tmux is already running
$ tmux source ~/.tmux.conf
```

That's it!

### Installing plugins

1. Add new plugin to `~/.tmux.conf` with `set -g @plugin '...'`
2. Press `prefix` + <kbd>I</kbd> (capital i, as in **I**nstall) to fetch the plugin.

You're good to go! The plugin was cloned to `~/.tmux/plugins/` dir and sourced.

### Uninstalling plugins

1. Remove (or comment out) plugin from the list.
2. Press `prefix` + <kbd>alt</kbd> + <kbd>u</kbd> (lowercase u as in **u**ninstall) to remove the plugin.

All the plugins are installed to `~/.tmux/plugins/` so alternatively you can
find plugin directory there and remove it.

### Key bindings

`prefix` + <kbd>I</kbd>
- Installs new plugins from GitHub or any other git repository
- Refreshes TMUX environment

`prefix` + <kbd>U</kbd>
- updates plugin(s)

`prefix` + <kbd>alt</kbd> + <kbd>u</kbd>
- remove/uninstall plugins not on the plugin list

### More plugins

For more plugins, check [here](https://github.com/tmux-plugins).

### Docs

- [Help, tpm not working](docs/tpm_not_working.md) - problem solutions

More advanced features and instructions, regular users probably do not need
this:

- [How to create a plugin](docs/how_to_create_plugin.md). It's easy.
- [Managing plugins via the command line](docs/managing_plugins_via_cmd_line.md)
- [Changing plugins install dir](docs/changing_plugins_install_dir.md)
- [Automatic TPM installation on a new machine](docs/automatic_tpm_installation.md)

### Tests

Tests for this project run on [Travis CI](https://travis-ci.org/tmux-plugins/tpm).

When run locally, [vagrant](https://www.vagrantup.com/) is required.
Run tests with:

```bash
# within project directory
$ ./run_tests
```

### Other goodies

- [tmux-copycat](https://github.com/tmux-plugins/tmux-copycat) - a plugin for
regex searches in tmux and fast match selection
- [tmux-yank](https://github.com/tmux-plugins/tmux-yank) - enables copying
highlighted text to system clipboard
- [tmux-open](https://github.com/tmux-plugins/tmux-open) - a plugin for quickly
opening highlighted file or a url
- [tmux-continuum](https://github.com/tmux-plugins/tmux-continuum) - automatic
restoring and continuous saving of tmux env

### License

[MIT](LICENSE.md)

+ 14
- 0
tmux/plugins/tpm/bin/clean_plugins Прегледај датотеку

@@ -0,0 +1,14 @@
#!/usr/bin/env bash

# Script intended for use via the command line.
#
# `.tmux.conf` needs to be set for TPM. Tmux has to be installed on the system,
# but does not need to be started in order to run this script.

CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
SCRIPTS_DIR="$CURRENT_DIR/../scripts"

main() {
"$SCRIPTS_DIR/clean_plugins.sh" # has correct exit code
}
main

+ 14
- 0
tmux/plugins/tpm/bin/install_plugins Прегледај датотеку

@@ -0,0 +1,14 @@
#!/usr/bin/env bash

# Script intended for use via the command line.
#
# `.tmux.conf` needs to be set for TPM. Tmux has to be installed on the system,
# but does not need to be started in order to run this script.

CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
SCRIPTS_DIR="$CURRENT_DIR/../scripts"

main() {
"$SCRIPTS_DIR/install_plugins.sh" # has correct exit code
}
main

+ 24
- 0
tmux/plugins/tpm/bin/update_plugins Прегледај датотеку

@@ -0,0 +1,24 @@
#!/usr/bin/env bash

# Script intended for use via the command line.
#
# `.tmux.conf` needs to be set for TPM. Tmux has to be installed on the system,
# but does not need to be started in order to run this script.

CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
SCRIPTS_DIR="$CURRENT_DIR/../scripts"
PROGRAM_NAME="$0"

if [ $# -eq 0 ]; then
echo "usage:"
echo " $PROGRAM_NAME all update all plugins"
echo " $PROGRAM_NAME tmux-foo update plugin 'tmux-foo'"
echo " $PROGRAM_NAME tmux-bar tmux-baz update multiple plugins"
exit 1
fi

main() {
"$SCRIPTS_DIR/update_plugin.sh" --shell-echo "$*" # has correct exit code
}
main "$*"


+ 19
- 0
tmux/plugins/tpm/bindings/clean_plugins Прегледај датотеку

@@ -0,0 +1,19 @@
#!/usr/bin/env bash

# Tmux key-binding script.
# Scripts intended to be used via the command line are in `bin/` directory.

CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
SCRIPTS_DIR="$CURRENT_DIR/../scripts"
HELPERS_DIR="$SCRIPTS_DIR/helpers"

source "$HELPERS_DIR/tmux_echo_functions.sh"
source "$HELPERS_DIR/tmux_utils.sh"

main() {
reload_tmux_environment
"$SCRIPTS_DIR/clean_plugins.sh" --tmux-echo >/dev/null 2>&1
reload_tmux_environment
end_message
}
main

+ 19
- 0
tmux/plugins/tpm/bindings/install_plugins Прегледај датотеку

@@ -0,0 +1,19 @@
#!/usr/bin/env bash

# Tmux key-binding script.
# Scripts intended to be used via the command line are in `bin/` directory.

CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
SCRIPTS_DIR="$CURRENT_DIR/../scripts"
HELPERS_DIR="$SCRIPTS_DIR/helpers"

source "$HELPERS_DIR/tmux_echo_functions.sh"
source "$HELPERS_DIR/tmux_utils.sh"

main() {
reload_tmux_environment
"$SCRIPTS_DIR/install_plugins.sh" --tmux-echo >/dev/null 2>&1
reload_tmux_environment
end_message
}
main

+ 49
- 0
tmux/plugins/tpm/bindings/update_plugins Прегледај датотеку

@@ -0,0 +1,49 @@
#!/usr/bin/env bash

# Tmux key-binding script.
# Scripts intended to be used via the command line are in `bin/` directory.

# This script:
# - shows a list of installed plugins
# - starts a prompt to enter the name of the plugin that will be updated

CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
SCRIPTS_DIR="$CURRENT_DIR/../scripts"
HELPERS_DIR="$SCRIPTS_DIR/helpers"

source "$HELPERS_DIR/plugin_functions.sh"
source "$HELPERS_DIR/tmux_echo_functions.sh"
source "$HELPERS_DIR/tmux_utils.sh"

display_plugin_update_list() {
local plugins="$(tpm_plugins_list_helper)"
tmux_echo "Installed plugins:"
tmux_echo ""

for plugin in $plugins; do
# displaying only installed plugins
if plugin_already_installed "$plugin"; then
local plugin_name="$(plugin_name_helper "$plugin")"
tmux_echo " $plugin_name"
fi
done

tmux_echo ""
tmux_echo "Type plugin name to update it."
tmux_echo ""
tmux_echo "- \"all\" - updates all plugins"
tmux_echo "- ENTER - cancels"
}

update_plugin_prompt() {
tmux command-prompt -p 'plugin update:' " \
send-keys C-c; \
run-shell '$SCRIPTS_DIR/update_plugin_prompt_handler.sh %1'"
}

main() {
reload_tmux_environment
display_plugin_update_list
update_plugin_prompt
}
main

+ 12
- 0
tmux/plugins/tpm/docs/automatic_tpm_installation.md Прегледај датотеку

@@ -0,0 +1,12 @@
# Automatic tpm installation

One of the first things we do on a new machine is cloning our dotfiles. Not everything comes with them though, so for example `tpm` most likely won't be installed.

If you want to install `tpm` and plugins automatically when tmux is started, put the following snippet in `.tmux.conf` before the final `run '~/.tmux/plugins/tpm/tpm'`:

```
if "test ! -d ~/.tmux/plugins/tpm" \
"run 'git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm && ~/.tmux/plugins/tpm/bin/install_plugins'"
```

This useful tip was submitted by @acr4 and narfman0.

+ 14
- 0
tmux/plugins/tpm/docs/changing_plugins_install_dir.md Прегледај датотеку

@@ -0,0 +1,14 @@
# Changing plugins install dir

By default, TPM installs plugins to `~/.tmux/plugins/`.

You can change the install path by putting this in `.tmux.conf`:

set-environment -g TMUX_PLUGIN_MANAGER_PATH '/some/other/path/'

Tmux plugin manager initialization in `.tmux.conf` should also be updated:

# initializes TMUX plugin manager in a new path
run /some/other/path/tpm/tpm

Please make sure that the `run` line is at the very bottom of `.tmux.conf`.

+ 108
- 0
tmux/plugins/tpm/docs/how_to_create_plugin.md Прегледај датотеку

@@ -0,0 +1,108 @@
# How to create Tmux plugins

Creating a new plugin is easy.

For demonstration purposes we'll create a simple plugin that lists all
installed TPM plugins. Yes, a plugin that lists plugins :) We'll bind that to
`prefix + T`.

The source code for this example plugin can be found
[here](https://github.com/tmux-plugins/tmux-example-plugin).

### 1. create a new git project

TPM depends on git for downloading and updating plugins.

To create a new git project:

$ mkdir tmux_my_plugin
$ cd tmux_my_plugin
$ git init

### 2. create a `*.tmux` plugin run file

When it sources a plugin, TPM executes all `*.tmux` files in your plugins'
directory. That's how plugins are run.

Create a plugin run file in plugin directory:

$ touch my_plugin.tmux
$ chmod u+x my_plugin.tmux

You can have more than one `*.tmux` file, and all will get executed. However, usually
you'll need just one.

### 3. create a plugin key binding

We want the behavior of the plugin to trigger when a user hits `prefix + T`.

Key `T` is chosen because:
- it's "kind of" a mnemonic for `TPM`
- the key is not used by Tmux natively. Tmux man page, KEY BINDINGS section
contains a list of all the bindings Tmux uses. There's plenty of unused keys
and we don't want to override any of Tmux default key bindings.

Open the plugin run file in your favorite text editor:

$ vim my_plugin.tmux
# or
$ subl my_plugin.tmux

Put the following content in the file:

#!/usr/bin/env bash

CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
tmux bind-key T run-shell "$CURRENT_DIR/scripts/tmux_list_plugins.sh"

As you can see, plugin run file is a simple bash script that sets up the binding.

When pressed, `prefix + T` will execute another shell script:
`tmux_list_plugins.sh`. That script should be in `scripts/` directory -
relative to the plugin run file.


### 4. listing plugins

Now that we have the binding, let's create a script that's invoked with
`prefix + T`.

$ mkdir scripts
$ touch scripts/tmux_list_plugins.sh
$ chmod u+x scripts/tmux_list_plugins.sh

And here's the script content:

#!/usr/bin/env bash

# fetching the directory where plugins are installed
plugin_path="$(tmux show-env -g TMUX_PLUGIN_MANAGER_PATH | cut -f2 -d=)"

# listing installed plugins
ls -1 "$plugin_path"

### 5. try it out

To see if this works, execute the plugin run file:

$ ./my_plugin.tmux

That should set up the key binding. Now hit `prefix + T` and see if it works.

### 6. publish the plugin

When everything is ready, push the plugin to an online git repository,
preferably Github.

Other users can install your plugin by just adding plugin git URL to the
`@plugin` list in their `.tmux.conf`.

If the plugin is on Github, your users will be able to use the shorthand of
`github_username/repository`.

### Conclusion

Hopefully, that was easy. As you can see, it's mostly shell scripting.

You can use other scripting languages (ruby, python etc) but plain old shell
is preferred because of portability.

+ 36
- 0
tmux/plugins/tpm/docs/managing_plugins_via_cmd_line.md Прегледај датотеку

@@ -0,0 +1,36 @@
# Managing plugins via the command line

Aside from tmux key bindings, TPM provides shell interface for managing plugins
via scripts located in [bin/](../bin/) directory.

Tmux does not need to be started in order to run scripts (but it's okay if it
is). If you [changed tpm install dir](../docs/changing_plugins_install_dir.md)
in `.tmux.conf` that should work fine too.

Prerequisites:

- tmux installed on the system (doh)
- `.tmux.conf` set up for TPM

### Installing plugins

As usual, plugins need to be specified in `.tmux.conf`. Run the following
command to install plugins:

~/.tmux/plugins/tpm/bin/install_plugins

### Updating plugins

To update all installed plugins:

~/.tmux/plugins/tpm/bin/update_plugins all

or update a single plugin:

~/.tmux/plugins/tpm/bin/update_plugins tmux-sensible

### Removing plugins

To remove plugins not on the plugin list:

~/.tmux/plugins/tpm/bin/clean_plugins

+ 96
- 0
tmux/plugins/tpm/docs/tpm_not_working.md Прегледај датотеку

@@ -0,0 +1,96 @@
# Help, tpm not working!

Here's the list of issues users had with `tpm`:

<hr />

> Nothing works. `tpm` key bindings `prefix + I`, `prefix + U` not even
defined.

Related [issue #22](https://github.com/tmux-plugins/tpm/issues/22)

- Do you have required `tmux` version to run `tpm`?<br/>
Check `tmux` version with `$ tmux -V` command and make sure it's higher or
equal to the required version for `tpm` as stated in the readme.

- ZSH tmux plugin might be causing issues.<br/>
If you have it installed, try disabling it and see if `tpm` works then.

<hr />

> Help, I'm using custom config file with `tmux -f /path/to/my_tmux.conf`
to start Tmux and for some reason plugins aren't loaded!?

Related [issue #57](https://github.com/tmux-plugins/tpm/issues/57)

`tpm` has a known issue when using custom config file with `-f` option.
The solution is to use alternative plugin definition syntax. Here are the steps
to make it work:

1. remove all `set -g @plugin` lines from tmux config file
2. in the config file define the plugins in the following way:

# List of plugins
set -g @tpm_plugins ' \
tmux-plugins/tpm \
tmux-plugins/tmux-sensible \
tmux-plugins/tmux-resurrect \
'

# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'

3. Reload TMUX environment so TPM is sourced: `$ tmux source /path/to/my_tmux.conf`

The plugins should now be working.

<hr />

> Weird sequence of characters show up when installing or updating plugins

Related: [issue #25](https://github.com/tmux-plugins/tpm/issues/25)

- This could be caused by [tmuxline.vim](https://github.com/edkolev/tmuxline.vim)
plugin. Uninstall it and see if things work.

<hr />

> "failed to connect to server" error when sourcing .tmux.conf

Related: [issue #48](https://github.com/tmux-plugins/tpm/issues/48)

- Make sure `tmux source ~/.tmux.conf` command is ran from inside `tmux`.

<hr />

> tpm not working: '~/.tmux/plugins/tpm/tpm' returned 2 (Windows / Cygwin)

Related: [issue #81](https://github.com/tmux-plugins/tpm/issues/81)

This issue is most likely caused by Windows line endings. For example, if you
have git's `core.autocrlf` option set to `true`, git will automatically convert
all the files to Windows line endings which might cause a problem.

The solution is to convert all line ending to Unix newline characters. This
command handles that for all files under `.tmux/` dir (skips `.git`
subdirectories):

```bash
find ~/.tmux -type d -name '.git*' -prune -o -type f -print0 | xargs -0 dos2unix
```

<hr />

> '~/.tmux/plugins/tpm/tpm' returned 127 (on macOS, w/ tmux installed using brew)

Related: [issue #67](https://github.com/tmux-plugins/tpm/issues/67)

This problem is because tmux's `run-shell` command runs a shell which doesn't read from user configs, thus tmux installed in `/usr/local/bin` will not be found.

The solution is to insert the following line:

```
set-environment -g PATH "/usr/local/bin:/bin:/usr/bin"
```

before any `run-shell`/`run` commands in `~/.tmux.conf`.

+ 78
- 0
tmux/plugins/tpm/scripts/check_tmux_version.sh Прегледај датотеку

@@ -0,0 +1,78 @@
#!/usr/bin/env bash

VERSION="$1"
UNSUPPORTED_MSG="$2"

get_tmux_option() {
local option=$1
local default_value=$2
local option_value=$(tmux show-option -gqv "$option")
if [ -z "$option_value" ]; then
echo "$default_value"
else
echo "$option_value"
fi
}

# Ensures a message is displayed for 5 seconds in tmux prompt.
# Does not override the 'display-time' tmux option.
display_message() {
local message="$1"

# display_duration defaults to 5 seconds, if not passed as an argument
if [ "$#" -eq 2 ]; then
local display_duration="$2"
else
local display_duration="5000"
fi

# saves user-set 'display-time' option
local saved_display_time=$(get_tmux_option "display-time" "750")

# sets message display time to 5 seconds
tmux set-option -gq display-time "$display_duration"

# displays message
tmux display-message "$message"

# restores original 'display-time' value
tmux set-option -gq display-time "$saved_display_time"
}

# this is used to get "clean" integer version number. Examples:
# `tmux 1.9` => `19`
# `1.9a` => `19`
get_digits_from_string() {
local string="$1"
local only_digits="$(echo "$string" | tr -dC '[:digit:]')"
echo "$only_digits"
}

tmux_version_int() {
local tmux_version_string=$(tmux -V)
echo "$(get_digits_from_string "$tmux_version_string")"
}

unsupported_version_message() {
if [ -n "$UNSUPPORTED_MSG" ]; then
echo "$UNSUPPORTED_MSG"
else
echo "Error, Tmux version unsupported! Please install Tmux version $VERSION or greater!"
fi
}

exit_if_unsupported_version() {
local current_version="$1"
local supported_version="$2"
if [ "$current_version" -lt "$supported_version" ]; then
display_message "$(unsupported_version_message)"
exit 1
fi
}

main() {
local supported_version_int="$(get_digits_from_string "$VERSION")"
local current_version_int="$(tmux_version_int)"
exit_if_unsupported_version "$current_version_int" "$supported_version_int"
}
main

+ 41
- 0
tmux/plugins/tpm/scripts/clean_plugins.sh Прегледај датотеку

@@ -0,0 +1,41 @@
#!/usr/bin/env bash

CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
HELPERS_DIR="$CURRENT_DIR/helpers"

source "$HELPERS_DIR/plugin_functions.sh"
source "$HELPERS_DIR/utility.sh"

if [ "$1" == "--tmux-echo" ]; then # tmux-specific echo functions
source "$HELPERS_DIR/tmux_echo_functions.sh"
else # shell output functions
source "$HELPERS_DIR/shell_echo_functions.sh"
fi

clean_plugins() {
local plugins plugin plugin_directory
plugins="$(tpm_plugins_list_helper)"

for plugin_directory in "$(tpm_path)"/*; do
[ -d "${plugin_directory}" ] || continue
plugin="$(plugin_name_helper "${plugin_directory}")"
case "${plugins}" in
*"${plugin}"*) : ;;
*)
[ "${plugin}" = "tpm" ] && continue
echo_ok "Removing \"$plugin\""
rm -rf "${plugin_directory}" >/dev/null 2>&1
[ -d "${plugin_directory}" ] &&
echo_err " \"$plugin\" clean fail" ||
echo_ok " \"$plugin\" clean success"
;;
esac
done
}

main() {
ensure_tpm_path_exists
clean_plugins
exit_value_helper
}
main

+ 104
- 0
tmux/plugins/tpm/scripts/helpers/plugin_functions.sh Прегледај датотеку

@@ -0,0 +1,104 @@
# using @tpm_plugins is now deprecated in favor of using @plugin syntax
tpm_plugins_variable_name="@tpm_plugins"

# manually expanding tilde char or `$HOME` variable.
_manual_expansion() {
local path="$1"
local expanded_tilde="${path/#\~/$HOME}"
echo "${expanded_tilde/#\$HOME/$HOME}"
}

_tpm_path() {
local string_path="$(tmux start-server\; show-environment -g TMUX_PLUGIN_MANAGER_PATH | cut -f2 -d=)/"
_manual_expansion "$string_path"
}

_CACHED_TPM_PATH="$(_tpm_path)"

# Get the absolute path to the users configuration file of TMux.
# This includes a prioritized search on different locations.
#
_get_user_tmux_conf() {
# Define the different possible locations.
xdg_location="${XDG_CONFIG_HOME:-$HOME/.config}/tmux/tmux.conf"
default_location="$HOME/.tmux.conf"

# Search for the correct configuration file by priority.
if [ -f "$xdg_location" ]; then
echo "$xdg_location"

else
echo "$default_location"
fi
}

_tmux_conf_contents() {
user_config=$(_get_user_tmux_conf)
cat /etc/tmux.conf "$user_config" 2>/dev/null
if [ "$1" == "full" ]; then # also output content from sourced files
local file
for file in $(_sourced_files); do
cat $(_manual_expansion "$file") 2>/dev/null
done
fi
}

# return files sourced from tmux config files
_sourced_files() {
_tmux_conf_contents |
awk '/^[ \t]*source(-file)? +/ { gsub(/'\''/,""); gsub(/'\"'/,""); print $2 }'
}

# Want to be able to abort in certain cases
trap "exit 1" TERM
export TOP_PID=$$

_fatal_error_abort() {
echo >&2 "Aborting."
kill -s TERM $TOP_PID
}

# PUBLIC FUNCTIONS BELOW

tpm_path() {
if [ "$_CACHED_TPM_PATH" == "/" ]; then
echo >&2 "FATAL: Tmux Plugin Manager not configured in tmux.conf"
_fatal_error_abort
fi
echo "$_CACHED_TPM_PATH"
}

tpm_plugins_list_helper() {
# lists plugins from @tpm_plugins option
echo "$(tmux start-server\; show-option -gqv "$tpm_plugins_variable_name")"

# read set -g @plugin "tmux-plugins/tmux-example-plugin" entries
_tmux_conf_contents "full" |
awk '/^[ \t]*set(-option)? +-g +@plugin/ { gsub(/'\''/,""); gsub(/'\"'/,""); print $4 }'
}

# Allowed plugin name formats:
# 1. "git://github.com/user/plugin_name.git"
# 2. "user/plugin_name"
plugin_name_helper() {
local plugin="$1"
# get only the part after the last slash, e.g. "plugin_name.git"
local plugin_basename="$(basename "$plugin")"
# remove ".git" extension (if it exists) to get only "plugin_name"
local plugin_name="${plugin_basename%.git}"
echo "$plugin_name"
}

plugin_path_helper() {
local plugin="$1"
local plugin_name="$(plugin_name_helper "$plugin")"
echo "$(tpm_path)${plugin_name}/"
}

plugin_already_installed() {
local plugin="$1"
local plugin_path="$(plugin_path_helper "$plugin")"
[ -d "$plugin_path" ] &&
cd "$plugin_path" &&
git remote >/dev/null 2>&1
}

+ 7
- 0
tmux/plugins/tpm/scripts/helpers/shell_echo_functions.sh Прегледај датотеку

@@ -0,0 +1,7 @@
echo_ok() {
echo "$*"
}

echo_err() {
fail_helper "$*"
}

+ 28
- 0
tmux/plugins/tpm/scripts/helpers/tmux_echo_functions.sh Прегледај датотеку

@@ -0,0 +1,28 @@
_has_emacs_mode_keys() {
$(tmux show -gw mode-keys | grep -q emacs)
}

tmux_echo() {
local message="$1"
tmux run-shell "echo '$message'"
}

echo_ok() {
tmux_echo "$*"
}

echo_err() {
tmux_echo "$*"
}

end_message() {
if _has_emacs_mode_keys; then
local continue_key="ESCAPE"
else
local continue_key="ENTER"
fi
tmux_echo ""
tmux_echo "TMUX environment reloaded."
tmux_echo ""
tmux_echo "Done, press $continue_key to continue."
}

+ 3
- 0
tmux/plugins/tpm/scripts/helpers/tmux_utils.sh Прегледај датотеку

@@ -0,0 +1,3 @@
reload_tmux_environment() {
tmux source-file ~/.tmux.conf >/dev/null 2>&1
}

+ 17
- 0
tmux/plugins/tpm/scripts/helpers/utility.sh Прегледај датотеку

@@ -0,0 +1,17 @@
ensure_tpm_path_exists() {
mkdir -p "$(tpm_path)"
}

fail_helper() {
local message="$1"
echo "$message" >&2
FAIL="true"
}

exit_value_helper() {
if [ "$FAIL" == "true" ]; then
exit 1
else
exit 0
fi
}

+ 66
- 0
tmux/plugins/tpm/scripts/install_plugins.sh Прегледај датотеку

@@ -0,0 +1,66 @@
#!/usr/bin/env bash

CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
HELPERS_DIR="$CURRENT_DIR/helpers"

source "$HELPERS_DIR/plugin_functions.sh"
source "$HELPERS_DIR/utility.sh"

if [ "$1" == "--tmux-echo" ]; then # tmux-specific echo functions
source "$HELPERS_DIR/tmux_echo_functions.sh"
else # shell output functions
source "$HELPERS_DIR/shell_echo_functions.sh"
fi

clone() {
local plugin="$1"
cd "$(tpm_path)" &&
GIT_TERMINAL_PROMPT=0 git clone --recursive "$plugin" >/dev/null 2>&1
}

# tries cloning:
# 1. plugin name directly - works if it's a valid git url
# 2. expands the plugin name to point to a github repo and tries cloning again
clone_plugin() {
local plugin="$1"
clone "$plugin" ||
clone "https://git::@github.com/$plugin"
}

# clone plugin and produce output
install_plugin() {
local plugin="$1"
local plugin_name="$(plugin_name_helper "$plugin")"

if plugin_already_installed "$plugin"; then
echo_ok "Already installed \"$plugin_name\""
else
echo_ok "Installing \"$plugin_name\""
clone_plugin "$plugin" &&
echo_ok " \"$plugin_name\" download success" ||
echo_err " \"$plugin_name\" download fail"
fi
}

install_plugins() {
local plugins="$(tpm_plugins_list_helper)"
for plugin in $plugins; do
install_plugin "$plugin"
done
}

verify_tpm_path_permissions() {
local path="$(tpm_path)"
# check the write permission flag for all users to ensure
# that we have proper access
[ -w "$path" ] ||
echo_err "$path is not writable!"
}

main() {
ensure_tpm_path_exists
verify_tpm_path_permissions
install_plugins
exit_value_helper
}
main

+ 41
- 0
tmux/plugins/tpm/scripts/source_plugins.sh Прегледај датотеку

@@ -0,0 +1,41 @@
#!/usr/bin/env bash

CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
HELPERS_DIR="$CURRENT_DIR/helpers"

source "$HELPERS_DIR/plugin_functions.sh"

plugin_dir_exists() {
[ -d "$1" ]
}

# Runs all *.tmux files from the plugin directory.
# Files are ran as executables.
# No errors if the plugin dir does not exist.
silently_source_all_tmux_files() {
local plugin_path="$1"
local plugin_tmux_files="$plugin_path*.tmux"
if plugin_dir_exists "$plugin_path"; then
for tmux_file in $plugin_tmux_files; do
# if the glob didn't find any files this will be the
# unexpanded glob which obviously doesn't exist
[ -f "$tmux_file" ] || continue
# runs *.tmux file as an executable
$tmux_file >/dev/null 2>&1
done
fi
}

source_plugins() {
local plugin plugin_path
local plugins="$(tpm_plugins_list_helper)"
for plugin in $plugins; do
plugin_path="$(plugin_path_helper "$plugin")"
silently_source_all_tmux_files "$plugin_path"
done
}

main() {
source_plugins
}
main

+ 71
- 0
tmux/plugins/tpm/scripts/update_plugin.sh Прегледај датотеку

@@ -0,0 +1,71 @@
#!/usr/bin/env bash

# this script handles core logic of updating plugins

CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
HELPERS_DIR="$CURRENT_DIR/helpers"

source "$HELPERS_DIR/plugin_functions.sh"
source "$HELPERS_DIR/utility.sh"

if [ "$1" == "--tmux-echo" ]; then # tmux-specific echo functions
source "$HELPERS_DIR/tmux_echo_functions.sh"
else # shell output functions
source "$HELPERS_DIR/shell_echo_functions.sh"
fi

# from now on ignore first script argument
shift

pull_changes() {
local plugin="$1"
local plugin_path="$(plugin_path_helper "$plugin")"
cd "$plugin_path" &&
GIT_TERMINAL_PROMPT=0 git pull &&
GIT_TERMINAL_PROMPT=0 git submodule update --init --recursive
}

update() {
local plugin="$1"
$(pull_changes "$plugin" > /dev/null 2>&1) &&
echo_ok " \"$plugin\" update success" ||
echo_err " \"$plugin\" update fail"
}

update_all() {
echo_ok "Updating all plugins!"
echo_ok ""
local plugins="$(tpm_plugins_list_helper)"
for plugin in $plugins; do
local plugin_name="$(plugin_name_helper "$plugin")"
# updating only installed plugins
if plugin_already_installed "$plugin_name"; then
update "$plugin_name" &
fi
done
wait
}

update_plugins() {
local plugins="$*"
for plugin in $plugins; do
local plugin_name="$(plugin_name_helper "$plugin")"
if plugin_already_installed "$plugin_name"; then
update "$plugin_name" &
else
echo_err "$plugin_name not installed!" &
fi
done
wait
}

main() {
ensure_tpm_path_exists
if [ "$1" == "all" ]; then
update_all
else
update_plugins "$*"
fi
exit_value_helper
}
main "$*"

+ 18
- 0
tmux/plugins/tpm/scripts/update_plugin_prompt_handler.sh Прегледај датотеку

@@ -0,0 +1,18 @@
#!/usr/bin/env bash

CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
HELPERS_DIR="$CURRENT_DIR/helpers"

if [ $# -eq 0 ]; then
exit 0
fi

source "$HELPERS_DIR/tmux_echo_functions.sh"
source "$HELPERS_DIR/tmux_utils.sh"

main() {
"$CURRENT_DIR/update_plugin.sh" --tmux-echo "$*"
reload_tmux_environment
end_message
}
main "$*"

+ 13
- 0
tmux/plugins/tpm/scripts/variables.sh Прегледај датотеку

@@ -0,0 +1,13 @@
install_key_option="@tpm-install"
default_install_key="I"

update_key_option="@tpm-update"
default_update_key="U"

clean_key_option="@tpm-clean"
default_clean_key="M-u"

SUPPORTED_TMUX_VERSION="1.9"

DEFAULT_TPM_ENV_VAR_NAME="TMUX_PLUGIN_MANAGER_PATH"
DEFAULT_TPM_PATH="$HOME/.tmux/plugins/"

+ 36
- 0
tmux/plugins/tpm/tests/expect_failed_plugin_download Прегледај датотеку

@@ -0,0 +1,36 @@
#!/usr/bin/env expect

# disables script output
log_user 0

spawn tmux

# Waiting for tmux to attach. If this is not done, next command, `send` will
# not work properly.
sleep 1

# this is tmux prefix + I
send "I"

# cloning might take a while
set timeout 20

expect_after {
timeout { exit 1 }
}

expect {
"Installing \"non-existing-plugin\""
}

expect {
"\"non-existing-plugin\" download fail"
}

expect {
"Done, press ENTER to continue" {
exit 0
}
}

exit 1

+ 35
- 0
tmux/plugins/tpm/tests/expect_successful_clean_plugins Прегледај датотеку

@@ -0,0 +1,35 @@
#!/usr/bin/env expect

# disables script output
log_user 0

spawn tmux

# Waiting for tmux to attach. If this is not done, next command, `send` will
# not work properly.
sleep 1

# this is tmux prefix + alt + u
send "u"

set timeout 5

expect_after {
timeout { exit 1 }
}

expect {
"Removing \"tmux-example-plugin\""
}

expect {
"\"tmux-example-plugin\" clean success"
}

expect {
"Done, press ENTER to continue." {
exit 0
}
}

exit 1

+ 44
- 0
tmux/plugins/tpm/tests/expect_successful_multiple_plugins_download Прегледај датотеку

@@ -0,0 +1,44 @@
#!/usr/bin/env expect

# disables script output
log_user 0

spawn tmux

# Waiting for tmux to attach. If this is not done, next command, `send` will
# not work properly.
sleep 1

# this is tmux prefix + I
send "I"

# cloning might take a while
set timeout 15

expect_after {
timeout { exit 1 }
}

expect {
"Installing \"tmux-example-plugin\""
}

expect {
"\"tmux-example-plugin\" download success"
}

expect {
"Installing \"tmux-copycat\""
}

expect {
"\"tmux-copycat\" download success"
}

expect {
"Done, press ENTER to continue." {
exit 0
}
}

exit 1

+ 50
- 0
tmux/plugins/tpm/tests/expect_successful_plugin_download Прегледај датотеку

@@ -0,0 +1,50 @@
#!/usr/bin/env expect

# disables script output
log_user 0

spawn tmux

# Waiting for tmux to attach. If this is not done, next command, `send` will
# not work properly.
sleep 1

# this is tmux prefix + I
send "I"

# cloning might take a while
set timeout 15

expect_after {
timeout { exit 1 }
}

expect {
"Installing \"tmux-example-plugin\""
}

expect {
"\"tmux-example-plugin\" download success"
}

expect {
"Done, press ENTER to continue" {
send " "
}
}

sleep 1
# this is tmux prefix + I
send "I"

expect {
"Already installed \"tmux-example-plugin\""
}

expect {
"Done, press ENTER to continue" {
exit 0
}
}

exit 1

+ 55
- 0
tmux/plugins/tpm/tests/expect_successful_update_of_a_single_plugin Прегледај датотеку

@@ -0,0 +1,55 @@
#!/usr/bin/env expect

# disables script output
log_user 0

spawn tmux

# Waiting for tmux to attach. If this is not done, next command, `send` will
# not work properly.
sleep 1

# this is tmux prefix + U
send "U"

set timeout 15

expect_after {
timeout { exit 1 }
}

expect {
"Installed plugins"
}

expect {
"tmux-example-plugin"
}

expect {
"\"all\" - updates all plugins"
}

expect {
"ENTER - cancels"
}

# wait for tmux to display prompt before sending characters
sleep 1
send "tmux-example-plugin\r"

expect {
"Updating \"tmux-example-plugin\""
}

expect {
"\"tmux-example-plugin\" update success"
}

expect {
"Done, press ENTER to continue." {
exit 0
}
}

exit 1

+ 59
- 0
tmux/plugins/tpm/tests/expect_successful_update_of_all_plugins Прегледај датотеку

@@ -0,0 +1,59 @@
#!/usr/bin/env expect

# disables script output
log_user 0

spawn tmux

# Waiting for tmux to attach. If this is not done, next command, `send` will
# not work properly.
sleep 1

# this is tmux prefix + U
send "U"

set timeout 5

expect_after {
timeout { exit 1 }
}

expect {
"Installed plugins"
}

expect {
"tmux-example-plugin"
}

expect {
"\"all\" - updates all plugins"
}

expect {
"ENTER - cancels"
}

# wait for tmux to display prompt before sending characters
sleep 1
send "all\r"

expect {
"Updating all plugins!"
}

expect {
"Updating \"tmux-example-plugin\""
}

expect {
"\"tmux-example-plugin\" update success"
}

expect {
"Done, press ENTER to continue." {
exit 0
}
}

exit 1

+ 13
- 0
tmux/plugins/tpm/tests/helpers/tpm.sh Прегледај датотеку

@@ -0,0 +1,13 @@
check_dir_exists_helper() {
[ -d "$1" ]
}

# runs the scripts and asserts it has the correct output and exit code
script_run_helper() {
local script="$1"
local expected_output="$2"
local expected_exit_code="${3:-0}"
$script 2>&1 |
grep "$expected_output" >/dev/null 2>&1 && # grep -q flag quits the script early
[ "${PIPESTATUS[0]}" -eq "$expected_exit_code" ]
}

+ 67
- 0
tmux/plugins/tpm/tests/test_plugin_clean.sh Прегледај датотеку

@@ -0,0 +1,67 @@
#!/usr/bin/env bash

CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
TPM_DIR="$PWD"
PLUGINS_DIR="$HOME/.tmux/plugins"

source "$CURRENT_DIR/helpers/helpers.sh"
source "$CURRENT_DIR/helpers/tpm.sh"

manually_install_the_plugin() {
rm -rf "$PLUGINS_DIR"
mkdir -p "$PLUGINS_DIR"
cd "$PLUGINS_DIR"
git clone --quiet https://github.com/tmux-plugins/tmux-example-plugin
}

# TMUX KEY-BINDING TESTS

test_plugin_uninstallation_via_tmux_key_binding() {
set_tmux_conf_helper <<- HERE
set -g mode-keys vi
run-shell "$TPM_DIR/tpm"
HERE

manually_install_the_plugin

"$CURRENT_DIR/expect_successful_clean_plugins" ||
fail_helper "[key-binding] clean fails"

teardown_helper
}

# SCRIPT TESTS

test_plugin_uninstallation_via_script() {
set_tmux_conf_helper <<- HERE
set -g mode-keys vi
run-shell "$TPM_DIR/tpm"
HERE

manually_install_the_plugin

script_run_helper "$TPM_DIR/bin/clean_plugins" '"tmux-example-plugin" clean success' ||
fail_helper "[script] plugin cleaning fails"

teardown_helper
}

test_unsuccessful_plugin_uninstallation_via_script() {
set_tmux_conf_helper <<- HERE
set -g mode-keys vi
run-shell "$TPM_DIR/tpm"
HERE

manually_install_the_plugin
chmod 000 "$PLUGINS_DIR/tmux-example-plugin" # disable directory deletion

local expected_exit_code=1
script_run_helper "$TPM_DIR/bin/clean_plugins" '"tmux-example-plugin" clean fail' "$expected_exit_code" ||
fail_helper "[script] unsuccessful plugin cleaning doesn't fail"

chmod 755 "$PLUGINS_DIR/tmux-example-plugin" # enable directory deletion

teardown_helper
}

run_tests

+ 284
- 0
tmux/plugins/tpm/tests/test_plugin_installation.sh Прегледај датотеку

@@ -0,0 +1,284 @@
#!/usr/bin/env bash

CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
PLUGINS_DIR="$HOME/.tmux/plugins"
TPM_DIR="$PWD"

CUSTOM_PLUGINS_DIR="$HOME/foo/plugins"
ADDITIONAL_CONFIG_FILE_1="$HOME/.tmux/additional_config_file_1"
ADDITIONAL_CONFIG_FILE_2="$HOME/.tmux/additional_config_file_2"

source "$CURRENT_DIR/helpers/helpers.sh"
source "$CURRENT_DIR/helpers/tpm.sh"

# TMUX KEY-BINDING TESTS

test_plugin_installation_via_tmux_key_binding() {
set_tmux_conf_helper <<- HERE
set -g mode-keys vi
set -g @plugin "tmux-plugins/tmux-example-plugin"
run-shell "$TPM_DIR/tpm"
HERE

"$CURRENT_DIR/expect_successful_plugin_download" ||
fail_helper "[key-binding] plugin installation fails"

check_dir_exists_helper "$PLUGINS_DIR/tmux-example-plugin/" ||
fail_helper "[key-binding] plugin download fails"

teardown_helper
}

test_plugin_installation_via_tmux_key_binding_set_option() {
set_tmux_conf_helper <<- HERE
set -g mode-keys vi
set-option -g @plugin "tmux-plugins/tmux-example-plugin"
run-shell "$TPM_DIR/tpm"
HERE

"$CURRENT_DIR/expect_successful_plugin_download" ||
fail_helper "[key-binding][set-option] plugin installation fails"

check_dir_exists_helper "$PLUGINS_DIR/tmux-example-plugin/" ||
fail_helper "[key-binding][set-option] plugin download fails"

teardown_helper
}

test_plugin_installation_custom_dir_via_tmux_key_binding() {
set_tmux_conf_helper <<- HERE
set -g mode-keys vi
set-environment -g TMUX_PLUGIN_MANAGER_PATH '$CUSTOM_PLUGINS_DIR'

set -g @plugin "tmux-plugins/tmux-example-plugin"
run-shell "$TPM_DIR/tpm"
HERE

"$CURRENT_DIR/expect_successful_plugin_download" ||
fail_helper "[key-binding][custom dir] plugin installation fails"

check_dir_exists_helper "$CUSTOM_PLUGINS_DIR/tmux-example-plugin/" ||
fail_helper "[key-binding][custom dir] plugin download fails"

teardown_helper
rm -rf "$CUSTOM_PLUGINS_DIR"
}

test_non_existing_plugin_installation_via_tmux_key_binding() {
set_tmux_conf_helper <<- HERE
set -g mode-keys vi
set -g @plugin "tmux-plugins/non-existing-plugin"
run-shell "$TPM_DIR/tpm"
HERE

"$CURRENT_DIR/expect_failed_plugin_download" ||
fail_helper "[key-binding] non existing plugin installation doesn't fail"

teardown_helper
}

test_multiple_plugins_installation_via_tmux_key_binding() {
set_tmux_conf_helper <<- HERE
set -g mode-keys vi
set -g @plugin "tmux-plugins/tmux-example-plugin"
\ \ set -g @plugin 'tmux-plugins/tmux-copycat'
run-shell "$TPM_DIR/tpm"
HERE

"$CURRENT_DIR/expect_successful_multiple_plugins_download" ||
fail_helper "[key-binding] multiple plugins installation fails"

check_dir_exists_helper "$PLUGINS_DIR/tmux-example-plugin/" ||
fail_helper "[key-binding] plugin download fails (tmux-example-plugin)"

check_dir_exists_helper "$PLUGINS_DIR/tmux-copycat/" ||
fail_helper "[key-binding] plugin download fails (tmux-copycat)"

teardown_helper
}

test_plugins_installation_from_sourced_file_via_tmux_key_binding() {
set_tmux_conf_helper <<- HERE
set -g mode-keys vi
source '$ADDITIONAL_CONFIG_FILE_1'
set -g @plugin 'tmux-plugins/tmux-example-plugin'
run-shell "$TPM_DIR/tpm"
HERE

mkdir ~/.tmux
echo "set -g @plugin 'tmux-plugins/tmux-copycat'" > "$ADDITIONAL_CONFIG_FILE_1"

"$CURRENT_DIR/expect_successful_multiple_plugins_download" ||
fail_helper "[key-binding][sourced file] plugins installation fails"

check_dir_exists_helper "$PLUGINS_DIR/tmux-example-plugin/" ||
fail_helper "[key-binding][sourced file] plugin download fails (tmux-example-plugin)"

check_dir_exists_helper "$PLUGINS_DIR/tmux-copycat/" ||
fail_helper "[key-binding][sourced file] plugin download fails (tmux-copycat)"

teardown_helper
}

test_plugins_installation_from_multiple_sourced_files_via_tmux_key_binding() {
set_tmux_conf_helper <<- HERE
set -g mode-keys vi
\ \ source '$ADDITIONAL_CONFIG_FILE_1'
source-file '$ADDITIONAL_CONFIG_FILE_2'
run-shell "$TPM_DIR/tpm"
HERE

mkdir ~/.tmux
echo "set -g @plugin 'tmux-plugins/tmux-example-plugin'" > "$ADDITIONAL_CONFIG_FILE_1"
echo " set -g @plugin 'tmux-plugins/tmux-copycat'" > "$ADDITIONAL_CONFIG_FILE_2"

"$CURRENT_DIR/expect_successful_multiple_plugins_download" ||
fail_helper "[key-binding][multiple sourced files] plugins installation fails"

check_dir_exists_helper "$PLUGINS_DIR/tmux-example-plugin/" ||
fail_helper "[key-binding][multiple sourced files] plugin download fails (tmux-example-plugin)"

check_dir_exists_helper "$PLUGINS_DIR/tmux-copycat/" ||
fail_helper "[key-binding][multiple sourced files] plugin download fails (tmux-copycat)"

teardown_helper
}

# SCRIPT TESTS

test_plugin_installation_via_script() {
set_tmux_conf_helper <<- HERE
set -g mode-keys vi
set -g @plugin "tmux-plugins/tmux-example-plugin"
run-shell "$TPM_DIR/tpm"
HERE

script_run_helper "$TPM_DIR/bin/install_plugins" '"tmux-example-plugin" download success' ||
fail_helper "[script] plugin installation fails"

check_dir_exists_helper "$PLUGINS_DIR/tmux-example-plugin/" ||
fail_helper "[script] plugin download fails"

script_run_helper "$TPM_DIR/bin/install_plugins" 'Already installed "tmux-example-plugin"' ||
fail_helper "[script] plugin already installed message fail"

teardown_helper
}

test_plugin_installation_custom_dir_via_script() {
set_tmux_conf_helper <<- HERE
set -g mode-keys vi
set-environment -g TMUX_PLUGIN_MANAGER_PATH '$CUSTOM_PLUGINS_DIR'

set -g @plugin "tmux-plugins/tmux-example-plugin"
run-shell "$TPM_DIR/tpm"
HERE

script_run_helper "$TPM_DIR/bin/install_plugins" '"tmux-example-plugin" download success' ||
fail_helper "[script][custom dir] plugin installation fails"

check_dir_exists_helper "$CUSTOM_PLUGINS_DIR/tmux-example-plugin/" ||
fail_helper "[script][custom dir] plugin download fails"

script_run_helper "$TPM_DIR/bin/install_plugins" 'Already installed "tmux-example-plugin"' ||
fail_helper "[script][custom dir] plugin already installed message fail"

teardown_helper
rm -rf "$CUSTOM_PLUGINS_DIR"
}

test_non_existing_plugin_installation_via_script() {
set_tmux_conf_helper <<- HERE
set -g mode-keys vi
set -g @plugin "tmux-plugins/non-existing-plugin"
run-shell "$TPM_DIR/tpm"
HERE

local expected_exit_code=1
script_run_helper "$TPM_DIR/bin/install_plugins" '"non-existing-plugin" download fail' "$expected_exit_code" ||
fail_helper "[script] non existing plugin installation doesn't fail"

teardown_helper
}

test_multiple_plugins_installation_via_script() {
set_tmux_conf_helper <<- HERE
set -g mode-keys vi
set -g @plugin "tmux-plugins/tmux-example-plugin"
\ \ set -g @plugin 'tmux-plugins/tmux-copycat'
run-shell "$TPM_DIR/tpm"
HERE

script_run_helper "$TPM_DIR/bin/install_plugins" '"tmux-example-plugin" download success' ||
fail_helper "[script] multiple plugins installation fails"

check_dir_exists_helper "$PLUGINS_DIR/tmux-example-plugin/" ||
fail_helper "[script] plugin download fails (tmux-example-plugin)"

check_dir_exists_helper "$PLUGINS_DIR/tmux-copycat/" ||
fail_helper "[script] plugin download fails (tmux-copycat)"

script_run_helper "$TPM_DIR/bin/install_plugins" 'Already installed "tmux-copycat"' ||
fail_helper "[script] multiple plugins already installed message fail"

teardown_helper
}

test_plugins_installation_from_sourced_file_via_script() {
set_tmux_conf_helper <<- HERE
set -g mode-keys vi
source '$ADDITIONAL_CONFIG_FILE_1'
set -g @plugin 'tmux-plugins/tmux-example-plugin'
run-shell "$TPM_DIR/tpm"
HERE

mkdir ~/.tmux
echo "set -g @plugin 'tmux-plugins/tmux-copycat'" > "$ADDITIONAL_CONFIG_FILE_1"

script_run_helper "$TPM_DIR/bin/install_plugins" '"tmux-copycat" download success' ||
fail_helper "[script][sourced file] plugins installation fails"

check_dir_exists_helper "$PLUGINS_DIR/tmux-example-plugin/" ||
fail_helper "[script][sourced file] plugin download fails (tmux-example-plugin)"

check_dir_exists_helper "$PLUGINS_DIR/tmux-copycat/" ||
fail_helper "[script][sourced file] plugin download fails (tmux-copycat)"

script_run_helper "$TPM_DIR/bin/install_plugins" 'Already installed "tmux-copycat"' ||
fail_helper "[script][sourced file] plugins already installed message fail"

teardown_helper
}

test_plugins_installation_from_multiple_sourced_files_via_script() {
set_tmux_conf_helper <<- HERE
set -g mode-keys vi
\ \ source '$ADDITIONAL_CONFIG_FILE_1'
source-file '$ADDITIONAL_CONFIG_FILE_2'
set -g @plugin 'tmux-plugins/tmux-example-plugin'
run-shell "$TPM_DIR/tpm"
HERE

mkdir ~/.tmux
echo " set -g @plugin 'tmux-plugins/tmux-copycat'" > "$ADDITIONAL_CONFIG_FILE_1"
echo "set -g @plugin 'tmux-plugins/tmux-sensible'" > "$ADDITIONAL_CONFIG_FILE_2"

script_run_helper "$TPM_DIR/bin/install_plugins" '"tmux-sensible" download success' ||
fail_helper "[script][multiple sourced files] plugins installation fails"

check_dir_exists_helper "$PLUGINS_DIR/tmux-example-plugin/" ||
fail_helper "[script][multiple sourced files] plugin download fails (tmux-example-plugin)"

check_dir_exists_helper "$PLUGINS_DIR/tmux-copycat/" ||
fail_helper "[script][multiple sourced files] plugin download fails (tmux-copycat)"

check_dir_exists_helper "$PLUGINS_DIR/tmux-sensible/" ||
fail_helper "[script][multiple sourced files] plugin download fails (tmux-sensible)"

script_run_helper "$TPM_DIR/bin/install_plugins" 'Already installed "tmux-sensible"' ||
fail_helper "[script][multiple sourced files] plugins already installed message fail"

teardown_helper
}

run_tests

+ 100
- 0
tmux/plugins/tpm/tests/test_plugin_installation_legacy.sh Прегледај датотеку

@@ -0,0 +1,100 @@
#!/usr/bin/env bash

CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
PLUGINS_DIR="$HOME/.tmux/plugins"
TPM_DIR="$PWD"

source "$CURRENT_DIR/helpers/helpers.sh"
source "$CURRENT_DIR/helpers/tpm.sh"

# TMUX KEY-BINDING TESTS

test_plugin_installation_via_tmux_key_binding() {
set_tmux_conf_helper <<- HERE
set -g mode-keys vi
set -g @tpm_plugins "tmux-plugins/tmux-example-plugin"
run-shell "$TPM_DIR/tpm"
HERE

# opens tmux and test it with `expect`
$CURRENT_DIR/expect_successful_plugin_download ||
fail_helper "[key-binding] plugin installation fails"

# check plugin dir exists after download
check_dir_exists_helper "$PLUGINS_DIR/tmux-example-plugin/" ||
fail_helper "[key-binding] plugin download fails"

teardown_helper
}

test_legacy_and_new_syntax_for_plugin_installation_work_via_tmux_key_binding() {
set_tmux_conf_helper <<- HERE
set -g mode-keys vi
set -g @tpm_plugins " \
tmux-plugins/tmux-example-plugin \
"
set -g @plugin 'tmux-plugins/tmux-copycat'
run-shell "$TPM_DIR/tpm"
HERE

# opens tmux and test it with `expect`
"$CURRENT_DIR"/expect_successful_multiple_plugins_download ||
fail_helper "[key-binding] multiple plugins installation fails"

# check plugin dir exists after download
check_dir_exists_helper "$PLUGINS_DIR/tmux-example-plugin/" ||
fail_helper "[key-binding] plugin download fails (tmux-example-plugin)"

check_dir_exists_helper "$PLUGINS_DIR/tmux-copycat/" ||
fail_helper "[key-binding] plugin download fails (tmux-copycat)"

teardown_helper
}

# SCRIPT TESTS

test_plugin_installation_via_script() {
set_tmux_conf_helper <<- HERE
set -g mode-keys vi
set -g @tpm_plugins "tmux-plugins/tmux-example-plugin"
run-shell "$TPM_DIR/tpm"
HERE

script_run_helper "$TPM_DIR/bin/install_plugins" '"tmux-example-plugin" download success' ||
fail_helper "[script] plugin installation fails"

check_dir_exists_helper "$PLUGINS_DIR/tmux-example-plugin/" ||
fail_helper "[script] plugin download fails"

script_run_helper "$TPM_DIR/bin/install_plugins" 'Already installed "tmux-example-plugin"' ||
fail_helper "[script] plugin already installed message fail"

teardown_helper
}

test_legacy_and_new_syntax_for_plugin_installation_work_via_script() {
set_tmux_conf_helper <<- HERE
set -g mode-keys vi
set -g @tpm_plugins " \
tmux-plugins/tmux-example-plugin \
"
set -g @plugin 'tmux-plugins/tmux-copycat'
run-shell "$TPM_DIR/tpm"
HERE

script_run_helper "$TPM_DIR/bin/install_plugins" '"tmux-example-plugin" download success' ||
fail_helper "[script] multiple plugin installation fails"

check_dir_exists_helper "$PLUGINS_DIR/tmux-example-plugin/" ||
fail_helper "[script] plugin download fails (tmux-example-plugin)"

check_dir_exists_helper "$PLUGINS_DIR/tmux-copycat/" ||
fail_helper "[script] plugin download fails (tmux-copycat)"

script_run_helper "$TPM_DIR/bin/install_plugins" 'Already installed "tmux-copycat"' ||
fail_helper "[script] multiple plugins already installed message fail"

teardown_helper
}

run_tests

+ 78
- 0
tmux/plugins/tpm/tests/test_plugin_sourcing.sh Прегледај датотеку

@@ -0,0 +1,78 @@
#!/usr/bin/env bash

CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
TPM_DIR="$PWD"
PLUGINS_DIR="$HOME/.tmux/plugins"

CUSTOM_PLUGINS_DIR="$HOME/foo/plugins"

source "$CURRENT_DIR/helpers/helpers.sh"
source "$CURRENT_DIR/helpers/tpm.sh"

check_binding_defined() {
local binding="$1"
tmux list-keys | grep -q "$binding"
}

create_test_plugin_helper() {
local plugin_path="$PLUGINS_DIR/tmux_test_plugin/"
rm -rf "$plugin_path"
mkdir -p "$plugin_path"

while read line; do
echo "$line" >> "$plugin_path/test_plugin.tmux"
done
chmod +x "$plugin_path/test_plugin.tmux"
}

check_tpm_path() {
local correct_tpm_path="$1"
local tpm_path="$(tmux start-server\; show-environment -g TMUX_PLUGIN_MANAGER_PATH | cut -f2 -d=)"
[ "$correct_tpm_path" == "$tpm_path" ]
}

test_plugin_sourcing() {
set_tmux_conf_helper <<- HERE
set -g mode-keys vi
set -g @plugin "doesnt_matter/tmux_test_plugin"
run-shell "$TPM_DIR/tpm"
HERE

# manually creates a local tmux plugin
create_test_plugin_helper <<- HERE
tmux bind-key R run-shell foo_command
HERE

tmux new-session -d # tmux starts detached
check_binding_defined "R run-shell foo_command" ||
fail_helper "Plugin sourcing fails"

teardown_helper
}

test_default_tpm_path() {
set_tmux_conf_helper <<- HERE
set -g mode-keys vi
run-shell "$TPM_DIR/tpm"
HERE

check_tpm_path "${PLUGINS_DIR}/" ||
fail_helper "Default TPM path not correct"

teardown_helper
}

test_custom_tpm_path() {
set_tmux_conf_helper <<- HERE
set -g mode-keys vi
set-environment -g TMUX_PLUGIN_MANAGER_PATH '$CUSTOM_PLUGINS_DIR'
run-shell "$TPM_DIR/tpm"
HERE

check_tpm_path "$CUSTOM_PLUGINS_DIR" ||
fail_helper "Custom TPM path not correct"

teardown_helper
}

run_tests

+ 60
- 0
tmux/plugins/tpm/tests/test_plugin_update.sh Прегледај датотеку

@@ -0,0 +1,60 @@
#!/usr/bin/env bash

CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
TPM_DIR="$PWD"
PLUGINS_DIR="$HOME/.tmux/plugins"

source "$CURRENT_DIR/helpers/helpers.sh"
source "$CURRENT_DIR/helpers/tpm.sh"

manually_install_the_plugin() {
mkdir -p "$PLUGINS_DIR"
cd "$PLUGINS_DIR"
git clone --quiet https://github.com/tmux-plugins/tmux-example-plugin
}

# TMUX KEY-BINDING TESTS

test_plugin_update_via_tmux_key_binding() {
set_tmux_conf_helper <<- HERE
set -g mode-keys vi
set -g @plugin "tmux-plugins/tmux-example-plugin"
run-shell "$TPM_DIR/tpm"
HERE

manually_install_the_plugin

"$CURRENT_DIR/expect_successful_update_of_all_plugins" ||
fail_helper "[key-binding] 'update all plugins' fails"

"$CURRENT_DIR/expect_successful_update_of_a_single_plugin" ||
fail_helper "[key-binding] 'update single plugin' fails"

teardown_helper
}

# SCRIPT TESTS

test_plugin_update_via_script() {
set_tmux_conf_helper <<- HERE
set -g mode-keys vi
set -g @plugin "tmux-plugins/tmux-example-plugin"
run-shell "$TPM_DIR/tpm"
HERE

manually_install_the_plugin

local expected_exit_code=1
script_run_helper "$TPM_DIR/bin/update_plugins" 'usage' "$expected_exit_code" ||
fail_helper "[script] running update plugins without args should fail"

script_run_helper "$TPM_DIR/bin/update_plugins tmux-example-plugin" '"tmux-example-plugin" update success' ||
fail_helper "[script] plugin update fails"

script_run_helper "$TPM_DIR/bin/update_plugins all" '"tmux-example-plugin" update success' ||
fail_helper "[script] update all plugins fails"

teardown_helper
}

run_tests

+ 72
- 0
tmux/plugins/tpm/tpm Прегледај датотеку

@@ -0,0 +1,72 @@
#!/usr/bin/env bash

CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
BINDINGS_DIR="$CURRENT_DIR/bindings"
SCRIPTS_DIR="$CURRENT_DIR/scripts"

source "$SCRIPTS_DIR/variables.sh"

get_tmux_option() {
local option="$1"
local default_value="$2"
local option_value="$(tmux show-option -gqv "$option")"
if [ -z "$option_value" ]; then
echo "$default_value"
else
echo "$option_value"
fi
}

tpm_path_set() {
tmux show-environment -g "$DEFAULT_TPM_ENV_VAR_NAME" >/dev/null 2>&1
}

set_default_tpm_path() {
tmux set-environment -g "$DEFAULT_TPM_ENV_VAR_NAME" "$DEFAULT_TPM_PATH"
}

# Ensures TMUX_PLUGIN_MANAGER_PATH global env variable is set.
#
# Put this in `.tmux.conf` to override the default:
# `set-environment -g TMUX_PLUGIN_MANAGER_PATH "/some/other/path/"`
set_tpm_path() {
if ! tpm_path_set; then
set_default_tpm_path
fi
}

# 1. Fetches plugin names from `@plugin` variables
# 2. Creates full plugin path
# 3. Sources all *.tmux files from each of the plugin directories
# - no errors raised if directory does not exist
# Files are sourced as tmux config files, not as shell scripts!
source_plugins() {
"$SCRIPTS_DIR/source_plugins.sh" >/dev/null 2>&1
}

# prefix + I - downloads TPM plugins and reloads TMUX environment
# prefix + U - updates a plugin (or all of them) and reloads TMUX environment
# prefix + alt + u - remove unused TPM plugins and reloads TMUX environment
set_tpm_key_bindings() {
local install_key="$(get_tmux_option "$install_key_option" "$default_install_key")"
tmux bind-key "$install_key" run-shell "$BINDINGS_DIR/install_plugins"

local update_key="$(get_tmux_option "$update_key_option" "$default_update_key")"
tmux bind-key "$update_key" run-shell "$BINDINGS_DIR/update_plugins"

local clean_key="$(get_tmux_option "$clean_key_option" "$default_clean_key")"
tmux bind-key "$clean_key" run-shell "$BINDINGS_DIR/clean_plugins"
}

supported_tmux_version_ok() {
"$SCRIPTS_DIR/check_tmux_version.sh" "$SUPPORTED_TMUX_VERSION"
}

main() {
if supported_tmux_version_ok; then
set_tpm_path
set_tpm_key_bindings
source_plugins
fi
}
main

+ 76
- 0
tmux/tmux.conf Прегледај датотеку

@@ -0,0 +1,76 @@
bind r source-file ~/.config/tmux/tmux.conf
set-option -g prefix `
set-option -g mode-keys vi
bind-key ` send-prefix
bind v split-window -h
bind h split-window -v
bind -n M-h select-pane -L
bind -n M-l select-pane -R
bind -n M-k select-pane -U
bind -n M-j select-pane -D
bind -n M-o next-window
bind -n M-i previous-window
bind -n M-] swap-window -t +1
bind -n M-[ swap-window -t -1
set -g mouse on
set -g mouse on
set -g mouse on
set -g default-terminal "tmux-256color"
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi y send-keys -X copy-selection
bind-key -T copy-mode-vi r send-keys -X rectangle-toggle
bind-key -T copy-mode-vi r send-keys -X rectangle-toggle

unbind '"'
unbind %
unbind C-b
unbind p
unbind n

######################
### DESIGN CHANGES ###
######################
# {{{
# loud or quiet?
set -g visual-activity off
set -g visual-bell off
set -g visual-silence off
setw -g monitor-activity off
set -g bell-action none

# modes
setw -g clock-mode-colour colour5
setw -g mode-style 'fg=colour1 bg=colour18 bold'

# panes
set -g pane-border-style 'fg=colour19 bg=colour0'
set -g pane-active-border-style 'bg=colour0 fg=colour9'

# statusbar
set -g status-position bottom
set -g status-justify left
set -g status-style 'bg=colour18 fg=colour137 dim'
set -g status-left ''
set -g status-right '#[fg=colour233,bg=colour19] %d/%m #[fg=colour233,bg=colour8] %H:%M:%S '
set -g status-right-length 50
set -g status-left-length 20

setw -g window-status-current-style 'fg=colour1 bg=colour19 bold'
setw -g window-status-current-format ' #I#[fg=colour249]:#[fg=colour255]#W#[fg=colour249]#F '

setw -g window-status-style 'fg=colour9 bg=colour18'
setw -g window-status-format ' #I#[fg=colour237]:#[fg=colour250]#W#[fg=colour244]#F '

setw -g window-status-bell-style 'fg=colour255 bg=colour1 bold'

# messages
set -g message-style 'fg=colour232 bg=colour16 bold'
# }}}

#Plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'mattdavis90/base16-tmux'
set -g @colors-base16 'ocean'

#Final
run -b '~/.config/tmux/plugins/tpm/tpm'

+ 892
- 0
xfiles/Xresources Прегледај датотеку

@@ -0,0 +1,892 @@
!-------- Xterm Terminal Settings {{{
!------------------------------------------------------
! https://wiki.archlinux.org/index.php/Xterm
! https://lukas.zapletalovi.com/2013/07/hidden-gems-of-xterm.html
! http://www.futurile.net/2016/06/14/xterm-setup-and-truetype-font-configuration/
! http://www.futurile.net/2016/06/15/xterm-256color-themes-molokai-terminal-theme/

! Allow xterm to report the TERM variable correctly.
! Do not set the TERM variable from your ~/.bashrc or ~/.bash_profile or similar file.
! The terminal itself should report the correct TERM to the system so that the proper terminfo file will be used.
! Two usable terminfo names are xterm and xterm-256color
XTerm.termName: xterm-256color

! Fonts ====================================================
! set font and fontsize
XTerm*faceName: Cousine NF
XTerm*faceSize: 10

! VT Font Menu: Unreadable
xterm*faceSize1: 6
! VT font menu: Tiny
xterm*faceSize2: 8
! VT font menu: Medium
xterm*faceSize3: 10
! VT font menu: Large
xterm*faceSize4: 15
! VT font menu: Huge
xterm*faceSize5: 25


! Ensure that your locale is set up for UTF-8. If you do not use UTF-8, you may need to force xterm to more strictly follow your locale by setting
XTerm.vt100.locale: true

! Cursor ====================================================
! pointer and cursor (blinking and color)
XTerm*pointerColor: white
XTerm*pointerColorBackground: black
XTerm*cursorColor: white
XTerm*cursorBlink: true


!! Selecting Text ========================================================
! Only select text
XTerm*highlightSelection: true
! Remove trailing spaces
XTerm*trimSelection: true

!! Scrolling ========================================================
! Use: Shift-Pageup / Shift-Pagedown to scroll or mousewheel
! Lines of output that you can scroll back over
XTerm*saveLines: 16384

! Turn the scrollbar on, and put it on the right
! XTerm.vt100.scrollBar: true
! XTerm.vt100.scrollbar.width: 8
! xterm*scrollBar: true
! xterm*rightScrollBar: true

! Do not scroll when there is new input e.g. tail -f /var/syslog
XTerm*scrollTtyOutput: false


!! Keybinding ========================================================
! http://blog.rot13.org/2010/03/change-font-size-in-xterm-using-keyboard.html
! - change fontsize on the fly (ctrl+plus = increase ; ctrl+minus = decrease, ctrl+0 = default)
! - copy/paste hotkey (ctrl+shift+c = copy ; ctrl+shift+v = paste)
! - open url (clickable links)
! 1) double click to highlight the full url
! 2) Shift + click it to open it
XTerm.vt100.translations: #override \n\
Ctrl <Key> minus: smaller-vt-font() \n\
Ctrl <Key> plus: larger-vt-font() \n\
Ctrl <Key> 0: set-vt-font(d) \n\
Ctrl Shift <Key>C: copy-selection(CLIPBOARD) \n\
Ctrl Shift <Key>V: insert-selection(CLIPBOARD) \n\
Shift <Btn1Up>: exec-formatted("xdg-open '%t'", PRIMARY) \n\
<Btn1Up>: select-end(PRIMARY, CLIPBOARD, CUT_BUFFER0) \n\
<Btn2Up>: insert-selection(PRIMARY)

! enable copy/paste hotkey to work (shift+insert = paste ; mouse highlight = copy)
XTerm*selectToClipboard: true
! disable fullscreen hotkey alt+enter (hotkey conflicts with weechat, midnight commander ...etc)
XTerm*fullscreen: never
! enable alt key to work
XTerm*metaSendsEscape: true
! Fix the backspace key (for Emacs)
XTerm.vt100.backarrowKey: false
XTerm.ttyModes: erase ^?

! double-click to select whole URLs :D
! https://scarygliders.net/2011/12/01/customize-xterm-the-original-and-best-terminal/
XTerm*charClass: 33:48,36-47:48,58-59:48,61:48,63-64:48,95:48,126:48

! Tips: Left and right selection (text selection using left button for beginning and right button for end)
! Tips: Triple Click ( 1 click = nothing, 2 click = select word, 3 click = select line )
!
! XTerm*on3Clicks: regex [[:alpha:]]+://([[:alnum:]!#+,./=?@_~-]|(%[[:xdigit:]][[:xdigit:]]))+
XTerm*on3Clicks: regex ([[:alpha:]]+://)?([[:alnum:]!#+,./=?@_~-]|(%[[:xdigit:]][[:xdigit:]]))+

! <BtnUp>:select-end(SELECT, CUT_BUFFER0) \n\
! Ctrl <Btn4Down>:scroll-back(1,halfpage,m) \n\
! <Btn4Down>:scroll-back(5,line,m) \n\
! Ctrl <Btn5Down>:scroll-forw(1,halfpage,m) \n\
! <Btn5Down>:scroll-forw(5,line,m) \n\

! Ctrl <Key>M: maximize() \n\
! Ctrl <Key>R: restore() \n\
! Shift <KeyPress> Prior:scroll-back(1,halfpage) \n\
! Shift <KeyPress> Next:scroll-forw(1,halfpage) \n\
! Shift <KeyPress> Select:select-cursor-start() \
! select-cursor-end(SELECT, CUT_BUFFER0) \n\
! Shift <KeyPress> Insert:insert-selection(SELECT, CUT_BUFFER0) \n\
! Alt <Key>Return:fullscreen() \n\
! <KeyRelease> Scroll_Lock:scroll-lock() \n\
! Shift~Ctrl <KeyPress> KP_Add:larger-vt-font() \n\
! Shift Ctrl <KeyPress> KP_Add:smaller-vt-font() \n\
! Shift <KeyPress> KP_Subtract:smaller-vt-font() \n\
! ~Meta <KeyPress>:insert-seven-bit() \n\
! Meta <KeyPress>:insert-eight-bit() \n\
! !Ctrl <Btn1Down>:popup-menu(mainMenu) \n\
! ~Meta <Btn1Down>:select-start() \n\
! ~Meta <Btn1Motion>:select-extend() \n\
! !Ctrl <Btn2Down>:popup-menu(vtMenu) \n\
! ~Ctrl ~Meta <Btn2Down>:ignore() \n\
! Meta <Btn2Down>:clear-saved-lines() \n\
! ~Ctrl ~Meta <Btn2Up>:insert-selection(SELECT, CUT_BUFFER0) \n\
! !Ctrl <Btn3Down>:popup-menu(fontMenu) \n\
! ~Ctrl ~Meta <Btn3Down>:start-extend() \n\
! ~Meta <Btn3Motion>:select-extend() \n\
! Ctrl <Btn4Down>:scroll-back(1,halfpage,m) \n\
! <Btn4Down>:scroll-back(5,line,m) \n\
! Ctrl <Btn5Down>:scroll-forw(1,halfpage,m) \n\
! <BtnUp>:select-end(SELECT, CUT_BUFFER0) \n\
! <BtnDown>:ignore()



! http://forums.fedoraforum.org/showpost.php?p=1538211&postcount=3
! https://stackoverflow.com/a/29551654
! XTerm*title: xterm
! XTerm*background: #011622
! XTerm*foreground: WhiteSmoke
! XTerm*pointerColor: white
! XTerm*pointerColorBackground: #011622
! XTerm*cursorColor: #EBD27D
! XTerm*internalBorder: 3
! XTerm*loginShell: true
! XTerm*scrollBar: false
! XTerm*scrollKey: true
! XTerm*saveLines: 1250
! XTerm*multiClickTime: 250
! XTerm*Geometry: 140x50+110+60
! XTerm*renderFont: true

! set fontsize
! xterm*font: *-fixed-*-*-*-24-*
! set font
! xterm*faceName: Monospace
! }}}

!####################
!###### Themes ######
!####################
! http://web.archive.org/web/20090130061234/http://phraktured.net/terminal-colors/

!-------- Theme: Solarized {{{
! !------------------------------------------------------
!
! !!Source http://github.com/altercation/solarized
!
! *background: #002b36
! *foreground: #657b83
! !!*fading: 40
! *fadeColor: #002b36
! *cursorColor: #93a1a1
! *pointerColorBackground: #586e75
! *pointerColorForeground: #93a1a1
!
! !! black dark/light
! *color0: #073642
! *color8: #002b36
!
! !! red dark/light
! *color1: #dc322f
! *color9: #cb4b16
!
! !! green dark/light
! *color2: #859900
! *color10: #586e75
!
! !! yellow dark/light
! *color3: #b58900
! *color11: #657b83
!
! !! blue dark/light
! *color4: #268bd2
! *color12: #839496
!
! !! magenta dark/light
! *color5: #d33682
! *color13: #6c71c4
!
! !! cyan dark/light
! *color6: #2aa198
! *color14: #93a1a1
!
! !! white dark/light
! *color7: #eee8d5
! *color15: #fdf6e3
!
! ! }}}
! !-------- Theme: Rezza {{{
! !------------------------------------------------------
! !!colors ripped from rezza: http://metawire.org/~rezza/index.php
! *foreground: rgb:dd/dd/dd
! *background: rgb:22/22/22
! !black
! *color0: rgb:19/19/19
! *color8: rgb:25/25/25
! !red
! *color1: rgb:80/32/32
! *color9: rgb:98/2b/2b
! !green
! *color2: rgb:5b/76/2f
! *color10: rgb:89/b8/3f
! !brown/yellow
! *color3: rgb:aa/99/43
! *color11: rgb:ef/ef/60
! !blue
! *color4: rgb:32/4c/80
! *color12: rgb:2b/4f/98
! !magenta
! *color5: rgb:70/6c/9a
! *color13: rgb:82/6a/b1
! !cyan
! *color6: rgb:92/b1/9e
! *color14: rgb:a1/cd/cd
! !white
! *color7: rgb:ff/ff/ff
! *color15: rgb:dd/dd/dd
!
!
! ! }}}
! !-------- Theme: One {{{
! !------------------------------------------------------
! !Theme One
! *background: rgb:00/00/00
! *foreground: rgb:a8/a8/a8
! *color0: rgb:00/00/00
! *color1: rgb:a8/00/00
! *color2: rgb:00/a8/00
! *color3: rgb:a8/54/00
! *color4: rgb:00/00/a8
! *color5: rgb:a8/00/a8
! *color6: rgb:00/a8/a8
! *color7: rgb:a8/a8/a8
! *color8: rgb:54/50/54
! *color9: rgb:f8/54/50
! *color10: rgb:50/fc/50
! *color11: rgb:f8/fc/50
! *color12: rgb:50/54/f8
! *color13: rgb:f8/54/f8
! *color14: rgb:50/fc/f8
! *color15: rgb:f8/fc/f8
! ! }}}
! !-------- Theme: Two {{{
! !------------------------------------------------------
! !Theme Two
! *background: rgb:00/00/00
! *foreground: rgb:7f/7f/7f
! *color0: rgb:00/00/00
! *color1: rgb:9e/18/28
! *color2: rgb:ae/ce/92
! *color3: rgb:96/8a/38
! *color4: rgb:41/41/71
! *color5: rgb:96/3c/59
! *color6: rgb:41/81/79
! *color7: rgb:be/be/be
! *color8: rgb:66/66/66
! *color9: rgb:cf/61/71
! *color10: rgb:c5/f7/79
! *color11: rgb:ff/f7/96
! *color12: rgb:41/86/be
! *color13: rgb:cf/9e/be
! *color14: rgb:71/be/be
! *color15: rgb:ff/ff/ff
! !
! !
! ! }}}
! !-------- Theme: Three {{{
! !------------------------------------------------------
! !Theme Three
! *background: rgb:00/00/00
! *foreground: rgb:cf/cf/cf
! *color0: rgb:00/00/00
! *color1: rgb:e0/10/10
! *color2: rgb:20/ad/20
! *color3: rgb:d4/c2/4f
! *color4: rgb:23/1b/b8
! *color5: rgb:9c/38/85
! *color6: rgb:1d/bd/b8
! *color7: rgb:fe/fe/fe
! *color8: rgb:6a/6a/6a
! *color9: rgb:e8/3a/3d
! *color10: rgb:35/e9/56
! *color11: rgb:ff/ff/2f
! *color12: rgb:3a/53/f0
! *color13: rgb:e6/28/ba
! *color14: rgb:1c/f5/f5
! *color15: rgb:ff/ff/ff
! ! }}}
! !-------- Theme: Four {{{
! !------------------------------------------------------
! !Theme Four
! *background: rgb:00/00/00
! *foreground: rgb:ff/ff/ff
! *color0: rgb:00/00/00
! *color1: rgb:d3/62/65
! *color2: rgb:ae/ce/91
! *color3: rgb:e7/e1/8c
! *color4: rgb:7a/7a/b0
! *color5: rgb:96/3c/59
! *color6: rgb:41/81/79
! *color7: rgb:be/be/be
! *color8: rgb:66/66/66
! *color9: rgb:ef/81/71
! *color10: rgb:e5/f7/79
! *color11: rgb:ff/f7/96
! *color12: rgb:41/86/be
! *color13: rgb:ef/9e/be
! *color14: rgb:71/be/be
! *color15: rgb:ff/ff/ff
!
!
! ! }}}
! !-------- Theme: Five {{{
! !------------------------------------------------------
! !Theme Five
! *background: rgb:ad/aa/ad
! *foreground: rgb:00/00/00
! *color0: rgb:00/00/00
! *color1: rgb:64/0f/19
! *color2: rgb:63/79/6b
! *color3: rgb:ad/71/42
! *color4: rgb:4f/4f/89
! *color5: rgb:b2/5c/7c
! *color6: rgb:52/75/6b
! *color7: rgb:ad/aa/ad
! *color8: rgb:52/55/52
! *color9: rgb:a5/61/63
! *color10: rgb:ce/c2/63
! *color11: rgb:73/ae/70
! *color12: rgb:36/70/9f
! *color13: rgb:aa/82/9c
! *color14: rgb:51/89/89
! *color15: rgb:ff/ff/ef
! ! }}}
! !-------- Theme: Six {{{
! !------------------------------------------------------
! !Theme Six
! *background: rgb:be/be/be
! *foreground: rgb:21/21/21
! *color0: rgb:00/00/00
! *color1: rgb:bf/72/76
! *color2: rgb:86/af/80
! *color3: rgb:96/8a/38
! *color4: rgb:36/73/b5
! *color5: rgb:9a/70/b2
! *color6: rgb:7a/be/cc
! *color7: rgb:db/db/db
! *color8: rgb:66/92/af
! *color9: rgb:e5/50/5f
! *color10: rgb:87/bc/87
! *color11: rgb:e0/d9/5c
! *color12: rgb:1b/85/d6
! *color13: rgb:ad/73/ba
! *color14: rgb:33/8e/aa
! *color15: rgb:f4/f4/f4
! ! }}}
! !-------- Theme: Seven {{{
! !------------------------------------------------------
! !Theme Seven
! *background: rgb:67/67/67
! *foreground: rgb:ff/ff/ff
! *color0: rgb:00/00/00
! *color1: rgb:bf/46/46
! *color2: rgb:67/b2/5f
! *color3: rgb:cf/c4/4e
! *color4: rgb:51/60/83
! *color5: rgb:ca/6e/ff
! *color6: rgb:92/b2/f8
! *color7: rgb:d5/d5/d5
! *color8: rgb:00/00/00
! *color9: rgb:f4/8a/8a
! *color10: rgb:a5/d7/9f
! *color11: rgb:e1/da/84
! *color12: rgb:a2/bb/ff
! *color13: rgb:e2/b0/ff
! *color14: rgb:ba/cd/f8
! *color15: rgb:d5/d5/d5
! ! }}}
! !-------- Theme: Eight {{{
! !------------------------------------------------------
! !Theme Eight
! *background: rgb:10/10/10
! *foreground: rgb:d3/d3/d3
! *color0: rgb:10/10/10
! *color1: rgb:cd/5c/5c
! *color2: rgb:2e/8b/57
! *color3: rgb:f0/e6/8c
! *color4: rgb:b0/c4/de
! *color5: rgb:ba/55/d3
! *color6: rgb:46/82/b4
! *color7: rgb:d3/d3/d3
! *color8: rgb:4d/4d/4d
! *color9: rgb:ff/6a/6a
! *color10: rgb:8f/bc/8f
! *color11: rgb:ff/fa/cd
! *color12: rgb:1e/90/ff
! *color13: rgb:db/70/93
! *color14: rgb:5f/9e/a0
! *color15: rgb:ff/ff/ff
!
!
! ! }}}
! !-------- Theme: Nine {{{
! !------------------------------------------------------
! !Theme Nine
! *background: rgb:1a/1a/1a
! *foreground: rgb:d6/d6/d6
! *color0: rgb:00/00/00
! *color1: rgb:9e/18/28
! *color2: rgb:00/88/00
! *color3: rgb:96/8a/38
! *color4: rgb:41/41/71
! *color5: rgb:96/3c/59
! *color6: rgb:41/81/79
! *color7: rgb:be/be/be
! *color8: rgb:66/66/66
! *color9: rgb:cf/61/71
! *color10 rgb:7c/bc/8c
! *color11 rgb:ff/f7/96
! *color12 rgb:41/86/be
! *color13 rgb:cf/9e/be
! *color14 rgb:71/be/be
! *color15: rgb:ff/ff/ff
!
!
! ! }}}
! !-------- Theme: Ten {{{
! !------------------------------------------------------
! !Theme Ten
! *background: rgb:1a/1a/1a
! *foreground: rgb:d6/d6/d6
! *color0: rgb:00/00/00
! *color1: rgb:98/56/5e
! *color2: rgb:66/82/5d
! *color3: rgb:96/91/76
! *color4: rgb:4d/65/85
! *color5: rgb:96/73/95
! *color6: rgb:5f/7f/7b
! *color7: rgb:b3/b3/b3
! *color8: rgb:73/73/73
! *color9: rgb:cf/a3/a9
! *color10: rgb:ca/f7/bb
! *color11: rgb:ff/f8/bc
! *color12: rgb:83/a3/be
! *color13: rgb:bb/a9/cf
! *color14: rgb:96/cc/cc
! *color15: rgb:ff/ff/ff
!
!
! ! }}}
! !-------- Theme: Eleven {{{
! !------------------------------------------------------
! !Theme Eleven
! *background: rgb:33/33/33
! *foreground: rgb:ff/ff/ff
! *color0: rgb:33/33/33
! *color8: rgb:33/33/33
! *color1: rgb:ff/a0/a0
! *color9: rgb:ff/a0/a0
! *color2: rgb:98/fb/98
! *color10: rgb:9a/cd/32
! *color3: rgb:f0/e6/8c
! *color11: rgb:f0/e6/8c
! *color4: rgb:87/ce/eb
! *color12: rgb:87/ce/eb
! *color5: rgb:ff/a0/a0
! *color13: rgb:ff/a0/a0
! *color6: rgb:87/ce/eb
! *color14: rgb:87/ce/eb
! *color7: rgb:ff/ff/ff
! *color15: rgb:ff/ff/ff
!
!
! ! }}}
! !-------- Theme: Twelve {{{
! !------------------------------------------------------
! !Theme Twelve
! *foreground: rgb:ff/ff/ff
! *background: rgb:00/00/00
! *color0: rgb:00/00/00
! *color1: rgb:bf/72/76
! *color2: rgb:86/af/80
! *color3: rgb:96/8a/38
! *color4: rgb:36/73/b5
! *color5: rgb:9a/70/b2
! *color6: rgb:7a/be/cc
! *color7: rgb:db/db/db
! *color8: rgb:66/92/af
! *color9: rgb:e5/50/5f
! *color10: rgb:87/bc/87
! *color11: rgb:e0/d9/5c
! *color12: rgb:1b/85/d6
! *color13: rgb:ad/73/ba
! *color14: rgb:33/8e/aa
! *color15: rgb:f4/f4/f4
!
!
! ! }}}
!-------- Theme: Thirteen {{{
!------------------------------------------------------
!Theme Thirteen
*background: rgb:00/00/00
*foreground: rgb:aa/aa/aa
*color0: rgb:00/00/00
*color1: rgb:9e/18/28
*color2: rgb:ae/ce/92
*color3: rgb:96/8a/38
*color4: rgb:41/41/71
*color5: rgb:96/3c/59
*color6: rgb:7f/9f/7f
*color7: rgb:be/be/be
*color8: rgb:66/66/66
*color9: rgb:cf/61/71
*color10: rgb:af/c5/af
*color11: rgb:f0/df/af
*color12: rgb:8e/9f/bc
*color13: rgb:dc/a3/a3
*color14: rgb:95/c1/c5
*color15: rgb:ff/ff/ff
!
!
! }}}
! !-------- Theme: Fourteen {{{
! !------------------------------------------------------
! !Theme Fourteen
! *background: rgb:95/95/95
! *foreground: rgb:00/00/00
! *color0: rgb:7f/7f/7f
! *color1: rgb:cd/00/00
! *color2: rgb:00/8b/00
! *color3: rgb:ee/ee/00
! *color4: rgb:00/00/cd
! *color5: rgb:cd/00/cd
! *color6: rgb:00/ee/ee
! *color7: rgb:fa/eb/d7
! *color8: rgb:e5/e5/e5
! *color9: rgb:80/00/00
! *color10: rgb:00/50/20
! *color11: rgb:99/55/00
! *color12: rgb:00/40/80
! *color13: rgb:44/33/00
! *color14: rgb:30/60/80
! *color15: rgb:ff/ff/ff
!
!
! ! }}}
! !-------- Theme: Fifteen {{{
! !------------------------------------------------------
! !Theme Fifteen
! *background: rgb:1d/2b/3a
! *foreground: rgb:be/be/be
! *color0: rgb:00/00/00
! *color1: rgb:d3/62/65
! *color2: rgb:ae/ce/91
! *color3: rgb:e7/e1/8c
! *color4: rgb:7a/7a/b0
! *color5: rgb:96/3c/59
! *color6: rgb:41/81/79
! *color7: rgb:be/be/be
! *color8: rgb:66/66/66
! *color9: rgb:ef/81/71
! *color10: rgb:e5/f7/79
! *color11: rgb:ff/f7/99
! *color12: rgb:41/86/be
! *color13: rgb:ef/9e/be
! *color14: rgb:71/be/be
! *color15: rgb:ff/ff/ff
!
!
! ! }}}
! !-------- Theme: Sixteen {{{
! !------------------------------------------------------
! !Theme Sixteen
! *background: rgb:00/00/00
! *foreground: rgb:be/be/be
! *color0: rgb:00/00/00
! *color1: rgb:9e/18/28
! *color2: rgb:ae/ce/92
! *color3: rgb:96/8a/38
! *color4: rgb:41/41/71
! *color5: rgb:96/3c/59
! *color6: rgb:41/81/79
! *color7: rgb:be/be/be
! *color8: rgb:66/66/66
! *color9: rgb:cf/61/71
! *color10: rgb:c5/f7/79
! *color11: rgb:ff/f7/96
! *color12: rgb:41/86/be
! *color13: rgb:cf/9e/be
! *color14: rgb:71/be/be
! *color15: rgb:ff/ff/ff
!
!
! ! }}}
! !-------- Theme: Seventeen {{{
! !------------------------------------------------------
! !Theme Seventeen
! *background: rgb:00/00/00
! *foreground: rgb:e5/e5/e5
! *color0: rgb:00/00/00
! *color1: rgb:ff/00/00
! *color2: rgb:00/ff/00
! *color3: rgb:ff/ff/00
! *color4: rgb:00/00/ff
! *color5: rgb:ff/00/ff
! *color6: rgb:00/ff/ff
! *color7: rgb:ff/ff/ff
! *color8: rgb:ff/d3/9b
! *color9: rgb:ff/82/47
! *color10: rgb:ff/82/ab
! *color11: rgb:87/ce/fa
! *color12: rgb:ff/ff/ff
! *color13: rgb:ff/ff/ff
! *color14: rgb:ff/ff/ff
! *color15: rgb:ff/ff/ff
!
!
! ! }}}
! !-------- Theme: Eighteen {{{
! !------------------------------------------------------
! !Theme Eighteen
! *color0: rgb:00/00/00
! *color1: rgb:9e/18/28
! *color2: rgb:5c/b2/47
! *color3: rgb:96/8a/38
! *color4: rgb:41/61/a0
! *color5: rgb:9b/76/8e
! *color6: rgb:41/91/89
! *color7: rgb:be/be/be
! *color8: rgb:66/66/66
! *color9: rgb:cf/61/71
! *color10: rgb:c5/f7/79
! *color11: rgb:ff/f7/96
! *color12: rgb:41/86/be
! *color13: rgb:cf/9e/be
! *color14: rgb:71/be/be
! *color15: rgb:dd/dd/dd
!
!
! ! }}}
! !-------- Theme: Nineteen {{{
! !------------------------------------------------------
! !Theme Nineteen
! *color0: rgb:00/00/00
! *color1: rgb:b0/70/50
! *color2: rgb:12/91/4e
! *color3: rgb:a0/a0/70
! *color4: rgb:3e/45/81
! *color5: rgb:a0/70/a0
! *color6: rgb:70/a0/a0
! *color7: rgb:a0/a0/a0
! *color8: rgb:60/60/60
! *color9: rgb:b0/70/50
! *color10: rgb:12/91/4e
! *color11: rgb:c0/c0/90
! *color12: rgb:3e/45/81
! *color13: rgb:c0/90/c0
! *color14: rgb:90/c0/c0
! *color15: rgb:ff/ff/ff
!
!
! ! }}}
! !-------- Theme: Twenty {{{
! !------------------------------------------------------
! !Theme Twenty
! *foreground: rgb:aa/aa/aa
! *background: rgb:00/00/00
! *color0: rgb:30/34/30
! *color1: rgb:bf/79/79
! *color2: rgb:97/b2/6b
! *color3: rgb:cd/cd/c1
! *color4: rgb:86/a2/be
! *color5: rgb:d9/b7/98
! *color6: rgb:a1/b5/cd
! *color7: rgb:ff/ff/ff
! *color8: rgb:cd/b5/cd
! *color9: rgb:f4/a4/5f
! *color10: rgb:c5/f7/79
! *color11: rgb:ff/ff/ef
! *color12: rgb:98/af/d9
! *color13: rgb:d7/d9/98
! *color14: rgb:a1/b5/cd
! *color15: rgb:de/de/de
!
!
! ! }}}
! !-------- Theme: Twenty-One {{{
! !------------------------------------------------------
! !Theme Twenty-One
! *background: rgb:1a/1a/1a
! *foreground: rgb:aa/aa/aa
! *color0: rgb:00/00/00
! *color8: rgb:66/66/66
! *color1: rgb:9e/18/28
! *color9: rgb:bc/57/66
! *color2: rgb:00/88/00
! *color10: rgb:61/a1/71
! *color3: rgb:d2/bb/4b
! *color11: rgb:e7/db/52
! *color4: rgb:41/41/71
! *color12: rgb:50/85/af
! *color5: rgb:96/3c/59
! *color13: rgb:a9/7a/99
! *color6: rgb:41/81/79
! *color14: rgb:6b/a4/a4
! *color7: rgb:be/be/be
! *color15: rgb:ff/ff/ff
!
!
! ! }}}
! !-------- Theme: Twenty-Two {{{
! !------------------------------------------------------
! !Theme Twenty-Two
! *background: rgb:00/00/00
! *foreground: rgb:be/be/be
! *color0: rgb:00/00/00
! *color1: rgb:d3/62/65
! *color2: rgb:ae/ce/91
! *color3: rgb:e7/e1/8c
! *color4: rgb:7a/7a/b0
! *color5: rgb:96/3c/59
! *color6: rgb:7f/9f/7f
! *color7: rgb:be/be/be
! *color8: rgb:66/66/66
! *color9: rgb:ef/81/71
! *color10: rgb:e5/f7/79
! *color11: rgb:f0/df/af
! *color12: rgb:8e/9f/bc
! *color13: rgb:ef/9e/be
! *color14: rgb:71/be/be
! *color15: rgb:ff/ff/ff
!
!
! ! }}}
! !-------- Theme: Twenty-Three {{{
! !------------------------------------------------------
! !Theme Twenty-Three
! *background: rgb:0e/0e/0e
! *foreground: rgb:4a/d5/e1
! *color0: rgb:00/00/00
! *color1: rgb:dc/74/d1
! *color2: rgb:0e/b8/c7
! *color3: rgb:df/e3/7e
! !*color4: ???
! *color5: rgb:9e/88/f0
! *color6: rgb:73/f7/ff
! *color7: rgb:e1/dd/dd
! *color8: rgb:8b/8f/93
! *color9: rgb:dc/74/d1
! *color10: rgb:0e/b8/c7
! *color11: rgb:df/e3/7e
! *color13: rgb:9e/88/f0
! *color14: rgb:73/f7/ff
! *color15: rgb:e1/dd/dd
!
!
! ! }}}
! !-------- Theme: Twenty-Four {{{
! !------------------------------------------------------
! !Theme Twenty-Four
! *color0: rgb:00/00/00
! *color1: rgb:cd/5c/5c
! *color2: rgb:8e/ae/71
! *color3: rgb:d2/b4/8c
! *color4: rgb:5f/7b/8a
! *color5: rgb:cd/cd/b4
! *color6: rgb:68/68/68
! *color7: rgb:ff/ff/ff
! *color8: rgb:00/00/00
! *color9: rgb:ee/63/63
! *color10: rgb:95/c7/49
! *color11: rgb:cd/cd/c1
! *color12: rgb:6b/7b/8a
! *color13: rgb:cd/cd/b4
! *color14: rgb:77/87/98
! *color15: rgb:ca/ca/ca
!
!
! ! }}}
! !-------- Theme: Twenty-Five {{{
! !------------------------------------------------------
! ! Theme Twenty-Five
! *color0: rgb:00/00/00
! *color1: rgb:80/00/00
! *color2: rgb:00/80/00
! *color3: rgb:d0/d0/90
! *color4: rgb:00/00/80
! *color5: rgb:80/00/80
! *color6: rgb:a6/ca/f0
! *color7: rgb:d0/d0/d0
! *color8: rgb:b0/b0/b0
! *color9: rgb:f0/80/60
! *color10: rgb:60/f0/80
! *color11: rgb:e0/c0/60
! *color12: rgb:80/c0/e0
! *color13: rgb:f0/c0/f0
! *color14: rgb:c0/d8/f8
! *color15: rgb:e0/e0/e0
!
!
! ! }}}
! !-------- Theme: Tango {{{
! !------------------------------------------------------
! !tango color scheme
! ! source: https://github.com/lenage/dotfiles/blob/master/.Xresources
! xterm*color0: #1e1e1e
! xterm*color1: #cc0000
! xterm*color2: #4e9a06
! xterm*color3: #c4a000
! xterm*color4: #3465a4
! xterm*color5: #75507b
! xterm*color6: #0b939b
! xterm*color7: #d3d7cf
! xterm*color8: #555753
! xterm*color9: #ef2929
! xterm*color10: #8ae234
! xterm*color11: #fce94f
! xterm*color12: #729fcf
! xterm*color13: #ad7fa8
! xterm*color14: #00f5e9
! xterm*color15: #eeeeec
!
!
! ! }}}
! !-------- Theme: Snazzy Color {{{
! !------------------------------------------------------
! ! https://github.com/olstenlarck/urxvt-xterm-snazzy/blob/7c34009a19ade65271e26ef065c678b0fa2abd0d/.Xdefaults
!
! *background: #282a36
! *foreground: #eff0eb
!
! ! original #86a2b0
! *colorUL: #eff0eb
! *underlineColor: #eff0eb
!
! ! black
! *color0 : #2E3436
! *color8 : #686868
!
! ! red
! *color1 : #ff5c57
! *color9 : #ff5c57
!
! ! green
! *color2 : #5af78e
! *color10 : #5af78e
!
! ! yellow
! *color3 : #f3f99d
! *color11 : #f3f99d
!
! ! blue
! *color4 : #57c7ff
! *color12 : #57c7ff
!
! ! magenta
! *color5 : #ff6ac1
! *color13 : #ff6ac1
!
! ! cyan
! *color6 : #9aedfe
! *color14 : #9aedfe
!
! ! white
! *color7 : #f1f1f0
! *color15 : #eff0eb
!
!
! ! }}}

+ 1917
- 0
xkb/custom.xkb
Разлика између датотеке није приказан због своје велике величине
Прегледај датотеку


+ 1910
- 0
xkb/output.xkb
Разлика између датотеке није приказан због своје велике величине
Прегледај датотеку


Loading…
Откажи
Сачувај