2626
2727import glob
2828import os
29+ import platform
2930import re
3031import shlex
3132
4344class Resources :
4445 def __init__ (self ):
4546 # default keybindings
47+ defaultModKey = 'Cmd+' if platform .system () == 'Darwin' else 'Ctrl+'
4648 self .keybindings = {}
4749 self .keybindings_lookup = {}
48- self .setKeyBinding ('menu' , 'open_file' , 'Ctrl+ o' )
49- self .setKeyBinding ('menu' , 'open_file_in_new_tab' , 'Ctrl+ t' )
50+ self .setKeyBinding ('menu' , 'open_file' , defaultModKey + ' o' )
51+ self .setKeyBinding ('menu' , 'open_file_in_new_tab' , defaultModKey + ' t' )
5052 self .setKeyBinding ('menu' , 'open_modified_files' , 'Shift+Ctrl+O' )
5153 self .setKeyBinding ('menu' , 'open_commit' , 'Shift+Ctrl+T' )
5254 self .setKeyBinding ('menu' , 'reload_file' , 'Shift+Ctrl+R' )
53- self .setKeyBinding ('menu' , 'save_file' , 'Ctrl+ s' )
54- self .setKeyBinding ('menu' , 'save_file_as' , 'Shift+Ctrl +A' )
55- self .setKeyBinding ('menu' , 'save_all' , 'Shift+Ctrl +S' )
55+ self .setKeyBinding ('menu' , 'save_file' , defaultModKey + ' s' )
56+ self .setKeyBinding ('menu' , 'save_file_as' , defaultModKey + 'Shift+A' )
57+ self .setKeyBinding ('menu' , 'save_all' , defaultModKey + 'Shift+S' )
5658 self .setKeyBinding ('menu' , 'new_2_way_file_merge' , 'Ctrl+2' )
5759 self .setKeyBinding ('menu' , 'new_3_way_file_merge' , 'Ctrl+3' )
5860 self .setKeyBinding ('menu' , 'new_n_way_file_merge' , 'Ctrl+4' )
59- self .setKeyBinding ('menu' , 'close_tab' , 'Ctrl+ w' )
60- self .setKeyBinding ('menu' , 'undo_close_tab' , 'Shift+Ctrl +W' )
61- self .setKeyBinding ('menu' , 'quit' , 'Ctrl+ q' )
62- self .setKeyBinding ('menu' , 'undo' , 'Ctrl+ z' )
63- self .setKeyBinding ('menu' , 'redo' , 'Shift+Ctrl +Z' )
64- self .setKeyBinding ('menu' , 'cut' , 'Ctrl+ x' )
65- self .setKeyBinding ('menu' , 'copy' , 'Ctrl+ c' )
66- self .setKeyBinding ('menu' , 'paste' , 'Ctrl+ v' )
67- self .setKeyBinding ('menu' , 'select_all' , 'Ctrl+ a' )
68- self .setKeyBinding ('menu' , 'clear_edits' , 'Ctrl+ r' )
69- self .setKeyBinding ('menu' , 'dismiss_all_edits' , 'Ctrl+ d' )
70- self .setKeyBinding ('menu' , 'find' , 'Ctrl+ f' )
71- self .setKeyBinding ('menu' , 'find_next' , 'Ctrl+ g' )
72- self .setKeyBinding ('menu' , 'find_previous' , 'Shift+Ctrl +G' )
73- self .setKeyBinding ('menu' , 'go_to_line' , 'Shift+Ctrl+L ' )
74- self .setKeyBinding ('menu' , 'realign_all' , 'Ctrl+ l' )
75- self .setKeyBinding ('menu' , 'isolate' , 'Ctrl+ i' )
61+ self .setKeyBinding ('menu' , 'close_tab' , defaultModKey + ' w' )
62+ self .setKeyBinding ('menu' , 'undo_close_tab' , defaultModKey + 'Shift+W' )
63+ self .setKeyBinding ('menu' , 'quit' , defaultModKey + ' q' )
64+ self .setKeyBinding ('menu' , 'undo' , defaultModKey + ' z' )
65+ self .setKeyBinding ('menu' , 'redo' , defaultModKey + 'Shift+Z' )
66+ self .setKeyBinding ('menu' , 'cut' , defaultModKey + ' x' )
67+ self .setKeyBinding ('menu' , 'copy' , defaultModKey + ' c' )
68+ self .setKeyBinding ('menu' , 'paste' , defaultModKey + ' v' )
69+ self .setKeyBinding ('menu' , 'select_all' , defaultModKey + ' a' )
70+ self .setKeyBinding ('menu' , 'clear_edits' , defaultModKey + ' r' )
71+ self .setKeyBinding ('menu' , 'dismiss_all_edits' , defaultModKey + ' d' )
72+ self .setKeyBinding ('menu' , 'find' , defaultModKey + ' f' )
73+ self .setKeyBinding ('menu' , 'find_next' , defaultModKey + ' g' )
74+ self .setKeyBinding ('menu' , 'find_previous' , defaultModKey + 'Shift+G' )
75+ self .setKeyBinding ('menu' , 'go_to_line' , defaultModKey + 'Shift+l ' )
76+ self .setKeyBinding ('menu' , 'realign_all' , defaultModKey + ' l' )
77+ self .setKeyBinding ('menu' , 'isolate' , defaultModKey + ' i' )
7678 self .setKeyBinding ('menu' , 'first_difference' , 'Shift+Ctrl+Up' )
7779 self .setKeyBinding ('menu' , 'previous_difference' , 'Ctrl+Up' )
7880 self .setKeyBinding ('menu' , 'next_difference' , 'Ctrl+Down' )
@@ -83,24 +85,24 @@ def __init__(self):
8385 self .setKeyBinding ('menu' , 'last_tab' , 'Shift+Ctrl+Page_Down' )
8486 self .setKeyBinding ('menu' , 'shift_pane_right' , 'Shift+Ctrl+parenright' )
8587 self .setKeyBinding ('menu' , 'shift_pane_left' , 'Shift+Ctrl+parenleft' )
86- self .setKeyBinding ('menu' , 'convert_to_upper_case' , 'Ctrl+ u' )
87- self .setKeyBinding ('menu' , 'convert_to_lower_case' , 'Shift+Ctrl +U' )
88- self .setKeyBinding ('menu' , 'sort_lines_in_ascending_order' , 'Ctrl+ y' )
89- self .setKeyBinding ('menu' , 'sort_lines_in_descending_order' , 'Shift+Ctrl +Y' )
90- self .setKeyBinding ('menu' , 'remove_trailing_white_space' , 'Ctrl+ k' )
91- self .setKeyBinding ('menu' , 'convert_tabs_to_spaces' , 'Ctrl+ b' )
88+ self .setKeyBinding ('menu' , 'convert_to_upper_case' , defaultModKey + ' u' )
89+ self .setKeyBinding ('menu' , 'convert_to_lower_case' , defaultModKey + 'Shift+U' )
90+ self .setKeyBinding ('menu' , 'sort_lines_in_ascending_order' , defaultModKey + ' y' )
91+ self .setKeyBinding ('menu' , 'sort_lines_in_descending_order' , defaultModKey + 'Shift+Y' )
92+ self .setKeyBinding ('menu' , 'remove_trailing_white_space' , defaultModKey + ' k' )
93+ self .setKeyBinding ('menu' , 'convert_tabs_to_spaces' , defaultModKey + ' b' )
9294 self .setKeyBinding ('menu' , 'convert_leading_spaces_to_tabs' , 'Shift+Ctrl+B' )
93- self .setKeyBinding ('menu' , 'increase_indenting' , 'Shift+Ctrl +greater' )
94- self .setKeyBinding ('menu' , 'decrease_indenting' , 'Shift+Ctrl +less' )
95- self .setKeyBinding ('menu' , 'convert_to_dos' , 'Shift+Ctrl +E' )
96- self .setKeyBinding ('menu' , 'convert_to_mac' , 'Shift+Ctrl +C' )
97- self .setKeyBinding ('menu' , 'convert_to_unix' , 'Ctrl+ e' )
98- self .setKeyBinding ('menu' , 'copy_selection_right' , 'Shift+Ctrl +Right' )
99- self .setKeyBinding ('menu' , 'copy_selection_left' , 'Shift+Ctrl +Left' )
100- self .setKeyBinding ('menu' , 'copy_left_into_selection' , 'Ctrl+ Right' )
101- self .setKeyBinding ('menu' , 'copy_right_into_selection' , 'Ctrl+ Left' )
102- self .setKeyBinding ('menu' , 'merge_from_left_then_right' , 'Ctrl+ m' )
103- self .setKeyBinding ('menu' , 'merge_from_right_then_left' , 'Shift+Ctrl +M' )
95+ self .setKeyBinding ('menu' , 'increase_indenting' , defaultModKey + 'Shift+greater' )
96+ self .setKeyBinding ('menu' , 'decrease_indenting' , defaultModKey + 'Shift+less' )
97+ self .setKeyBinding ('menu' , 'convert_to_dos' , defaultModKey + 'Shift+E' )
98+ self .setKeyBinding ('menu' , 'convert_to_mac' , defaultModKey + 'Shift+C' )
99+ self .setKeyBinding ('menu' , 'convert_to_unix' , defaultModKey + ' e' )
100+ self .setKeyBinding ('menu' , 'copy_selection_right' , defaultModKey + 'Shift+Right' )
101+ self .setKeyBinding ('menu' , 'copy_selection_left' , defaultModKey + 'Shift+Left' )
102+ self .setKeyBinding ('menu' , 'copy_left_into_selection' , defaultModKey + ' Right' )
103+ self .setKeyBinding ('menu' , 'copy_right_into_selection' , defaultModKey + ' Left' )
104+ self .setKeyBinding ('menu' , 'merge_from_left_then_right' , defaultModKey + ' m' )
105+ self .setKeyBinding ('menu' , 'merge_from_right_then_left' , defaultModKey + 'Shift+M' )
104106 self .setKeyBinding ('menu' , 'help_contents' , 'F1' )
105107 self .setKeyBinding ('line_mode' , 'enter_align_mode' , 'space' )
106108 self .setKeyBinding ('line_mode' , 'enter_character_mode' , 'Return' )
@@ -126,13 +128,13 @@ def __init__(self):
126128 self .setKeyBinding ('line_mode' , 'right' , 'l' )
127129 self .setKeyBinding ('line_mode' , 'extend_right' , 'Shift+Right' )
128130 self .setKeyBinding ('line_mode' , 'page_up' , 'Page_Up' )
129- self .setKeyBinding ('line_mode' , 'page_up' , 'Ctrl+ u' )
131+ self .setKeyBinding ('line_mode' , 'page_up' , defaultModKey + ' u' )
130132 self .setKeyBinding ('line_mode' , 'extend_page_up' , 'Shift+Page_Up' )
131- self .setKeyBinding ('line_mode' , 'extend_page_up' , 'Shift+Ctrl +U' )
133+ self .setKeyBinding ('line_mode' , 'extend_page_up' , defaultModKey + 'Shift+U' )
132134 self .setKeyBinding ('line_mode' , 'page_down' , 'Page_Down' )
133- self .setKeyBinding ('line_mode' , 'page_down' , 'Ctrl+ d' )
135+ self .setKeyBinding ('line_mode' , 'page_down' , defaultModKey + ' d' )
134136 self .setKeyBinding ('line_mode' , 'extend_page_down' , 'Shift+Page_Down' )
135- self .setKeyBinding ('line_mode' , 'extend_page_down' , 'Shift+Ctrl +D' )
137+ self .setKeyBinding ('line_mode' , 'extend_page_down' , defaultModKey + 'Shift+D' )
136138 self .setKeyBinding ('line_mode' , 'delete_text' , 'BackSpace' )
137139 self .setKeyBinding ('line_mode' , 'delete_text' , 'Delete' )
138140 self .setKeyBinding ('line_mode' , 'delete_text' , 'x' )
@@ -165,9 +167,9 @@ def __init__(self):
165167 self .setKeyBinding ('align_mode' , 'right' , 'Right' )
166168 self .setKeyBinding ('align_mode' , 'right' , 'l' )
167169 self .setKeyBinding ('align_mode' , 'page_up' , 'Page_Up' )
168- self .setKeyBinding ('align_mode' , 'page_up' , 'Ctrl+ u' )
170+ self .setKeyBinding ('align_mode' , 'page_up' , defaultModKey + ' u' )
169171 self .setKeyBinding ('align_mode' , 'page_down' , 'Page_Down' )
170- self .setKeyBinding ('align_mode' , 'page_down' , 'Ctrl+ d' )
172+ self .setKeyBinding ('align_mode' , 'page_down' , defaultModKey + ' d' )
171173 self .setKeyBinding ('character_mode' , 'enter_line_mode' , 'Escape' )
172174
173175 # default colours
@@ -232,6 +234,8 @@ def setKeyBinding(self, ctx: str, s: str, v: str) -> None:
232234 modifiers |= Gdk .ModifierType .SHIFT_MASK
233235 elif token == 'Ctrl' :
234236 modifiers |= Gdk .ModifierType .CONTROL_MASK
237+ elif token == 'Cmd' :
238+ modifiers |= Gdk .ModifierType .META_MASK
235239 elif token == 'Alt' :
236240 modifiers |= Gdk .ModifierType .MOD1_MASK
237241 elif len (token ) == 0 or token [0 ] == '_' :
0 commit comments