]> git.wh0rd.org Git - nano.git/commitdiff
add breakage fixes, type fixes, and as-needed color regex compilation
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Wed, 13 Jul 2005 20:18:46 +0000 (20:18 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Wed, 13 Jul 2005 20:18:46 +0000 (20:18 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2854 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
src/color.c
src/files.c
src/global.c
src/nano.c
src/nano.h
src/proto.h
src/rcfile.c
src/search.c
src/winio.c

index c035bb969bb0d1c5a2f641f258c19a9ff6c9a9f3..416edcf6c6736c751c342243a07e878f0e508d03 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -21,8 +21,9 @@ CVS code -
          open_nextfile_void() switch_to_next_buffer(), rename
          write_marked() write_marked_file(), remove load_file(), rename
          cancel_fork() cancel_command(), rename open_pipe()
-         execute_command(), remove execute_command(), and remove
-         resize_variables(). (DLR)
+         execute_command(), remove execute_command(), remove
+         resize_variables(), rename get_buffer() get_key_buffer(), and
+         rename get_buffer_len() get_key_buffer_len(). (DLR)
        - Replace all mvwaddstr(hblank) calls with a new function that
          does the same thing without the need for hblank.  New function
          blank_line(); changes to do_browser(), blank_titlebar(),
@@ -31,6 +32,19 @@ CVS code -
        - Make the static pid variable used by execute_command() and
          cancel_command() a pid_t instead of an int, for consistency.
          (DLR)
+       - Consistently make the flags global and any variables used to
+         hold it longs. (DLR)
+       - Consistently make the fg and bg colortype struct entries and
+         any variables used to hold them shorts.  Changes to
+         do_colorinit() (renamed color_init()), color_to_int() (renamed
+         color_to_short()), and parse_colors(). (DLR)
+       - Change color handling to save only the regex strings
+         constantly, and to actually compile them on an as-needed
+         basis.  Also, don't bother doing complete refreshes of the
+         screen when color support is enabled if there's no regex
+         associated with the current file.  Changes to update_color()
+         (renamed color_update()), thanks_for_all_the_fish(),
+         do_input(), and do_output(),  (DLR)
 - files.c:
   open_file()
        - Assert that filename isn't NULL, and don't do anything special
@@ -64,13 +78,13 @@ CVS code -
   allow_pending_sigwinch()
        - Simplify by using the "?" operator instead of an if clause.
          (DLR)
-  main()
-       - When constant cursor position display is on, only display the
-         cursor position if there are no keys waiting in the buffer.
-         (DLR)
 - nano.h:
        - Since we only use vsnprintf() now, remove the #ifdef block for
          HAVE_SNPRINTF. (DLR)
+- rcfile.c:
+  nregcomp()
+       - Return TRUE when the compilation succeeds and FALSE otherwise,
+         instead of the other way around. (DLR)
 - search.c:
   search_init()
        - Don't blank out last_replace anymore when we get a new string,
index 88c854d50b516beba1be8f15acf27215f1702b4d..ccd5c9e6ef57c360c25033961e419313d54894b0 100644 (file)
@@ -29,6 +29,7 @@
 #include <stdio.h>
 #include <errno.h>
 #include <fcntl.h>
+#include <assert.h>
 #include "proto.h"
 
 #ifdef ENABLE_COLOR
@@ -63,35 +64,38 @@ void set_colorpairs(void)
     }
 }
 
-void do_colorinit(void)
+void color_init(void)
 {
+    assert(openfile != NULL);
+
     if (has_colors()) {
-       const colortype *tmpcolor = NULL;
+       const colortype *tmpcolor;
 #ifdef HAVE_USE_DEFAULT_COLORS
        bool defok;
 #endif
 
        start_color();
 
-       /* Add in colors, if available. */
 #ifdef HAVE_USE_DEFAULT_COLORS
+       /* Add in colors, if available. */
        defok = (use_default_colors() != ERR);
 #endif
 
-       for (tmpcolor = colorstrings; tmpcolor != NULL;
+       for (tmpcolor = openfile->colorstrings; tmpcolor != NULL;
                tmpcolor = tmpcolor->next) {
            short background = tmpcolor->bg;
 
-           if (background == -1)
+           if (background == -1) {
 #ifdef HAVE_USE_DEFAULT_COLORS
                if (!defok)
 #endif
                    background = COLOR_BLACK;
+           }
 
            init_pair(tmpcolor->pairnum, tmpcolor->fg, background);
 
 #ifdef DEBUG
-           fprintf(stderr, "init_pair(): fg = %d, bg = %d\n",
+           fprintf(stderr, "init_pair(): fg = %hd, bg = %hd\n",
                tmpcolor->fg, tmpcolor->bg);
 #endif
        }
@@ -99,11 +103,14 @@ void do_colorinit(void)
 }
 
 /* Update the color information based on the current filename. */
-void update_color(void)
+void color_update(void)
 {
     const syntaxtype *tmpsyntax;
+    colortype *tmpcolor;
+
+    assert(openfile != NULL);
 
-    colorstrings = NULL;
+    openfile->colorstrings = NULL;
     for (tmpsyntax = syntaxes; tmpsyntax != NULL;
        tmpsyntax = tmpsyntax->next) {
        const exttype *e;
@@ -111,22 +118,44 @@ void update_color(void)
        for (e = tmpsyntax->extensions; e != NULL; e = e->next) {
            /* Set colorstrings if we matched the extension regex. */
            if (regexec(&e->val, openfile->filename, 0, NULL, 0) == 0)
-               colorstrings = tmpsyntax->color;
+               openfile->colorstrings = tmpsyntax->color;
 
-           if (colorstrings != NULL)
+           if (openfile->colorstrings != NULL)
                break;
        }
     }
 
     /* If we haven't found a match, use the override string. */
-    if (colorstrings == NULL && syntaxstr != NULL) {
+    if (openfile->colorstrings == NULL && syntaxstr != NULL) {
        for (tmpsyntax = syntaxes; tmpsyntax != NULL;
                tmpsyntax = tmpsyntax->next) {
-           if (mbstrcasecmp(tmpsyntax->desc, syntaxstr) == 0)
-               colorstrings = tmpsyntax->color;
+           if (mbstrcasecmp(tmpsyntax->desc, syntaxstr) == 0) {
+               openfile->colorstrings = tmpsyntax->color;
+
+               if (openfile->colorstrings != NULL)
+                   break;
+           }
+       }
+    }
+
+    /* tmpcolor->startstr and tmpcolor->endstr have already been checked
+     * for validity elsewhere.  Compile their associated regexes if we
+     * haven't already. */
+    for (tmpcolor = openfile->colorstrings; tmpcolor != NULL;
+       tmpcolor = tmpcolor->next) {
+       if (tmpcolor->startstr != NULL) {
+           tmpcolor->start = (regex_t *)nmalloc(sizeof(regex_t));
+           nregcomp(tmpcolor->start, tmpcolor->startstr,
+               tmpcolor->icase ? REG_ICASE : 0);
+       }
+       if (tmpcolor->endstr != NULL) {
+           tmpcolor->end = (regex_t *)nmalloc(sizeof(regex_t));
+           nregcomp(tmpcolor->end, tmpcolor->endstr,
+               tmpcolor->icase ? REG_ICASE : 0);
        }
     }
-    do_colorinit();
+
+    color_init();
 }
 
 #endif /* ENABLE_COLOR */
index 98550957b74baa3d3bd0b79d58782681bd99edd8..02f2d56ad791b08764659f926f78de27cabd3852 100644 (file)
@@ -147,6 +147,9 @@ void initialize_buffer(void)
 
     memset(&openfile->originalfilestat, 0, sizeof(struct stat));
 #endif
+#ifndef ENABLE_COLOR
+    openfile->colorstrings = NULL;
+#endif
 }
 
 #ifndef DISABLE_SPELLER
@@ -163,8 +166,8 @@ void reinitialize_buffer(void)
 }
 #endif
 
-/* filename is a file to open.  We make a new buffer, if necessary, and
- * then open and read the file. */
+/* If it's not "", filename is a file to open.  We make a new buffer, if
+ * necessary, and then open and read the file, if applicable. */
 void open_buffer(const char *filename)
 {
     bool new_buffer = (openfile == NULL
@@ -215,16 +218,19 @@ void open_buffer(const char *filename)
      * to the first line of the buffer. */
     if (rc != -1 && new_buffer)
        openfile->current = openfile->fileage;
+
+#ifdef ENABLE_COLOR
+    /* If we're loading into a new buffer, update the buffer's
+     * associated colors, if applicable. */
+    if (new_buffer)
+       color_update();
+#endif
 }
 
 /* Update the screen to account for the current buffer. */
 void display_buffer(void)
 {
     titlebar(NULL);
-#ifdef ENABLE_COLOR
-    /* Update the buffer's associated colors, if applicable. */
-    update_color();
-#endif
     edit_refresh();
 }
 
@@ -1559,8 +1565,14 @@ int write_file(const char *name, FILE *f_open, bool tmp, int append,
            openfile->filename = mallocstrcpy(openfile->filename,
                realname);
 #ifdef ENABLE_COLOR
-           update_color();
-           if (!ISSET(NO_COLOR_SYNTAX))
+           /* We might have changed the filename, so update the
+            * buffer's associated colors, if applicable. */
+           color_update();
+
+           /* If color syntaxes are available and turned on, we need to
+            * call edit_refresh(). */
+           if (openfile->colorstrings != NULL &&
+               !ISSET(NO_COLOR_SYNTAX))
                edit_refresh();
 #endif
        }
index bd4b4db4e9eb96052f2b8dafb81bdbe24653d311..f3c2b6e7742cef1eea695cee9741101770e2daa8 100644 (file)
@@ -39,7 +39,7 @@ ssize_t wrap_at = -CHARS_FROM_EOL;    /* Right justified fill value,
 char *last_search = NULL;      /* Last string we searched for */
 char *last_replace = NULL;     /* Last replacement string */
 
-unsigned long flags = 0;       /* Our flag containing many options */
+long flags = 0;                        /* Our flag containing many options */
 WINDOW *topwin;                        /* Top buffer */
 WINDOW *edit;                  /* The file portion of the editor */
 WINDOW *bottomwin;             /* Bottom buffer */
@@ -124,7 +124,6 @@ shortcut *gotodir_list = NULL;
 #endif
 
 #ifdef ENABLE_COLOR
-const colortype *colorstrings = NULL;
 syntaxtype *syntaxes = NULL;
 char *syntaxstr = NULL;
 #endif
@@ -1226,10 +1225,18 @@ void thanks_for_all_the_fish(void)
            colortype *bob = syntaxes->color;
 
            syntaxes->color = bob->next;
-           regfree(&bob->start);
-           if (bob->end != NULL)
+           if (bob->startstr != NULL)
+               free(bob->startstr);
+           if (bob->start != NULL) {
+               regfree(bob->start);
+               free(bob->start);
+           }
+           if (bob->endstr != NULL)
+               free(bob->endstr);
+           if (bob->end != NULL) {
                regfree(bob->end);
-           free(bob->end);
+               free(bob->end);
+           }
            free(bob);
        }
        syntaxes = syntaxes->next;
index 3bb685c50b504aeeedf12b7d97822970c88076b2..2d7338e815f4f8586af630673256af65fc48f500 100644 (file)
@@ -1359,9 +1359,9 @@ void do_delete(void)
     set_modified();
 
 #ifdef ENABLE_COLOR
-    /* If color syntaxes are turned on, we need to call
+    /* If color syntaxes are available and turned on, we need to call
      * edit_refresh(). */
-    if (!ISSET(NO_COLOR_SYNTAX))
+    if (openfile->colorstrings != NULL && !ISSET(NO_COLOR_SYNTAX))
        do_refresh = TRUE;
 #endif
 
@@ -3932,7 +3932,7 @@ int do_input(bool *meta_key, bool *func_key, bool *s_or_t, bool
         * display all the characters in the input buffer if it isn't
         * empty.  Note that it should be empty if we're in view
         * mode. */
-        if (*s_or_t == TRUE || get_buffer_len() == 0) {
+        if (*s_or_t == TRUE || get_key_buffer_len() == 0) {
            if (kbinput != NULL) {
                /* Display all the characters in the input buffer at
                 * once, filtering out control characters. */
@@ -4159,9 +4159,9 @@ void do_output(char *output, size_t output_len, bool allow_cntrls)
 #endif
 
 #ifdef ENABLE_COLOR
-       /* If color syntaxes are turned on, we need to call
-        * edit_refresh(). */
-       if (!ISSET(NO_COLOR_SYNTAX))
+       /* If color syntaxes are available and turned on, we need to
+        * call edit_refresh(). */
+       if (openfile->colorstrings != NULL && !ISSET(NO_COLOR_SYNTAX))
            do_refresh = TRUE;
 #endif
     }
@@ -4475,7 +4475,7 @@ int main(int argc, char **argv)
        char *alt_speller_cpy = alt_speller;
 #endif
        ssize_t tabsize_cpy = tabsize;
-       unsigned long flags_cpy = flags;
+       long flags_cpy = flags;
 
 #ifndef DISABLE_OPERATINGDIR
        operating_dir = NULL;
@@ -4727,10 +4727,9 @@ int main(int argc, char **argv)
        /* Make sure the cursor is in the edit window. */
        reset_cursor();
 
-       /* If constant cursor position display is on, and there are no
-        * keys waiting in the buffer, display the current cursor
-        * position on the statusbar. */
-       if (ISSET(CONST_UPDATE) && get_buffer_len() == 0)
+       /* If constant cursor position display is on, display the
+        * current cursor position on the statusbar. */
+       if (ISSET(CONST_UPDATE))
            do_cursorpos(TRUE);
 
        currshortcut = main_list;
index 705726a6bdc50bf7de44379cb8b4b017f8fef12c..323413478c2fdd105caaebff9578080b6b9536ed 100644 (file)
@@ -160,6 +160,40 @@ typedef struct filestruct {
     ssize_t lineno;            /* The line number. */
 } filestruct;
 
+#ifdef ENABLE_COLOR
+typedef struct colortype {
+    short fg;                  /* Foreground color. */
+    short bg;                  /* Background color. */
+    bool bright;               /* Is this color A_BOLD? */
+    bool icase;                        /* Is this regex string case
+                                * insensitive? */
+    int pairnum;               /* Color pair number used for this
+                                * foreground/background. */
+    char *startstr;            /* Start (or all) of the regex
+                                * string. */
+    regex_t *start;            /* Compiled start (or all) of the regex
+                                * string. */
+    char *endstr;              /* End (if any) of the regex string. */
+    regex_t *end;              /* Compiled end (if any) of the regex
+                                * string. */
+    struct colortype *next;
+} colortype;
+
+typedef struct exttype {
+    regex_t val;               /* The extensions that match this
+                                * syntax. */
+    struct exttype *next;
+} exttype;
+
+typedef struct syntaxtype {
+    char *desc;                        /* Name of this syntax type. */
+    exttype *extensions;       /* List of extensions that this syntax
+                                * applies to. */
+    colortype *color;          /* Color struct for this syntax. */
+    struct syntaxtype *next;
+} syntaxtype;
+#endif /* ENABLE_COLOR */
+
 typedef struct openfilestruct {
     char *filename;            /* Current file's name. */
     filestruct *fileage;       /* Current file's first line. */
@@ -185,6 +219,9 @@ typedef struct openfilestruct {
     file_format fmt;           /* Current file's format. */
     struct stat originalfilestat;
                                /* Current file's stat. */
+#endif
+#ifdef ENABLE_COLOR
+    colortype *colorstrings;   /* Current file's associated colors. */
 #endif
     struct openfilestruct *next;
                                /* Next node. */
@@ -236,34 +273,6 @@ typedef struct rcoption {
 } rcoption;
 #endif
 
-#ifdef ENABLE_COLOR
-typedef struct colortype {
-    int fg;                    /* Foreground color. */
-    int bg;                    /* Background color. */
-    bool bright;               /* Is this color A_BOLD? */
-    int pairnum;               /* Color pair number used for this
-                                * foreground/background. */
-    regex_t start;             /* Start (or all) of the regex
-                                * string. */
-    regex_t *end;              /* End (if any) of the regex string. */
-    struct colortype *next;
-} colortype;
-
-typedef struct exttype {
-    regex_t val;               /* The extensions that match this
-                                * syntax. */
-    struct exttype *next;
-} exttype;
-
-typedef struct syntaxtype {
-    char *desc;                        /* Name of this syntax type. */
-    exttype *extensions;       /* List of extensions that this syntax
-                                * applies to. */
-    colortype *color;          /* Color struct for this syntax. */
-    struct syntaxtype *next;
-} syntaxtype;
-#endif
-
 /* Bitwise flags so that we can save space (or, more correctly, not
  * waste it). */
 #define CASE_SENSITIVE         (1<<0)
index 2262f1ad360829afb5597bbdc35e3dba1c6404a1..a8e4f005164fae10dd07c143d7e914818cff43a8 100644 (file)
@@ -37,7 +37,7 @@
 extern ssize_t wrap_at;
 #endif
 extern int editwinrows;
-extern unsigned long flags;
+extern long flags;
 extern ssize_t tabsize;
 extern int currslen;
 
@@ -88,7 +88,6 @@ extern partition *filepart;
 extern openfilestruct *openfile;
 
 #ifdef ENABLE_COLOR
-extern const colortype *colorstrings;
 extern syntaxtype *syntaxes;
 extern char *syntaxstr;
 #endif
@@ -211,7 +210,7 @@ bool is_valid_mbstring(const char *s);
 /* Public functions in color.c. */
 #ifdef ENABLE_COLOR
 void set_colorpairs(void);
-void do_colorinit(void);
+void color_init(void);
 void update_color(void);
 #endif /* ENABLE_COLOR */
 
@@ -466,7 +465,7 @@ void rcfile_error(const char *msg, ...);
 char *parse_next_word(char *ptr);
 char *parse_argument(char *ptr);
 #ifdef ENABLE_COLOR
-int color_to_int(const char *colorname, bool *bright);
+int color_to_short(const char *colorname, bool *bright);
 char *parse_next_regex(char *ptr);
 bool nregcomp(regex_t *preg, const char *regex, int eflags);
 void parse_syntax(char *ptr);
@@ -573,8 +572,8 @@ void get_totals(const filestruct *begin, const filestruct *end, size_t
 #ifndef NANO_SMALL
 void reset_kbinput(void);
 #endif
-void get_buffer(WINDOW *win);
-size_t get_buffer_len(void);
+void get_key_buffer(WINDOW *win);
+size_t get_key_buffer_len(void);
 void unget_input(int *input, size_t input_len);
 void unget_kbinput(int kbinput, bool meta_key, bool func_key);
 int *get_input(WINDOW *win, size_t input_len);
index 8fed47b17bc91fd5269955c0e87d6bac0a263c3e..347d346f283b3c1d85d2247b6fdb31ff08a9db21 100644 (file)
@@ -182,9 +182,9 @@ char *parse_argument(char *ptr)
 }
 
 #ifdef ENABLE_COLOR
-int color_to_int(const char *colorname, bool *bright)
+int color_to_short(const char *colorname, bool *bright)
 {
-    int mcolor = -1;
+    short mcolor = -1;
 
     assert(colorname != NULL && bright != NULL);
 
@@ -246,8 +246,8 @@ char *parse_next_regex(char *ptr)
     return ptr;
 }
 
-/* Compile the regular expression regex to preg.  Return FALSE on
- * success, or TRUE if the expression is invalid. */
+/* Compile the regular expression regex to preg.  Return TRUE on
+ * success, or FALSE if the expression is invalid. */
 bool nregcomp(regex_t *preg, const char *regex, int eflags)
 {
     int rc = regcomp(preg, regex, REG_EXTENDED | eflags);
@@ -261,7 +261,7 @@ bool nregcomp(regex_t *preg, const char *regex, int eflags)
        free(str);
     }
 
-    return (rc != 0);
+    return (rc == 0);
 }
 
 void parse_syntax(char *ptr)
@@ -329,7 +329,7 @@ void parse_syntax(char *ptr)
            break;
 
        newext = (exttype *)nmalloc(sizeof(exttype));
-       if (nregcomp(&newext->val, fileregptr, REG_NOSUB))
+       if (!nregcomp(&newext->val, fileregptr, REG_NOSUB))
            free(newext);
        else {
            if (endext == NULL)
@@ -346,7 +346,7 @@ void parse_syntax(char *ptr)
  * treat the color stuff as case insensitive. */
 void parse_colors(char *ptr, bool icase)
 {
-    int fg, bg;
+    short fg, bg;
     bool bright = FALSE, no_fgcolor = FALSE;
     char *fgstr;
 
@@ -377,12 +377,12 @@ void parse_colors(char *ptr, bool icase)
                bgcolorname);
            return;
        }
-       bg = color_to_int(bgcolorname, &bright);
+       bg = color_to_short(bgcolorname, &bright);
     } else
        bg = -1;
 
     if (!no_fgcolor) {
-       fg = color_to_int(fgstr, &bright);
+       fg = color_to_short(fgstr, &bright);
 
        /* Don't try to parse screwed-up foreground colors. */
        if (fg == -1)
@@ -431,28 +431,40 @@ void parse_colors(char *ptr, bool icase)
        if (ptr == NULL)
            break;
 
-       if (nregcomp(&newcolor->start, fgstr, icase ? REG_ICASE : 0)) {
-           free(newcolor);
-           cancelled = TRUE;
-       } else {
+       newcolor->start = (regex_t *)nmalloc(sizeof(regex_t));
+       if (nregcomp(newcolor->start, fgstr, icase ? REG_ICASE : 0)) {
+           /* Free this regex, now that we know it's valid, and save
+            * the original string, so that we can recompile this regex
+            * later as needed. */
+           newcolor->startstr = mallocstrcpy(NULL, fgstr);
+           regfree(newcolor->start);
+           free(newcolor->start);
+           newcolor->start = NULL;
+
            newcolor->fg = fg;
            newcolor->bg = bg;
            newcolor->bright = bright;
-           newcolor->next = NULL;
+           newcolor->icase = icase;
+           newcolor->endstr = NULL;
            newcolor->end = NULL;
+           newcolor->next = NULL;
 
            if (endcolor == NULL) {
                endsyntax->color = newcolor;
 #ifdef DEBUG
-               fprintf(stderr, "Starting a new colorstring for fg %d, bg %d\n", fg, bg);
+               fprintf(stderr, "Starting a new colorstring for fg %hd, bg %hd\n", fg, bg);
 #endif
            } else {
 #ifdef DEBUG
-               fprintf(stderr, "Adding new entry for fg %d, bg %d\n", fg, bg);
+               fprintf(stderr, "Adding new entry for fg %hd, bg %hd\n", fg, bg);
 #endif
                endcolor->next = newcolor;
            }
            endcolor = newcolor;
+       } else {
+           free(newcolor->start);
+           free(newcolor);
+           cancelled = TRUE;
        }
 
        if (expectend) {
@@ -482,9 +494,15 @@ void parse_colors(char *ptr, bool icase)
 
            newcolor->end = (regex_t *)nmalloc(sizeof(regex_t));
            if (nregcomp(newcolor->end, fgstr, icase ? REG_ICASE : 0)) {
-               free(newcolor->end);
-               newcolor->end = NULL;
+               /* Free this regex, now that we know it's valid, and
+                * save the original string, so that we can recompile
+                * this regex later as needed. */
+               newcolor->endstr = mallocstrcpy(NULL, fgstr);
+               regfree(newcolor->end);
            }
+
+           free(newcolor->end);
+           newcolor->end = NULL;
        }
     }
 }
index 11f6f8c5262553f777b42a7736ad89531d486200..c169c18f5ccf98169f771884b57bde90cb75daf2 100644 (file)
@@ -842,7 +842,10 @@ ssize_t do_replace_loop(const char *needle, const filestruct
 
            if (!replaceall) {
 #ifdef ENABLE_COLOR
-               if (!ISSET(NO_COLOR_SYNTAX))
+               /* If color syntaxes are available and turned on, we
+                * need to call edit_refresh(). */
+               if (openfile->colorstrings != NULL &&
+                       !ISSET(NO_COLOR_SYNTAX))
                    edit_refresh();
                else
 #endif
index 01d96dcdfff2cdadd7c979b24484c6b0bf2e5196..3ee48fbf9b3dbb1ca2954738796e6fc75d29ade9 100644 (file)
@@ -127,7 +127,7 @@ void reset_kbinput(void)
 /* Read in a sequence of keystrokes from win and save them in the
  * default keystroke buffer.  This should only be called when the
  * default keystroke buffer is empty. */
-void get_buffer(WINDOW *win)
+void get_key_buffer(WINDOW *win)
 {
     int input;
 
@@ -190,12 +190,12 @@ void get_buffer(WINDOW *win)
     nodelay(win, FALSE);
 
 #ifdef DEBUG
-    fprintf(stderr, "get_buffer(): key_buffer_len = %lu\n", (unsigned long)key_buffer_len);
+    fprintf(stderr, "get_key_buffer(): key_buffer_len = %lu\n", (unsigned long)key_buffer_len);
 #endif
 }
 
 /* Return the length of the default keystroke buffer. */
-size_t get_buffer_len(void)
+size_t get_key_buffer_len(void)
 {
     return key_buffer_len;
 }
@@ -270,7 +270,7 @@ int *get_input(WINDOW *win, size_t input_len)
 
     if (key_buffer_len == 0) {
        if (win != NULL)
-           get_buffer(win);
+           get_key_buffer(win);
 
        if (key_buffer_len == 0)
            return NULL;
@@ -504,7 +504,7 @@ int parse_kbinput(WINDOW *win, bool *meta_key, bool *func_key
                     * waiting, we have a true escape sequence, so
                     * interpret it. */
                    escapes = 0;
-                   if (get_buffer_len() == 0) {
+                   if (get_key_buffer_len() == 0) {
                        *meta_key = TRUE;
                        retval = tolower(*kbinput);
                    } else {
@@ -517,7 +517,7 @@ int parse_kbinput(WINDOW *win, bool *meta_key, bool *func_key
                         * sequence into its corresponding key value,
                         * and save that as the result. */
                        unget_input(kbinput, 1);
-                       seq_len = get_buffer_len();
+                       seq_len = get_key_buffer_len();
                        seq = get_input(NULL, seq_len);
                        retval = get_escape_seq_kbinput(seq, seq_len,
                                &ignore_seq);
@@ -1460,7 +1460,7 @@ int *parse_verbatim_kbinput(WINDOW *win, size_t *kbinput_len)
 
     /* Get the complete sequence, and save the characters in it as the
      * result. */
-    *kbinput_len = get_buffer_len();
+    *kbinput_len = get_key_buffer_len();
     retval = get_input(NULL, *kbinput_len);
 
     return retval;
@@ -1700,7 +1700,7 @@ int do_statusbar_input(bool *meta_key, bool *func_key, bool *s_or_t,
        /* If we got a shortcut, or if there aren't any other characters
         * waiting after the one we read in, we need to display all the
         * characters in the input buffer if it isn't empty. */
-        if (*s_or_t == TRUE || get_buffer_len() == 0) {
+        if (*s_or_t == TRUE || get_key_buffer_len() == 0) {
            if (kbinput != NULL) {
 
                /* Display all the characters in the input buffer at
@@ -3113,7 +3113,7 @@ void edit_add(const filestruct *fileptr, const char *converted, int
         * string. */
 #endif
 
-    assert(fileptr != NULL && converted != NULL);
+    assert(openfile != NULL && fileptr != NULL && converted != NULL);
     assert(strlenpt(converted) <= COLS);
 
     /* Just paint the string in any case (we'll add color or reverse on
@@ -3121,8 +3121,10 @@ void edit_add(const filestruct *fileptr, const char *converted, int
     mvwaddstr(edit, yval, 0, converted);
 
 #ifdef ENABLE_COLOR
-    if (colorstrings != NULL && !ISSET(NO_COLOR_SYNTAX)) {
-       const colortype *tmpcolor = colorstrings;
+    /* If color syntaxes are available and turned on, we need to display
+     * them. */
+    if (openfile->colorstrings != NULL && !ISSET(NO_COLOR_SYNTAX)) {
+       const colortype *tmpcolor = openfile->colorstrings;
 
        for (; tmpcolor != NULL; tmpcolor = tmpcolor->next) {
            int x_start;
@@ -3157,7 +3159,7 @@ void edit_add(const filestruct *fileptr, const char *converted, int
                     * not to match the beginning-of-line character
                     * unless k is 0.  If regexec() returns REG_NOMATCH,
                     * there are no more matches in the line. */
-                   if (regexec(&tmpcolor->start, &fileptr->data[k], 1,
+                   if (regexec(tmpcolor->start, &fileptr->data[k], 1,
                        &startmatch, (k == 0) ? 0 :
                        REG_NOTBOL) == REG_NOMATCH)
                        break;
@@ -3208,9 +3210,9 @@ void edit_add(const filestruct *fileptr, const char *converted, int
                    /* Where it starts in that line. */
                const filestruct *end_line;
 
-               while (start_line != NULL &&
-                       regexec(&tmpcolor->start, start_line->data, 1,
-                       &startmatch, 0) == REG_NOMATCH) {
+               while (start_line != NULL && regexec(tmpcolor->start,
+                       start_line->data, 1, &startmatch,
+                       0) == REG_NOMATCH) {
                    /* If there is an end on this line, there is no need
                     * to look for starts on earlier lines. */
                    if (regexec(tmpcolor->end, start_line->data, 0,
@@ -3235,7 +3237,7 @@ void edit_add(const filestruct *fileptr, const char *converted, int
                        /* No end found after this start. */
                        break;
                    start_col++;
-                   if (regexec(&tmpcolor->start, start_line->data +
+                   if (regexec(tmpcolor->start, start_line->data +
                        start_col, 1, &startmatch,
                        REG_NOTBOL) == REG_NOMATCH)
                        /* No later start on this line. */
@@ -3280,11 +3282,10 @@ void edit_add(const filestruct *fileptr, const char *converted, int
                start_col = 0;
 
                while (start_col < endpos) {
-                   if (regexec(&tmpcolor->start,
-                       fileptr->data + start_col, 1, &startmatch,
-                       (start_col == 0) ? 0 :
-                       REG_NOTBOL) == REG_NOMATCH ||
-                       start_col + startmatch.rm_so >= endpos)
+                   if (regexec(tmpcolor->start, fileptr->data +
+                       start_col, 1, &startmatch, (start_col == 0) ?
+                       0 : REG_NOTBOL) == REG_NOMATCH || start_col +
+                       startmatch.rm_so >= endpos)
                        /* No more starts on this line. */
                        break;
                    /* Translate the match to be relative to the
@@ -3353,6 +3354,7 @@ void edit_add(const filestruct *fileptr, const char *converted, int
 #endif /* ENABLE_COLOR */
 
 #ifndef NANO_SMALL
+    /* If the mark is on, we need to display it. */
     if (openfile->mark_set && (fileptr->lineno <=
        openfile->mark_begin->lineno || fileptr->lineno <=
        openfile->current->lineno) && (fileptr->lineno >=