From 90bc7b45ea9e2de6391c5802f7e29fa715ce773d Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 22 Apr 2024 18:56:37 +0600 Subject: [PATCH 1/2] Test fix for terminal --- source/libublsettings-gtk3.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/source/libublsettings-gtk3.c b/source/libublsettings-gtk3.c index f165909..afe2c27 100644 --- a/source/libublsettings-gtk3.c +++ b/source/libublsettings-gtk3.c @@ -1,7 +1,10 @@ +#define VTE_INCLUDE #include "libublsettings-gtk3.h" +#undef VTE_INCLUDE #ifdef __GTK_H__ + static render_data render; // vte section @@ -30,9 +33,11 @@ void yon_terminal_integrated_launch(GtkWidget *place_to_show, char* command, voi void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument){ int size; + gchar *envv[] = { NULL }; config_str parsed = yon_char_parse(command,&size," "); + yon_char_parsed_add_or_create_if_exists(parsed,&size,"\0"); yon_char_parsed_add_or_create_if_exists(parsed,&size,NULL); - vte_terminal_spawn_async(VTE_TERMINAL(terminal),VTE_PTY_NO_HELPER,NULL,parsed,NULL,G_SPAWN_SEARCH_PATH,NULL,NULL,NULL,2000,NULL,NULL,NULL); + vte_terminal_spawn_async(VTE_TERMINAL(terminal),VTE_PTY_NO_HELPER,"/bin",parsed,envv,G_SPAWN_SEARCH_PATH,NULL,NULL,NULL,20,NULL,NULL,NULL); vte_terminal_set_size(VTE_TERMINAL(terminal),10,15); if(endwork_function) g_signal_connect(G_OBJECT(terminal), "child-exited", G_CALLBACK(endwork_function), endwork_function_argument); -- 2.35.1 From 6e429f1e60c3245d6a56f29ed8cabf46b10cd2c8 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 24 Apr 2024 15:22:00 +0600 Subject: [PATCH 2/2] Fixes, updates of commands --- source/libublsettings-gtk3.c | 48 ++++++++++++++++++++++++++++++++++-- source/libublsettings-gtk3.h | 15 ++++++++--- 2 files changed, 58 insertions(+), 5 deletions(-) diff --git a/source/libublsettings-gtk3.c b/source/libublsettings-gtk3.c index afe2c27..fe7d4fb 100644 --- a/source/libublsettings-gtk3.c +++ b/source/libublsettings-gtk3.c @@ -19,7 +19,10 @@ static void child_ready(VteTerminal *terminal, GPid pid, GError *error, gpointer void yon_terminal_integrated_launch(GtkWidget *place_to_show, char* command, void *endwork_function, void* endwork_function_argument){ GtkWidget *terminal = vte_terminal_new(); int size; - config_str parsed = yon_char_parse(command,&size," "); + config_str parsed = NULL; + yon_char_parsed_add_or_create_if_exists(parsed,&size,"/usr/bin/bash"); + yon_char_parsed_add_or_create_if_exists(parsed,&size,"-c"); + yon_char_parsed_add_or_create_if_exists(parsed,&size,yon_char_unite("\"",command,"\"",NULL)); yon_char_parsed_add_or_create_if_exists(parsed,&size,NULL); vte_terminal_spawn_async(VTE_TERMINAL(terminal),VTE_PTY_NO_HELPER,NULL,parsed,NULL,G_SPAWN_SEARCH_PATH,NULL,NULL,NULL,2000,NULL,NULL,NULL); vte_terminal_set_size(VTE_TERMINAL(terminal),10,15); @@ -31,7 +34,7 @@ void yon_terminal_integrated_launch(GtkWidget *place_to_show, char* command, voi gtk_widget_show_all(terminal); } -void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument){ +void yon_terminal_integrated_start(GtkWidget *terminal, char* command){ int size; gchar *envv[] = { NULL }; config_str parsed = yon_char_parse(command,&size," "); @@ -39,8 +42,49 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end yon_char_parsed_add_or_create_if_exists(parsed,&size,NULL); vte_terminal_spawn_async(VTE_TERMINAL(terminal),VTE_PTY_NO_HELPER,"/bin",parsed,envv,G_SPAWN_SEARCH_PATH,NULL,NULL,NULL,20,NULL,NULL,NULL); vte_terminal_set_size(VTE_TERMINAL(terminal),10,15); + vte_terminal_set_scrollback_lines(VTE_TERMINAL(terminal), -1); + vte_terminal_set_scroll_on_output(VTE_TERMINAL(terminal), TRUE); + vte_terminal_set_scroll_on_keystroke(VTE_TERMINAL(terminal), TRUE); + gtk_widget_show_all(terminal); + } + +void yon_terminal_integrated_start_shell(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument){ + char **commands=new_arr(char*,2); + gchar **envp = g_get_environ(); + commands[0]=(gchar *)g_strdup(g_environ_getenv(envp, "SHELL")); + commands[1]=NULL; + char **env=new_arr(char*,2); + env[0]=""; + env[1]=NULL; + vte_terminal_set_size(VTE_TERMINAL(terminal),10,15); + VtePty *pty = vte_pty_new_sync(VTE_PTY_DEFAULT,NULL,NULL); + vte_terminal_set_pty(VTE_TERMINAL(terminal),pty); + char *install_command=yon_char_unite("clear;tput cup 0 0 && tput ed && ",command," ; stty -echo; unset PS1","\n",NULL); if(endwork_function) g_signal_connect(G_OBJECT(terminal), "child-exited", G_CALLBACK(endwork_function), endwork_function_argument); + vte_terminal_spawn_async(VTE_TERMINAL(terminal), + VTE_PTY_DEFAULT, + NULL, + commands, + NULL, + 0, + NULL, NULL, + NULL, + -1, + NULL, + child_ready, + install_command); + vte_pty_spawn_async(pty, + NULL, + commands, + NULL, + 0, + NULL, NULL, + NULL, + -1, + NULL, + NULL, + NULL); vte_terminal_set_scrollback_lines(VTE_TERMINAL(terminal), -1); vte_terminal_set_scroll_on_output(VTE_TERMINAL(terminal), TRUE); vte_terminal_set_scroll_on_keystroke(VTE_TERMINAL(terminal), TRUE); diff --git a/source/libublsettings-gtk3.h b/source/libublsettings-gtk3.h index af0491d..1499c7c 100644 --- a/source/libublsettings-gtk3.h +++ b/source/libublsettings-gtk3.h @@ -22,16 +22,25 @@ */ void yon_terminal_integrated_launch(GtkWidget *place_to_show, char* command, void *endwork_function, void* endwork_function_argument); -/**yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument) +/**yon_terminal_integrated_start(GtkWidget *terminal, char* command) * [EN] * launches terminal with specific [command], + * terminal is shown in [place_to_show] container. + * [RU] + * Запускает терминал с командой [command]. +*/ +void yon_terminal_integrated_start(GtkWidget *terminal, char* command); + +/**yon_terminal_integrated_start_shell(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument) + * [EN] + * launches terminal with shell and executes specific [command], * terminal is shown in [place_to_show] container, * after terminal done its work [endwork_function] is called with [endwork_function_argument] argument. * [RU] - * Запускает терминал с командой [command], + * Запускает терминал оболочкой для выполнения команды [command], * после завершения работы терминала вызывается функция [endwork_function] с аргументом [endwork_function_argument]. */ -void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument); +void yon_terminal_integrated_start_shell(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument); #endif -- 2.35.1