First usage instance is the renaming of the mode-mouse option.
---
 trunk/cmd-set-option.c |    3 ++-
 trunk/options-table.c  |   55 ++++++++++++++++++++++++++++++++++++++++++++++++
 trunk/tmux.h           |    1 +
 3 files changed, 58 insertions(+), 1 deletion(-)

diff --git a/trunk/cmd-set-option.c b/trunk/cmd-set-option.c
index ca99a97..89fcdad 100644
--- a/trunk/cmd-set-option.c
+++ b/trunk/cmd-set-option.c
@@ -88,7 +88,7 @@ cmd_set_option_exec(struct cmd *self, struct cmd_ctx *ctx)
        struct client                           *c;
        struct options                          *oo;
        struct window                           *w;
-       const char                              *optstr, *valstr;
+       char                                    *optstr, *valstr;
        u_int                                    i;
 
        /* Get the option name and value. */
@@ -101,6 +101,7 @@ cmd_set_option_exec(struct cmd *self, struct cmd_ctx *ctx)
                valstr = NULL;
        else
                valstr = args->argv[1];
+       options_table_handle_renames(&optstr, &valstr);
 
        /* Find the option entry, try each table. */
        table = oe = NULL;
diff --git a/trunk/options-table.c b/trunk/options-table.c
index e3e4362..172542b 100644
--- a/trunk/options-table.c
+++ b/trunk/options-table.c
@@ -18,6 +18,7 @@
 
 #include <sys/types.h>
 
+#include <stdlib.h>
 #include <string.h>
 
 #include "tmux.h"
@@ -31,6 +32,8 @@
  * the user sets an option or its value needs to be shown.
  */
 
+int renamed_entry_cmp(const void *, const void *);
+
 /* Choice option type lists. */
 const char *options_table_mode_keys_list[] = {
        "emacs", "vi", NULL
@@ -713,6 +716,58 @@ const struct options_table_entry window_options_table[] = {
        { .name = NULL }
 };
 
+struct renamed_entry {
+       const char                      *old;
+       const char                      *new;
+       const u_int                      count;
+       const struct renamed_entry      *values;
+};
+
+/* Translation table for deprecated option strings */
+const struct renamed_entry renamed_options_table[] = {
+       /* short notation: */
+       { "mode-mouse", "mouse-copy-mode", 1, &((const struct renamed_entry[]){ 
{ "copy-mode", "within", 0, 0 } }) }
+       /* loOng notation:
+       { .old = "mode-mouse",
+         .new = "mouse-copy-mode",
+         .count = 1,
+         .values = &((const struct renamed_entry[]){
+               { .old = "copy-mode",
+                 .new = "within",
+                 .count = 0,
+                 .values = 0
+               }
+         })
+       } */
+};
+
+int
+renamed_entry_cmp(const void *key, const void *value)
+{
+       const struct renamed_entry      *entry = value;
+       return (strcmp(key, entry->old));
+}
+
+/* Rewrite renamed option/value strings for backwards compatibility. */
+void
+options_table_handle_renames(char **optstr, char **valstr)
+{
+       struct renamed_entry    *option, *value;
+
+       option = bsearch(*optstr, renamed_options_table,
+               nitems(renamed_options_table),
+               sizeof renamed_options_table[0], renamed_entry_cmp);
+       if (option == NULL)
+               return;
+       *optstr = xstrdup(option->new);
+       value = bsearch(*valstr, option->values, option->count,
+                       sizeof option->values[0], renamed_entry_cmp);
+       if (value == NULL)
+               return;
+       *valstr = xstrdup(value->new);
+
+}
+
 /* Populate an options tree from a table. */
 void
 options_table_populate_tree(
diff --git a/trunk/tmux.h b/trunk/tmux.h
index ce44011..f593ade 100644
--- a/trunk/tmux.h
+++ b/trunk/tmux.h
@@ -1554,6 +1554,7 @@ long long options_get_number(struct options *, const char 
*);
 extern const struct options_table_entry server_options_table[];
 extern const struct options_table_entry session_options_table[];
 extern const struct options_table_entry window_options_table[];
+void   options_table_handle_renames(char **, char **);
 void   options_table_populate_tree(
            const struct options_table_entry *, struct options *);
 const char *options_table_print_entry(
-- 
1.7.10.4


------------------------------------------------------------------------------
How fast is your code?
3 out of 4 devs don\\\'t know how their code performs in production.
Find out how slow your code is with AppDynamics Lite.
http://ad.doubleclick.net/clk;262219672;13503038;z?
http://info.appdynamics.com/FreeJavaPerformanceDownload.html
_______________________________________________
tmux-users mailing list
tmux-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tmux-users

Reply via email to