]> git.wh0rd.org Git - nano.git/commitdiff
Backport of r5282 from trunk.
authorChris Allegretta <chrisa@asty.org>
Sun, 15 Nov 2015 06:07:15 +0000 (06:07 +0000)
committerChris Allegretta <chrisa@asty.org>
Sun, 15 Nov 2015 06:07:15 +0000 (06:07 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/branches/nano_2_4_branch@5406 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
src/global.c
src/help.c
src/nano.h
src/rcfile.c

index bef2e7e6ade89c3d5e2b36aae2d2160fdbaecda7..0f2f9c6cc0aa5e663192342de21c8819c33ef322 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2015-06-28  Benno Schulenberg  <bensberg@justemail.net>
+       * src/global.c (add_to_sclist), src/help.c (help_init), src/nano.h,
+       src/rcfile.c (parse_binding): When defining the toggles, give each
+       of them a sequence number, so that, when they are rebound, they can
+       still be listed in the original order in the help text.
+
 GNU nano 2.4.2 - 2015.07.05
 2015-06-28  Benno Schulenberg  <bensberg@justemail.net>
        * src/browser.c (browser_refresh): Limit the selected file to the
index cd7f23f00a0933f179bda7d459145bac5a40dbb4..be2749232723ab562e09526ae2b7ca618ae98538 100644 (file)
@@ -314,6 +314,7 @@ void add_to_funcs(void (*func)(void), int menus, const char *desc, const char *h
 void add_to_sclist(int menu, const char *scstring, void (*func)(void), int toggle)
 {
     static sc *tailsc;
+    static int counter = 0;
     sc *s = (sc *)nmalloc(sizeof(sc));
 
     /* Start the list, or tack on the next item. */
@@ -328,6 +329,8 @@ void add_to_sclist(int menu, const char *scstring, void (*func)(void), int toggl
     s->menu = menu;
     s->scfunc = func;
     s->toggle = toggle;
+    if (toggle)
+       s->ordinal = ++counter;
     s->keystr = (char *) scstring;
     s->type = strtokeytype(scstring);
     assign_keyinfo(s);
index a3c5477f5ba48928eb7d7507e5df2f24fb537818..1d4d758ce690611c560feae0d9cc57913bd5c00c 100644 (file)
@@ -444,14 +444,28 @@ void help_init(void)
 
 #ifndef NANO_TINY
     /* And the toggles... */
-    if (currmenu == MMAIN)
+    if (currmenu == MMAIN) {
+       int maximum = 0, counter = 0;
+
+       /* First see how many toggles there are. */
        for (s = sclist; s != NULL; s = s->next) {
-           if (s->scfunc == do_toggle_void)
+          maximum = (s->toggle && s->ordinal > maximum) ? s->ordinal : maximum;
+       }
+
+       /* Now show them in the original order. */
+       while (counter < maximum) {
+           counter++;
+           for (s = sclist; s != NULL; s = s->next) {
+               if (s->toggle && s->ordinal == counter) {
                ptr += sprintf(ptr, "%s\t\t%s %s\n", (s->menu == MMAIN ? s->keystr : ""),
                                 _(flagtostr(s->toggle)), _("enable/disable"));
            if (s->toggle == NO_COLOR_SYNTAX || s->toggle == TABS_TO_SPACES)
                ptr += sprintf(ptr, "\n");
+                   break;
        }
+           }
+       }
+    }
 
 #ifndef DISABLE_NANORC
     if (old_whitespace)
index cf6d0587376b9b60eb7e601a2bdabcb60be8912a..db7be93bd76a0b04d95134473b28ab1970706a0c 100644 (file)
@@ -452,6 +452,9 @@ typedef struct sc {
        /* The function we're going to run. */
     int toggle;
        /* If a toggle, what we're toggling. */
+    int ordinal;
+       /* The how-manieth toggle this is, in order to be able to
+        * keep them in sequence. */
     struct sc *next;
        /* Next in the list. */
 } sc;
index 358883dad901e8d814dea743b3ab224bceb700f2..d52e0a8c561e8d79708a3cf56735fd24a3ceba96 100644 (file)
@@ -559,6 +559,13 @@ void parse_binding(char *ptr, bool dobind)
     }
 
     if (dobind) {
+       /* If this is a toggle, copy its sequence number. */
+       if (newsc->scfunc == do_toggle_void) {
+           for (s = sclist; s != NULL; s = s->next)
+               if (newsc->toggle == s->toggle)
+                   newsc->ordinal = s->ordinal;
+       } else
+           newsc->ordinal = 0;
        /* Add the new shortcut at the start of the list. */
        newsc->next = sclist;
        sclist = newsc;