add support for opening terminal in set directory
This commit is contained in:
		
							parent
							
								
									b76df7f5b2
								
							
						
					
					
						commit
						5190acf978
					
				
							
								
								
									
										46
									
								
								README.rst
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								README.rst
									
									
									
									
									
								
							| @ -6,8 +6,8 @@ unset) and then falls back to ``$XDG_CONFIG_DIRS``. | |||||||
| DEPENDENCIES | DEPENDENCIES | ||||||
| ============ | ============ | ||||||
| 
 | 
 | ||||||
| A vte version >= 0.30. A patch is required to expose the functions needed for | A vte version >= ``0.34``. A patch is required to expose the functions needed | ||||||
| keyboard selection. | for keyboard selection. | ||||||
| 
 | 
 | ||||||
| KEYBINDINGS | KEYBINDINGS | ||||||
| =========== | =========== | ||||||
| @ -15,19 +15,35 @@ KEYBINDINGS | |||||||
| INSERT MODE | INSERT MODE | ||||||
| ----------- | ----------- | ||||||
| 
 | 
 | ||||||
| +-----------------------+--------------------------------------+ | +-----------------------+---------------------------------------------+ | ||||||
| | ``ctrl-shift-escape`` | reload configuration file            | | | ``ctrl-shift-escape`` | reload configuration file                   | | ||||||
| +-----------------------+--------------------------------------+ | +-----------------------+---------------------------------------------+ | ||||||
| | ``ctrl-shift-c``      | copy to CLIPBOARD                    | | | ``ctrl-shift-c``      | copy to CLIPBOARD                           | | ||||||
| +-----------------------+--------------------------------------+ | +-----------------------+---------------------------------------------+ | ||||||
| | ``ctrl-shift-v``      | paste from CLIPBOARD                 | | | ``ctrl-shift-v``      | paste from CLIPBOARD                        | | ||||||
| +-----------------------+--------------------------------------+ | +-----------------------+---------------------------------------------+ | ||||||
| | ``ctrl-shift-u``      | unicode input (standard GTK binding) | | | ``ctrl-shift-u``      | unicode input (standard GTK binding)        | | ||||||
| +-----------------------+--------------------------------------+ | +-----------------------+---------------------------------------------+ | ||||||
| | ``ctrl-tab``          | start scrollback completion          | | | ``ctrl-tab``          | start scrollback completion                 | | ||||||
| +-----------------------+--------------------------------------+ | +-----------------------+---------------------------------------------+ | ||||||
| | ``ctrl-shift-space``  | start command mode                   | | | ``ctrl-shift-space``  | start command mode                          | | ||||||
| +-----------------------+--------------------------------------+ | +-----------------------+---------------------------------------------+ | ||||||
|  | | ``ctrl-shift-t``      | open terminal in the current directory [1]_ | | ||||||
|  | +-----------------------+---------------------------------------------+ | ||||||
|  | 
 | ||||||
|  | .. [1] The directory can be set by a process running in the terminal. For | ||||||
|  |        example, with zsh: | ||||||
|  | 
 | ||||||
|  |        .. code:: sh | ||||||
|  | 
 | ||||||
|  |             if [[ $TERM == xterm-termite ]]; then | ||||||
|  |               . /etc/profile.d/vte.sh | ||||||
|  | 
 | ||||||
|  |               chpwd() { | ||||||
|  |                 __vte_ps1 | ||||||
|  |               } | ||||||
|  |             fi | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| COMMAND MODE | COMMAND MODE | ||||||
| ------------ | ------------ | ||||||
|  | |||||||
							
								
								
									
										15
									
								
								termite.cc
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								termite.cc
									
									
									
									
									
								
							| @ -102,6 +102,18 @@ void launch_browser(char *browser, char *url) { | |||||||
|     g_spawn_async(NULL, browser_cmd, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL); |     g_spawn_async(NULL, browser_cmd, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static void launch_in_directory(VteTerminal *vte) { | ||||||
|  |     const char *uri = vte_terminal_get_current_directory_uri(vte); | ||||||
|  |     if (!uri) { | ||||||
|  |         g_printerr("no directory uri set"); | ||||||
|  |         return; | ||||||
|  |     } | ||||||
|  |     auto dir = make_unique(g_filename_from_uri(uri, nullptr, nullptr), g_free); | ||||||
|  |     char term[] = "termite"; // maybe this should be argv[0]
 | ||||||
|  |     char *cmd[] = {term, nullptr}; | ||||||
|  |     g_spawn_async(dir.get(), cmd, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| static void find_urls(VteTerminal *vte, search_panel_info *panel_info) { | static void find_urls(VteTerminal *vte, search_panel_info *panel_info) { | ||||||
|     GRegex *regex = g_regex_new(url_regex, G_REGEX_CASELESS, G_REGEX_MATCH_NOTEMPTY, NULL); |     GRegex *regex = g_regex_new(url_regex, G_REGEX_CASELESS, G_REGEX_MATCH_NOTEMPTY, NULL); | ||||||
|     GArray *attributes = g_array_new(FALSE, FALSE, sizeof (vte_char_attributes)); |     GArray *attributes = g_array_new(FALSE, FALSE, sizeof (vte_char_attributes)); | ||||||
| @ -583,6 +595,9 @@ gboolean key_press_cb(VteTerminal *vte, GdkEventKey *event, keybind_info *info) | |||||||
|     } |     } | ||||||
|     if (modifiers == (GDK_CONTROL_MASK|GDK_SHIFT_MASK)) { |     if (modifiers == (GDK_CONTROL_MASK|GDK_SHIFT_MASK)) { | ||||||
|         switch (gdk_keyval_to_lower(event->keyval)) { |         switch (gdk_keyval_to_lower(event->keyval)) { | ||||||
|  |             case GDK_KEY_t: | ||||||
|  |                 launch_in_directory(vte); | ||||||
|  |                 return TRUE; | ||||||
|             case GDK_KEY_space: |             case GDK_KEY_space: | ||||||
|                 enter_command_mode(vte, &info->select); |                 enter_command_mode(vte, &info->select); | ||||||
|                 return TRUE; |                 return TRUE; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Daniel Micay
						Daniel Micay