Please try the attached patch. Use --edge=<number> to show a colored bar at the desired column.
Benno
From 119491bbdedf2c727135e5e331f0714d94644351 Mon Sep 17 00:00:00 2001 From: Benno Schulenberg <bensb...@telfort.nl> Date: Mon, 17 Dec 2018 19:57:30 +0100 Subject: [PATCH] new feature: add option --edgecolumn that shows a vertical guiding bar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Option -e (--edgecolumn) takes a column number as argument and then shows a vertical, colored bar over the entire height of the buffer, to help the user control the width of the text when the terminal is wider than this desired width. [The color needs to become configurable, and would by default just change the background color, not the foreground color. But that is something for a later patch. It also needs to add an rcfile option and documentation, of course. Suggestions for a better name for the option are welcome.] This fulfills https://bugs.debian.org/916392. Requested-by: Arturo Borrero González <art...@debian.org> And fulfills https://savannah.gnu.org/bugs/?55315. Requested-by: Bryan Christ <bryan.chr...@gmail.com> --- src/global.c | 2 ++ src/nano.c | 16 ++++++++++++++-- src/proto.h | 1 + src/winio.c | 9 +++++++++ 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/global.c b/src/global.c index 0368132f..baef8fa9 100644 --- a/src/global.c +++ b/src/global.c @@ -111,6 +111,8 @@ int editwincols = -1; /* The number of usable columns in the edit window: COLS - margin. */ int margin = 0; /* The amount of space reserved at the left for line numbers. */ +ssize_t edge_col = 0; + /* The column at which a vertical bar of color will be drawn. */ filestruct *cutbuffer = NULL; /* The buffer where we store cut text. */ diff --git a/src/nano.c b/src/nano.c index 263045bc..db3371b6 100644 --- a/src/nano.c +++ b/src/nano.c @@ -851,6 +851,10 @@ void usage(void) print_opt("-c", "--constantshow", N_("Constantly show cursor position")); print_opt("-d", "--rebinddelete", N_("Fix Backspace/Delete confusion problem")); +#ifndef NANO_TINY + print_opt("-e <number>", "--edgecolumn=<number>", + N_("Show a guiding bar at this column")); +#endif #ifdef ENABLE_BROWSER if (!ISSET(RESTRICTED)) print_opt("-g", "--showcursor", N_("Show cursor in file browser & help text")); @@ -2022,6 +2026,7 @@ int main(int argc, char **argv) {"wordchars", 1, NULL, 'X'}, {"zap", 0, NULL, 'Z'}, {"atblanks", 0, NULL, 'a'}, + {"edgecolumn", 0, NULL, 'e'}, {"autoindent", 0, NULL, 'i'}, {"cutfromcursor", 0, NULL, 'k'}, {"unix", 0, NULL, 'u'}, @@ -2084,7 +2089,7 @@ int main(int argc, char **argv) while ((optchr = getopt_long(argc, argv, - "ABC:DEFGHIKLMNOPQ:RST:UVWX:Y:Zabcdefghijklmno:pqr:s:tuvwxyz$", + "ABC:DEFGHIKLMNOPQ:RST:UVWX:Y:Zabcde:fghijklmno:pqr:s:tuvwxyz$", long_options, NULL)) != -1) { switch (optchr) { #ifndef NANO_TINY @@ -2203,6 +2208,14 @@ int main(int argc, char **argv) case 'd': SET(REBIND_DELETE); break; + case 'e': + if (!parse_num(optarg, &edge_col) || edge_col <= 0) { + die("here"); + fprintf(stderr, _("Requested edge column \"%s\" is invalid"), optarg); + fprintf(stderr, "\n"); + exit(1); + } + break; case 'g': SET(SHOW_CURSOR); break; @@ -2294,7 +2307,6 @@ int main(int argc, char **argv) break; #endif case 'b': /* Pico compatibility flags. */ - case 'e': case 'f': case 'j': case 'q': diff --git a/src/proto.h b/src/proto.h index 65890134..09e7464a 100644 --- a/src/proto.h +++ b/src/proto.h @@ -88,6 +88,7 @@ extern WINDOW *bottomwin; extern int editwinrows; extern int editwincols; extern int margin; +extern ssize_t edge_col; extern filestruct *cutbuffer; extern filestruct *cutbottom; diff --git a/src/winio.c b/src/winio.c index e2042d9e..18f91254 100644 --- a/src/winio.c +++ b/src/winio.c @@ -2677,6 +2677,15 @@ void edit_draw(filestruct *fileptr, const char *converted, } #endif /* ENABLE_COLOR */ + if (edge_col > 0) { + const char *text = converted + actual_x(converted, edge_col);; + const char *edge_char = (*text == '\0') ? " " : text; + + wattron(edit, interface_color_pair[ERROR_MESSAGE]); + mvwaddnstr(edit, row, margin + edge_col, edge_char, 1); + wattroff(edit, interface_color_pair[ERROR_MESSAGE]); + } + #ifndef NANO_TINY /* If the mark is on, and fileptr is at least partially selected, we * need to paint it. */ -- 2.19.2