xiterm

simple vte terminal emulator
git clone https://git.ce9e.org/xiterm.git

commit
6717be65628503fda89184890161c5f1695f04ea
parent
e8ba7e087c366a519fc58245dba81b02195e8a7a
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2020-09-18 18:12
open new tab in same directory

Diffstat

M xiterm.c 27 ++++++++++++++++++++++++---

1 files changed, 24 insertions, 3 deletions


diff --git a/xiterm.c b/xiterm.c

@@ -89,10 +89,27 @@ VteTerminal *get_current_term(void) {
   89    89 	}
   90    90 }
   91    91 
   -1    92 const char* get_cwd(VteTerminal *term) {
   -1    93 	// only works if /etc/profile.d/vte-2.91.sh was sourced in .bashrc
   -1    94 	const char *uri;
   -1    95 
   -1    96 	if (term != NULL) {
   -1    97 		uri = vte_terminal_get_current_directory_uri(term);
   -1    98 		if (uri != NULL) {
   -1    99 			return g_filename_from_uri(uri, NULL, NULL);
   -1   100 		}
   -1   101 	}
   -1   102 
   -1   103 	return NULL;
   -1   104 }
   -1   105 
   92   106 void setup_terminal(VteTerminal *term) {
   93   107 	int tag;
   -1   108 	const char *cwd;
   94   109 
   95    -1 	vte_terminal_spawn_async(term, VTE_PTY_DEFAULT, NULL, cmd, NULL, G_SPAWN_DEFAULT, NULL, NULL, NULL, -1, NULL, NULL, NULL);
   -1   110 	cwd = get_cwd(get_current_term());
   -1   111 
   -1   112 	vte_terminal_spawn_async(term, VTE_PTY_DEFAULT, cwd, cmd, NULL, G_SPAWN_DEFAULT, NULL, NULL, NULL, -1, NULL, NULL, NULL);
   96   113 	vte_terminal_set_cursor_blink_mode(term, VTE_CURSOR_BLINK_OFF);
   97   114 	tag = vte_terminal_match_add_regex(term, url_regex, 0);
   98   115 	vte_terminal_match_set_cursor_name(term, tag, "pointer");
@@ -117,10 +134,14 @@ void add_tab(void) {
  117   134 
  118   135 	update_show_tabs();
  119   136 	gtk_widget_show(page);
  120    -1 	gtk_notebook_set_current_page(notebook, page_num);
  121    -1 	gtk_widget_grab_focus(page);
  122   137 
   -1   138 	// needs to execute after gtk_widget_show() (for proper dimensions)
   -1   139 	// and before gtk_notebook_get_current_page() (so we can access the
   -1   140 	// previous term to get cwd)
  123   141 	setup_terminal(VTE_TERMINAL(page));
   -1   142 
   -1   143 	gtk_notebook_set_current_page(notebook, page_num);
   -1   144 	gtk_widget_grab_focus(page);
  124   145 }
  125   146 
  126   147 gboolean on_key(GtkWidget *widget, GdkEventKey *event, gpointer user_data) {