about summary refs log tree commit diff stats
path: root/html/083scenario_screen_test.mu.html
diff options
context:
space:
mode:
Diffstat (limited to 'html/083scenario_screen_test.mu.html')
0 files changed, 0 insertions, 0 deletions
a> 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
import curses
from curses.ascii import *
from ranger import RANGERDIR
from ranger import log
from ranger.gui.widgets.console import Console
from ranger.container.bookmarks import ALLOWED_KEYS as ALLOWED_BOOKMARK_KEYS

# syntax for binding keys: bind(*keys, fnc)
# fnc is a function which is called with the FM instance,
# keys are one or more key-combinations which are either:
# * a string
# * an integer which represents an ascii code
# * a tuple of integers
#
# in initialize_console_commands, fnc is a function which is
# called with the console widget instance instead.

def initialize_commands(command_list):
	"""Initialize the commands for the main user interface"""

	def do(method, *args, **kw):
		return lambda fm, n: getattr(fm, method)(*args, **kw)

	def bind(*args):
		command_list.bind(args[-1], *args[:-1])

	bind('h', curses.KEY_BACKSPACE, DEL, do('move_left'))
	bind('l', do('move_right'))
	bind(curses.KEY_ENTER, ctrl('j'), do('move_right', mode=1))
	bind('H', do('history_go', -1))
	bind('L', do('history_go',  1))
	bind('J', do('move_pointer_by_pages', 0.5))
	bind('K', do('move_pointer_by_pages', -0.5))
	bind('E', do('edit_file'))
	bind('o', do('force_load_preview'))


	bind('yy', 'cp', do('copy'))
	bind('cut', do('cut'))
	bind('p', do('paste'))

	bind('th', do('toggle_boolean_option', 'show_hidden'))
	bind('tp', do('toggle_boolean_option', 'preview_files'))
	bind('td', do('toggle_boolean_option', 'directories_first'))

	bind('cd', do('open_console', ':', 'cd '))
	bind('f', do('open_console', '>', 'find '))

	# key combinations which change the current directory
	def cd(path):
		return lambda fm: fm.enter_dir(path)

	bind('gh', do('cd', '~'))
	bind('ge', do('cd', '/etc'))
	bind('gu', do('cd', '/usr'))
	bind('gr', do('cd', '/'))
	bind('gm', do('cd', '/media'))
	bind('gn', do('cd', '/mnt'))
	bind('gt', do('cd', '~/.trash'))
	bind('gs', do('cd', '/srv'))
	bind('gR', do('cd', RANGERDIR))

	bind('n', do('search_forward'))
	bind('N', do('search_backward'))

	# bookmarks
	for key in ALLOWED_BOOKMARK_KEYS:
		bind("`" + key, "'" + key, do('enter_bookmark', key))
		bind("m" + key, do('set_bookmark', key))
		bind("um" + key, do('unset_bookmark', key))

	# system functions
	bind(ctrl('D'), 'q', 'ZZ', do('exit'))
	bind(ctrl('R'), do('reset'))
	bind(ctrl('L'), do('redraw_window'))
	bind(ctrl('C'), do('interrupt'))
	bind(curses.KEY_RESIZE, do('resize'))
	bind(curses.KEY_MOUSE, do('handle_mouse'))
	bind(':', do('open_console', ':'))
	bind('>', do('open_console', '>'))
	bind('/', do('open_console', '/'))
	bind('?', do('open_console', '?'))
	bind('!', do('open_console', '!'))
	bind('r', do('open_console', '@'))


	# definitions which require their own function:
	def test(fm, n):
		from ranger import log
		log(fm.bookmarks.dct)
	bind('x', test)

	def ggG(default):
		# moves to an absolute point, or to a predefined default
		# if no number is specified.
		return lambda fm, n: \
				fm.move_pointer(absolute=(n or default))

	bind('gg', ggG(0))
	bind('G', ggG(-1))

	bind('%', lambda fm, n: fm.move_pointer_by_percentage(absolute=n or 0))

	def jk(direction):
		# moves up or down by the specified number or one, in
		# the predefined direction
		return lambda fm, n: \
				fm.move_pointer(relative=(n or 1) * direction)

	bind('j', jk(1))
	bind('k', jk(-1))

	command_list.rebuild_paths()


def initialize_console_commands(command_list):
	"""Initialize the commands for the console widget only"""

	def bind(*args):
		command_list.bind(args[-1], *args[:-1])

	def do(method, *args, **kw):
		return lambda fm: getattr(fm, method)(*args, **kw)

	def do_fm(method, *args, **kw):
		return lambda con: getattr(con.fm, method)(*args, **kw)

	# movement
	bind(curses.KEY_UP, do('history_move', -1))
	bind(curses.KEY_DOWN, do('history_move', 1))
	bind(ctrl('b'), curses.KEY_LEFT, do('move', relative = -1))
	bind(ctrl('f'), curses.KEY_RIGHT, do('move', relative = 1))
	bind(ctrl('a'), curses.KEY_HOME, do('move', absolute = 0))
	bind(ctrl('e'), curses.KEY_END, do('move', absolute = -1))
	bind(ctrl('d'), curses.KEY_DC, do('delete', 0))
	bind(ctrl('h'), curses.KEY_BACKSPACE, DEL, do('delete', -1))
	bind(ctrl('w'), do('delete_word'))
	bind(ctrl('k'), do('delete_rest', 1))
	bind(ctrl('u'), do('delete_rest', -1))
	bind(ctrl('y'), do('paste'))

	# system functions
	bind(ctrl('c'), ESC, do('close'))
	bind(ctrl('j'), curses.KEY_ENTER, do('execute'))
	bind(ctrl('l'), do_fm('redraw'))
	bind(TAB, do('tab'))
	bind(curses.KEY_BTAB, do('tab', -1))
	bind(curses.KEY_RESIZE, do_fm('resize'))

	# type keys
	def type_key(key):
		return lambda con: con.type_key(key)

	for i in range(ord(' '), ord('~')+1):
		bind(i, type_key(i))

	command_list.rebuild_paths()