summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog14
-rw-r--r--src/actions.c14
-rw-r--r--src/data.h3
-rw-r--r--src/main.c1
-rw-r--r--src/messages.h1
-rw-r--r--src/split.c20
6 files changed, 49 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 95af32c..00fb67f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2006-11-17 Shawn Betts <sabetts@vcn.bc.ca>
+
+ * src/split.c (show_frame_indicator): use defaults.frame_fmt
+ (show_frame_message): format frame_fmt string with format_string
+
+ * src/messages.h (MESSAGE_FRAME_STRING): removed
+
+ * src/main.c (init_defaults): init defaults.frame_fmt
+
+ * src/data.h (struct rp_defaults): add frame_fmt
+
+ * src/actions.c (set_framefmt): new function
+ (init_set_vars): new set var "framefmt"
+
2006-10-03 Shawn Betts <sabetts@vcn.bc.ca>
* src/events.c (handle_key): demote the 'no matching key' error to debug output.
diff --git a/src/actions.c b/src/actions.c
index 4a0b8f3..da01aba 100644
--- a/src/actions.c
+++ b/src/actions.c
@@ -57,6 +57,7 @@ static cmdret * set_inputwidth (struct cmdarg **args);
static cmdret * set_waitcursor (struct cmdarg **args);
static cmdret * set_winfmt (struct cmdarg **args);
static cmdret * set_winname (struct cmdarg **args);
+static cmdret * set_framefmt (struct cmdarg **args);
static cmdret * set_fgcolor (struct cmdarg **args);
static cmdret * set_bgcolor (struct cmdarg **args);
static cmdret * set_barpadding (struct cmdarg **args);
@@ -111,6 +112,7 @@ init_set_vars(void)
add_set_var ("waitcursor", set_waitcursor, 1, "", arg_NUMBER);
add_set_var ("winfmt", set_winfmt, 1, "", arg_REST);
add_set_var ("winname", set_winname, 1, "", arg_STRING);
+ add_set_var ("framefmt", set_framefmt, 1, "", arg_REST);
add_set_var ("fgcolor", set_fgcolor, 1, "", arg_STRING);
add_set_var ("bgcolor", set_bgcolor, 1, "", arg_STRING);
add_set_var ("barpadding", set_barpadding, 2, "", arg_NUMBER, "", arg_NUMBER);
@@ -3721,6 +3723,18 @@ set_winname (struct cmdarg **args)
}
static cmdret *
+set_framefmt (struct cmdarg **args)
+{
+ if (args[0] == NULL)
+ return cmdret_new (RET_SUCCESS, "%s", defaults.frame_fmt);
+
+ free (defaults.frame_fmt);
+ defaults.frame_fmt = xstrdup (ARG_STRING(0));
+
+ return cmdret_new (RET_SUCCESS, NULL);
+}
+
+static cmdret *
set_fgcolor (struct cmdarg **args)
{
int i;
diff --git a/src/data.h b/src/data.h
index a3d2e51..af274ac 100644
--- a/src/data.h
+++ b/src/data.h
@@ -252,6 +252,9 @@ struct rp_defaults
/* The name of the top level keymap */
char *top_kmap;
+
+ /* Frame indicator format */
+ char *frame_fmt;
};
/* Information about a child process. */
diff --git a/src/main.c b/src/main.c
index fe9ff0a..fab8a11 100644
--- a/src/main.c
+++ b/src/main.c
@@ -532,6 +532,7 @@ init_defaults (void)
defaults.window_fmt = xstrdup ("%n%s%t");
defaults.info_fmt = xstrdup ("(%H, %W) %n(%t)");
+ defaults.frame_fmt = xstrdup ("Current Frame");
defaults.win_name = WIN_NAME_TITLE;
defaults.startup_message = 1;
diff --git a/src/messages.h b/src/messages.h
index 3e458b5..e85b5d4 100644
--- a/src/messages.h
+++ b/src/messages.h
@@ -50,6 +50,5 @@
#define MESSAGE_PROMPT_VAR_VALUE "Value: "
#define MESSAGE_WELCOME "Welcome to ratpoison! Hit `%s %s' for help."
-#define MESSAGE_FRAME_STRING "Current Frame"
#endif /* ! _RATPOISON_MESSAGES_H */
diff --git a/src/split.c b/src/split.c
index 93da642..ba4cd3b 100644
--- a/src/split.c
+++ b/src/split.c
@@ -960,7 +960,7 @@ void
show_frame_indicator (void)
{
hide_frame_indicator ();
- show_frame_message (MESSAGE_FRAME_STRING);
+ show_frame_message (defaults.frame_fmt);
alarm (defaults.frame_indicator_timeout);
}
@@ -970,10 +970,22 @@ show_frame_message (char *msg)
rp_screen *s = current_screen ();
int width, height;
rp_frame *frame;
+ rp_window *win;
+ rp_group *g;
+ rp_window_elem *elem;
+ struct sbuf *msgbuf;
frame = current_frame();
- width = defaults.bar_x_padding * 2 + XmbTextEscapement (defaults.font, msg, strlen (msg));
+ win = current_window ();
+ g = groups_find_group_by_window (win);
+ elem = group_find_window (&g->mapped_windows, win);
+ msgbuf = sbuf_new (0);
+
+ format_string (msg, elem, msgbuf);
+
+ width = defaults.bar_x_padding * 2 + XmbTextEscapement (defaults.font, msgbuf->data,
+ msgbuf->len);
height = (FONT_HEIGHT (defaults.font) + defaults.bar_y_padding * 2);
/* We don't want another frame indicator to be displayed on another
@@ -993,7 +1005,9 @@ show_frame_message (char *msg)
XmbDrawString (dpy, s->frame_window, defaults.font, s->normal_gc,
defaults.bar_x_padding,
defaults.bar_y_padding + rp_font_ascent,
- msg, strlen (msg));
+ msgbuf->data, msgbuf->len);
+
+ sbuf_free (msgbuf);
}
rp_frame *