From: David Lawrence Ramsey Date: Wed, 25 Aug 2004 15:39:10 +0000 (+0000) Subject: convert ints to bools in the low-level input routines, and consolidate X-Git-Tag: v1.3.5~210 X-Git-Url: https://git.wh0rd.org/?a=commitdiff_plain;h=a0b5ba2f7f1c1fe4f1fed4bc236aa7d730a45176;p=nano.git convert ints to bools in the low-level input routines, and consolidate the high-level input routines for the edit window git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1910 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- diff --git a/ChangeLog b/ChangeLog index bcfa2207..43678407 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,27 @@ CVS code - +- General: + - Convert more ints that hold only TRUE and FALSE values to + bools. (DLR) + - Consolidate the code for finding a shortcut in a shortcut + list, the code for finding a toogle in a toggle list, and + the code for doing both of those and interpreting mouse clicks + in the edit window. Also move the code for do_mouse() to + get_edit_mouse() and tweak it to properly handle cases where a + shortcut isn't clicked. New functions get_shortcut(), + get_toggle(), get_edit_input(), and get_edit_mouse(); changes + to do_browser(), do_justify(), do_help(), and main(). (DLR) - rcfile.c: parse_rcfile() - Add missing brackets around an if statement block so that parsing the numeric argument after "tabsize" works properly again. (DLR, found by Mike Frysinger) +- winio.c: + get_mouseinput() + - Consolidate two if statements to increase efficiency. (DLR) + do_yesno() + - Don't bother assigning the value of get_mouseinput() to + anything. Since allow_shortcuts is FALSE, its return value + will always be FALSE. (DLR) GNU nano 1.3.4 - 2004.08.17 - General: diff --git a/src/files.c b/src/files.c index 36e642ee..25b49ebb 100644 --- a/src/files.c +++ b/src/files.c @@ -2534,9 +2534,10 @@ char *do_browser(const char *inpath) struct stat st; char *foo, *retval = NULL; static char *path = NULL; - int numents = 0, i = 0, j = 0, kbinput = ERR, meta_key, longest = 0; - int abort = 0, col = 0, selected = 0, editline = 0, width = 0; - int filecols = 0, lineno = 0; + int numents = 0, i = 0, j = 0, longest = 0, abort = 0, col = 0; + int selected = 0, editline = 0, width = 0, filecols = 0, lineno = 0; + int kbinput = ERR; + bool meta_key; char **filelist = (char **)NULL; #ifndef DISABLE_MOUSE MEVENT mevent; @@ -2619,8 +2620,10 @@ char *do_browser(const char *inpath) selected = numents - 1; else if (selectedbackup == selected) ungetch('s'); /* Unget the 'select' key */ - } else /* Must be clicking a shortcut */ - do_mouse(); + } else { /* Must be clicking a shortcut */ + int mouse_x, mouse_y; + get_mouseinput(&mouse_x, &mouse_y, TRUE); + } break; #endif @@ -2856,7 +2859,7 @@ char *do_browser(const char *inpath) width = filecols; } } - wrefresh(edit); + wrefresh(edit); } while ((kbinput = get_kbinput(edit, &meta_key)) != NANO_EXIT_KEY && kbinput != NANO_EXIT_FKEY); curs_set(1); blank_edit(); diff --git a/src/nano.c b/src/nano.c index 3826ef26..8493ba2d 100644 --- a/src/nano.c +++ b/src/nano.c @@ -876,59 +876,6 @@ bool open_pipe(const char *command) } #endif /* !NANO_SMALL */ -#ifndef DISABLE_MOUSE -void do_mouse(void) -{ - int mouse_x, mouse_y; - - if (!get_mouseinput(&mouse_x, &mouse_y, TRUE)) { - /* Click in the edit window to move the cursor, but only when - we're not in a subfunction. */ - if (wenclose(edit, mouse_y, mouse_x) && currshortcut == main_list) { - bool sameline; - /* Did they click on the line with the cursor? If they - clicked on the cursor, we set the mark. */ - size_t xcur; - /* The character they clicked on. */ - - /* Subtract out size of topwin. Perhaps we need a constant - somewhere? */ - mouse_y -= 2; - - sameline = (mouse_y == current_y); - - /* Move to where the click occurred. */ - for (; current_y < mouse_y && current->next != NULL; current_y++) - current = current->next; - for (; current_y > mouse_y && current->prev != NULL; current_y--) - current = current->prev; - - xcur = actual_x(current->data, get_page_start(xplustabs()) + - mouse_x); - -#ifndef NANO_SMALL - /* Selecting where the cursor is toggles the mark, as does - selecting beyond the line length with the cursor at the - end of the line. */ - if (sameline && xcur == current_x) { - if (ISSET(VIEW_MODE)) { - print_view_warning(); - return; - } - do_mark(); - } -#endif - - current_x = xcur; - placewewant = xplustabs(); - edit_refresh(); - } - } - /* FIXME: If we clicked on a location in the statusbar, the cursor - should move to the location we clicked on. */ -} -#endif - /* The user typed a character; add it to the edit buffer. */ void do_char(char ch) { @@ -2360,7 +2307,7 @@ void do_justify(bool full_justify) int mark_beginx_save = mark_beginx; #endif int kbinput; - int meta_key; + bool meta_key; /* If we're justifying the entire file, start at the beginning. */ if (full_justify) @@ -2620,26 +2567,10 @@ void do_justify(bool full_justify) /* Now get a keystroke and see if it's unjustify; if not, unget the * keystroke and return. */ - kbinput = get_kbinput(edit, &meta_key); + kbinput = get_edit_input(&meta_key, FALSE); -#ifndef DISABLE_MOUSE - /* If it was a mouse click, parse it with do_mouse() and it might - * become the unjustify key. Else give it back to the input - * stream. */ - if (kbinput == KEY_MOUSE) { - do_mouse(); - kbinput = get_kbinput(edit, &meta_key); - } -#endif - - if (meta_key || (kbinput != NANO_UNJUSTIFY_KEY && - kbinput != NANO_UNJUSTIFY_FKEY)) { - ungetch(kbinput); - if (meta_key) - ungetch(NANO_CONTROL_3); - placewewant = 0; - } else { - /* Else restore the justify we just did (ungrateful user!). */ + if (!meta_key && kbinput == NANO_UNJUSTIFY_KEY) { + /* Restore the justify we just did (ungrateful user!). */ filestruct *cutbottom = get_cutbottom(); current = current_save; @@ -2676,6 +2607,11 @@ void do_justify(bool full_justify) if (!ISSET(MODIFIED)) titlebar(NULL); edit_refresh(); + } else { + placewewant = 0; + ungetch(kbinput); + if (meta_key) + ungetch(NANO_CONTROL_3); } cutbuffer = cutbuffer_save; @@ -3007,14 +2943,8 @@ int main(int argc, char **argv) #ifndef DISABLE_WRAPJUSTIFY bool fill_flag_used = FALSE; /* Was the fill option used? */ #endif - const shortcut *s; - bool keyhandled = FALSE; /* Have we handled the keystroke yet? */ int kbinput; /* Input from keyboard */ - int meta_key; - -#ifndef NANO_SMALL - const toggle *t; -#endif + bool meta_key; #ifdef HAVE_GETOPT_LONG const struct option long_options[] = { {"help", 0, 0, 'h'}, @@ -3510,8 +3440,6 @@ int main(int argc, char **argv) edit_refresh(); while (TRUE) { - keyhandled = FALSE; - reset_cursor(); if (ISSET(CONSTUPDATE)) do_cursorpos(TRUE); @@ -3520,115 +3448,16 @@ int main(int argc, char **argv) currshortcut = main_list; #endif - kbinput = get_kbinput(edit, &meta_key); -#ifdef DEBUG - fprintf(stderr, "AHA! %c (%d)\n", kbinput, kbinput); -#endif - if (meta_key) { - /* Check for the metaval and miscval defs... */ - for (s = -#if !defined(DISABLE_BROWSER) || !defined (DISABLE_HELP) || !defined(DISABLE_MOUSE) - currshortcut -#else - main_list -#endif - ; s != NULL && !keyhandled; s = s->next) { - if ((s->metaval != NANO_NO_KEY && kbinput == s->metaval) || - (s->miscval != NANO_NO_KEY && kbinput == s->miscval)) { - if (ISSET(VIEW_MODE) && !s->viewok) - print_view_warning(); - else { - if (s->func != do_cut_text) - cutbuffer_reset(); - s->func(); - } - keyhandled = TRUE; - } -#ifndef NANO_SMALL - if (!keyhandled) { - /* And for toggle switches */ - for (t = toggles; t != NULL; t = t->next) { - if (kbinput == t->val) { - cutbuffer_reset(); - do_toggle(t); - keyhandled = TRUE; - } - } - } -#endif - } -#ifdef DEBUG - fprintf(stderr, "I got Alt-%c! (%d)\n", kbinput, kbinput); -#endif - } - - /* Look through the main shortcut list to see if we've hit a - shortcut key or function key */ + kbinput = get_edit_input(&meta_key, TRUE); - if (!keyhandled) { - for (s = -#if !defined(DISABLE_BROWSER) || !defined (DISABLE_HELP) || !defined(DISABLE_MOUSE) - currshortcut -#else - main_list -#endif - ; s != NULL && !keyhandled; s = s->next) { - if ((s->ctrlval != NANO_NO_KEY && kbinput == s->ctrlval) || - (s->funcval != NANO_NO_KEY && kbinput == s->funcval)) { - if (ISSET(VIEW_MODE) && !s->viewok) - print_view_warning(); - else { - if (s->func != do_cut_text) - cutbuffer_reset(); - s->func(); - } - keyhandled = TRUE; - } - } - } - - if (!keyhandled) - cutbuffer_reset(); - - /* Don't even think about changing this string */ - if (kbinput == NANO_XON_KEY) - statusbar(_("XON ignored, mumble mumble.")); - if (kbinput == NANO_XOFF_KEY) - statusbar(_("XOFF ignored, mumble mumble.")); - if (kbinput == NANO_XON_KEY || kbinput == NANO_XOFF_KEY) - keyhandled = TRUE; - - /* Catch ^Z by hand when triggered also */ - if (kbinput == NANO_SUSPEND_KEY) { - if (ISSET(SUSPEND)) - do_suspend(0); - keyhandled = TRUE; - } - - /* Last gasp, stuff that's not in the main lists */ - if (!keyhandled) { - switch (kbinput) { -#ifndef DISABLE_MOUSE - case KEY_MOUSE: - do_mouse(); - break; -#endif - case NANO_CONTROL_3: /* Ctrl-[ (Esc), which should - * have been handled before we - * got here */ - case NANO_CONTROL_5: /* Ctrl-] */ - break; - default: -#ifdef DEBUG - fprintf(stderr, "I got %c (%d)!\n", kbinput, kbinput); -#endif - /* We no longer stop unhandled sequences so that - people with odd character sets can type... */ - if (ISSET(VIEW_MODE)) - print_view_warning(); - else - do_char((char)kbinput); - } + /* Last gasp, stuff that's not in the main lists. */ + if (kbinput != ERR && !is_cntrl_char(kbinput)) { + /* Don't stop unhandled sequences, so that people with odd + * character sets can type. */ + if (ISSET(VIEW_MODE)) + print_view_warning(); + else + do_char(kbinput); } } assert(FALSE); diff --git a/src/proto.h b/src/proto.h index 5f0a56bf..cf4a853f 100644 --- a/src/proto.h +++ b/src/proto.h @@ -303,9 +303,6 @@ void nano_disabled_msg(void); RETSIGTYPE cancel_fork(int signal); bool open_pipe(const char *command); #endif -#ifndef DISABLE_MOUSE -void do_mouse(void); -#endif void do_char(char ch); void do_verbatim_input(void); void do_backspace(void); @@ -494,31 +491,40 @@ int check_wildcard_match(const char *text, const char *pattern); #ifndef NANO_SMALL void reset_kbinput(void); #endif -int get_kbinput(WINDOW *win, int *meta_key); -int get_translated_kbinput(int kbinput, int *es +int get_kbinput(WINDOW *win, bool *meta_key); +int get_translated_kbinput(int kbinput, bool *es #ifndef NANO_SMALL - , int reset + , bool reset #endif ); int get_ascii_kbinput(int kbinput, size_t ascii_digits #ifndef NANO_SMALL - , int reset + , bool reset #endif ); int get_control_kbinput(int kbinput); -int get_escape_seq_kbinput(int *escape_seq, size_t es_len, int +int get_escape_seq_kbinput(int *escape_seq, size_t es_len, bool *ignore_seq); int get_escape_seq_abcd(int kbinput); int *get_verbatim_kbinput(WINDOW *win, int *v_kbinput, size_t *v_len, - int allow_ascii); -int get_untranslated_kbinput(int kbinput, size_t position, int + bool allow_ascii); +int get_untranslated_kbinput(int kbinput, size_t position, bool allow_ascii #ifndef NANO_SMALL - , int reset + , bool reset #endif ); #ifndef DISABLE_MOUSE -int get_mouseinput(int *mouse_x, int *mouse_y, int allow_shortcuts); +bool get_mouseinput(int *mouse_x, int *mouse_y, bool allow_shortcuts); +#endif +const shortcut *get_shortcut(const shortcut *s_list, int kbinput, bool + *meta_key); +#ifndef NANO_SMALL +const toggle *get_toggle(int kbinput, bool meta_key); +#endif +int get_edit_input(bool *meta_key, bool allow_funcs); +#ifndef DISABLE_MOUSE +bool get_edit_mouse(void); #endif size_t xplustabs(void); size_t actual_x(const char *str, size_t xplus); @@ -567,7 +573,7 @@ int statusq(int allowtabs, const shortcut *s, const char *def, int do_yesno(int all, const char *msg); void total_refresh(void); void display_main_list(void); -void do_cursorpos(int constant); +void do_cursorpos(bool constant); void do_cursorpos_void(void); #ifndef DISABLE_HELP int help_line_len(const char *ptr); diff --git a/src/winio.c b/src/winio.c index eb8a961c..3f901477 100644 --- a/src/winio.c +++ b/src/winio.c @@ -107,9 +107,10 @@ void reset_kbinput(void) * editing keypad (Insert, Delete, Home, End, PageUp, and PageDown), the * function keypad (F1-F14), and the numeric keypad with NumLock off. * Assume nodelay(win) is FALSE. */ -int get_kbinput(WINDOW *win, int *meta_key) +int get_kbinput(WINDOW *win, bool *meta_key) { - int kbinput, es, retval = ERR; + int kbinput, retval = ERR; + bool es; #ifndef NANO_SMALL allow_pending_sigwinch(TRUE); @@ -155,7 +156,7 @@ int get_kbinput(WINDOW *win, int *meta_key) * sequence into the corresponding key value, and save * that as the result. */ if (es_len > 1) { - int ignore_seq; + bool ignore_seq; *meta_key = FALSE; retval = get_escape_seq_kbinput(escape_seq, es_len, @@ -174,7 +175,7 @@ int get_kbinput(WINDOW *win, int *meta_key) } #ifdef DEBUG - fprintf(stderr, "get_kbinput(): kbinput = %d, meta_key = %d\n", kbinput, *meta_key); + fprintf(stderr, "get_kbinput(): kbinput = %d, meta_key = %d\n", kbinput, (int)*meta_key); #endif #ifndef NANO_SMALL @@ -187,9 +188,9 @@ int get_kbinput(WINDOW *win, int *meta_key) /* Translate acceptable ASCII, extended keypad values, and escape * sequences into their corresponding key values. Set es to TRUE when * we get an escape sequence. Assume nodelay(win) is FALSE. */ -int get_translated_kbinput(int kbinput, int *es +int get_translated_kbinput(int kbinput, bool *es #ifndef NANO_SMALL - , int reset + , bool reset #endif ) { @@ -416,7 +417,7 @@ int get_translated_kbinput(int kbinput, int *es } #ifdef DEBUG - fprintf(stderr, "get_translated_kbinput(): kbinput = %d, es = %d, escapes = %d, ascii_digits = %lu, retval = %d\n", kbinput, *es, escapes, (unsigned long)ascii_digits, retval); + fprintf(stderr, "get_translated_kbinput(): kbinput = %d, es = %d, escapes = %d, ascii_digits = %lu, retval = %d\n", kbinput, (int)*es, escapes, (unsigned long)ascii_digits, retval); #endif /* Return the result. */ @@ -427,7 +428,7 @@ int get_translated_kbinput(int kbinput, int *es * ASCII code from 000-255 into its corresponding ASCII character. */ int get_ascii_kbinput(int kbinput, size_t ascii_digits #ifndef NANO_SMALL - , int reset + , bool reset #endif ) { @@ -564,7 +565,7 @@ int get_control_kbinput(int kbinput) * ERR and set ignore_seq to TRUE; if it's unrecognized, return ERR and * set ignore_seq to FALSE. Assume that Escape has already been read * in. */ -int get_escape_seq_kbinput(int *escape_seq, size_t es_len, int +int get_escape_seq_kbinput(int *escape_seq, size_t es_len, bool *ignore_seq) { int retval = ERR; @@ -1042,7 +1043,7 @@ int get_escape_seq_kbinput(int *escape_seq, size_t es_len, int } #ifdef DEBUG - fprintf(stderr, "get_escape_seq_kbinput(): retval = %d, ignore_seq = %d\n", retval, *ignore_seq); + fprintf(stderr, "get_escape_seq_kbinput(): retval = %d, ignore_seq = %d\n", retval, (int)*ignore_seq); #endif return retval; @@ -1071,7 +1072,7 @@ int get_escape_seq_abcd(int kbinput) * verbatim. Store the string in v_kbinput and return the length * of the string in v_len. Assume nodelay(win) is FALSE. */ int *get_verbatim_kbinput(WINDOW *win, int *v_kbinput, size_t *v_len, - int allow_ascii) + bool allow_ascii) { int kbinput; size_t i = 0, v_newlen = 0; @@ -1178,10 +1179,10 @@ int *get_verbatim_kbinput(WINDOW *win, int *v_kbinput, size_t *v_len, return v_kbinput; } -int get_untranslated_kbinput(int kbinput, size_t position, int +int get_untranslated_kbinput(int kbinput, size_t position, bool allow_ascii #ifndef NANO_SMALL - , int reset + , bool reset #endif ) { @@ -1246,7 +1247,7 @@ int get_untranslated_kbinput(int kbinput, size_t position, int * equivalent keystroke(s). Return FALSE if no keystrokes were * ungetch()ed, or TRUE if at least one was. Assume that KEY_MOUSE has * already been read in. */ -int get_mouseinput(int *mouse_x, int *mouse_y, int allow_shortcuts) +bool get_mouseinput(int *mouse_x, int *mouse_y, bool allow_shortcuts) { MEVENT mevent; @@ -1261,15 +1262,12 @@ int get_mouseinput(int *mouse_x, int *mouse_y, int allow_shortcuts) *mouse_x = mevent.x; *mouse_y = mevent.y; - /* If we're not allowing shortcuts' we're done now. */ - if (!allow_shortcuts) - return FALSE; - - /* Otherwise, if the current shortcut list is being displayed on the - * last two lines of the screen and the mouse event took place - * inside it, we need to figure out which shortcut was clicked and - * ungetch() the equivalent keystroke(s) for it. */ - if (!ISSET(NO_HELP) && wenclose(bottomwin, *mouse_y, *mouse_x)) { + /* If we're allowing shortcuts, the current shortcut list is being + * displayed on the last two lines of the screen, and the mouse + * event took place inside it, we need to figure out which shortcut + * was clicked and ungetch() the equivalent keystroke(s) for it. */ + if (allow_shortcuts && !ISSET(NO_HELP) && wenclose(bottomwin, + *mouse_y, *mouse_x)) { int i, j; size_t currslen; /* The number of shortcuts in the current shortcut list. */ @@ -1298,10 +1296,10 @@ int get_mouseinput(int *mouse_x, int *mouse_y, int allow_shortcuts) * list, or beyond the end of a shortcut on the right side of * the screen, don't do anything. */ if (j < 0 || (*mouse_x / i) >= currslen) - return 0; + return FALSE; j = (*mouse_x / i) * 2 + j; if (j >= currslen) - return 0; + return FALSE; /* Go through the shortcut list to determine which shortcut was * clicked. */ @@ -1323,8 +1321,207 @@ int get_mouseinput(int *mouse_x, int *mouse_y, int allow_shortcuts) } return FALSE; } +#endif /* !DISABLE_MOUSE */ + +const shortcut *get_shortcut(const shortcut *s_list, int kbinput, bool + *meta_key) +{ + const shortcut *s = s_list; + size_t slen = length_of_list(s_list); + + /* Check for shortcuts. */ + for (; slen > 0; slen--) { + /* We've found a shortcut if: + * + * 1. The key exists. + * 2. The key is a control key in the shortcut list. + * 3. The key is a function key in the shortcut list. + * 4. meta_key is TRUE and the key is a meta sequence. + * 5. meta_key is TRUE and the key is the other meta sequence in + * the shortcut list. */ + if (kbinput != NANO_NO_KEY && ((*meta_key == FALSE && + ((kbinput == s->ctrlval || kbinput == s->funcval))) || + (*meta_key == TRUE && (kbinput == s->metaval || + kbinput == s->miscval)))) { + break; + } + + s = s->next; + } + + /* Translate the shortcut to either its control key or its meta key + * equivalent. Assume that the shortcut has an equivalent control + * key, meta key, or both. */ + if (slen > 0) { + if (s->ctrlval != NANO_NO_KEY) { + *meta_key = FALSE; + kbinput = s->ctrlval; + } else if (s->metaval != NANO_NO_KEY) { + *meta_key = TRUE; + kbinput = s->metaval; + } + return s; + } + + return NULL; +} + +#ifndef NANO_SMALL +const toggle *get_toggle(int kbinput, bool meta_key) +{ + const toggle *t = toggles; + + /* Check for toggles. */ + for (; t != NULL; t = t->next) { + /* We've found a toggle if meta_key is TRUE and the key is in + * the meta toggle list. */ + if (meta_key && kbinput == t->val) + break; + } + + return t; +} +#endif /* !NANO_SMALL */ + +int get_edit_input(bool *meta_key, bool allow_funcs) +{ + bool keyhandled = FALSE; + int kbinput, retval; + const shortcut *s; +#ifndef NANO_SMALL + const toggle *t; +#endif + + kbinput = get_kbinput(edit, meta_key); + + /* Universal shortcuts. These aren't in any shortcut lists, but we + * should handle them anyway. */ + switch (kbinput) { + case NANO_XON_KEY: + statusbar(_("XON ignored, mumble mumble.")); + return ERR; + case NANO_XOFF_KEY: + statusbar(_("XOFF ignored, mumble mumble.")); + return ERR; +#ifndef NANO_SMALL + case NANO_SUSPEND_KEY: + if (ISSET(SUSPEND)) + do_suspend(0); + return ERR; +#endif +#ifndef DISABLE_MOUSE + case KEY_MOUSE: + if (get_edit_mouse()) { + kbinput = get_kbinput(edit, meta_key); + break; + } else + return ERR; +#endif + } + + /* Check for a shortcut in the main list. */ + s = get_shortcut(main_list, kbinput, meta_key); + + if (s != NULL) { + /* We got a shortcut. Run the shortcut's corresponding function + * if it has one. */ + if (s->func != do_cut_text) + cutbuffer_reset(); + if (s->func != NULL) { + if (allow_funcs) + s->func(); + keyhandled = TRUE; + } + } + +#ifndef NANO_SMALL + else { + /* If we didn't get a shortcut, check for a toggle. */ + t = get_toggle(kbinput, *meta_key); + + /* We got a toggle. Switch the value of the toggle's + * corresponding flag. */ + if (t != NULL) { + cutbuffer_reset(); + if (allow_funcs) + do_toggle(t); + keyhandled = TRUE; + } + } +#endif + + /* If we got a shortcut with a corresponding function or a toggle, + * reset meta_key and retval. If we didn't, keep the value of + * meta_key and return the key we got in retval. */ + if (allow_funcs && keyhandled) { + *meta_key = FALSE; + retval = ERR; + } else { + cutbuffer_reset(); + retval = kbinput; + } + + return retval; +} + +#ifndef DISABLE_MOUSE +bool get_edit_mouse(void) +{ + int mouse_x, mouse_y; + bool retval; + + retval = get_mouseinput(&mouse_x, &mouse_y, TRUE); + + if (!retval) { + /* We can click in the edit window to move the cursor. */ + if (wenclose(edit, mouse_y, mouse_x)) { + bool sameline; + /* Did they click on the line with the cursor? If they + * clicked on the cursor, we set the mark. */ + size_t xcur; + /* The character they clicked on. */ + + /* Subtract out the size of topwin. Perhaps we need a + * constant somewhere? */ + mouse_y -= 2; + + sameline = (mouse_y == current_y); + + /* Move to where the click occurred. */ + for (; current_y < mouse_y && current->next != NULL; current_y++) + current = current->next; + for (; current_y > mouse_y && current->prev != NULL; current_y--) + current = current->prev; + + xcur = actual_x(current->data, get_page_start(xplustabs()) + + mouse_x); + +#ifndef NANO_SMALL + /* Clicking where the cursor is toggles the mark, as does + * clicking beyond the line length with the cursor at the + * end of the line. */ + if (sameline && xcur == current_x) { + if (ISSET(VIEW_MODE)) { + print_view_warning(); + return retval; + } + do_mark(); + } #endif + current_x = xcur; + placewewant = xplustabs(); + edit_refresh(); + } + } + /* FIXME: If we clicked on a location in the statusbar, the cursor + * should move to the location we clicked on. This functionality + * should be in get_statusbar_mouse() when it's written. */ + + return retval; +} +#endif /* !DISABLE_MOUSE */ + /* Return the placewewant associated with current_x. That is, xplustabs * is the zero-based column position of the cursor. Value is no smaller * than current_x. */ @@ -1541,7 +1738,7 @@ int nanogetstr(int allowtabs, const char *buf, const char *def, ) { int kbinput; - int meta_key; + bool meta_key; static int x = -1; /* the cursor position in 'answer' */ int xend; @@ -1635,7 +1832,10 @@ int nanogetstr(int allowtabs, const char *buf, const char *def, switch (kbinput) { #ifndef DISABLE_MOUSE case KEY_MOUSE: - do_mouse(); + { + int mouse_x, mouse_y; + get_mouseinput(&mouse_x, &mouse_y, TRUE); + } break; #endif case NANO_HOME_KEY: @@ -2872,7 +3072,7 @@ int do_yesno(int all, const char *msg) do { int kbinput; - int meta_key; + bool meta_key; #ifndef DISABLE_MOUSE int mouse_x, mouse_y; #endif @@ -2883,14 +3083,13 @@ int do_yesno(int all, const char *msg) ok = -1; #ifndef DISABLE_MOUSE /* Look ma! We get to duplicate lots of code from - * do_mouse()!! */ + * get_edit_mouse()!! */ else if (kbinput == KEY_MOUSE) { - kbinput = get_mouseinput(&mouse_x, &mouse_y, FALSE); + get_mouseinput(&mouse_x, &mouse_y, FALSE); if (mouse_x != -1 && mouse_y != -1 && !ISSET(NO_HELP) && wenclose(bottomwin, mouse_y, mouse_x) && mouse_x < (width * 2) && mouse_y >= editwinrows + 3) { - int x = mouse_x / width; /* Did we click in the first column of shortcuts, or * the second? */ @@ -2949,7 +3148,7 @@ void display_main_list(void) * If constant is TRUE and DISABLE_CURPOS is set, we unset it and update * old_i and old_totsize. That way, we leave the current statusbar * alone, but next time we will display. */ -void do_cursorpos(int constant) +void do_cursorpos(bool constant) { const filestruct *fileptr; unsigned long i = 0; @@ -3038,12 +3237,13 @@ void do_help(void) int line = 0; /* The line number in help_text of the first displayed help line. * This variable is zero-based. */ - int no_more = 0; + bool no_more = FALSE; /* no_more means the end of the help text is shown, so don't go * down any more. */ - int kbinput = ERR, meta_key; + int kbinput = ERR; + bool meta_key; - int old_no_help = ISSET(NO_HELP); + bool old_no_help = ISSET(NO_HELP); #ifndef DISABLE_MOUSE const shortcut *oldshortcut = currshortcut; /* We will set currshortcut to allow clicking on the help @@ -3082,7 +3282,10 @@ void do_help(void) switch (kbinput) { #ifndef DISABLE_MOUSE case KEY_MOUSE: - do_mouse(); + { + int mouse_x, mouse_y; + get_mouseinput(&mouse_x, &mouse_y, TRUE); + } break; #endif case NANO_NEXTPAGE_KEY: