Last active
August 9, 2021 07:13
-
-
Save RomjanHossain/fedbeac45d3a66614317cede331dc7f4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This is a sample commands.py. You can add your own commands here. | |
# | |
# Please refer to commands_full.py for all the default commands and a complete | |
# documentation. Do NOT add them all here, or you may end up with defunct | |
# commands when upgrading ranger. | |
# You always need to import ranger.api.commands here to get the Command class: | |
from ranger.api.commands import * | |
from ranger.core.loader import CommandLoader | |
# A simple command for demonstration purposes follows. | |
#------------------------------------------------------------------------------ | |
# You can import any python module as needed. | |
import os | |
# Any class that is a subclass of "Command" will be integrated into ranger as a | |
# command. Try typing ":my_edit<ENTER>" in ranger! | |
class my_edit(Command): | |
# The so-called doc-string of the class will be visible in the built-in | |
# help that is accessible by typing "?c" inside ranger. | |
""":my_edit <filename> | |
A sample command for demonstration purposes that opens a file in an editor. | |
""" | |
# The execute method is called when you run this command in ranger. | |
def execute(self): | |
# self.arg(1) is the first (space-separated) argument to the function. | |
# This way you can write ":my_edit somefilename<ENTER>". | |
if self.arg(1): | |
# self.rest(1) contains self.arg(1) and everything that follows | |
target_filename = self.rest(1) | |
else: | |
# self.fm is a ranger.core.filemanager.FileManager object and gives | |
# you access to internals of ranger. | |
# self.fm.thisfile is a ranger.container.file.File object and is a | |
# reference to the currently selected file. | |
target_filename = self.fm.thisfile.path | |
# This is a generic function to print text in ranger. | |
self.fm.notify("Let's edit the file " + target_filename + "!") | |
# Using bad=True in fm.notify allows you to print error messages: | |
if not os.path.exists(target_filename): | |
self.fm.notify("The given file does not exist!", bad=True) | |
return | |
# This executes a function from ranger.core.acitons, a module with a | |
# variety of subroutines that can help you construct commands. | |
# Check out the source, or run "pydoc ranger.core.actions" for a list. | |
self.fm.edit_file(target_filename) | |
# The tab method is called when you press tab, and should return a list of | |
# suggestions that the user will tab through. | |
def tab(self): | |
# This is a generic tab-completion function that iterates through the | |
# content of the current directory. | |
return self._tab_directory_content() | |
# https://github.com/ranger/ranger/wiki/Integrating-File-Search-with-fzf | |
# Now, simply bind this function to a key, by adding this to your ~/.config/ranger/rc.conf: map <C-f> fzf_select | |
class fzf_select(Command): | |
""" | |
:fzf_select | |
Find a file using fzf. | |
With a prefix argument select only directories. | |
See: https://github.com/junegunn/fzf | |
""" | |
def execute(self): | |
import subprocess | |
if self.quantifier: | |
# match only directories | |
command="find -L . \( -path '*/\.*' -o -fstype 'dev' -o -fstype 'proc' \) -prune \ | |
-o -type d -print 2> /dev/null | sed 1d | cut -b3- | fzf +m" | |
else: | |
# match files and directories | |
command="find -L . \( -path '*/\.*' -o -fstype 'dev' -o -fstype 'proc' \) -prune \ | |
-o -print 2> /dev/null | sed 1d | cut -b3- | fzf +m" | |
fzf = self.fm.execute_command(command, stdout=subprocess.PIPE) | |
stdout, stderr = fzf.communicate() | |
if fzf.returncode == 0: | |
fzf_file = os.path.abspath(stdout.decode('utf-8').rstrip('\n')) | |
if os.path.isdir(fzf_file): | |
self.fm.cd(fzf_file) | |
else: | |
self.fm.select_file(fzf_file) | |
# fzf_locate | |
class fzf_locate(Command): | |
""" | |
:fzf_locate | |
Find a file using fzf. | |
With a prefix argument select only directories. | |
See: https://github.com/junegunn/fzf | |
""" | |
def execute(self): | |
import subprocess | |
if self.quantifier: | |
command="locate home media | fzf -e -i" | |
else: | |
command="locate home media | fzf -e -i" | |
fzf = self.fm.execute_command(command, stdout=subprocess.PIPE) | |
stdout, stderr = fzf.communicate() | |
if fzf.returncode == 0: | |
fzf_file = os.path.abspath(stdout.decode('utf-8').rstrip('\n')) | |
if os.path.isdir(fzf_file): | |
self.fm.cd(fzf_file) | |
else: | |
self.fm.select_file(fzf_file) | |
class fzf_bring(Command): | |
""" | |
:fzf_bring | |
Find a file using fzf and bring it to the current directory. | |
See: https://github.com/junegunn/fzf | |
""" | |
def execute(self): | |
import subprocess | |
import shutil | |
if self.quantifier: | |
# match only directories | |
command="find -L . \( -path '*/\.*' -o -fstype 'dev' -o -fstype 'proc' \) -prune \ | |
-o -type d -print 2> /dev/null | sed 1d | cut -b3- | fzf +m" | |
else: | |
# match files and directories | |
command="find -L . \( -path '*/\.*' -o -fstype 'dev' -o -fstype 'proc' \) -prune \ | |
-o -print 2> /dev/null | sed 1d | cut -b3- | fzf +m" | |
fzf = self.fm.execute_command(command, stdout=subprocess.PIPE) | |
stdout, stderr = fzf.communicate() | |
if fzf.returncode == 0: | |
fzf_file = os.path.abspath(stdout.decode('utf-8').rstrip('\n')) | |
shutil.move(fzf_file, self.fm.thisdir.path) | |
class compress(Command): | |
def execute(self): | |
""" Compress marked files to current directory """ | |
cwd = self.fm.thisdir | |
marked_files = cwd.get_selection() | |
if not marked_files: | |
return | |
def refresh(_): | |
cwd = self.fm.get_directory(original_path) | |
cwd.load_content() | |
original_path = cwd.path | |
parts = self.line.split() | |
au_flags = parts[1:] | |
descr = "compressing files in: " + os.path.basename(parts[1]) | |
obj = CommandLoader(args=['apack'] + au_flags + \ | |
[os.path.relpath(f.path, cwd.path) for f in marked_files], descr=descr) | |
obj.signal_bind('after', refresh) | |
self.fm.loader.add(obj) | |
def tab(self): | |
""" Complete with current folder name """ | |
extension = ['.zip', '.tar.gz', '.rar', '.7z'] | |
return ['compress ' + os.path.basename(self.fm.thisdir.path) + ext for ext in extension] | |
class extracthere(Command): | |
def execute(self): | |
""" Extract copied files to current directory """ | |
copied_files = tuple(self.fm.copy_buffer) | |
if not copied_files: | |
return | |
def refresh(_): | |
cwd = self.fm.get_directory(original_path) | |
cwd.load_content() | |
one_file = copied_files[0] | |
cwd = self.fm.thisdir | |
original_path = cwd.path | |
au_flags = ['-X', cwd.path] | |
au_flags += self.line.split()[1:] | |
au_flags += ['-e'] | |
self.fm.copy_buffer.clear() | |
self.fm.cut_buffer = False | |
if len(copied_files) == 1: | |
descr = "extracting: " + os.path.basename(one_file.path) | |
else: | |
descr = "extracting files from: " + os.path.basename(one_file.dirname) | |
obj = CommandLoader(args=['aunpack'] + au_flags \ | |
+ [f.path for f in copied_files], descr=descr) | |
obj.signal_bind('after', refresh) | |
self.fm.loader.add(obj) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
###SETTINGS### | |
set column_ratios 1,3,4 | |
#set hidden_filter ^\.|\.(?:pyc|pyo|bak|swp)$|^lost\+found$|^__(py)?cache__$ | |
set hidden_filter ^\.|\.(?:pyc|vrb|pyo|lof|bak|swp|aux|log|nav|out|snm|toc|bcf|run\.xml|synctex\.gz|blg|bbl)$|^lost\+found$|^__(py)?cache__$ | |
set show_hidden true | |
set confirm_on_delete multiple | |
set use_preview_script true | |
set automatically_count_files true | |
set open_all_images true | |
set vcs_aware false | |
set vcs_backend_git enabled | |
set vcs_backend_hg disabled | |
set vcs_backend_bzr disabled | |
set preview_images true | |
set preview_images_method ueberzug | |
set unicode_ellipsis false | |
set show_hidden_bookmarks false | |
set colorscheme default | |
set preview_files true | |
set preview_directories true | |
set collapse_preview true | |
set save_console_history false | |
set status_bar_on_top false | |
set draw_progress_bar_in_status_bar true | |
set draw_borders true | |
set dirname_in_tabs true | |
set mouse_enabled true | |
set display_size_in_main_column true | |
set display_size_in_status_bar true | |
set display_tags_in_all_columns true | |
set update_title false | |
set update_tmux_title true | |
set shorten_title 3 | |
set tilde_in_titlebar true | |
set max_history_size 20 | |
set max_console_history_size 50 | |
set scroll_offset 8 | |
set flushinput true | |
set padding_right true | |
set autosave_bookmarks false | |
set autoupdate_cumulative_size false | |
set show_cursor false | |
set sort natural | |
set sort_reverse false | |
set sort_case_insensitive true | |
set sort_directories_first true | |
set sort_unicode false | |
set xterm_alt_key false | |
set cd_bookmarks false | |
set preview_max_size 0 | |
set show_selection_in_titlebar true | |
set idle_delay 2000 | |
set metadata_deep_search false | |
###ALIASES### | |
alias e edit | |
alias q quit | |
alias q! quitall | |
alias qa quitall | |
alias qall quitall | |
alias setl setlocal | |
alias filter scout -prt | |
alias find scout -aeit | |
alias mark scout -mr | |
alias unmark scout -Mr | |
alias search scout -rs | |
alias search_inc scout -rts | |
alias travel scout -aefiklst | |
###BASIC KEYS### | |
#BASIC | |
map Q quit! | |
map q quit | |
copymap q ZZ ZQ | |
#map R reload_cwd | |
map <C-r> reset | |
#map <C-l> redraw_window | |
map <C-c> abort | |
map <esc> change_mode normal | |
map i display_file | |
map ? help | |
#map W display_log | |
map w taskview_open | |
map S shell $SHELL | |
map : console | |
map ; console | |
map ! console shell%space | |
map @ console -p6 shell %s | |
map # console shell -p%space | |
#map s console shell%space | |
map r chain draw_possible_programs; console open_with%space | |
map f console find%space | |
map cd console cd%space | |
# Change the line mode | |
#map Mf linemode filename | |
#map Mi linemode fileinfo | |
#map Mp linemode permissions | |
#map Mt linemode metatitle | |
#moc | |
#map Mc shell mocp -c | |
#map Ma shell mocp -a %s | |
#map Ms shell mocp -p | |
#map MS shell mocp -S | |
#map Mp shell mocp -G | |
#map Mn shell mocp -f | |
#map Mb shell mocp -r | |
#map MN shell mocp -s && mocp -c && mocp -a %s && mocp -p | |
#map Mo shell mocp -j 0%% | |
#map MK shell killall mocp | |
# Tagging / Marking | |
map at tag_toggle | |
map ut tag_remove | |
map "<any> tag_toggle tag=%any | |
map <Space> mark_files toggle=True | |
map va mark_files all=True toggle=True | |
map uv mark_files all=True val=False | |
map vs toggle_visual_mode | |
map uV toggle_visual_mode reverse=True | |
# For the nostalgics: Midnight Commander bindings | |
map <F1> help | |
map <F3> display_file | |
map <F4> edit | |
map <F5> copy | |
map <F5> console shell echo "require(rmarkdown); render_site()" | R --vanilla | |
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 | |
#DEFAULT MOVEMENT | |
map ge cd /etc | |
map gu cd /usr | |
#map gl cd -r . | |
map gL cd -r %f | |
#map gv cd /var | |
map gM cd /mnt | |
map gr cd / | |
map gR eval fm.cd(ranger.RANGERDIR) | |
map g? cd /usr/share/doc/ranger | |
# 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 tt 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 | |
# External Programs | |
map E edit | |
map du shell -p du --max-depth=1 -h --apparent-size | |
map dU shell -p du --max-depth=1 -h --apparent-size | sort -rh | |
map yp shell -f echo -n %%d/%%f | xsel -i; xsel -o | xsel -i -b | |
map yd shell -f echo -n %%d | xsel -i; xsel -o | xsel -i -b | |
map yn shell -f echo -n %%f | xsel -i; xsel -o | xsel -i -b | |
# Filesystem Operations | |
map = chmod | |
map cw console rename%space | |
map aa rename_append | |
map A eval fm.open_console('rename ' + fm.thisfile.relative_path) | |
map I eval fm.open_console('rename ' + fm.thisfile.relative_path, 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 yy copy | |
map uy uncut | |
map ya copy mode=add | |
map yr copy mode=remove | |
# Temporary workarounds | |
map dgg eval fm.cut(dirarg=dict(to=0), narg=quantifier) | |
map dG eval fm.cut(dirarg=dict(to=-1), narg=quantifier) | |
map dj eval fm.cut(dirarg=dict(down=1), narg=quantifier) | |
map dk eval fm.cut(dirarg=dict(up=1), narg=quantifier) | |
map ygg eval fm.copy(dirarg=dict(to=0), narg=quantifier) | |
map yG eval fm.copy(dirarg=dict(to=-1), narg=quantifier) | |
map yj eval fm.copy(dirarg=dict(down=1), narg=quantifier) | |
map yk eval fm.copy(dirarg=dict(up=1), narg=quantifier) | |
# Searching | |
map / console search%space | |
map n search_next | |
map N search_next forward=False | |
map ct search_next order=tag | |
map cs search_next order=size | |
map ci search_next order=mimetype | |
map cc search_next order=ctime | |
map cm search_next order=mtime | |
map ca search_next order=atime | |
# Sorting | |
map or toggle_option sort_reverse | |
map oz set sort=random | |
map os chain set sort=size; set sort_reverse=False | |
map ob chain set sort=basename; set sort_reverse=False | |
map on chain set sort=natural; set sort_reverse=False | |
map om chain set sort=mtime; set sort_reverse=False | |
map oc chain set sort=ctime; set sort_reverse=False | |
map oa chain set sort=atime; set sort_reverse=False | |
map ot chain set sort=type; set sort_reverse=False | |
map oe chain set sort=extension; set sort_reverse=False | |
map oS chain set sort=size; set sort_reverse=True | |
map oB chain set sort=basename; set sort_reverse=True | |
map oN chain set sort=natural; set sort_reverse=True | |
map oM chain set sort=mtime; set sort_reverse=True | |
map oC chain set sort=ctime; set sort_reverse=True | |
map oA chain set sort=atime; set sort_reverse=True | |
map oT chain set sort=type; set sort_reverse=True | |
map oE chain set sort=extension; set sort_reverse=True | |
map dc get_cumulative_size | |
# Settings | |
map zc toggle_option collapse_preview | |
map zd toggle_option sort_directories_first | |
map zh toggle_option show_hidden | |
map <C-h> toggle_option show_hidden | |
map zi toggle_option flushinput | |
map zm toggle_option mouse_enabled | |
map zp toggle_option preview_files | |
map zP toggle_option preview_directories | |
map zs toggle_option sort_case_insensitive | |
map zu toggle_option autoupdate_cumulative_size | |
map zv toggle_option use_preview_script | |
map zf console filter%space | |
# Bookmarks | |
#map `<any> enter_bookmark %any | |
#map '<any> enter_bookmark %any | |
#map mm<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)) | |
###CONSOLE KEYS### | |
# Basic | |
cmap <tab> eval fm.ui.console.tab() | |
cmap <s-tab> eval fm.ui.console.tab(-1) | |
cmap <ESC> eval fm.ui.console.close() | |
cmap <CR> eval fm.ui.console.execute() | |
#cmap <C-l> redraw_window | |
copycmap <ESC> <C-c> | |
copycmap <CR> <C-j> | |
# Move around | |
cmap <up> eval fm.ui.console.history_move(-1) | |
cmap <down> eval fm.ui.console.history_move(1) | |
cmap <left> eval fm.ui.console.move(left=1) | |
cmap <right> eval fm.ui.console.move(right=1) | |
cmap <home> eval fm.ui.console.move(right=0, absolute=True) | |
cmap <end> eval fm.ui.console.move(right=-1, absolute=True) | |
# Line Editing | |
cmap <backspace> eval fm.ui.console.delete(-1) | |
cmap <delete> eval fm.ui.console.delete(0) | |
cmap <C-w> eval fm.ui.console.delete_word() | |
cmap <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 <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 KEYS### | |
# 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> | |
map sp console shell bash speedvid.sh %f%space | |
map x shell chmod -x %s | |
#General | |
map V console shell vim%space | |
map cW bulkrename %s | |
map mkd console mkdir%space | |
map sc console shell ln -sT%space | |
map D console delete | |
map X shell unzip %f | |
map Z shell tar -cvzf %f.tar.gz %s | |
map <C-f> fzf_select | |
map <C-l> fzf_locate | |
#Document Manipulation | |
map p1s shell lpr -o sides=one-sided %f | |
map p2s shell lpr -o sides=two-sided-long-edge %f | |
map MP shell pandoc %f -o %f.pdf | |
map MX shell xelatex %f | |
map ML shell latex %f | |
map TC shell texclear | |
map Txa console shell cp ~/Documents/LaTeX/article.tex%space | |
map Txs console shell cp ~/Documents/LaTeX/beamer.tex%space | |
map Txh console shell cp ~/Documents/LaTeX/handout.tex%space | |
#Image commands | |
map bg shell setbg %f | |
map bw shell wal -i %f && setbg %f | |
map C shell killall w3mimgdisplay && convert -rotate 90 %s %s | |
map F shell killall w3mimgdisplay && convert -flop %s %s | |
map bl shell killall w3mimgdisplay && convert %s -resize 1440x1080\> bl_%s | |
map TR shell convert %s -transparent white %s | |
#Music (mpd) shortcuts | |
map MS shell mpd | |
map MK shell killall mpd | |
map Ma shell mpc add "%s" | |
map Ms shell mpc play | |
map Mp shell mpc toggle | |
map Mn shell mpc next | |
map Mb shell mpc prev | |
map MN shell mpc stop && mpc clear && mpc add "%s" | |
map Mo shell mpc seek 0% | |
#Audio tagging (Requires eyeD3) | |
map Ta eval fm.open_console('shell eyeD3 -a ' + fm.thisfile.relative_path, position=15) | |
#Artist | |
map TA eval fm.open_console('shell eyeD3 -A ' + fm.thisfile.relative_path, position=15) | |
#Album | |
map Tb eval fm.open_console('shell eyeD3 -b ' + fm.thisfile.relative_path, position=15) | |
#Album artist | |
map Tt eval fm.open_console('shell eyeD3 -t "" ' + fm.thisfile.relative_path, position=16) | |
map Tn eval fm.open_console('shell eyeD3 -n "" ' + fm.thisfile.relative_path, position=16) | |
#Downloading | |
map ytv console shell youtube-dl -ic%space | |
map yta console shell youtube-dl -xic%space | |
eval cmd('source ' + fm.confpath('shortcuts.conf')) | |
default_linemode devicons |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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 -f $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 waterfox, X, flag f = waterfox -- "$@" | |
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, X, flag f = chromium -- "$@" | |
ext x?html?, has opera, X, flag f = opera -- "$@" | |
ext x?html?, has firefox, X, flag f = firefox -- "$@" | |
ext x?html?, has dillo, X, flag f = dillo -- "$@" | |
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 "$@" | |
#Spreadsheets for scim | |
ext sc|csv|sxc|xlsx?|xlt|xlw|gnm|gnumeric, = sc-im -- "$@" | |
#------------------------------------------- | |
# Misc | |
#------------------------------------------- | |
# Define the "editor" for text files as first action | |
mime ^text, label editor = lvim -- "$@" | |
mime ^text, label pager = "$PAGER" -- "$@" | |
!mime ^text, label editor, ext xml|json|csv|tex|py|pl|rb|js|sh|php = lvim -- "$@" | |
!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 | |
ext asf, has mpv, X, flag f = mpv -- "$@" | |
#-------------------------------------------- | |
# Code | |
#------------------------------------------- | |
ext py = python -- "$1" | |
ext pl = perl -- "$1" | |
ext rb = ruby -- "$1" | |
ext js = node -- "$1" | |
ext sh = sh -- "$1" | |
ext php = php -- "$1" | |
# ext ts, X = neovim -- "$@" | |
#-------------------------------------------- | |
# 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 --no-video -- "$@" | |
mime ^video, has mpv, X, flag f = mpv --fs -- "$@" | |
mime ^video, has mpv, X, flag f = mpv --loop -- "$@" | |
mime ^video, has mpv, X, flag f = mpv --title="obs" --autofit=1050x700 -- "$@" | |
# openting ts file | |
mime ^video, ext !ts, X, flag f = mpv -- "$@" | |
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 -- "$@" | |
#-------------------------------------------- | |
# Audio without X | |
#------------------------------------------- | |
mime ^audio|ogg$, terminal, has mplayer = mplayer -- "$@" | |
mime ^audio|ogg$, terminal, has mplayer2 = mplayer2 -- "$@" | |
mime ^audio|ogg$, terminal, has mpv = mpv --no-audio-display -- "$@" | |
mime ^audio|ogg$ = tag "$@" | |
mime ^audio|ogg$, terminal, has mpv = mpv -- "$@" | |
ext midi?, terminal, has wildmidi = wildmidi -- "$@" | |
#-------------------------------------------- | |
# 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, X, flag f = mupdf -I "$@" | |
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 epub, has zathura, X, flag f = zathura -- "$@" | |
ext epub, has mupdf, X, flag f = mupdf "$@" | |
ext ps, has zathura, X, flag f = zathura -- "$@" | |
ext docx, has abiword, X, flag f = abiword "$@" | |
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 -- "$@" | |
#------------------------------------------- | |
# Image Viewing: | |
#------------------------------------------- | |
mime ^image/svg, has inkscape, X, flag f = inkscape -- "$@" | |
mime ^image/svg, has display, X, flag f = display -- "$@" | |
mime ^image/gif, has viewnior, X, flag f = viewnior -- "$@" | |
mime ^image/gif, has qutebrowser, X, flag f = qutebrowser -- "$@" | |
ext xcf, X, flag f = gimp -- "$@" | |
mime ^image, has sxiv, X, flag f = sxiv -a -- "$@" | |
mime ^image, has feh, X, flag f = feh --scale-down --auto-zoom --image-bg black -- "$@" | |
mime ^image, has feh, X, flag f = feh --scale-down --auto-zoom -- "$@" | |
mime ^image, has mirage, X, flag f = mirage -- "$@" | |
mime ^image, has ristretto, X, flag f = ristretto "$@" | |
mime ^image, has eog, X, flag f = eog -- "$@" | |
mime ^image, has eom, X, flag f = eom -- "$@" | |
mime ^image, has gimp, X, flag f = gimp -- "$@" | |
mime ^image, has pinta, X, flag f = pinta -- "$@" | |
mime ^image, has mypaint, X, flag f = mypaint -- "$@" | |
mime ^image, has kolourpaint, X, flag f = kolourpaint -- "$@" | |
#------------------------------------------- | |
# Archives | |
#------------------------------------------- | |
# This requires atool | |
ext jar = java -jar "$@" | |
ext 7z|ace|ar|arc|bz2?|cab|cpio|cpt|deb|dgc|dmg|gz, has als = als -- "$@" | "$PAGER" | |
ext iso|jar|msi|pkg|rar|shar|tar|tgz|xar|xpi|xz|zip, has als = als -- "$@" | "$PAGER" | |
ext 7z|ace|ar|arc|bz2?|cab|cpio|cpt|deb|dgc|dmg|gz, has aunpack = aunpack -- "$@" | |
ext iso|jar|msi|pkg|rar|shar|tar|tgz|xar|xpi|xz|zip, has aunpack = aunpack -- "$@" | |
# Fallback: | |
ext tar|gz, has tar = tar vvtf "$@" | "$PAGER" | |
ext tar|gz, has tar = tar vvxf "$@" | |
#------------------------------------------- | |
# Misc | |
#------------------------------------------- | |
label wallpaper, number 11, mime ^image, 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|ms = ask | |
label editor, !mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php|ms = $EDITOR -- "$@" | |
label pager, !mime ^text, !ext xml|json|csv|tex|py|pl|rb|js|sh|php|ms = "$PAGER" -- "$@" | |
ext blend, has blender, X, flag f = blender -- "$@" | |
ext ms = $EDITOR -- "$@" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# ranger supports enhanced previews. If the option "use_preview_script" | |
# is set to True and this file exists, this script will be called and its | |
# output is displayed in ranger. ANSI color codes are supported. | |
# NOTES: This script is considered a configuration file. If you upgrade | |
# ranger, it will be left untouched. (You must update it yourself.) | |
# Also, ranger disables STDIN here, so interactive scripts won't work properly | |
# Meanings of exit codes: | |
# code | meaning | action of ranger | |
# -----+------------+------------------------------------------- | |
# 0 | success | success. display stdout as preview | |
# 1 | no preview | failure. display no preview at all | |
# 2 | plain text | display the plain content of the file | |
# 3 | fix width | success. Don't reload when width changes | |
# 4 | fix height | success. Don't reload when height changes | |
# 5 | fix both | success. Don't ever reload | |
# 6 | image | success. display the image $cached points to as an image preview | |
# 7 | image | success. display the file directly as an image | |
# Meaningful aliases for arguments: | |
path="$1" # Full path of the selected file | |
width="$2" # Width of the preview pane (number of fitting characters) | |
height="$3" # Height of the preview pane (number of fitting characters) | |
cached="$4" # Path that should be used to cache image previews | |
preview_images="$5" # "True" if image previews are enabled, "False" otherwise. | |
maxln=200 # Stop after $maxln lines. Can be used like ls | head -n $maxln | |
# Find out something about the file: | |
mimetype=$(file --mime-type -Lb "$path") | |
extension=$(/bin/echo "${path##*.}" | awk '{print tolower($0)}') | |
# Functions: | |
# runs a command and saves its output into $output. Useful if you need | |
# the return value AND want to use the output in a pipe | |
try() { output=$(eval '"$@"'); } | |
# writes the output of the previously used "try" command | |
dump() { /bin/echo "$output"; } | |
# a common post-processing function used after most commands | |
trim() { head -n "$maxln"; } | |
# wraps highlight to treat exit code 141 (killed by SIGPIPE) as success | |
safepipe() { "$@"; test $? = 0 -o $? = 141; } | |
# Image previews, if enabled in ranger. | |
if [ "$preview_images" = "True" ]; then | |
case "$mimetype" in | |
image/svg+xml) | |
convert "$path" "$cached" && exit 6 || exit 1;; | |
image/*) | |
exit 7;; | |
# Image preview for video, disabled by default.: | |
video/*) | |
ffmpegthumbnailer -i "$path" -o "$cached" -s 0 && exit 6 || exit 1;; | |
esac | |
fi | |
case "$extension" in | |
# Archive extensions: | |
a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\ | |
rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip) | |
try als "$path" && { dump | trim; exit 0; } | |
try acat "$path" && { dump | trim; exit 3; } | |
try bsdtar -lf "$path" && { dump | trim; exit 0; } | |
exit 1;; | |
csv) | |
sed "s/\(.*\".*\),\(.*\".*\)/\1~\2/;s/,/\t/g;s/~/,/g;s/\t\"/\t/g;s/\"\t/\t/g" "$path" && { dump| trim; exit 0; } || exit 1;; | |
rar) | |
# avoid password prompt by providing empty password | |
try unrar -p- lt "$path" && { dump | trim; exit 0; } || exit 1;; | |
7z) | |
# avoid password prompt by providing empty password | |
try 7z -p l "$path" && { dump | trim; exit 0; } || exit 1;; | |
# PDF documents: | |
pdf) | |
try pdftoppm -jpeg -singlefile "$path" "${cached//.jpg}" && exit 6 || exit 1;; | |
#try pdftotext -l 10 -nopgbrk -q "$path" - && \ | |
#{ dump | trim | fmt -s -w $width; exit 0; } || exit 1;; | |
# BitTorrent Files | |
torrent) | |
try transmission-show "$path" && { dump | trim; exit 5; } || exit 1;; | |
# ODT Files | |
odt|ods|odp|sxw) | |
try odt2txt "$path" && { dump | trim; exit 5; } || exit 1;; | |
# HTML Pages: | |
htm|html|xhtml) | |
try w3m -dump "$path" && { dump | trim | fmt -s -w "$width"; exit 4; } | |
try lynx -dump "$path" && { dump | trim | fmt -s -w "$width"; exit 4; } | |
try elinks -dump "$path" && { dump | trim | fmt -s -w "$width"; exit 4; } | |
;; # fall back to highlight/cat if the text browsers fail | |
esac | |
case "$mimetype" in | |
# Syntax highlight for text files: | |
text/* | */xml) | |
if [ "$(tput colors)" -ge 256 ]; then | |
pygmentize_format=terminal256 | |
highlight_format=ansi | |
else | |
pygmentize_format=terminal | |
highlight_format=ansi | |
fi | |
try safepipe highlight --out-format=${highlight_format} "$path" && { dump | trim; exit 5; } | |
try safepipe pygmentize -f ${pygmentize_format} "$path" && { dump | trim; exit 5; } | |
exit 2;; | |
# Ascii-previews of images: | |
image/*) | |
img2txt --gamma=0.6 --width="$width" "$path" && exit 4 || exit 1;; | |
# Display information about media files: | |
video/* | audio/*) | |
exiftool "$path" && exit 5 | |
# Use sed to remove spaces so the output fits into the narrow window | |
try mediainfo "$path" && { dump | trim | sed 's/ \+:/: /;'; exit 5; } || exit 1;; | |
esac | |
exit 1 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment