From: Chris Allegretta Date: Fri, 25 Jan 2002 21:59:02 +0000 (+0000) Subject: - General - New flag RELATIVECHARS to show column positino relative to the current... X-Git-Tag: v1.1.7~51 X-Git-Url: https://git.wh0rd.org/?a=commitdiff_plain;h=14b3ca94b75b8612dab33b7dca7acc70e32866e6;p=nano.git - General - New flag RELATIVECHARS to show column positino relative to the current line instead of the current file. New flag -C, --relative, changes to do_cursorpos() git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1046 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- diff --git a/ChangeLog b/ChangeLog index d1d75e5b..a874444b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ CVS code - - +- General + - New flag RELATIVECHARS to show column positino relative to + the current line instead of the current file. New flag + -C, --relative, changes to do_cursorpos(). - po/ca.po, po/es.po: - Catalan and Spanish translation updates (Jordi). diff --git a/nano.c b/nano.c index b6eaf90c..c93cde08 100644 --- a/nano.c +++ b/nano.c @@ -409,6 +409,9 @@ void usage(void) printf(_("Usage: nano [GNU long option] [option] +LINE \n\n")); printf(_("Option Long option Meaning\n")); + printf + (_ + (" -C --relative Show relative col position with ^C\n")); #ifndef NANO_SMALL printf (_ @@ -489,6 +492,7 @@ void usage(void) #else printf(_("Usage: nano [option] +LINE \n\n")); printf(_("Option Meaning\n")); + printf(_(" -C Show relative col position with ^C\n")); #ifndef NANO_SMALL printf(_(" -D Write file in DOS format\n")); #endif @@ -2736,7 +2740,7 @@ int main(int argc, char *argv[]) {"smooth", 0, 0, 'S'}, #endif {"keypad", 0, 0, 'K'}, - + {"relative", 0, 0, 'C'}, {0, 0, 0, 0} }; #endif @@ -2757,15 +2761,18 @@ int main(int argc, char *argv[]) #endif /* ENABLE_NANORC */ #ifdef HAVE_GETOPT_LONG - while ((optchr = getopt_long(argc, argv, "h?DFKMRST:Vabcefgijklmo:pr:s:tvwxz", + while ((optchr = getopt_long(argc, argv, "h?CDFKMRST:Vabcefgijklmo:pr:s:tvwxz", long_options, &option_index)) != EOF) { #else while ((optchr = - getopt(argc, argv, "h?DFKMRST:Vabcefgijklmo:pr:s:tvwxz")) != EOF) { + getopt(argc, argv, "h?CDFKMRST:Vabcefgijklmo:pr:s:tvwxz")) != EOF) { #endif switch (optchr) { + case 'C': + SET(RELATIVECHARS); + break; #ifndef NANO_SMALL case 'D': SET(DOS_FILE); diff --git a/nano.h b/nano.h index 26e10a6e..2cee58f5 100644 --- a/nano.h +++ b/nano.h @@ -162,6 +162,7 @@ typedef struct colortype { #define SMOOTHSCROLL (1<<23) #define DISABLE_CURPOS (1<<24) /* Damn, we still need it */ #define ALT_KEYPAD (1<<25) /* Damn, we still need it */ +#define RELATIVECHARS (1<<26) /* Control key sequences, changing these would be very very bad */ diff --git a/nanorc.sample b/nanorc.sample index 78628bd3..8be5eea2 100644 --- a/nanorc.sample +++ b/nanorc.sample @@ -8,6 +8,9 @@ # Constantly update the cursor position # set const +# Show column position relative to the current line, not the whole file +# set relative + # Use cut to end of line with ^K by default # set cut diff --git a/rcfile.c b/rcfile.c index 56c66519..491cb308 100644 --- a/rcfile.c +++ b/rcfile.c @@ -41,9 +41,9 @@ #endif #ifndef DISABLE_WRAPJUSTIFY -#define NUM_RCOPTS 19 +#define NUM_RCOPTS 20 #else -#define NUM_RCOPTS 18 +#define NUM_RCOPTS 19 #endif /* Static stuff for the nanorc file */ @@ -70,7 +70,8 @@ rcoption rcopts[NUM_RCOPTS] = { {"suspend", SUSPEND}, {"multibuffer", MULTIBUFFER}, {"smooth", SMOOTHSCROLL}, - {"keypad", ALT_KEYPAD} + {"keypad", ALT_KEYPAD}, + {"relative", RELATIVECHARS} }; static int errors = 0; diff --git a/winio.c b/winio.c index 38824d04..e685e2d8 100644 --- a/winio.c +++ b/winio.c @@ -1586,32 +1586,47 @@ int do_cursorpos(int constant) { filestruct *fileptr; float linepct = 0.0, bytepct = 0.0; - long i = 0; + long i = 0, j = 0; static long old_i = -1, old_totsize = -1; if (current == NULL || fileage == NULL) return 0; - for (fileptr = fileage; fileptr != current && fileptr != NULL; - fileptr = fileptr->next) - i += strlen(fileptr->data) + 1; - - if (fileptr == NULL) - return -1; - - i += current_x; - if (old_i == -1) old_i = i; if (old_totsize == -1) old_totsize = totsize; - if (totlines > 0) - linepct = 100 * current->lineno / totlines; + if (ISSET(RELATIVECHARS)) { + + if (strlen(current->data) == 0) + bytepct = 0; + else + bytepct = 100 * current_x / strlen(current->data); + + old_i = -1; + i = current_x; + j = strlen(current->data); - if (totsize > 0) - bytepct = 100 * i / totsize; + } else { + for (fileptr = fileage; fileptr != current && fileptr != NULL; + fileptr = fileptr->next) + i += strlen(fileptr->data) + 1; + + if (fileptr == NULL) + return -1; + + i += current_x; + + j = totsize; + + if (totsize > 0) + bytepct = 100 * i / totsize; + } + + if (totlines > 0) + linepct = 100 * current->lineno / totlines; #ifdef DEBUG fprintf(stderr, _("do_cursorpos: linepct = %f, bytepct = %f\n"), @@ -1624,7 +1639,7 @@ int do_cursorpos(int constant) if (!constant || (old_i != i || old_totsize != totsize)) { statusbar(_ ("line %d of %d (%.0f%%), character %ld of %ld (%.0f%%)"), - current->lineno, totlines, linepct, i, totsize, bytepct); + current->lineno, totlines, linepct, i, j, bytepct); } old_i = i;