xiterm

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

commit
89031e54ef373f36e0e76b861487a48b916c081d
parent
c47f3000c99fc77828006b1a7fdb126887e43eda
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2024-10-25 16:00
use default_cmd on new tabs

Diffstat

M xiterm.c 19 ++++++++++---------

1 files changed, 10 insertions, 9 deletions


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

@@ -15,7 +15,8 @@ VteRegex *url_regex;
   15    15 GdkRGBA palette[16];
   16    16 double font_scale = 1;
   17    17 
   18    -1 char *cmd[4] = {"/bin/bash", NULL, NULL, NULL};
   -1    18 char *default_cmd[2] = {"/bin/bash", NULL};
   -1    19 char *initial_cmd[4] = {"/bin/bash", NULL, NULL, NULL};
   19    20 const char *colors[16] = {
   20    21 	"#000", "#c00", "#591", "#b71", "#16c", "#96a", "#299", "#ccc",
   21    22 	"#333", "#f33", "#7c0", "#ed0", "#6ad", "#c8b", "#0dd", "#fff",
@@ -102,7 +103,7 @@ const char* get_cwd(VteTerminal *term) {
  102   103 	return NULL;
  103   104 }
  104   105 
  105    -1 void setup_terminal(VteTerminal *term) {
   -1   106 void setup_terminal(VteTerminal *term, char **cmd) {
  106   107 	int tag;
  107   108 	const char *cwd;
  108   109 
@@ -122,7 +123,7 @@ void setup_terminal(VteTerminal *term) {
  122   123 	g_signal_connect(term, "child-exited", G_CALLBACK(on_term_exit), NULL);
  123   124 }
  124   125 
  125    -1 void add_tab(void) {
   -1   126 void add_tab(char **cmd) {
  126   127 	GtkWidget *page, *label;
  127   128 	int page_num;
  128   129 
@@ -142,7 +143,7 @@ void add_tab(void) {
  142   143 	// needs to execute after gtk_widget_show() (for proper dimensions)
  143   144 	// and before gtk_notebook_get_current_page() (so we can access the
  144   145 	// previous term to get cwd)
  145    -1 	setup_terminal(VTE_TERMINAL(page));
   -1   146 	setup_terminal(VTE_TERMINAL(page), cmd);
  146   147 
  147   148 	gtk_notebook_set_current_page(notebook, page_num);
  148   149 	gtk_widget_grab_focus(page);
@@ -165,7 +166,7 @@ gboolean on_key(GtkWidget *widget, GdkEventKey *event, gpointer user_data) {
  165   166 	if (!(modifiers & GDK_CONTROL_MASK)) {
  166   167 		return FALSE;
  167   168 	} else if (KEY(GDK_KEY_T, GDK_SHIFT_MASK)) {
  168    -1 		add_tab();
   -1   169 		add_tab(default_cmd);
  169   170 	} else if (KEY(GDK_KEY_Page_Up, 0)) {
  170   171 		gtk_notebook_prev_page(notebook);
  171   172 	} else if (KEY(GDK_KEY_Page_Down, 0)) {
@@ -209,9 +210,9 @@ int main(int argc, char **argv) {
  209   210 				strncat(command, " ", 128 - 1 - strlen(command));
  210   211 			}
  211   212 		}
  212    -1 		cmd[0] = "/bin/sh";
  213    -1 		cmd[1] = "-c";
  214    -1 		cmd[2] = command;
   -1   213 		initial_cmd[0] = "/bin/sh";
   -1   214 		initial_cmd[1] = "-c";
   -1   215 		initial_cmd[2] = command;
  215   216 	}
  216   217 
  217   218 	url_regex = vte_regex_new_for_match(REGEX_URL, -1, PCRE2_MULTILINE, &err);
@@ -237,7 +238,7 @@ int main(int argc, char **argv) {
  237   238 	gtk_notebook_set_show_border(notebook, FALSE);
  238   239 	gtk_widget_show_all(GTK_WIDGET(window));
  239   240 
  240    -1 	add_tab();
   -1   241 	add_tab(initial_cmd);
  241   242 	gtk_main();
  242   243 	vte_regex_unref(url_regex);
  243   244