summary refs log blame commit diff stats
path: root/ranger/defaults/keys.py
blob: 7d6f7bd646379096eb53efec55059031e286ca0c (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11




                                                
                                                                                    
 



                                                   


                                                                 
                                                     

                               

                                      

                                                            

                                                             



                                                             











                                                                        

                        


                                                                  


                                                      

                                                             


                                                    







                                    
 

                                     
 

                                         


                                                                       
 
                          





                                                   



                                          
 
                     
                                      
                                     
                       
 
                                    
 
 

                                                
                                                      


                                             

                          
                                                    
 


                                                              
 

                                                                 

                  





                                                                         
                                               

                                                   

                          

                                                           

                                                

                                           
                                    
 
                                    
import curses
from curses.ascii import ctrl, ESC

def initialize_commands(command_list):
	from ranger.actions import Actions as do
	from ranger.container.bookmarks import ALLOWED_KEYS as ALLOWED_BOOKMARK_KEYS

	def bind(fnc, *keys):
		command_list.bind(fnc, *keys)

	# syntax for binding keys: bind(fnc, *keys)
	# 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

	# currying
	def c(fnc, *args, **keywords):
		return lambda fm: fnc(fm, *args, **keywords)

	def move(**keywords):
		return lambda fm: fm.move_pointer(**keywords)

	def move_pages(n):
		return lambda fm: fm.move_pointer_by_pages(n)

	bind(do.move_left,               'h', curses.KEY_BACKSPACE, 127)
	bind(do.move_right,              'l')
	bind(c(do.move_right, mode=1),   curses.KEY_ENTER, ctrl('j'))
	bind(c(do.history_go, -1),       'H')
	bind(c(do.history_go,  1),       'L')
	bind(move( relative = 1 ),       'j')
	bind(move_pages( 0.5 ),          'J')
	bind(move( relative = -1 ),      'k')
	bind(move_pages( -0.5 ),         'K')
	bind(move( absolute = 0 ),       'gg')
	bind(move( absolute = -1 ),      'G')
	bind(do.edit_file,               'E')

	# toggle options
	def toggle_option(string):
		return lambda fm: fm.toggle_boolean_option(string)

	bind(toggle_option('show_hidden'),       'th')
	bind(toggle_option('preview_files'),     'tp')
	bind(toggle_option('directories_first'), 'td')

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

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

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

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

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

	def test(fm):
		from ranger import log
		log(fm.bookmarks.dct)
	bind(test, 'x')

	command_list.rebuild_paths()


def initialize_console_commands(command_list):
	from ranger.actions import Actions as do
	from ranger.gui.widgets.console import Console

	def bind(fnc, *keys):
		command_list.bind(fnc, *keys)

	def type_key(key):
		return lambda con: con.type_key(key)

	# currying
	def c(fnc, *args, **keywords):
		return lambda con: fnc(con, *args, **keywords)

	def c_fm(fnc, *args, **keywords):
		return lambda con: fnc(con.fm, *args, **keywords)

	# movement
	bind(c(Console.move, relative = -1), curses.KEY_LEFT, ctrl('b'))
	bind(c(Console.move, relative =  1), curses.KEY_RIGHT, ctrl('f'))
	bind(c(Console.move, absolute = 0), curses.KEY_HOME, ctrl('a'))
	bind(c(Console.move, absolute = -1), curses.KEY_END, ctrl('e'))
	bind(c(Console.delete, 0), curses.KEY_DC, ctrl('d'))
	bind(c(Console.delete, -1), curses.KEY_BACKSPACE, 127, ctrl('h'))
	bind(c(Console.delete_word), ctrl('W'))
	bind(c(Console.delete_rest, -1), ctrl('U'))
	bind(c(Console.delete_rest,  1), ctrl('K'))

	# system functions
	bind(c(Console.close),    ESC, ctrl('C'))
	bind(Console.execute,  curses.KEY_ENTER, ctrl('j'))
	bind(c_fm(do.redraw), ctrl('L'))
	bind(c_fm(do.resize), curses.KEY_RESIZE)

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

	command_list.rebuild_paths()