vi: code shrink
authorDenys Vlasenko <vda.linux@googlemail.com>
Mon, 1 Apr 2019 15:17:02 +0000 (17:17 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 1 Apr 2019 15:17:02 +0000 (17:17 +0200)
function                                             old     new   delta
get_input_line                                       172     175      +3
char_insert                                          444     447      +3
rawmode                                               36      24     -12
edit_file                                            644     626     -18
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/2 up/down: 6/-30)             Total: -24 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
editors/vi.c

index fe907c84178f6e6dbaa73ce1f8162cc1fcdbb601..993630d6f877af8bffe5a2ad1630a3f5d5237ae2 100644 (file)
@@ -320,8 +320,9 @@ struct globals {
        int screensize;          //            and its size
        int tabstop;
        int last_forward_char;   // last char searched for with 'f' (int because of Unicode)
-       char erase_char;         // the users erase character
+#if ENABLE_FEATURE_VI_CRASHME
        char last_input_char;    // last char read from user
+#endif
 
 #if ENABLE_FEATURE_VI_DOT_CMD
        smallint adding2q;       // are we currently adding user input to q
@@ -433,8 +434,9 @@ struct globals {
 #define screenbegin             (G.screenbegin        )
 #define tabstop                 (G.tabstop            )
 #define last_forward_char       (G.last_forward_char  )
-#define erase_char              (G.erase_char         )
+#if ENABLE_FEATURE_VI_CRASHME
 #define last_input_char         (G.last_input_char    )
+#endif
 #if ENABLE_FEATURE_VI_READONLY
 #define readonly_mode           (G.readonly_mode      )
 #else
@@ -560,7 +562,6 @@ static void rawmode(void)
 {
        // no TERMIOS_CLEAR_ISIG: leave ISIG on - allow signals
        set_termios_to_raw(STDIN_FILENO, &term_orig, TERMIOS_RAW_CRNL);
-       erase_char = term_orig.c_cc[VERASE];
 }
 
 static void cookmode(void)
@@ -1082,7 +1083,7 @@ static char *get_input_line(const char *prompt)
                c = get_one_char();
                if (c == '\n' || c == '\r' || c == 27)
                        break;          // this is end of input
-               if (c == erase_char || c == 8 || c == 127) {
+               if (c == term_orig.c_cc[VERASE] || c == 8 || c == 127) {
                        // user wants to erase prev char
                        buf[--i] = '\0';
                        write1("\b \b"); // erase char on screen
@@ -1978,7 +1979,7 @@ static char *char_insert(char *p, char c, int undo) // insert the char c at 'p'
                if ((p[-1] != '\n') && (dot > text)) {
                        p--;
                }
-       } else if (c == erase_char || c == 8 || c == 127) { // Is this a BS
+       } else if (c == term_orig.c_cc[VERASE] || c == 8 || c == 127) { // Is this a BS
                if (p > text) {
                        p--;
                        p = text_hole_delete(p, p, ALLOW_UNDO_QUEUED);  // shrink buffer 1 char
@@ -4189,7 +4190,10 @@ static void edit_file(char *fn)
        mark[26] = mark[27] = text;     // init "previous context"
 #endif
 
-       last_forward_char = last_input_char = '\0';
+       last_forward_char = '\0';
+#if ENABLE_FEATURE_VI_CRASHME
+       last_input_char = '\0';
+#endif
        crow = 0;
        ccol = 0;
 
@@ -4253,7 +4257,10 @@ static void edit_file(char *fn)
                        }
                }
 #endif
-               last_input_char = c = get_one_char();   // get a cmd from user
+               c = get_one_char();     // get a cmd from user
+#if ENABLE_FEATURE_VI_CRASHME
+               last_input_char = c;
+#endif
 #if ENABLE_FEATURE_VI_YANKMARK
                // save a copy of the current line- for the 'U" command
                if (begin_line(dot) != cur_line) {