diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/actions.c | 32 | ||||
-rw-r--r-- | src/actions.h | 2 | ||||
-rw-r--r-- | src/bar.c | 26 | ||||
-rw-r--r-- | src/bar.h | 1 |
4 files changed, 61 insertions, 0 deletions
diff --git a/src/actions.c b/src/actions.c index 5bf33ea..7bb7c57 100644 --- a/src/actions.c +++ b/src/actions.c @@ -68,6 +68,8 @@ static user_command user_commands[] = {"setenv", cmd_setenv, arg_STRING}, {"chdir", cmd_chdir, arg_STRING}, {"unsetenv", cmd_unsetenv, arg_STRING}, + {"info", cmd_info, arg_VOID}, + {"lastmsg", cmd_lastmsg, arg_VOID}, /* Commands to set default behavior. */ {"defbarloc", cmd_defbarloc, arg_STRING}, @@ -228,10 +230,14 @@ initialize_default_keybindings (void) add_keybinding (XK_colon, 0, "colon"); add_keybinding (XK_exclam, 0, "exec"); add_keybinding (XK_exclam, ControlMask, "colon exec " TERM_PROG " -e "); + add_keybinding (XK_i, 0, "info"); + add_keybinding (XK_i, ControlMask, "info"); add_keybinding (XK_k, 0, "delete"); add_keybinding (XK_k, ControlMask, "delete"); add_keybinding (XK_l, 0, "redisplay"); add_keybinding (XK_l, ControlMask, "redisplay"); + add_keybinding (XK_m, 0, "lastmsg"); + add_keybinding (XK_m, ControlMask, "lastmsg"); add_keybinding (XK_n, 0, "next"); add_keybinding (XK_n, ControlMask, "next"); add_keybinding (XK_p, 0, "prev"); @@ -1839,3 +1845,29 @@ cmd_unsetenv (int interactive, void *data) return NULL; } + +char * +cmd_info (int interactive, void *data) +{ + if (current_window() == NULL) + { + marked_message_printf (0, 0, " (%d, %d) No window ", + current_screen()->root_attr.width, + current_screen()->root_attr.height); + } + else + { + rp_window *win = current_window(); + marked_message_printf (0, 0, " (%d,%d) %d(%s) ", win->width, win->height, + win->number, window_name (win)); + } + + return NULL; +} + +char * +cmd_lastmsg (int interactive, void *data) +{ + show_last_message(); + return NULL; +} diff --git a/src/actions.h b/src/actions.h index c73fdba..d64cf87 100644 --- a/src/actions.h +++ b/src/actions.h @@ -93,6 +93,8 @@ char * cmd_defbgcolor (int interactive, void *data); char * cmd_setenv (int interactive, void *data); char * cmd_chdir (int interactive, void *data); char * cmd_unsetenv (int interactive, void *data); +char * cmd_info (int interactive, void *data); +char * cmd_lastmsg (int interactive, void *data); /* void cmd_xterm (void *data); */ @@ -39,6 +39,11 @@ #define BAR_IS_WINDOW_LIST 1 #define BAR_IS_MESSAGE 2 +/* A copy of the last message displayed in the message bar. */ +static char *last_msg = NULL; +static int last_mark_start = 0; +static int last_mark_end = 0; + /* Hide the bar from sight. */ int hide_bar (screen_info *s) @@ -221,4 +226,25 @@ marked_message (char *msg, int mark_start, int mark_end) XFillRectangle (dpy, s->bar_window, lgc, start, 0, end, height); } + + /* Keep a record of the message. */ + if (last_msg) + free (last_msg); + last_msg = xstrdup (msg); + last_mark_start = mark_start; + last_mark_end = mark_end; +} + +void +show_last_message () +{ + char *msg; + + /* A little kludge to avoid last_msg in marked_message from being + strdup'd right after freeing the pointer. Note: in this case + marked_message's msg arg would have been the same as + last_msg. */ + msg = xstrdup (last_msg); + marked_message (msg, last_mark_start, last_mark_end); + free (msg); } @@ -31,5 +31,6 @@ int bar_x (screen_info *s, int width); #define message(msg) marked_message (msg, 0, 0) void marked_message (char *msg, int hl_start, int hl_end); void marked_message_printf (int mark_start, int mark_end, char *fmt, ...); +void show_last_message (); #endif /* ! _RATPOISON_BAR_H */ |