commit 14b3ca94b75b8612dab33b7dca7acc70e32866e6
parent 83ffefbfdd6e81c2200be614533b4b1cfd0afb22
Author: Chris Allegretta <chrisa@asty.org>
Date: Fri, 25 Jan 2002 21:59:02 +0000
- 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
Diffstat:
6 files changed, 52 insertions(+), 22 deletions(-)
diff --git 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
@@ -409,6 +409,9 @@ void usage(void)
printf(_("Usage: nano [GNU long option] [option] +LINE <file>\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 <file>\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
@@ -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
@@ -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
@@ -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
@@ -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;