]> git.wh0rd.org Git - nano.git/commitdiff
add smart home key
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Sat, 22 May 2004 20:15:20 +0000 (20:15 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Sat, 22 May 2004 20:15:20 +0000 (20:15 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1751 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
doc/man/nano.1
doc/man/nanorc.5
doc/nanorc.sample
doc/texinfo/nano.texi
src/global.c
src/move.c
src/nano.c
src/nano.h
src/rcfile.c
src/winio.c

index 0f76cc76a64f1e6bcf626b3c703e0ea31aae2e22..1fecee02c57ff752d03b0301be63fdcfdb3bff0e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -53,6 +53,16 @@ CVS code -
        - Wrap the long jump code in NANO_SMALL #ifdefs, since we only
          use it if we're resizing the window, which is disabled when
          NANO_SMALL is defined. (DLR)
+       - Add smart home key option, accessible via -A/--smarthome on
+         the command line, "set smarthome" in the rcfile, and the
+         Meta-H toggle in the edit window.  Smart home works as
+         follows: When Home is pressed anywhere but at the very
+         beginning of non-whitespace characters on a line, the cursor
+         will jump to that beginning (either forwards or backwards).
+         If the cursor is already at that position, it will jump to the
+         true beginning of the line.  This option is disabled in tiny
+         mode.  Changes to do_home(), nanogetstr(), etc. (DLR;
+         suggested by Stephan T. Lavavej)
 - files.c:
   add_open_file()
        - Rearrange the NANO_SMALL #ifdef so that the code to set the
@@ -231,6 +241,7 @@ CVS code -
 - nano.1:
        - Document restricted mode. (IO ERROR)  DLR: Add minor
          modifications to account for the above changes.
+       - Document the smart home key option. (DLR)
 - nano.texi:
        - Fix toggle inaccuracies: Meta-L now toggles line wrapping, and
          Meta-< and Meta-> aren't toggles. (DLR)
@@ -239,9 +250,11 @@ CVS code -
        - Fix version number inaccuracies: Search/replace history and
          sorting/uniqueness filtering for the internal spell chacker
          were added in nano 1.1.99pre1. (DLR)
+       - Document the smart home key option. (DLR)
 - nanorc.sample:
        - Add missing mouse entry, and update the nanorc sample regexes
          to account for the backupdir and mouse options. (DLR)
+       - Add smarthome description. (DLR)
 - README.CVS:
        - Increase the minimum required autoconf version to 2.54, and
          change the recommended automake version 1.7 to the minimum
index 32a6ae0a9d999e813979797dbf77a45e04fb2318..605b683148a6e9c78a1eb55cf6788e15bf01ce7c 100644 (file)
@@ -35,6 +35,13 @@ replace" and "go to line number".
 .B \+\fILINE\fP
 Places cursor at \fILINE\fP on startup.
 .TP
+.B \-A (\-\-smarthome)
+Make the Home key smarter.  When Home is pressed anywhere but at the
+very beginning of non-whitespace characters on a line, the cursor will
+jump to that beginning (either forwards or backwards).  If the cursor is
+already at that position, it will jump to the true beginning of the
+line.
+.TP
 .B \-B (\-\-backup)
 When saving a file, back up the previous version of it to the current
 filename suffixed with a ~.
index ef8a0595af3e15635cb854d1d60576ac35d070e8..f79c80a3cae787440a492a9d105c9d21fac3660b 100644 (file)
@@ -108,6 +108,13 @@ acts like Delete on your system.
 \fBset/unset regexp\fP
 Do regular expression searches by default.
 .TP
+\fBset/unset smarthome\fP
+Make the Home key smarter.  When Home is pressed anywhere but at the
+very beginning of non-whitespace characters on a line, the cursor will
+jump to that beginning (either forwards or backwards).  If the cursor is
+already at that position, it will jump to the true beginning of the
+line.
+.TP
 \fBset/unset smooth\fP
 Use smooth scrolling by default.
 .TP
index 83cddaf6297ca67e08581a65fd417d0babf8a1bf..ee0074dbad966fb6578cab4ebabd1b1f1c0c9d10 100644 (file)
 ## Do extended regular expression searches by default.
 # set regexp
 
+## Make the Home key smarter.  When Home is pressed anywhere but at the
+## very beginning of non-whitespace characters on a line, the cursor
+## will jump to that beginning (either forwards or backwards).  If the
+## cursor is already at that position, it will jump to the true
+## beginning of the line.
+# set smarthome
+
 ## Use smooth scrolling as the default.
 # set smooth
 
 ## highlight possible errors and parameters
 #color brightwhite "^ *(set|unset|syntax|color).*$"
 ## set, unset and syntax
-#color cyan "^ *(set|unset) +(autoindent|backup|backupdir|const|cut|fill|historylog|mouse|multibuffer|noconvert|nofollow|nohelp|nowrap|operatingdir|preserve|quotestr|rebinddelete|regexp|smooth|speller|suspend|tabsize|tempfile|view)"
+#color cyan "^ *(set|unset) +(autoindent|backup|backupdir|const|cut|fill|historylog|mouse|multibuffer|noconvert|nofollow|nohelp|nowrap|operatingdir|preserve|quotestr|rebinddelete|regexp|smarthome|smooth|speller|suspend|tabsize|tempfile|view)"
 #color green "^ *(set|unset|syntax)\>"
 ## colors
 #color yellow "^ *color +(bright)?(white|black|red|blue|green|yellow|magenta|cyan)(,(white|black|red|blue|green|yellow|magenta|cyan))?\>"
index f0084e656648278135c9ce5842769907cd38eeb7..3acfed9757d44a466a086c02f25d94c4a6dc0ad2 100644 (file)
@@ -107,6 +107,13 @@ Email bug reports to @email{nano@@nano-editor.org}.
 
 @table @code
 
+@item -A, --smarthome
+Make the Home key smarter.  When Home is pressed anywhere but at the
+very beginning of non-whitespace characters on a line, the cursor will
+jump to that beginning (either forwards or backwards).  If the cursor is
+already at that position, it will jump to the true beginning of the
+line.
+
 @item -B, --backup
 When saving a file, back up the previous version of it to the current
 filename suffixed with a ~.
@@ -346,6 +353,9 @@ toggles the -D (@code{--dos}) command line flag.
 @item Multiple Files Toggle (Meta-F)
 toggles the -F (@code{--multibuffer}) command line flag.
 
+@item Backup File Toggle (Meta-H)
+toggles the -A (@code{--smarthome}) command line flag.
+
 @item AutoIndent Toggle (Meta-I)
 toggles the -i (@code{--autoindent}) command line flag.
 
index cd27a725e6c3025aed6e0bcfbd9b0e9041015a3b..710ae4509c5310fabeba0e77776a6551656aa71e 100644 (file)
@@ -231,7 +231,7 @@ void toggle_init(void)
     char *toggle_const_msg, *toggle_autoindent_msg, *toggle_suspend_msg,
        *toggle_nohelp_msg, *toggle_cuttoend_msg,
        *toggle_noconvert_msg, *toggle_dos_msg, *toggle_mac_msg,
-       *toggle_backup_msg, *toggle_smooth_msg;
+       *toggle_backup_msg, *toggle_smooth_msg, *toggle_smarthome_msg;
 #ifndef DISABLE_MOUSE
     char *toggle_mouse_msg;
 #endif
@@ -263,6 +263,7 @@ void toggle_init(void)
     toggle_mac_msg = _("Writing file in Mac format");
     toggle_backup_msg = _("Backing up file");
     toggle_smooth_msg = _("Smooth scrolling");
+    toggle_smarthome_msg = _("Smart home key");
 #ifdef ENABLE_COLOR
     toggle_syntax_msg = _("Color syntax highlighting");
 #endif
@@ -296,6 +297,7 @@ void toggle_init(void)
        toggle_init_one(TOGGLE_BACKUP_KEY, toggle_backup_msg, BACKUP_FILE);
     }
     toggle_init_one(TOGGLE_SMOOTH_KEY, toggle_smooth_msg, SMOOTHSCROLL);
+    toggle_init_one(TOGGLE_SMARTHOME_KEY, toggle_smarthome_msg, SMART_HOME);
 #ifdef ENABLE_COLOR
     toggle_init_one(TOGGLE_SYNTAX_KEY, toggle_syntax_msg, COLOR_SYNTAX);
 #endif
index b5933b50f990a576e8586de68225601b08f68694..bdc666c8853636295c3af90fa915853eb2546ac2 100644 (file)
 
 #include <stdlib.h>
 #include <string.h>
+#include <ctype.h>
 #include <assert.h>
 #include "proto.h"
 #include "nano.h"
 
 int do_home(void)
 {
-    current_x = 0;
-    placewewant = 0;
+#ifndef NANO_SMALL
+    if (ISSET(SMART_HOME)) {
+       int old_current_x = current_x;
+
+       for (current_x = 0; isblank(current->data[current_x]) &&
+               current->data[current_x] != '\0'; current_x++)
+           ;
+
+       if (current_x == old_current_x || current->data[current_x] == '\0')
+           current_x = 0;
+
+       placewewant = xplustabs();
+    } else {
+#endif
+       current_x = 0;
+       placewewant = 0;
+#ifndef NANO_SMALL
+    }
+#endif
     check_statblank();
     update_line(current, current_x);
     return 1;
index 5c7ce9e8c20624dd764441d319c88b7df530e87f..8246592c958f509d123b2c4c4b503d366e63ada5 100644 (file)
@@ -633,6 +633,7 @@ void usage(void)
     print1opt("-h, -?", "--help", _("Show this message"));
     print1opt(_("+LINE"), "", _("Start at line number LINE"));
 #ifndef NANO_SMALL
+    print1opt("-A", "--smarthome", _("Enable smart home key"));
     print1opt("-B", "--backup", _("Backup existing files on save"));
     print1opt("-D", "--dos", _("Write file in DOS format"));
     print1opt("-E", "--backupdir=[dir]", _("Directory for writing backup files"));
@@ -3057,6 +3058,7 @@ int main(int argc, char *argv[])
        {"nohelp", 0, 0, 'x'},
        {"suspend", 0, 0, 'z'},
 #ifndef NANO_SMALL
+       {"smarthome", 0, 0, 'A'},
        {"backup", 0, 0, 'B'},
        {"dos", 0, 0, 'D'},
        {"backupdir", 1, 0, 'E'},
@@ -3085,11 +3087,11 @@ int main(int argc, char *argv[])
 #endif
 
 #ifdef HAVE_GETOPT_LONG
-    while ((optchr = getopt_long(argc, argv, "h?BDE:FHIMNQ:RST:VY:Zabcdefgijklmo:pr:s:tvwxz",
+    while ((optchr = getopt_long(argc, argv, "h?ABDE:FHIMNQ:RST:VY:Zabcdefgijklmo:pr:s:tvwxz",
                                 long_options, NULL)) != -1) {
 #else
     while ((optchr =
-           getopt(argc, argv, "h?BDE:FHIMNQ:RST:VY:Zabcdefgijklmo:pr:s:tvwxz")) != -1) {
+           getopt(argc, argv, "h?ABDE:FHIMNQ:RST:VY:Zabcdefgijklmo:pr:s:tvwxz")) != -1) {
 #endif
 
        switch (optchr) {
@@ -3103,6 +3105,9 @@ int main(int argc, char *argv[])
            /* Pico compatibility flags */
            break;
 #ifndef NANO_SMALL
+       case 'A':
+           SET(SMART_HOME);
+           break;
        case 'B':
            SET(BACKUP_FILE);
            break;
index 9207e6255fab2683ca9caf79dacc15afd9bee8f0..c979a27d194e3f0acf5b9c085c5bc8904cf32fdd 100644 (file)
@@ -278,6 +278,7 @@ typedef struct historyheadtype {
 #define HISTORY_CHANGED                (1<<27)
 #define HISTORYLOG             (1<<28)
 #define RESTRICTED             (1<<29)
+#define SMART_HOME             (1<<30)
 
 /* Control key sequences, changing these would be very very bad. */
 #define NANO_CONTROL_SPACE 0
@@ -446,6 +447,7 @@ typedef struct historyheadtype {
 #define TOGGLE_NOCONVERT_KEY   NANO_ALT_N
 #define TOGGLE_BACKUP_KEY      NANO_ALT_B
 #define TOGGLE_SYNTAX_KEY      NANO_ALT_Y
+#define TOGGLE_SMARTHOME_KEY   NANO_ALT_H
 #endif /* !NANO_SMALL */
 
 #define MAIN_VISIBLE 12
index 4d28856da540405866af8552e744f11eb9378ca1..0a8ff976203e3589eb67c3517603ae25073f8d1e 100644 (file)
@@ -80,6 +80,7 @@ const static rcoption rcopts[] = {
     {"regexp", USE_REGEXP},
 #endif
 #ifndef NANO_SMALL
+    {"smarthome", SMART_HOME},
     {"smooth", SMOOTHSCROLL},
 #endif
 #ifndef DISABLE_SPELLER
index d6e0bbaee974fef1f71f2c0835a014b8073afd0b..2ca439c5a0d5e49aa775a6c95fbdfb1391546ac8 100644 (file)
@@ -1332,7 +1332,18 @@ int nanogetstr(int allowtabs, const char *buf, const char *def,
            break;
 #endif
        case NANO_HOME_KEY:
-           x = 0;
+#ifndef NANO_SMALL
+           if (ISSET(SMART_HOME)) {
+               int old_x = x;
+
+               for (x = 0; isblank(answer[x]) && x < xend; x++)
+                   ;
+
+               if (x == old_x || x == xend)
+                   x = 0;
+           } else
+#endif
+               x = 0;
            break;
        case NANO_END_KEY:
            x = xend;