]> git.wh0rd.org Git - nano.git/commitdiff
More mouse integration, esp with the shortcut lists
authorChris Allegretta <chrisa@asty.org>
Thu, 12 Apr 2001 03:01:53 +0000 (03:01 +0000)
committerChris Allegretta <chrisa@asty.org>
Thu, 12 Apr 2001 03:01:53 +0000 (03:01 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@593 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
files.c
global.c
nano.c
proto.h
winio.c

index c18271240fea44812d08f5107a25027fda0e2711..4386b1a669bc7b60aa779b3c9f60d75fcb63fb41 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,8 @@
 Cvs code -
+- General
+       - New global variables currshortcut and currslen to support using
+         the mouse with the shortcuts.  FIXME - Does not support the
+         do_yesno function yet as that will have to be done by hand.
 
 nano 1.1 tree forked here 04/07/2001
 
diff --git a/files.c b/files.c
index 1d749f961913bb570ec4528b485cc545d5f1f844..8fcf6d2d941d4e524bc39dbae8c5b9c01ffe791b 100644 (file)
--- a/files.c
+++ b/files.c
@@ -258,6 +258,8 @@ int do_insertfile(void)
     char *realname = NULL;
 
     wrap_reset();
+    currshortcut = writefile_list;
+    currslen = WRITEFILE_LIST_LEN;
     i = statusq(1, writefile_list, WRITEFILE_LIST_LEN, "",
                _("File to insert [from ./] "));
     if (i != -1) {
@@ -276,6 +278,8 @@ int do_insertfile(void)
        if (i == NANO_TOFILES_KEY) {
            
            char *tmp = do_browse_from(realname);
+           currshortcut = writefile_list;
+           currslen = WRITEFILE_LIST_LEN;
 
 #ifdef DISABLE_TABCOMP
            realname = NULL;
@@ -503,6 +507,8 @@ int do_writeout(char *path, int exiting)
     static int did_cred = 0;
 #endif
 
+    currshortcut = writefile_list;
+    currslen = WRITEFILE_LIST_LEN;
     answer = mallocstrcpy(answer, path);
 
     if ((exiting) && (ISSET(TEMP_OPT))) {
@@ -529,6 +535,8 @@ int do_writeout(char *path, int exiting)
        if (i == NANO_TOFILES_KEY) {
 
            char *tmp = do_browse_from(answer);
+           currshortcut = writefile_list;
+           currslen = WRITEFILE_LIST_LEN;
 
            if (tmp != NULL)
                answer = mallocstrcpy(answer, tmp);
@@ -1131,6 +1139,8 @@ char *do_browser(char *inpath)
     int lineno = 0, kb;
     char **filelist = (char **) NULL;
 
+    currshortcut = browser_list;
+    currslen = BROWSER_LIST_LEN;
     /* If path isn't the same as inpath, we are being passed a new
        dir as an arg.  We free it here so it will be copied from 
        inpath below */
@@ -1172,6 +1182,14 @@ char *do_browser(char *inpath)
            lineno = selected / width;
 
        switch (kbinput) {
+
+#ifndef NANO_SMALL
+#ifdef NCURSES_MOUSE_VERSION
+        case KEY_MOUSE:
+            do_mouse();
+            break;
+#endif
+#endif
        case KEY_UP:
        case 'u':
            if (selected - width >= 0)
index 77af9281d62765b68c33753d88908d4b567e813e..c00457fc616ca1eb3fdb2090fa8d51e3c3d27a90 100644 (file)
--- a/global.c
+++ b/global.c
@@ -82,6 +82,9 @@ shortcut spell_list[SPELL_LIST_LEN];
 shortcut browser_list[BROWSER_LIST_LEN];
 #endif
 
+shortcut *currshortcut = main_list;    /* Current shortcut list we're using */
+int currslen = MAIN_VISIBLE;           /* Length of current shortcut list */
+
 #ifndef NANO_SMALL
 toggle toggles[TOGGLE_LEN];
 #endif
diff --git a/nano.c b/nano.c
index 4d53bb0981911ffd0b1cb7cbeea9bfe56dcaf74f..51b7364b58bfdeec5cd86b26a4f21ebd318533f3 100644 (file)
--- a/nano.c
+++ b/nano.c
@@ -72,7 +72,7 @@ struct termios oldterm;               /* The user's original term settings */
 static struct sigaction act;   /* For all out fun signal handlers */
 
 #ifndef DISABLE_HELP
-static char *help_text_init = ""; /* Initial message, not including shortcuts */
+static char *help_text_init = "";      /* Initial message, not including shortcuts */
 #endif
 
 char *last_search = NULL;      /* Last string we searched for */
@@ -93,7 +93,7 @@ RETSIGTYPE finish(int sigage)
        mvwaddstr(bottomwin, 2, 0, hblank);
     } else
        mvwaddstr(bottomwin, 0, 0, hblank);
-    
+
     wrefresh(bottomwin);
     endwin();
 
@@ -120,7 +120,7 @@ void die(char *msg, ...)
        name = "nano.save";
        i = write_file(name, 1);
     } else {
-       
+
        char *buf = nmalloc(strlen(filename) + 6);
        strcpy(buf, filename);
        strcat(buf, ".save");
@@ -254,7 +254,7 @@ void delete_node(filestruct * fileptr)
        return;
 
     if (fileptr->data != NULL)
-        free(fileptr->data);
+       free(fileptr->data);
     free(fileptr);
 }
 
@@ -425,7 +425,8 @@ void usage(void)
 #endif
 #endif
     printf(_(" -p              Emulate Pico as closely as possible\n"));
-    printf(_(" -r [#cols]      Set fill cols to (wrap lines at) #cols\n"));
+    printf(_
+          (" -r [#cols]        Set fill cols to (wrap lines at) #cols\n"));
 #ifndef DISABLE_SPELLER
     printf(_(" -s [prog]       Enable alternate speller\n"));
 #endif
@@ -456,21 +457,21 @@ void version(void)
 #ifdef NANO_SMALL
     printf(" --enable-tiny");
 #else
- #ifdef DISABLE_BROWSER
+#ifdef DISABLE_BROWSER
     printf(" --disable-browser");
- #endif
- #ifdef DISABLE_TABCOMP
+#endif
+#ifdef DISABLE_TABCOMP
     printf(" --disable-tabcomp");
- #endif
- #ifdef DISABLE_JUSTIFY
+#endif
+#ifdef DISABLE_JUSTIFY
     printf(" --disable-justify");
- #endif
- #ifdef DISABLE_SPELLER
+#endif
+#ifdef DISABLE_SPELLER
     printf(" --disable-speller");
- #endif
- #ifdef DISABLE_HELP
+#endif
+#ifdef DISABLE_HELP
     printf(" --disable-help");
- #endif
+#endif
 #endif
 
 #ifdef DISABLE_WRAPPING
@@ -500,7 +501,8 @@ filestruct *make_new_node(filestruct * prevnode)
 }
 
 /* Splice a node into an existing filestruct */
-void splice_node(filestruct * begin, filestruct * newnode, filestruct * end)
+void splice_node(filestruct * begin, filestruct * newnode,
+                filestruct * end)
 {
     newnode->next = end;
     newnode->prev = begin;
@@ -818,11 +820,11 @@ void do_wrap(filestruct * inptr, char input_char)
            current_x = 0;
            if (ISSET(AUTOINDENT)) {
                int i = 0;
-               while ((inptr->next->data[i] == ' ' 
-                       || inptr->next->data[i] == '\t')) {
+               while ((inptr->next->data[i] == ' '
+                       || inptr->next->data[i] == '\t')) {
                    i++;
                    right++;
-               }                       
+               }
            }
            down = 1;
        }
@@ -871,11 +873,11 @@ void do_wrap(filestruct * inptr, char input_char)
            right = current_x - current_word_start;
            if (ISSET(AUTOINDENT)) {
                int i = 0;
-               while ((inptr->next->data[i] == ' ' 
-                       || inptr->next->data[i] == '\t')) {
+               while ((inptr->next->data[i] == ' '
+                       || inptr->next->data[i] == '\t')) {
                    i++;
                    right++;
-               }                       
+               }
            }
 
            i = current_word_start - 1;
@@ -922,25 +924,26 @@ void do_wrap(filestruct * inptr, char input_char)
        int old_x = current_x, old_y = current_y;
 
        /* Plus one for the space which concatenates the two lines together plus 1 for \0. */
-       char *p = nmalloc((strlen(temp->data) + strlen(inptr->next->data) + 2) 
-                       * sizeof(char));
+       char *p =
+           nmalloc((strlen(temp->data) + strlen(inptr->next->data) + 2)
+                   * sizeof(char));
 
        if (ISSET(AUTOINDENT)) {
            int non = 0;
 
-            /* Grab the beginning of the next line until it's not a 
-               space or tab, then null terminate it so we can strcat it
-               to hell */
-           while ((inptr->next->data[non] == ' ' 
-               || inptr->next->data[non] == '\t'))
-                   p[non] = inptr->next->data[non++];
+           /* Grab the beginning of the next line until it's not a 
+              space or tab, then null terminate it so we can strcat it
+              to hell */
+           while ((inptr->next->data[non] == ' '
+                   || inptr->next->data[non] == '\t'))
+               p[non] = inptr->next->data[non++];
 
            p[non] = 0;
            strcat(p, temp->data);
            strcat(p, " ");
 
-            /* Now tack on the rest of the next line after the spaces and
-               tabs */
+           /* Now tack on the rest of the next line after the spaces and
+              tabs */
            strcat(p, &inptr->next->data[non]);
        } else {
            strcpy(p, temp->data);
@@ -977,7 +980,7 @@ void do_wrap(filestruct * inptr, char input_char)
            char *t = NULL;
            int extra = 0;
            if (spc) {
-               while ((*spc == ' ') || (*spc == '\t')) {
+               while ((*spc == ' ') || (*spc == '\t')) {
                    extra++;
                    spc++;
                    totsize++;
@@ -996,7 +999,7 @@ void do_wrap(filestruct * inptr, char input_char)
     /* Everything about it makes me want this line here but it causes
      * totsize to be high by one for some reason.  Sigh. (Rob) */
     /* totsize++; */
-       
+
     renumber(inptr);
     edit_update(edittop, TOP);
 
@@ -1054,7 +1057,7 @@ void check_wrap(filestruct * inptr, char ch)
            do_wrap(inptr, ch);
     }
 }
-#endif /* DISABLE_WRAPPING */
+#endif                         /* DISABLE_WRAPPING */
 
 /* Stuff we do when we abort from programs and want to clean up the
  * screen.  This doesnt do much right now.
@@ -1148,8 +1151,8 @@ int do_delete(void)
 
        align(&current->data);
 
-    /* Now that we have a magic lnie again, we can check for both being
-       on the line before filebot as well as at filebot */
+       /* Now that we have a magic lnie again, we can check for both being
+          on the line before filebot as well as at filebot */
     } else if (current->next != NULL && current->next != filebot) {
        current->data = nrealloc(current->data,
                                 strlen(current->data) +
@@ -1221,13 +1224,12 @@ int do_int_spell_fix(char *word)
     edit_update(fileage, TOP);
 
     /* make sure word is still mis-spelt (i.e. when multi-errors) */
-    if (findnextstr(TRUE, fileage, beginx_top, prevanswer) != NULL)
-    {
+    if (findnextstr(TRUE, fileage, beginx_top, prevanswer) != NULL) {
        do_replace_highlight(TRUE, prevanswer);
 
        /* allow replace word to be corrected */
-       i = statusq(0, spell_list, SPELL_LIST_LEN, last_replace, 
-               _("Edit a replacement"));
+       i = statusq(0, spell_list, SPELL_LIST_LEN, last_replace,
+                   _("Edit a replacement"));
 
        do_replace_highlight(FALSE, prevanswer);
 
@@ -1274,7 +1276,7 @@ int do_int_speller(char *tempfile_name)
 
     /* A new process to run spell in */
 
-    if ( (pid_spell = fork()) == 0) {
+    if ((pid_spell = fork()) == 0) {
 
        /* Child continues, (i.e. future spell process) */
 
@@ -1282,7 +1284,7 @@ int do_int_speller(char *tempfile_name)
 
        /* replace the standard in with the tempfile */
 
-       if ( (tempfile_fd = open(tempfile_name, O_RDONLY)) == -1) {
+       if ((tempfile_fd = open(tempfile_name, O_RDONLY)) == -1) {
 
            close(in_fd[1]);
            exit(1);
@@ -1328,17 +1330,17 @@ int do_int_speller(char *tempfile_name)
 
     /* Get system pipe buffer size */
 
-    if ( (pipe_buff_size = fpathconf(in_fd[0], _PC_PIPE_BUF)) < 1) {
+    if ((pipe_buff_size = fpathconf(in_fd[0], _PC_PIPE_BUF)) < 1) {
 
        close(in_fd[0]);
        return FALSE;
     }
 
-    read_buff = nmalloc( pipe_buff_size + 1 );
+    read_buff = nmalloc(pipe_buff_size + 1);
 
     /* Process the returned spelling errors */
 
-    while ( (bytesread = read(in_fd[0], read_buff, pipe_buff_size)) > 0) {
+    while ((bytesread = read(in_fd[0], read_buff, pipe_buff_size)) > 0) {
 
        read_buff[bytesread] = (char) NULL;
        read_buff_word = read_buff_ptr = read_buff;
@@ -1351,14 +1353,14 @@ int do_int_speller(char *tempfile_name)
 
            if (*read_buff_ptr == '\n') {
                *read_buff_ptr = (char) NULL;
-               if (!do_int_spell_fix(read_buff_word)) { 
+               if (!do_int_spell_fix(read_buff_word)) {
 
                    close(in_fd[0]);
                    free(read_buff);
                    replace_abort();
 
                    return TRUE;
-               }
+               }
                read_buff_word = read_buff_ptr;
                read_buff_word++;
            }
@@ -1377,8 +1379,7 @@ int do_int_speller(char *tempfile_name)
     if (WIFEXITED(spell_status)) {
        if (WEXITSTATUS(spell_status) != 0)
            return FALSE;
-    }
-    else
+    } else
        return FALSE;
 
     return TRUE;
@@ -1410,7 +1411,7 @@ int do_alt_speller(char *file_name)
     spellargs[arglen - 2] = file_name;
 
     /* Start a new process for the alternate speller */
-    if ( (pid_spell = fork()) == 0) {
+    if ((pid_spell = fork()) == 0) {
 
        /* Start alternate spell program, we are using the PATH here!?!? */
        execvp(spellargs[0], spellargs);
@@ -1431,8 +1432,7 @@ int do_alt_speller(char *file_name)
     if (WIFEXITED(alt_spell_status)) {
        if (WEXITSTATUS(alt_spell_status) != 0)
            return FALSE;
-    }
-    else
+    } else
        return FALSE;
 
     refresh();
@@ -1459,7 +1459,7 @@ int do_spell(void)
 
     if ((temp = tempnam(0, "nano.")) == NULL) {
        statusbar(_("Could not create a temporary filename: %s"),
-                       strerror(errno));
+                 strerror(errno));
        return 0;
     }
 
@@ -1495,8 +1495,7 @@ int do_exit(void)
     if (ISSET(TEMP_OPT)) {
        i = 1;
     } else {
-       i =
-           do_yesno(0, 0,
+       i = do_yesno(0, 0,
                     _
                     ("Save modified buffer (ANSWERING \"No\" WILL DESTROY CHANGES) ? "));
     }
@@ -1527,66 +1526,87 @@ void do_mouse(void)
     if (getmouse(&mevent) == ERR)
        return;
 
-    /* If mouse not in edit window, return (add help selection later). */
-    if (!wenclose(edit, mevent.y, mevent.x))
-       return;
-
-    /* Subtract out size of topwin.  Perhaps we need a constant somewhere? */
-    mevent.y -= 2;
+    /* If mouse not in edit or bottom window, return */
+    if (wenclose(edit, mevent.y, mevent.x)) {
 
-    /* Selecting where the cursor is sets the mark.
-     * Selecting beyond the line length with the cursor at the end of the
-     * line sets the mark as well. 
-     */
-    if ((mevent.y == current_y) &&
-       ((mevent.x == current_x) || (current_x == strlen(current->data)
-                                    && (mevent.x >
-                                        strlen(current->data))))) {
-       if (ISSET(VIEW_MODE)) {
-           print_view_warning();
+       /* Don't let people screw with the marker when they're in a
+          subfunction */
+       if (currshortcut != main_list)
            return;
+
+       /* Subtract out size of topwin.  Perhaps we need a constant somewhere? */
+       mevent.y -= 2;
+
+       /* Selecting where the cursor is sets the mark.
+        * Selecting beyond the line length with the cursor at the end of the
+        * line sets the mark as well. 
+        */
+       if ((mevent.y == current_y) &&
+           ((mevent.x == current_x) || (current_x == strlen(current->data)
+                                        && (mevent.x >
+                                            strlen(current->data))))) {
+           if (ISSET(VIEW_MODE)) {
+               print_view_warning();
+               return;
+           }
+           do_mark();
+       } else if (mevent.y > current_y) {
+           while (mevent.y > current_y) {
+               if (current->next != NULL)
+                   current = current->next;
+               else
+                   break;
+               current_y++;
+           }
+       } else if (mevent.y < current_y) {
+           while (mevent.y < current_y) {
+               if (current->prev != NULL)
+                   current = current->prev;
+               else
+                   break;
+               current_y--;
+           }
        }
-       do_mark();
-    } else if (mevent.y > current_y) {
-       while (mevent.y > current_y) {
-           if (current->next != NULL)
-               current = current->next;
-           else
-               break;
-           current_y++;
-       }
-    } else if (mevent.y < current_y) {
-       while (mevent.y < current_y) {
-           if (current->prev != NULL)
-               current = current->prev;
-           else
-               break;
-           current_y--;
+       current_x = mevent.x;
+       placewewant = current_x;
+       while (foo < current_x) {
+           if (current->data[foo] == NANO_CONTROL_I) {
+               current_x -= tabsize - (foo % tabsize);
+               tab_found = 1;
+           } else if (current->data[foo] & 0x80);
+           else if (current->data[foo] < 32)
+               current_x--;
+           foo++;
        }
-    }
-    current_x = mevent.x;
-    placewewant = current_x;
-    while (foo < current_x) {
-       if (current->data[foo] == NANO_CONTROL_I) {
-           current_x -= tabsize - (foo % tabsize);
-           tab_found = 1;
-       } else if (current->data[foo] & 0x80);
-       else if (current->data[foo] < 32)
-           current_x--;
-       foo++;
-    }
-    /* This is where tab_found comes in.  I can't figure out why,
-     * but without it any line with a tab will place the cursor
-     * one character behind.  Whatever, this fixes it. */
-    if (tab_found == 1)
-       current_x++;
+       /* This is where tab_found comes in.  I can't figure out why,
+        * but without it any line with a tab will place the cursor
+        * one character behind.  Whatever, this fixes it. */
+       if (tab_found == 1)
+           current_x++;
 
-    if (current_x > strlen(current->data))
-       current_x = strlen(current->data);
+       if (current_x > strlen(current->data))
+           current_x = strlen(current->data);
 
-    update_cursor();
-    edit_refresh();
+       update_cursor();
+       edit_refresh();
+    } else if (wenclose(bottomwin, mevent.y, mevent.x) && !ISSET(NO_HELP)) {
+       int k = COLS / 6, val = 0;
 
+       /* Determine what shortcut list was clicked */
+       mevent.y -= (editwinrows + 3);
+
+       if (mevent.y < 0) /* They clicked on the statusbar */
+           return;
+
+       /* Don't select stuff beyond list length */
+       if (mevent.x / k >= currslen)   
+           return;
+
+       val = currshortcut[(mevent.x / k) * 2 + mevent.y].val;
+
+       /* And ungetch that value */
+       ungetch(val);
+    }
 }
 #endif
 #endif
@@ -1750,6 +1770,7 @@ void mouse_init(void)
 #ifdef NCURSES_MOUSE_VERSION
     if (ISSET(USE_MOUSE)) {
        keypad_on(edit, 1);
+       keypad_on(bottomwin, 1);
 
        mousemask(BUTTON1_RELEASED, NULL);
        mouseinterval(50);
@@ -1864,7 +1885,7 @@ int do_justify(void)
     initial_y = current_y;
 
     set_modified();
-    cutbak = cutbuffer; /* Got to like cutbak ;) */
+    cutbak = cutbuffer;                /* Got to like cutbak ;) */
     totbak = totsize;
     cutbuffer = NULL;
 
@@ -1886,7 +1907,7 @@ int do_justify(void)
        add_to_cutbuffer(tmpjust);
 
        /* Wiping out a newline */
-        totsize--;
+       totsize--;
 
        /* length of both strings plus space between strings and ending \0. */
        current->data = nrealloc(current->data, len + len2 + 2);
@@ -1984,7 +2005,7 @@ int do_justify(void)
     /* Now get a keystroke and see if it's unjustify, if not unget the keytroke 
        and return */
     if ((kbinput = wgetch(edit)) != NANO_UNJUSTIFY_KEY) {
-       ungetch(kbinput); 
+       ungetch(kbinput);
        blank_statusbar_refresh();
     } else {
        /* Else restore the justify we just did (ungrateful user!) */
@@ -1993,7 +2014,7 @@ int do_justify(void)
        else
            fileage = current;
        tmpbot->next->prev = tmptop->prev;
-       current = tmpbot->next;
+       current = tmpbot->next;
        tmpbot->next = NULL;
        do_uncut_text();
        if (tmptop->prev == NULL)
@@ -2008,7 +2029,7 @@ int do_justify(void)
     display_main_list();
     free_filestruct(cutbuffer);
     cutbuffer = cutbak;
-    
+
     return 1;
 #endif
 }
@@ -2141,7 +2162,8 @@ void print_numlock_warning(void)
 {
     static int didmsg = 0;
     if (!didmsg) {
-       statusbar(_("NumLock glitch detected.  Keypad will malfunction with NumLock off"));
+       statusbar(_
+                 ("NumLock glitch detected.  Keypad will malfunction with NumLock off"));
        didmsg = 1;
     }
 }
@@ -2151,18 +2173,17 @@ void print_numlock_warning(void)
    Esc-O-[A-D] or Esc-[-[A-D]. */
 int ABCD(int input)
 {
-    switch(input)
-    {                
-       case 'A':
-           return(KEY_UP);
-       case 'B':
-           return(KEY_DOWN);
-       case 'C':
-           return(KEY_RIGHT);
-       case 'D': 
-           return(KEY_LEFT);
-       default:
-           return 0;
+    switch (input) {
+    case 'A':
+       return (KEY_UP);
+    case 'B':
+       return (KEY_DOWN);
+    case 'C':
+       return (KEY_RIGHT);
+    case 'D':
+       return (KEY_LEFT);
+    default:
+       return 0;
     }
 }
 
@@ -2223,7 +2244,8 @@ int main(int argc, char *argv[])
     while ((optchr = getopt_long(argc, argv, "?T:RVbcefhiklmpr:s:tvwxz",
                                 long_options, &option_index)) != EOF) {
 #else
-    while ((optchr = getopt(argc, argv, "h?T:RVbcefiklmpr:s:tvwxz")) != EOF) {
+    while ((optchr =
+           getopt(argc, argv, "h?T:RVbcefiklmpr:s:tvwxz")) != EOF) {
 #endif
 
        switch (optchr) {
@@ -2245,8 +2267,8 @@ int main(int argc, char *argv[])
        case 'b':
        case 'e':
        case 'f':
-               /* Pico compatibility flags */
-               break;
+           /* Pico compatibility flags */
+           break;
        case 'c':
            SET(CONSTUPDATE);
            break;
@@ -2297,7 +2319,7 @@ int main(int argc, char *argv[])
 #else
            SET(NO_WRAP);
            break;
-#endif /* DISABLE_WRAPPING */
+#endif                         /* DISABLE_WRAPPING */
        case 'x':
            SET(NO_HELP);
            break;
@@ -2394,7 +2416,7 @@ int main(int argc, char *argv[])
        edit_update(fileage, CENTER);
 
     /* return here after a sigwinch */
-    sigsetjmp(jmpbuf,1);
+    sigsetjmp(jmpbuf, 1);
 
     /* Fix clobber-age */
     kbinput = 0;
@@ -2406,6 +2428,9 @@ int main(int argc, char *argv[])
 
     while (1) {
 
+       currshortcut = main_list;
+       currslen = MAIN_VISIBLE;
+
 #ifndef _POSIX_VDISABLE
        /* We're going to have to do it the old way, i.e. on cygwin */
        raw();
@@ -2421,7 +2446,7 @@ int main(int argc, char *argv[])
            case 79:
                kbinput = wgetch(edit);
                if (kbinput <= 'D' && kbinput >= 'A')
-                  kbinput = ABCD(kbinput);
+                   kbinput = ABCD(kbinput);
                else if (kbinput <= 'z' && kbinput >= 'j')
                    print_numlock_warning();
                else if (kbinput <= 'S' && kbinput >= 'P')
diff --git a/proto.h b/proto.h
index 68634d3fbb7ccbc3131440386550fba28b164ee1..c982aa5493e17f64273717c139e03d9c22e9b292 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -36,6 +36,7 @@ extern int mark_beginx, samelinewrap;
 extern int totsize, temp_opt;
 extern int fill, flags,tabsize;
 extern int search_last_line;
+extern int currslen;
 
 extern WINDOW *edit, *topwin, *bottomwin;
 extern char *filename;
@@ -54,6 +55,7 @@ extern shortcut spell_list[SPELL_LIST_LEN], replace_list_2[REPLACE_LIST_LEN];
 #ifndef DISABLE_BROWSER
 extern shortcut browser_list[BROWSER_LIST_LEN];
 #endif
+extern shortcut *currshortcut;
 
 #ifdef HAVE_REGEX_H
 extern int use_regexp, regexp_compiled;
@@ -140,6 +142,7 @@ void add_to_cutbuffer(filestruct * inptr);
 void do_replace_highlight(int highlight_flag, char *word);
 void nano_disabled_msg(void);
 void window_init(void);
+void do_mouse(void);
 #ifdef NANO_EXTRA
 void do_credits(void);
 #endif
diff --git a/winio.c b/winio.c
index ab232bef0619fdd2b1e9facf6bdaf586832ab7c7..55a2a21807d3bf3565644ba4a86dc3cd23b2b3d3 100644 (file)
--- a/winio.c
+++ b/winio.c
@@ -262,6 +262,8 @@ int nanogetstr(int allowtabs, char *buf, char *def, shortcut s[], int slen,
     x_left = strlen(buf);
     x = strlen(def) + x_left;
 
+    currshortcut = s;
+    currslen = slen;
     /* Get the input! */
     if (strlen(def) > 0)
        strcpy(inputbuf, def);
@@ -273,6 +275,10 @@ int nanogetstr(int allowtabs, char *buf, char *def, shortcut s[], int slen,
 
     while ((kbinput = wgetch(bottomwin)) != 13) {
        for (j = 0; j <= slen - 1; j++) {
+#ifdef DEBUG
+           fprintf(stderr, _("Aha! \'%c\' (%d)\n"), kbinput, kbinput);
+#endif
+
            if (kbinput == s[j].val) {
 
                /* We shouldn't discard the answer it gave, just because
@@ -288,7 +294,8 @@ int nanogetstr(int allowtabs, char *buf, char *def, shortcut s[], int slen,
            tabbed = 0;
 
        switch (kbinput) {
-           /* Stuff we want to equate with <enter>, ASCII 13 */
+
+       /* Stuff we want to equate with <enter>, ASCII 13 */
        case 343:
            ungetch(13);        /* Enter on iris-ansi $TERM, sometimes */
            break;
@@ -299,8 +306,15 @@ int nanogetstr(int allowtabs, char *buf, char *def, shortcut s[], int slen,
        case 543:                       /* Right ctrl again */
        case 544:
        case 545:                       /* Right alt again */
+           break;
+#endif
+#ifndef NANO_SMALL
+#ifdef NCURSES_MOUSE_VERSION
+       case KEY_MOUSE:
+           do_mouse();
+           break;
+#endif
 #endif
-               break;
        case KEY_HOME:
            x = x_left;
            nanoget_repaint(buf, inputbuf, x);
@@ -1217,14 +1231,17 @@ int do_help(void)
 {
 #ifndef DISABLE_HELP
     char *ptr = help_text, *end;
-    int i, j, row = 0, page = 1, kbinput = 0, no_more = 0, kp;
+    int i, j, row = 0, page = 1, kbinput = 0, no_more = 0, kp, kp2;
     int no_help_flag = 0;
 
     blank_edit();
     curs_set(0);
     blank_statusbar();
 
+    currshortcut = help_list;
+    currslen = HELP_LIST_LEN;
     kp = keypad_on(edit, 1);
+    kp2 = keypad_on(bottomwin, 1);
 
     if (ISSET(NO_HELP)) {
 
@@ -1241,6 +1258,13 @@ int do_help(void)
     do {
        ptr = help_text;
        switch (kbinput) {
+#ifndef NANO_SMALL
+#ifdef NCURSES_MOUSE_VERSION
+        case KEY_MOUSE:
+            do_mouse();
+            break;
+#endif
+#endif
        case NANO_NEXTPAGE_KEY:
        case NANO_NEXTPAGE_FKEY:
        case KEY_NPAGE:
@@ -1320,6 +1344,7 @@ int do_help(void)
     curs_set(1);
     edit_refresh();
     kp = keypad_on(edit, kp);
+    kp2 = keypad_on(bottomwin, kp2);
 
 #elif defined(DISABLE_HELP)
     nano_disabled_msg();