]> git.wh0rd.org Git - nano.git/commitdiff
DLR's latest patch: view+multibuffer, die() fixes, insert key fixes in main()
authorChris Allegretta <chrisa@asty.org>
Wed, 2 Jan 2002 15:12:21 +0000 (15:12 +0000)
committerChris Allegretta <chrisa@asty.org>
Wed, 2 Jan 2002 15:12:21 +0000 (15:12 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@961 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
files.c
global.c
nano.c

index 77abf4fe201dbd6ae99fcd50d69de35c659c585b..4ca79f82e7cc3e2ff15e631bc97d0a0c8084f3ed 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 CVS code -
+- General
+       - Better integration of View mode (-v) and multibuffer.
+         Fixes to new_file(), do_insertfile_void(), shortcut_init()
+         (David Lawrence Ramsey).
 - nano.c:
+  die()
+       - Only save files that were modified (David Lawrence Ramsey).
   do_cont()
        - Run signal_init() after doupdate() so ^Y wont suddenly
          start suspending after returning from ^Z suspend in Hurd.
@@ -13,6 +19,8 @@ CVS code -
        - Typo in file switch string (found by David Lawrence Ramsey).
   main()
        - Handle Alt prev/next file keys (,.), as well as normal ones (<>).
+       - Handle OS-specific insert keys by jump to do_insertkey (David
+         Lawrence Ramsey).
 - files.c:
   read_file()
        - Make conversion message less confusing (suggested by Jordi).
diff --git a/files.c b/files.c
index 6804db64c1e5c4536f089cbc7ba9194d1012a60a..1e2b02930b223f612f53fd33f05a0b7f18266bb3 100644 (file)
--- a/files.c
+++ b/files.c
@@ -93,11 +93,19 @@ void new_file(void)
        duplicates; without this, if nano is started without a filename on
        the command line, a new file will be created, but it will be given
        no open_files entry, leading to problems later on */
-    if (!open_files)
+    if (!open_files) {
        add_open_file(0, 0);
+       /* turn off view mode in this case; this is for consistency
+          whether multibuffers are compiled in or not */
+       UNSET(VIEW_MODE);
+    }
+#else
+    /* if multibuffers haven't been compiled in, turn off view mode
+       unconditionally; otherwise, don't turn them off (except in the
+       above case), so that we can view multiple files properly */
+    UNSET(VIEW_MODE);
 #endif
 
-    UNSET(VIEW_MODE);
 }
 
 
@@ -440,7 +448,14 @@ int do_insertfile_void(void)
 {
     int result = 0;
 #ifdef ENABLE_MULTIBUFFER
-    result = do_insertfile(ISSET(MULTIBUFFER));
+    if (ISSET(VIEW_MODE)) {
+       if (ISSET(MULTIBUFFER))
+           result = do_insertfile(1);
+       else
+           statusbar(_("Key illegal in non-multibuffer mode"));
+    }
+    else
+       result = do_insertfile(ISSET(MULTIBUFFER));
 #else
     result = do_insertfile(0);
 #endif
@@ -523,10 +538,16 @@ int add_open_file(int update, int dup_fix)
     /* save current line number */
     open_files->lineno = current->lineno;
 
-    /* save current filestruct and restore full file position afterward */
-    open_files->file = nmalloc(sizeof(filestruct));
-    open_files->file = copy_filestruct(fileage);
-    do_gotopos(open_files->lineno, open_files->file_current_x, open_files->file_current_y, open_files->file_placewewant);
+    /* if we're in view mode and updating, the file contents won't
+       have changed, so we won't bother resaving the filestruct
+       then; otherwise, we will */
+    if (!(ISSET(VIEW_MODE) && !update)) {
+       /* save current filestruct and restore full file position
+          afterward */
+       open_files->file = nmalloc(sizeof(filestruct));
+       open_files->file = copy_filestruct(fileage);
+       do_gotopos(open_files->lineno, open_files->file_current_x, open_files->file_current_y, open_files->file_placewewant);
+    }
 
     /* save current modification status */
     open_files->file_modified = ISSET(MODIFIED);
index 6fa089ea02a5bb3e1ce5756424cc17ef12eecd1a..8e7648b0cbc835573a717367e3791b68d0ab9158 100644 (file)
--- a/global.c
+++ b/global.c
@@ -324,15 +324,31 @@ void shortcut_init(int unjustify)
                    nano_justify_msg, 0, NANO_JUSTIFY_FKEY, 0,
                    NOVIEW, do_justify);
     else
+
+#ifdef ENABLE_MULTIBUFFER
+       /* this is so we can view multiple files */
+       sc_init_one(&main_list[3], NANO_INSERTFILE_KEY, _("Read File"),
+               nano_insert_msg,
+               0, NANO_INSERTFILE_FKEY, 0, VIEW, do_insertfile_void);
+#else
        sc_init_one(&main_list[3], NANO_INSERTFILE_KEY, _("Read File"),
                nano_insert_msg,
                0, NANO_INSERTFILE_FKEY, 0, NOVIEW, do_insertfile_void);
-
+#endif
 
     if (ISSET(PICO_MODE))
+
+#ifdef ENABLE_MULTIBUFFER
+       /* this is so we can view multiple files */
+       sc_init_one(&main_list[4], NANO_INSERTFILE_KEY, _("Read File"),
+               nano_insert_msg,
+               0, NANO_INSERTFILE_FKEY, 0, VIEW, do_insertfile_void);
+#else
        sc_init_one(&main_list[4], NANO_INSERTFILE_KEY, _("Read File"),
                nano_insert_msg,
                0, NANO_INSERTFILE_FKEY, 0, NOVIEW, do_insertfile_void);
+#endif
+
     else
        sc_init_one(&main_list[4], NANO_REPLACE_KEY, _("Replace"),
                    nano_replace_msg,
diff --git a/nano.c b/nano.c
index 8045bf27e3989b72529c1f1353744d00c4ab98f0..06eb5dfcc9374f94dea26ea2c91d084f4ea8e18d 100644 (file)
--- a/nano.c
+++ b/nano.c
@@ -122,12 +122,12 @@ void die(char *msg, ...)
 
     fprintf(stderr, msg);
 
-    /* save the currently loaded file (if modified, its open_files entry
-       isn't up to date) */
-    die_save_file(filename);
+    /* save the currently loaded file if it's been modified */
+    if (ISSET(MODIFIED))
+       die_save_file(filename);
 
 #ifdef ENABLE_MULTIBUFFER
-    /* then save all of the other loaded files, if any */
+    /* then save all of the other modified loaded files, if any */
     if (open_files) {
         filestruct *tmp;
 
@@ -142,7 +142,9 @@ void die(char *msg, ...)
               currently loaded file), don't save it again */
            if (tmp != open_files) {
                fileage = open_files->file;
-               die_save_file(open_files->data);
+               /* save the file if it's been modified */
+               if (open_files->file_modified)
+                   die_save_file(open_files->data);
            }
 
            open_files = open_files->next;
@@ -3101,16 +3103,10 @@ int main(int argc, char *argv[])
                case '9':       /* Alt-[-9 = Delete in Hurd Console */
                    kbinput = KEY_DC;
                    break;
-               case '@':       /* Alt-[-9 = Insert in Hurd Console */
-               case 'L':               /* Insert Key - FreeBSD Console */
-#ifdef ENABLE_MULTIBUFFER
-                   do_insertfile(ISSET(MULTIBUFFER));
-#else
-                   do_insertfile(0);
-#endif
-                   keyhandled = 1;
-                   break;
-               case '[':       /* Alt-[-[-[A-E], F1-F5 in linux console */
+               case '@':       /* Alt-[-@ = Insert in Hurd Console */
+               case 'L':       /* Alt-[-L = Insert - FreeBSD Console */
+                   goto do_insertkey;
+               case '[':       /* Alt-[-[-[A-E], F1-F5 in Linux console */
                    kbinput = wgetch(edit);
                    if (kbinput >= 'A' && kbinput <= 'E')
                        kbinput = KEY_F(kbinput - 64);
@@ -3224,9 +3220,12 @@ int main(int argc, char *argv[])
          do_insertkey:
 
 #ifdef ENABLE_MULTIBUFFER
-           do_insertfile(ISSET(MULTIBUFFER));
+           /* do_insertfile_void() contains the logic needed to
+              handle view mode with the view mode/multibuffer
+              exception, so use it here */
+           do_insertfile_void();
 #else
-           do_insertfile(0);
+           print_view_warning();
 #endif
 
            keyhandled = 1;