From 658399aeb9bbad1ed0a28d0cfc4274efd3fdbb20 Mon Sep 17 00:00:00 2001 From: Chris Allegretta Date: Thu, 14 Jun 2001 02:54:22 +0000 Subject: [PATCH] Moved extension functions to meta keys, new macro TOGGLE() for toggling flags git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@686 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- BUGS | 4 ++++ ChangeLog | 11 +++++++++++ global.c | 58 ++++++++++++++++++++++++++++++++++++------------------- nano.c | 6 ++---- nano.h | 27 +++++++++++++++----------- search.c | 38 +++++++++++++++++++++--------------- winio.c | 41 ++++++++++++++++++++++++++++++++++----- 7 files changed, 129 insertions(+), 56 deletions(-) diff --git a/BUGS b/BUGS index 932e140c..76bea52a 100644 --- a/BUGS +++ b/BUGS @@ -120,4 +120,8 @@ ** Open BUGS ** +Informal note - when using marked write to file, if there's only one +line of text hilighted, it writes the whole rest of the ifle to disk and +goes bonkers. Delete this message when fixed. + $Id$ diff --git a/ChangeLog b/ChangeLog index edeadaf4..953b21dc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -40,6 +40,17 @@ Cvs code - nano_reverse_msg, new functions revstrstr and revstrcasestr, many changes to search functions. Not too big a code size increase! + - Moved extension functions (Case Sensitive, Regexp, and Backwards + Search, Append key in write file function) to Meta keys, as + people are complaining loudly about nano not being control-key + compatible with Pico, which is a Bag Thing (TM). Changes to + shortcut_init, toggle_init, new toggles for backwards and regexp + (and you can now toggle all search options including regexp at + the Search: prompt!) Changes to nanogetstr to enable Meta + keys to be grabbed, changes to onekey to print M-style shortcuts. + - New macro TOGGLE which just toggles, no more silly checking + ISSET and then using SET or UNSET when we want a simple toggle + for a flag. - configure.in: - New option, --enable-nanorc, which allows people to have a .nanorc initialization file and set options normally used on the command diff --git a/global.c b/global.c index 7dea333e..02903200 100644 --- a/global.c +++ b/global.c @@ -139,7 +139,8 @@ void toggle_init(void) #ifndef NANO_SMALL char *toggle_const_msg, *toggle_autoindent_msg, *toggle_suspend_msg, *toggle_nohelp_msg, *toggle_picomode_msg, *toggle_mouse_msg, - *toggle_cuttoend_msg, *toggle_wrap_msg; + *toggle_cuttoend_msg, *toggle_wrap_msg, *toggle_case_msg, + *toggle_backwards_msg; #ifdef HAVE_REGEX_H char *toggle_regexp_msg; #endif @@ -151,6 +152,8 @@ void toggle_init(void) toggle_picomode_msg = _("Pico mode"); toggle_mouse_msg = _("Mouse support"); toggle_cuttoend_msg = _("Cut to end"); + toggle_backwards_msg = _("Backwards Search"); + toggle_case_msg = _("Case Sensitive Search"); #ifdef HAVE_REGEX_H toggle_regexp_msg = _("Regular expressions"); #endif @@ -172,8 +175,12 @@ void toggle_init(void) USE_MOUSE); toggle_init_one(&toggles[7], TOGGLE_CUTTOEND_KEY, toggle_cuttoend_msg, CUT_TO_END); + toggle_init_one(&toggles[8], TOGGLE_BACKWARDS_KEY, toggle_backwards_msg, + REVERSE_SEARCH); + toggle_init_one(&toggles[9], TOGGLE_CASE_KEY, toggle_case_msg, + CASE_SENSITIVE); #ifdef HAVE_REGEX_H - toggle_init_one(&toggles[8], TOGGLE_REGEXP_KEY, toggle_regexp_msg, + toggle_init_one(&toggles[10], TOGGLE_REGEXP_KEY, toggle_regexp_msg, USE_REGEXP); #endif #endif @@ -194,7 +201,8 @@ void shortcut_init(int unjustify) "", *nano_backspace_msg = "", *nano_tab_msg = "", *nano_enter_msg = "", *nano_case_msg = "", *nano_cancel_msg = "", *nano_unjustify_msg = - "", *nano_append_msg = "", *nano_reverse_msg = ""; + "", *nano_append_msg = "", *nano_reverse_msg = + "", *nano_regexp_msg = ""; #ifndef NANO_SMALL char *nano_tofiles_msg = ""; @@ -237,6 +245,7 @@ void shortcut_init(int unjustify) nano_cancel_msg = _("Cancel the current function"); nano_append_msg = _("Append to the current file"); nano_reverse_msg = _("Search Backwards"); + nano_regexp_msg = _("Use Regular Expressions"); #endif sc_init_one(&main_list[0], NANO_HELP_KEY, _("Get Help"), @@ -359,22 +368,26 @@ void shortcut_init(int unjustify) sc_init_one(&whereis_list[1], NANO_LASTLINE_KEY, _("Last Line"), nano_lastline_msg, 0, 0, 0, VIEW, do_last_line); - sc_init_one(&whereis_list[2], NANO_CASE_KEY, _("Case Sens"), - nano_case_msg, 0, 0, 0, VIEW, 0); - - - sc_init_one(&whereis_list[3], NANO_OTHERSEARCH_KEY, _("Replace"), + sc_init_one(&whereis_list[2], NANO_OTHERSEARCH_KEY, _("Replace"), nano_replace_msg, 0, 0, 0, VIEW, do_replace); - sc_init_one(&whereis_list[4], NANO_FROMSEARCHTOGOTO_KEY, + sc_init_one(&whereis_list[3], NANO_FROMSEARCHTOGOTO_KEY, _("Goto Line"), nano_goto_msg, 0, 0, 0, VIEW, do_gotoline_void); - sc_init_one(&whereis_list[5], NANO_REVERSESEARCH_KEY, _("Backward"), + sc_init_one(&whereis_list[4], NANO_CANCEL_KEY, _("Cancel"), + nano_cancel_msg, 0, 0, 0, VIEW, 0); + + sc_init_one(&whereis_list[5], TOGGLE_CASE_KEY, _("Case Sens"), + nano_case_msg, 0, 0, 0, VIEW, 0); + + sc_init_one(&whereis_list[6], TOGGLE_BACKWARDS_KEY, _("Backward"), nano_reverse_msg, 0, 0, 0, VIEW, 0); - sc_init_one(&whereis_list[6], NANO_CANCEL_KEY, _("Cancel"), - nano_cancel_msg, 0, 0, 0, VIEW, 0); +#ifdef HAVE_REGEX_H + sc_init_one(&whereis_list[7], TOGGLE_REGEXP_KEY, _("Regexp"), + nano_regexp_msg, 0, 0, 0, VIEW, 0); +#endif sc_init_one(&replace_list[0], NANO_FIRSTLINE_KEY, _("First Line"), nano_firstline_msg, 0, 0, 0, VIEW, do_first_line); @@ -382,21 +395,26 @@ void shortcut_init(int unjustify) sc_init_one(&replace_list[1], NANO_LASTLINE_KEY, _("Last Line"), nano_lastline_msg, 0, 0, 0, VIEW, do_last_line); - sc_init_one(&replace_list[2], NANO_CASE_KEY, _("Case Sens"), - nano_case_msg, 0, 0, 0, VIEW, 0); - - sc_init_one(&replace_list[3], NANO_OTHERSEARCH_KEY, _("No Replace"), + sc_init_one(&replace_list[2], NANO_OTHERSEARCH_KEY, _("No Replace"), nano_whereis_msg, 0, 0, 0, VIEW, do_search); - sc_init_one(&replace_list[4], NANO_FROMSEARCHTOGOTO_KEY, + sc_init_one(&replace_list[3], NANO_FROMSEARCHTOGOTO_KEY, _("Goto Line"), nano_goto_msg, 0, 0, 0, VIEW, do_gotoline_void); - sc_init_one(&replace_list[5], NANO_REVERSESEARCH_KEY, _("Backward"), + sc_init_one(&replace_list[4], NANO_CANCEL_KEY, _("Cancel"), + nano_cancel_msg, 0, 0, 0, VIEW, 0); + + sc_init_one(&replace_list[5], TOGGLE_CASE_KEY, _("Case Sens"), + nano_case_msg, 0, 0, 0, VIEW, 0); + + sc_init_one(&replace_list[6], TOGGLE_BACKWARDS_KEY, _("Backward"), nano_reverse_msg, 0, 0, 0, VIEW, 0); - sc_init_one(&replace_list[6], NANO_CANCEL_KEY, _("Cancel"), - nano_cancel_msg, 0, 0, 0, VIEW, 0); +#ifdef HAVE_REGEX_H + sc_init_one(&replace_list[7], TOGGLE_REGEXP_KEY, _("Regexp"), + nano_regexp_msg, 0, 0, 0, VIEW, 0); +#endif sc_init_one(&replace_list_2[0], NANO_FIRSTLINE_KEY, _("First Line"), diff --git a/nano.c b/nano.c index bed69385..f605dde5 100644 --- a/nano.c +++ b/nano.c @@ -2146,10 +2146,8 @@ void do_toggle(int which) char *enabled = _("enabled"); char *disabled = _("disabled"); - if (ISSET(toggles[which].flag)) - UNSET(toggles[which].flag); - else - SET(toggles[which].flag); + /* Even easier! */ + TOGGLE(toggles[which].flag); switch (toggles[which].val) { case TOGGLE_PICOMODE_KEY: diff --git a/nano.h b/nano.h index 23c928fe..b381d020 100644 --- a/nano.h +++ b/nano.h @@ -34,6 +34,7 @@ #define SET(bit) flags |= bit #define UNSET(bit) flags &= ~bit #define ISSET(bit) (flags & bit) +#define TOGGLE(bit) flags ^= bit #ifdef USE_SLANG /* Slang support enabled */ @@ -206,7 +207,6 @@ know what you're doing */ #define NANO_REPLACE_FKEY KEY_F(14) #define NANO_ALT_REPLACE_KEY NANO_ALT_R #define NANO_OTHERSEARCH_KEY NANO_CONTROL_R -#define NANO_REVERSESEARCH_KEY NANO_CONTROL_B #define NANO_PREVPAGE_KEY NANO_CONTROL_Y #define NANO_PREVPAGE_FKEY KEY_F(7) #define NANO_NEXTPAGE_KEY NANO_CONTROL_V @@ -222,7 +222,6 @@ know what you're doing */ #define NANO_FIRSTLINE_KEY NANO_PREVPAGE_KEY #define NANO_LASTLINE_KEY NANO_NEXTPAGE_KEY #define NANO_CANCEL_KEY NANO_CONTROL_C -#define NANO_CASE_KEY NANO_CONTROL_A #define NANO_REFRESH_KEY NANO_CONTROL_L #define NANO_JUSTIFY_KEY NANO_CONTROL_J #define NANO_JUSTIFY_FKEY KEY_F(4) @@ -241,7 +240,7 @@ know what you're doing */ #define NANO_ENTER_KEY NANO_CONTROL_M #define NANO_FROMSEARCHTOGOTO_KEY NANO_CONTROL_T #define NANO_TOFILES_KEY NANO_CONTROL_T -#define NANO_APPEND_KEY NANO_CONTROL_A +#define NANO_APPEND_KEY NANO_ALT_A #define TOGGLE_CONST_KEY NANO_ALT_C #define TOGGLE_AUTOINDENT_KEY NANO_ALT_I @@ -252,11 +251,23 @@ know what you're doing */ #define TOGGLE_CUTTOEND_KEY NANO_ALT_K #define TOGGLE_REGEXP_KEY NANO_ALT_E #define TOGGLE_WRAP_KEY NANO_ALT_W +#define TOGGLE_BACKWARDS_KEY NANO_ALT_B +#define TOGGLE_CASE_KEY NANO_ALT_A + +/* Toggle stuff, these static lengths need to go away RSN */ + +#ifdef HAVE_REGEX_H +#define TOGGLE_LEN 11 +#define WHEREIS_LIST_LEN 8 +#define REPLACE_LIST_LEN 8 +#else +#define TOGGLE_LEN 10 +#define WHEREIS_LIST_LEN 7 +#define REPLACE_LIST_LEN 7 +#endif #define MAIN_LIST_LEN 26 #define MAIN_VISIBLE 12 -#define WHEREIS_LIST_LEN 7 -#define REPLACE_LIST_LEN 7 #define REPLACE_LIST_2_LEN 3 #define GOTO_LIST_LEN 3 #define GOTODIR_LIST_LEN 1 @@ -272,12 +283,6 @@ know what you're doing */ #define IMSERTFILE_LIST_LEN 1 #endif -#ifdef HAVE_REGEX_H -#define TOGGLE_LEN 9 -#else -#define TOGGLE_LEN 8 -#endif - #define VIEW 1 #define NOVIEW 0 diff --git a/search.c b/search.c index 584c1383..74cb74c2 100644 --- a/search.c +++ b/search.c @@ -72,7 +72,7 @@ void search_init_globals(void) */ int search_init(int replacing) { - int i = 0; + int i = 0, j; char *buf; char *prompt; static char *backupstring = NULL; @@ -137,7 +137,10 @@ int search_init(int replacing) free(backupstring); backupstring = NULL; return -1; - } else if (i == -2) { /* Same string */ + } else + switch (i) { + + case -2: /* Same string */ #ifdef HAVE_REGEX_H if (ISSET(USE_REGEXP)) { @@ -147,10 +150,9 @@ int search_init(int replacing) else regexp_init(answer); } -#else - ; #endif - } else if (i == 0) { /* They entered something new */ + break; + case 0: /* They entered something new */ #ifdef HAVE_REGEX_H if (ISSET(USE_REGEXP)) regexp_init(answer); @@ -158,37 +160,41 @@ int search_init(int replacing) free(backupstring); backupstring = NULL; last_replace[0] = '\0'; - } else if (i == NANO_CASE_KEY) { /* They want it case sensitive */ + break; + case TOGGLE_CASE_KEY: + case TOGGLE_BACKWARDS_KEY: +#ifdef HAVE_REGEX_H + case TOGGLE_REGEXP_KEY: +#endif free(backupstring); backupstring = NULL; backupstring = mallocstrcpy(backupstring, answer); - if (ISSET(CASE_SENSITIVE)) - UNSET(CASE_SENSITIVE); - else - SET(CASE_SENSITIVE); + for (j = 0; j <= TOGGLE_LEN - 1; j++) + if (i == toggles[j].val) + TOGGLE(toggles[j].flag); return 1; - } else if (i == NANO_OTHERSEARCH_KEY) { + case NANO_OTHERSEARCH_KEY: backupstring = mallocstrcpy(backupstring, answer); return -2; /* Call the opposite search function */ +/* } else if (i == NANO_REVERSESEARCH_KEY) { free(backupstring); backupstring = NULL; backupstring = mallocstrcpy(backupstring, answer); - if (ISSET(REVERSE_SEARCH)) - UNSET(REVERSE_SEARCH); - else - SET(REVERSE_SEARCH); + TOGGLE(REVERSE_SEARCH); return 1; } else if (i == NANO_FROMSEARCHTOGOTO_KEY) { +*/ + case NANO_FROMSEARCHTOGOTO_KEY: free(backupstring); backupstring = NULL; do_gotoline_void(); return -3; - } else { /* First line key, etc. */ + default: do_early_abort(); free(backupstring); backupstring = NULL; diff --git a/winio.c b/winio.c index 5c6726aa..5c1c1240 100644 --- a/winio.c +++ b/winio.c @@ -291,7 +291,7 @@ int nanogetstr(int allowtabs, char *buf, char *def, shortcut s[], int slen, fprintf(stderr, _("Aha! \'%c\' (%d)\n"), kbinput, kbinput); #endif - if (kbinput == s[j].val) { + if (kbinput == s[j].val && kbinput < 32) { /* We shouldn't discard the answer it gave, just because we hit a keystroke, GEEZ! */ @@ -327,10 +327,12 @@ int nanogetstr(int allowtabs, char *buf, char *def, shortcut s[], int slen, break; #endif #endif + case NANO_HOME_KEY: case KEY_HOME: x = x_left; nanoget_repaint(buf, inputbuf, x); break; + case NANO_END_KEY: case KEY_END: x = x_left + strlen(inputbuf); nanoget_repaint(buf, inputbuf, x); @@ -450,11 +452,29 @@ int nanogetstr(int allowtabs, char *buf, char *def, shortcut s[], int slen, nodelay(edit, FALSE); break; } + default: + + for (j = 0; j <= slen - 1; j++) { +#ifdef DEBUG + fprintf(stderr, _("Aha! \'%c\' (%d)\n"), kbinput, kbinput); +#endif + if (kbinput == s[j].val || kbinput == s[j].val - 32) { + + /* We hit an Alt key. Do like above. We don't + just ungetch the letter and let it get caught + above cause that screws the keypad... */ + answer = mallocstrcpy(answer, inputbuf); + free(inputbuf); + return s[j].val; + } + } + } nanoget_repaint(buf, inputbuf, x); break; default: + if (kbinput < 32) break; @@ -553,7 +573,7 @@ void onekey(char *keystroke, char *desc) { char description[80]; - snprintf(description, 12, " %-10s", desc); + snprintf(description, 12 - (strlen(keystroke) - 2), " %-10s", desc); wattron(bottomwin, A_REVERSE); waddstr(bottomwin, keystroke); wattroff(bottomwin, A_REVERSE); @@ -586,8 +606,14 @@ void bottombars(shortcut s[], int slen) clear_bottomwin(); wmove(bottomwin, 1, 0); - for (i = 0; i <= slen - 1; i += 2) { - snprintf(keystr, 10, "^%c", s[i].val + 64); + + for (i = 0; i <= slen - 2; i += 2) { + + if (s[i].val < 97) + snprintf(keystr, 10, "^%c", s[i].val + 64); + else + snprintf(keystr, 10, "M-%c", s[i].val - 32); + onekey(keystr, s[i].desc); for (j = 0; j < k; j++) @@ -596,7 +622,12 @@ void bottombars(shortcut s[], int slen) wmove(bottomwin, 2, 0); for (i = 1; i <= slen - 1; i += 2) { - snprintf(keystr, 10, "^%c", s[i].val + 64); + + if (s[i].val < 97) + snprintf(keystr, 10, "^%c", s[i].val + 64); + else + snprintf(keystr, 10, "M-%c", s[i].val - 32); + onekey(keystr, s[i].desc); for (j = 0; j < k; j++)