diff options
author | kraxel <kraxel> | 2007-08-24 09:34:19 +0000 |
---|---|---|
committer | kraxel <kraxel> | 2007-08-24 09:34:19 +0000 |
commit | 6f083c88dc92b5bf96aa2c588f244e208c6a2050 (patch) | |
tree | f3c7c6b09f4491f80538e99c203e4c2b6557c4c3 | |
parent | 866d9ac5e8649dde15a6f587fc45f94dee4162cc (diff) | |
download | amtterm-6f083c88dc92b5bf96aa2c588f244e208c6a2050.tar.gz |
add manual page display to help menu
-rw-r--r-- | gamt.c | 71 | ||||
-rw-r--r-- | gamt.desktop | 2 |
2 files changed, 69 insertions, 4 deletions
@@ -28,6 +28,8 @@ #include <signal.h> #include <ctype.h> +#include <gdk/gdk.h> +#include <gdk/gdkx.h> #include <gtk/gtk.h> #include <vte/vte.h> @@ -77,6 +79,7 @@ static char amt_port[16]; static char amt_user[32] = "admin"; static char amt_pass[32]; static int amt_trace; +static int amt_debug; static int gamt_getstring(GtkWidget *window, char *title, char *message, char *dest, int dlen, int hide); @@ -216,7 +219,8 @@ static void menu_cb_blink_cursor(GtkToggleAction *action, gpointer user_data) struct gamt_window *gamt = user_data; gboolean state = gtk_toggle_action_get_active(action); - fprintf(stderr, "%s: %s\n", __FUNCTION__, state ? "on" : "off"); + if (amt_debug) + fprintf(stderr, "%s: %s\n", __FUNCTION__, state ? "on" : "off"); cfg_set_bool(CFG_BLINK, state); vte_terminal_set_cursor_blinks(VTE_TERMINAL(gamt->vte), state); } @@ -228,6 +232,45 @@ static void menu_cb_quit(GtkAction *action, void *data) gtk_widget_destroy(gamt->win); } +static void show_manpage(char *page, char *section) +{ + char buf[64]; + + + switch(fork()) { + case -1: + perror("fork"); + break; + case 0: + /* child: try xdg-open first ... */ + snprintf(buf, sizeof(buf), "man:%s(%s)", page, section); + execlp("xdg-open", "xdg-open", buf, NULL); + perror("execlp(xdg-open)"); + /* ... fallback is an xterm with man */ + snprintf(buf, sizeof(buf), "manual page: %s(%s)", page, section); + execlp("xterm", "xterm", + "-title", buf, + "-e", "man", section, page, + NULL); + perror("execlp(xterm)"); + exit(1); + break; + default: + /* parent */ + break; + } +} + +static void menu_cb_man_gamt(GtkAction *action, void *data) +{ + show_manpage("gamt", "1"); +} + +static void menu_cb_man_amt_howto(GtkAction *action, void *data) +{ + show_manpage("amt-howto", "7"); +} + static void menu_cb_about(GtkAction *action, void *data) { static char *comments = "Intel AMT serial-over-lan client"; @@ -272,8 +315,13 @@ static void state_gtk(void *cb_data, enum redir_state old, enum redir_state new) switch (new) { case REDIR_ERROR: +#if 0 snprintf(buf, sizeof(buf), "%s: %s FAILED (%s)", gamt->redir.host, redir_state_desc(old), gamt->redir.err); +#else + snprintf(buf, sizeof(buf), "%s: ERROR: %s", gamt->redir.host, + gamt->redir.err); +#endif if (old == REDIR_AUTH) { /* ask for a new password next time ... */ strcpy(amt_pass, ""); @@ -356,6 +404,16 @@ static const GtkActionEntry entries[] = { },{ /* Help menu */ + .name = "ManGamt1", + .stock_id = GTK_STOCK_HELP, + .label = "Manual Page", + .callback = G_CALLBACK(menu_cb_man_gamt), + },{ + .name = "ManAmtHowto7", + .stock_id = GTK_STOCK_INFO, + .label = "AMT HowTo", + .callback = G_CALLBACK(menu_cb_man_amt_howto), + },{ .name = "About", .stock_id = GTK_STOCK_ABOUT, .label = "_About ...", @@ -390,6 +448,9 @@ static char ui_xml[] = " <menuitem action='BlinkCursor'/>\n" " </menu>\n" " <menu action='HelpMenu'>\n" +" <menuitem action='ManGamt1'/>\n" +" <menuitem action='ManAmtHowto7'/>\n" +" <separator/>\n" " <menuitem action='About'/>\n" " </menu>\n" " </menubar>\n" @@ -559,6 +620,7 @@ static int gamt_connect(struct gamt_window *gamt) if (-1 == redir_connect(&gamt->redir)) return -1; + fcntl(gamt->redir.sock, F_SETFD, FD_CLOEXEC); vte_terminal_reset(VTE_TERMINAL(gamt->vte), TRUE, TRUE); gamt->ch = g_io_channel_unix_new(gamt->redir.sock); gamt->id = g_io_add_watch(gamt->ch, G_IO_IN, gamt_data, gamt); @@ -698,10 +760,10 @@ static void usage(FILE *fp) int main(int argc, char *argv[]) { + Display *dpy; struct gamt_window *gamt; char configfile[256]; char *h; - int debug = 0; int c; if (NULL != (h = getenv("AMT_PASSWORD"))) @@ -718,12 +780,15 @@ main(int argc, char *argv[]) cfg_set_str(CFG_BACKGROUND, "black"); gtk_init(&argc, &argv); + dpy = gdk_x11_display_get_xdisplay(gdk_display_get_default()); + fcntl(ConnectionNumber(dpy),F_SETFD,FD_CLOEXEC); + for (;;) { if (-1 == (c = getopt(argc, argv, "hdtu:p:f:c:b:"))) break; switch (c) { case 'd': - debug++; + amt_debug++; break; case 't': amt_trace++; diff --git a/gamt.desktop b/gamt.desktop index 5bddfb9..a406fb1 100644 --- a/gamt.desktop +++ b/gamt.desktop @@ -5,4 +5,4 @@ Comment=Intel AMT serial-over-lan client. Exec=gamt Terminal=false Type=Application -Categories=GTK;System;Network;Utility +Categories=GTK;System;Network;Utility; |