diff options
-rw-r--r-- | ranger/defaults/keys.py | 443 |
1 files changed, 0 insertions, 443 deletions
diff --git a/ranger/defaults/keys.py b/ranger/defaults/keys.py deleted file mode 100644 index 14ecef54..00000000 --- a/ranger/defaults/keys.py +++ /dev/null @@ -1,443 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (C) 2009, 2010 Roman Zimbelmann <romanz@lavabit.com> -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -""" -This is the default key configuration file of ranger. -Syntax for binding keys: map(*keys, fnc) - -Examples for keys: "x", "gg", "<C-J><A-4>", "<tab>", "<down><up><right>" - -fnc is a function which is called with the CommandArgs object. - -The CommandArgs object has these attributes: -arg.fm: the file manager instance -arg.wdg: the current widget -arg.n: the number typed before the key combination (if allowed) -arg.direction: the direction object (if applicable) -arg.keys: the string representation of the used key combination -arg.keybuffer: the keybuffer instance - -Direction keys are special. They must be mapped with: map.dir(*keys, **args) -where args is a dict of values such as up, down, to, absolute, relative... -Example: map.dir('gg', to=0) -Direction keys can be accessed in a mapping that contians "<dir>". -Other special keys are "<any>" which matches any single key and "<bg>" -which will run the function passively, without clearing the keybuffer. - -Additionally, there are shortcuts for accessing methods of the current -file manager and widget instance: -map('xyz', fm.method(foo=bar)) -will be translated to: -map('xyz', lamdba arg: arg.fm.method(foo=bar)) -If possible, arg.n and arg.direction are automatically inserted. - - -Example scenario ----------------- -If this keys are defined: -map("dd", "d<dir>", fm.cut(foo=bar)) -map.dir("gg", to=0) - -Type in the keys on the left and the function on the right will be executed: -dd => fm.cut(foo=bar) -5dd => fm.cut(foo=bar, narg=5) -dgg => fm.cut(foo=bar, dirarg=Direction(to=0)) -5dgg => fm.cut(foo=bar, narg=5, dirarg=Direction(to=0)) -5d3gg => fm.cut(foo=bar, narg=5, dirarg=Direction(to=3)) - -Example ~/.config/ranger/keys.py -------------------------- -from ranger.api.keys import * - -keymanager.map("browser", "d", fm.move(down=0.5, pages=True)) - -# Add less-like d/u keys to the "browser" context: -map = keymanager.get_context('browser') -map("d", fm.move(down=0.5, pages=True)) -map("u", fm.move(up=0.5, pages=True)) - -# Add keys to all contexts -map = KeyMapWithDirections() # create new empty keymap. -map("q", fm.exit()) -map.dir("<down>", down=3) # I'm quick, I want to move 3 at once! -keymanager.merge_all(map) # merge the new map into all existing ones. -""" - -from ranger.api.keys import * - -# =================================================================== -# == Define keys for everywhere: -# =================================================================== -map = global_keys = KeyMapWithDirections() -map('Q', fm.exit()) -map('<C-L>', fm.redraw_window()) -map('<backspace2>', alias='<backspace>') # Backspace is bugged sometimes - -#map('<dir>', wdg.move()) -@map('<dir>') # move around with direction keys -def move(arg): - arg.wdg.move(narg=arg.n, **arg.direction) - -# -------------------------------------------------- direction keys -map.dir('<down>', down=1) -map.dir('<up>', up=1) -map.dir('<left>', left=1) -map.dir('<right>', right=1) -map.dir('<home>', down=0, absolute=True) -map.dir('<end>', down=-1, absolute=True) -map.dir('<pagedown>', down=1, pages=True) -map.dir('<pageup>', down=-1, pages=True) -map.dir('%', down=50, percentage=True, absolute=True) - - -# =================================================================== -# == Define aliases -# =================================================================== -map = vim_aliases = KeyMapWithDirections() -map.dir('j', alias='<down>') -map.dir('k', alias='<up>') -map.dir('h', alias='<left>') -map.dir('l', alias='<right>') -map.dir('gg', alias='<home>') -map.dir('G', alias='<end>') -map.dir('<C-F>', alias='<pagedown>') -map.dir('<C-B>', alias='<pageup>') - -map = readline_aliases = KeyMapWithDirections() -map.dir('<C-B>', alias='<left>') -map.dir('<C-F>', alias='<right>') -map.dir('<C-A>', alias='<home>') -map.dir('<C-E>', alias='<end>') -map.dir('<C-D>', alias='<delete>') -map.dir('<C-H>', alias='<backspace>') - -map = midnight_commander_fkeys = KeyMapWithDirections() -map('<F1>', fm.display_help()) -map('<F3>', fm.display_file()) -map('<F4>', fm.edit_file()) -map('<F5>', fm.copy()) -map('<F6>', fm.cut()) -map('<F7>', fm.open_console('mkdir ')) -map('<F8>', fm.open_console(DELETE_WARNING)) -map('<F10>', fm.exit()) - -# =================================================================== -# == Define keys in "browser" context: -# =================================================================== -map = keymanager.get_context('browser') -map.merge(global_keys) -map.merge(vim_aliases) -map.merge(midnight_commander_fkeys) - -# -------------------------------------------------------- movement -map('gg', fm.move(to=0)) -map('<enter>', wdg.move(right=0)) # run with mode=0 -map('<C-D>', 'J', fm.move(down=0.5, pages=True)) -map('<C-U>', 'K', fm.move(up=0.5, pages=True)) -map(']', fm.move_parent(1)) -map('[', fm.move_parent(-1)) -map('}', fm.traverse()) -map('{', fm.history_go(-1)) - -# --------------------------------------------------------- history -map('H', fm.history_go(-1)) -map('L', fm.history_go(1)) - -# ----------------------------------------------- tagging / marking -map('t', fm.tag_toggle()) -map('T', fm.tag_remove()) -for key in ALLOWED_TAGS_KEYS: - map('"' + key, fm.tag_toggle(tag=key)) - -map(' ', fm.mark(toggle=True)) -map('v', fm.mark(all=True, toggle=True)) -map('V', 'uv', fm.mark(all=True, val=False)) -map('<C-V><dir>', fm.mark_in_direction(val=True)) -map('u<C-V><dir>', fm.mark_in_direction(val=False)) - -# ------------------------------------------ file system operations -map('y<bg>', fm.hint('*copy:* cop*y* *a*dd *r*emove ' \ - '*p*ath_to_xsel *d*irpath_to_xsel base*n*ame_to_xsel')) -map('yy', 'y<dir>', fm.copy()) -map('ya', fm.copy(mode='add')) -map('yr', fm.copy(mode='remove')) -map('yp', fm.execute_console('shell -d echo -n %d/%f | xsel -i')) -map('yd', fm.execute_console('shell -d echo -n %d | xsel -i')) -map('yn', fm.execute_console('shell -d echo -n %f | xsel -i')) -map('d<bg>', fm.hint('disk_*u*sage *cut:* *d*:cut *a*dd *r*emove')) -map('dd', 'd<dir>', fm.cut()) -map('da', fm.cut(mode='add')) -map('dr', fm.cut(mode='remove')) -map('p<bg>', fm.hint('*paste:* *p*aste *o*verwrite sym*l*inks ' \ - '*h*ardlinks relative_sym*L*inks')) -map('pp', fm.paste()) -map('po', fm.paste(overwrite=True)) -map('pl', fm.paste_symlink(relative=False)) -map('pL', fm.paste_symlink(relative=True)) -map('ph<bg>', fm.hint('*paste:* hard*l*inks')) -map('phl', fm.paste_hardlink()) - -map('u<bg>', fm.hint("un*y*ank, unbook*m*ark, unselect:*v*")) -map('ud', 'uy', fm.uncut()) - -# ------------------------------------ changing of file permissions -# type "+ow" for "chmod o+w %s" and so on -from itertools import product -octal_help = 'Enter the octal mode number for chmod' -symbolic_help = '%s %s to *r*ead, *w*rite, e*x*ecute' -for mode in product('ugoa', 'rwxXst'): - map('-%s%s' % mode, fm.execute_console('shell chmod %s-%s %%s' % mode)) - map('+%s%s' % mode, fm.execute_console('shell chmod %s+%s %%s' % mode)) -for n in product(range(8), range(8), range(8)): - map('=%d%d%d' % n, fm.execute_console('shell chmod %d%d%d %%s' % n)) - map('=%d<bg>' % n[0], fm.hint(octal_help)) - map('=%d%d<bg>' % (n[0], n[1]), fm.hint(octal_help)) - -# hints: -for who, name in zip('ugoa', ('user', 'group', 'others', 'all')): - map('-%s<bg>' % who, fm.hint(symbolic_help % ('forbid', name))) - map('+%s<bg>' % who, fm.hint(symbolic_help % ('allow', name))) -map('-<bg>', '+<bg>', '=<bg>', fm.hint('change permission for *u*ser, ' - '*g*roup, *o*thers, *a*ll')) -map('=<bg>', fm.hint(octal_help)) - -# ---------------------------------------------------- run programs -map('S', fm.execute_command(os.environ['SHELL'])) -map('E', fm.edit_file()) -map('du', fm.execute_console('shell -p du --max-depth=1 -h --apparent-size')) - -# -------------------------------------------------- toggle options -map('z<bg>', fm.hint('*f*ilter *options:* *d*irectories_first *c*ollape_preview ' \ - '*s*ort_case_insensitive show_*h*idden *p*review_files '\ - '*P*review_dirs use_pre*v*iew_script flush*i*nput *m*ouse')) -map('zh', '<C-h>', fm.toggle_boolean_option('show_hidden')) -map('zp', fm.toggle_boolean_option('preview_files')) -map('zP', fm.toggle_boolean_option('preview_directories')) -map('zv', fm.toggle_boolean_option('use_preview_script')) -map('zi', fm.toggle_boolean_option('flushinput')) -map('zd', fm.toggle_boolean_option('sort_directories_first')) -map('zc', fm.toggle_boolean_option('collapse_preview')) -map('zs', fm.toggle_boolean_option('sort_case_insensitive')) -map('zm', fm.toggle_boolean_option('mouse_enabled')) -map('zf', fm.open_console('filter ')) - -# ------------------------------------------------------------ sort -map('o<bg>', 'O<bg>', fm.hint('*sort by:* *s*ize *b*asename *m*time' \ - ' *c*time *a*time *t*ype *r*everse *n*atural')) -sort_dict = { - 's': 'size', - 'b': 'basename', - 'n': 'natural', - 'm': 'mtime', - 'c': 'ctime', - 'a': 'atime', - 't': 'type', -} - -for key, val in sort_dict.items(): - for key, is_capital in ((key, False), (key.upper(), True)): - # reverse if any of the two letters is capital - map('o' + key, fm.sort(func=val, reverse=is_capital)) - map('O' + key, fm.sort(func=val, reverse=True)) - -map('or', 'Or', 'oR', 'OR', lambda arg: \ - arg.fm.sort(reverse=not arg.fm.settings.sort_reverse)) - -# ----------------------------------------------- console shortcuts -@map("A") -def append_to_filename(arg): - command = 'rename ' + arg.fm.env.cf.basename - arg.fm.open_console(command) - -@map("I") -def insert_before_filename(arg): - command = 'rename ' + arg.fm.env.cf.basename - arg.fm.open_console(command, position=len('rename ')) - -map('cw', fm.open_console('rename ')) -map('cd', fm.open_console('cd ')) -map('f', fm.open_console('find ')) -map('@', fm.open_console('shell %s', position=len('shell '))) -map('#', fm.open_console('shell -p ')) - -# --------------------------------------------- jump to directories -map('g<bg>', fm.hint('*goto:* */* *d*ev *e*tc *h*:~ *m*edia ' \ - '*M*nt *o*pt *s*rv *u*sr *v*ar *R*anger *link:* *l*:target_path ' \ - 'rea*L*_path *tab:* *c*lose *n*ew nex*t* *T*:prev')) -map('gh', fm.cd('~')) -map('ge', fm.cd('/etc')) -map('gu', fm.cd('/usr')) -map('gd', fm.cd('/dev')) -map('gl', lambda arg: arg.fm.cd(os.path.realpath(arg.fm.env.cwd.path))) -map('gL', lambda arg: arg.fm.cd( - os.path.dirname(os.path.realpath(arg.fm.env.cf.path)))) -map('go', fm.cd('/opt')) -map('gv', fm.cd('/var')) -map('gr', 'g/', fm.cd('/')) -map('gm', fm.cd('/media')) -map('gM', fm.cd('/mnt')) -map('gs', fm.cd('/srv')) -map('gR', fm.cd(RANGERDIR)) - -# ------------------------------------------------------------ tabs -map('gc', '<C-W>', fm.tab_close()) -map('gt', '<TAB>', '<A-Right>', fm.tab_move(1)) -map('gT', '<S-TAB>', '<A-Left>', fm.tab_move(-1)) -@map('gn', '<C-N>') -def newtab_and_gohome(arg): - arg.fm.tab_new() - arg.fm.cd('~') # To return to the original directory, type `` -for n in range(1, 10): - map('g' + str(n), fm.tab_open(n)) - map('<A-' + str(n) + '>', fm.tab_open(n)) - -# ------------------------------------------------------- searching -map('/', fm.open_console('search ')) - -map('n', fm.search()) -map('N', fm.search(forward=False)) - -map('c<bg>', fm.hint('*w*:rename ch*d*ir *search order:* ' \ - '*a*time *c*time *M*time *m*imetype *s*ize *t*ag')) -map('ct', fm.search(order='tag')) -map('cc', fm.search(order='ctime')) -map('ca', fm.search(order='atime')) -map('cM', fm.search(order='mtime')) -map('cm', fm.search(order='mimetype')) -map('cs', fm.search(order='size')) - -# ------------------------------------------------------- bookmarks -for key in ALLOWED_BOOKMARK_KEYS: - map("`" + key, "'" + key, fm.enter_bookmark(key)) - map("m" + key, fm.set_bookmark(key)) - map("um" + key, fm.unset_bookmark(key)) -map("`<bg>", "'<bg>", "m<bg>", fm.draw_bookmarks()) -map('um<bg>', lambda arg: (arg.fm.draw_bookmarks(), - arg.fm.hint("delete which bookmark?"))) - -# ---------------------------------------------------- change views -map('i', fm.display_file()) -map('W', fm.display_log()) -map('?', fm.display_help()) -map('w', lambda arg: arg.fm.ui.open_taskview()) - -# ------------------------------------------------ system functions -map('ZZ', 'ZQ', fm.exit()) -map('<C-R>', fm.reset()) -map('R', fm.reload_cwd()) -@map('<C-C>') -def ctrl_c(arg): - try: - item = arg.fm.loader.queue[0] - except: - arg.fm.notify("Type Q or :quit<Enter> to exit Ranger") - else: - arg.fm.notify("Aborting: " + item.get_description()) - arg.fm.loader.remove(index=0) - -map(':', ';', fm.open_console('')) -map('!', fm.open_console('shell ')) -map('s', fm.open_console('shell ')) -map('r', fm.open_console('open_with ')) - - -# =================================================================== -# == Define keys for the pager -# =================================================================== -map = pager_keys = KeyMapWithDirections() -map.merge(global_keys) -map.merge(vim_aliases) - -# -------------------------------------------------------- movement -map('<left>', 'h', wdg.move(left=4)) -map('<right>', 'l', wdg.move(right=4)) -map('<C-D>', 'd', wdg.move(down=0.5, pages=True)) -map('<C-U>', 'u', wdg.move(up=0.5, pages=True)) -map('<C-F>', 'f', '<pagedown>', wdg.move(down=1, pages=True)) -map('<C-B>', 'b', '<pageup>', wdg.move(up=1, pages=True)) -map('<space>', wdg.move(down=0.8, pages=True)) -map('<cr>', wdg.move(down=1)) - -# ---------------------------------------------------------- others -map('E', fm.edit_file()) -map('?', fm.display_help()) - -# --------------------------------------------------- bind the keys -# There are two different kinds of pagers, each have a different -# method for exiting: - -map = keymanager.get_context('pager') -map.merge(pager_keys) -map('q', 'i', '<esc>', '<F3>', lambda arg: arg.fm.ui.close_pager()) - -map = keymanager.get_context('embedded_pager') -map.merge(pager_keys) -map('q', 'i', '<esc>', '<F3>', lambda arg: arg.fm.ui.close_embedded_pager()) - - -# =================================================================== -# == Define keys for the taskview -# =================================================================== -map = keymanager.get_context('taskview') -map.merge(global_keys) -map.merge(vim_aliases) -map('K', wdg.task_move(0)) -map('J', wdg.task_move(-1)) -map('dd', wdg.task_remove()) - -map('?', fm.display_help()) -map('w', 'q', ESC, ctrl('d'), ctrl('c'), - lambda arg: arg.fm.ui.close_taskview()) - - -# =================================================================== -# == Define keys for the console -# =================================================================== -map = keymanager.get_context('console') -map.merge(global_keys) -map.merge(readline_aliases) - -map('<up>', '<C-P>', wdg.history_move(-1)) -map('<down>', '<C-N>', wdg.history_move(1)) -map('<home>', '<C-A>', wdg.move(right=0, absolute=True)) -map('<end>', '<C-E>', wdg.move(right=-1, absolute=True)) -map('<tab>', wdg.tab()) -map('<s-tab>', wdg.tab(-1)) -map('<C-C>', '<C-D>', '<ESC>', wdg.close()) -map('<CR>', '<c-j>', wdg.execute()) -map('<F1>', lambda arg: arg.fm.display_command_help(arg.wdg)) - -map('<backspace>', '<C-H>', wdg.delete(-1)) -map('<delete>', '<C-D>', wdg.delete(0)) -map('<C-W>', wdg.delete_word()) -map('<C-K>', wdg.delete_rest(1)) -map('<C-U>', wdg.delete_rest(-1)) -map('<C-Y>', wdg.paste()) - -# Any key which is still undefined will simply be typed in. -@map('<any>') -def type_key(arg): - arg.wdg.type_key(arg.match) - -# Allow typing in numbers: -def type_chr(n): - return lambda arg: arg.wdg.type_key(str(n)) -for number in range(10): - map(str(number), type_chr(number)) - -# Unmap some global keys so we can type them: -map.unmap('Q') -map.directions.unmap('%') |