39 #include <gdk/gdkkeysyms.h> 47 #define REMMINA_PLUGIN_ST_FEATURE_GTKSOCKET 1 70 remmina_plugin_service->
debug(
"[%s] Plugin plug added on socket %d", PLUGIN_NAME, gpdata->
socket_id);
78 remmina_plugin_service->
debug(
"[%s] Plugin plug removed", PLUGIN_NAME);
85 remmina_plugin_service->
debug(
"[%s] Plugin init", PLUGIN_NAME);
89 g_object_set_data_full(G_OBJECT(gp),
"plugin-data", gpdata, g_free);
91 gpdata->
socket = gtk_socket_new();
93 gtk_widget_show(gpdata->
socket);
96 gtk_container_add(GTK_CONTAINER(gp), gpdata->
socket);
101 TRACE_CALL(__func__);
102 remmina_plugin_service->
debug(
"[%s] Plugin open connection", PLUGIN_NAME);
103 #define ADD_ARGUMENT(name, value) \ 105 argv[argc] = g_strdup(name); \ 106 argv_debug[argc] = g_strdup(name); \ 110 argv[argc] = value; \ 111 argv_debug[argc++] = g_strdup(g_strcmp0(name, "-p") != 0 ? value : "XXXXX"); \ 116 GError *error = NULL;
118 gchar *argv_debug[50];
121 const gchar *wflag = NULL;
122 const gchar *command;
123 gboolean isterm = FALSE;
130 if (!remmina_plugin_service->
file_get_int(remminafile,
"detached", FALSE)) {
133 gtk_widget_set_size_request(GTK_WIDGET(gp), 640, 480);
137 term = remmina_plugin_service->
file_get_string(remminafile,
"terminal");
139 if (g_strcmp0(term,
"st") == 0) {
141 if (!g_find_program_in_path(term))
145 }
else if (g_strcmp0(term,
"urxvt") == 0) {
148 }
else if (g_strcmp0(term,
"xterm") == 0) {
149 wflag =
"-xrm 'XTerm*allowSendEvents: true' -into";
151 }
else if (g_strcmp0(term,
"vim") == 0) {
152 wflag =
"-g --socketid";
154 }
else if (g_strcmp0(term,
"emacs") == 0) {
155 wflag =
"--parent-id";
158 if (!g_find_program_in_path(term)) {
165 ADD_ARGUMENT(g_strdup_printf(
"%s", term), NULL);
168 ADD_ARGUMENT(g_strdup(wflag), g_strdup_printf(
"%i", gpdata->
socket_id));
171 if(command && isterm)
172 ADD_ARGUMENT(
"-e", g_strdup_printf(
"%s", command));
173 if(command && !isterm)
174 ADD_ARGUMENT(
"", g_strdup_printf(
"%s", command));
176 ADD_ARGUMENT(NULL, NULL);
178 command_line = g_strjoinv(g_strdup(
" "), (gchar **)&argv_debug[0]);
179 remmina_plugin_service->
debug(
"[%s] starting %s", PLUGIN_NAME, command_line);
181 g_spawn_command_line_async(command_line, &error);
182 g_free(command_line);
185 for (i = 0; i < argc; i++)
187 g_free(argv_debug[i]);
197 if (!remmina_plugin_service->
file_get_int(remminafile,
"detached", FALSE)) {
198 remmina_plugin_service->
debug(
"[%s] attached window to socket %d",
210 TRACE_CALL(__func__);
211 remmina_plugin_service->
debug(
"[%s] Plugin close connection", PLUGIN_NAME);
218 "st",
"Suckless Simple Terminal",
219 "urxvt",
"rxvt-unicode",
221 "emacs",
"GNU Emacs",
222 "vim",
"Vim Text Editor",
290 TRACE_CALL(__func__);
291 remmina_plugin_service = service;
293 bindtextdomain(GETTEXT_PACKAGE, REMMINA_RUNTIME_LOCALEDIR);
294 bind_textdomain_codeset(GETTEXT_PACKAGE,
"UTF-8");
static void remmina_plugin_st_init(RemminaProtocolWidget *gp)
void(* debug)(const gchar *fmt,...)
void(* protocol_plugin_set_error)(RemminaProtocolWidget *gp, const gchar *fmt,...)
typedefG_BEGIN_DECLS struct _RemminaFile RemminaFile
static const RemminaProtocolSetting remmina_plugin_st_advanced_settings[]
static gboolean remmina_st_query_feature(RemminaProtocolWidget *gp, const RemminaProtocolFeature *feature)
void(* protocol_plugin_set_width)(RemminaProtocolWidget *gp, gint width)
static void remmina_plugin_st_on_plug_removed(GtkSocket *socket, RemminaProtocolWidget *gp)
static gboolean remmina_plugin_st_open_connection(RemminaProtocolWidget *gp)
void(* protocol_plugin_signal_connection_closed)(RemminaProtocolWidget *gp)
gint(* file_get_int)(RemminaFile *remminafile, const gchar *setting, gint default_value)
void(* protocol_plugin_signal_connection_opened)(RemminaProtocolWidget *gp)
static const RemminaProtocolFeature remmina_st_features[]
G_MODULE_EXPORT gboolean remmina_plugin_entry(RemminaPluginService *service)
gboolean(* register_plugin)(RemminaPlugin *plugin)
static RemminaPluginService * remmina_plugin_service
static gpointer term_list[]
RemminaFile *(* protocol_plugin_get_file)(RemminaProtocolWidget *gp)
static void remmina_plugin_st_on_plug_added(GtkSocket *socket, RemminaProtocolWidget *gp)
static RemminaProtocolPlugin remmina_plugin
void(* protocol_plugin_register_hostkey)(RemminaProtocolWidget *gp, GtkWidget *widget)
static gboolean remmina_plugin_st_close_connection(RemminaProtocolWidget *gp)
void(* protocol_plugin_set_height)(RemminaProtocolWidget *gp, gint height)
const gchar *(* file_get_string)(RemminaFile *remminafile, const gchar *setting)
static const RemminaProtocolSetting remmina_plugin_st_basic_settings[]
N_("Unable to connect to VNC server")
struct _RemminaPluginData RemminaPluginData