]> git.wh0rd.org Git - nano.git/commitdiff
"Goto Directory" added and minor fixes in the browser
authorRocco Corsi <rocco.corsi@sympatico.ca>
Sat, 14 Apr 2001 06:50:24 +0000 (06:50 +0000)
committerRocco Corsi <rocco.corsi@sympatico.ca>
Sat, 14 Apr 2001 06:50:24 +0000 (06:50 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@597 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
files.c
global.c
nano.c
nano.h
proto.h

index 836e2087d96bb8cbe10217f0470c63b03f9023f0..bd82492d767200db583aca5ca6c20f9469931ca9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -7,9 +7,23 @@ Cvs code -
          to its own flag, --disable mouse.  The --tiny option defines
          this automatically, but now just mouse support can be disabled
          if desired.
+       - File Browser supports the "Goto Directory"
 - configure.in:
        - New option, --enable-nanorc which currently does nothing but
          sets a define.  Will do more later...
+- files.c:
+  do_browser()
+       - Minor fixes to the processing of SELECT function (Rocco)
+       - Added the "Goto Directory" code (Rocco)
+- global.c:
+       - Updated some of the lists for the "Goto Directory" code (Rocco)
+- nano.c:
+  main()
+       - Code to silently process "-g" and "-j" (Rocco)
+- nano.h:
+       - Updated the BROWSER_LIST_LEN for the "Goto Directory" code (Rocco)
+- proto.h:
+       - New shortcut list added: gotodir_list (Rocco).
 
 nano 1.1 tree forked here 04/07/2001
 
diff --git a/files.c b/files.c
index 8fcf6d2d941d4e524bc39dbae8c5b9c01ffe791b..77970c4e62aa17a749cc5eeed5f5a904ae60bd91 100644 (file)
--- a/files.c
+++ b/files.c
@@ -1170,8 +1170,10 @@ char *do_browser(char *inpath)
 
     /* Loop invariant: Microsoft sucks. */
     do {
-       blank_edit();
-       blank_statusbar();
+       DIR *test_dir;
+
+       blank_statusbar_refresh();
+
        editline = 0;
        col = 0;
            
@@ -1250,20 +1252,23 @@ char *do_browser(char *inpath)
        case 'S':
 
            /* You can't cd up from / */
-           if (!strcmp(filelist[selected], "/..") && !strcmp(path, "/"))
+           if (!strcmp(filelist[selected], "/..") && !strcmp(path, "/")) {
                statusbar(_("Can't move up a directory"));
-           else
-               path = mallocstrcpy(path, filelist[selected]);
+               break;
+           }
+
+           path = mallocstrcpy(path, filelist[selected]);
 
            st = filestat(path);
            if (S_ISDIR(st.st_mode)) {
-               if (opendir(path) == NULL) {
+               if ((test_dir = opendir(path)) == NULL) {
                    /* We can't open this dir for some reason.  Complain */
                    statusbar(_("Can't open \"%s\": %s"), path, strerror(errno));
-                   striponedir(path);              
+                   striponedir(path);
                    align(&path);
                    break;
                } 
+               closedir(test_dir);
 
                if (!strcmp("..", tail(path))) {
                    /* They want to go up a level, so strip off .. and the
@@ -1280,6 +1285,41 @@ char *do_browser(char *inpath)
                abort = 1;
            }
            break;
+       /* Goto a specific directory */
+       case 'g':       /* Pico compatibility */
+       case 'G':
+       case NANO_GOTO_KEY:
+
+           curs_set(1);
+           j = statusq(0, gotodir_list, GOTODIR_LIST_LEN, "", _("Goto Directory"));
+           bottombars(browser_list, BROWSER_LIST_LEN);
+           curs_set(0);
+
+           if (j < 0) {
+               statusbar(_("Goto Cancelled"));
+               break;
+           }
+
+           if (answer[0] != '/') {
+               char *saveanswer = NULL;
+
+               saveanswer = mallocstrcpy(saveanswer, answer);
+               answer = realloc(answer, strlen(path) + strlen(saveanswer) + 2);
+               sprintf(answer, "%s/%s", path, saveanswer);
+               free(saveanswer);
+           }
+
+           if ((test_dir = opendir(answer)) == NULL) {
+               /* We can't open this dir for some reason.  Complain */
+               statusbar(_("Can't open \"%s\": %s"), answer, strerror(errno));
+               break;
+           } 
+           closedir(test_dir);
+
+           /* Start over again with the new path value */
+           path = mallocstrcpy(path, answer);
+           return do_browser(path);
+
        /* Stuff we want to abort the browser */
        case 'q':
        case 'Q':
@@ -1292,6 +1332,8 @@ char *do_browser(char *inpath)
        if (abort)
            break;
 
+       blank_edit();
+
        if (width)
            i = width * editwinrows * ((selected / width) / editwinrows);
        else
index c00457fc616ca1eb3fdb2090fa8d51e3c3d27a90..158175cdaa54cb4835e0ed301ed8253f099c474f 100644 (file)
--- a/global.c
+++ b/global.c
@@ -75,6 +75,7 @@ shortcut whereis_list[WHEREIS_LIST_LEN];
 shortcut replace_list[REPLACE_LIST_LEN];
 shortcut replace_list_2[REPLACE_LIST_LEN]; /* 2nd half of replace dialog */
 shortcut goto_list[GOTO_LIST_LEN];
+shortcut gotodir_list[GOTODIR_LIST_LEN];
 shortcut writefile_list[WRITEFILE_LIST_LEN];
 shortcut help_list[HELP_LIST_LEN];
 shortcut spell_list[SPELL_LIST_LEN];
@@ -184,6 +185,7 @@ void shortcut_init(int unjustify)
 
 #ifndef NANO_SMALL
     char *nano_tofiles_msg = "";
+    char *nano_gotodir_msg = "";
 
     nano_help_msg = _("Invoke the help menu");
     nano_writeout_msg = _("Write the current file to disk");
@@ -218,6 +220,7 @@ void shortcut_init(int unjustify)
     nano_case_msg =
        _("Make the current search or replace case (in)sensitive");
     nano_tofiles_msg = _("Go to file browser");
+    nano_gotodir_msg = _("Goto Directory");
     nano_cancel_msg = _("Cancel the current function");
 #endif
 
@@ -429,9 +432,15 @@ void shortcut_init(int unjustify)
                nano_nextpage_msg,
                0, NANO_NEXTPAGE_FKEY, KEY_NPAGE, VIEW, 0);
 
-    sc_init_one(&browser_list[2], NANO_EXIT_KEY, _("Exit"),
+    sc_init_one(&browser_list[2], NANO_GOTO_KEY, _("Goto"),
+               nano_gotodir_msg, 0, NANO_GOTO_FKEY, 0, VIEW, 0);
+
+    sc_init_one(&browser_list[3], NANO_EXIT_KEY, _("Exit"),
                nano_exit_msg, 0, NANO_EXIT_FKEY, 0, VIEW, 0);
 
+    sc_init_one(&gotodir_list[0], NANO_CANCEL_KEY, _("Cancel"),
+               nano_cancel_msg, 0, 0, 0, VIEW, 0);
+
 #endif
 
 
diff --git a/nano.c b/nano.c
index 07d94367e2ae9d38610669c9c000b339700a26b4..01c57ba09fa2466b04085a062690f782ea4d921a 100644 (file)
--- a/nano.c
+++ b/nano.c
@@ -2244,11 +2244,11 @@ int main(int argc, char *argv[])
 #endif
 
 #ifdef HAVE_GETOPT_LONG
-    while ((optchr = getopt_long(argc, argv, "?T:RVbcefhiklmpr:s:tvwxz",
+    while ((optchr = getopt_long(argc, argv, "?T:RVbcefghijklmpr:s:tvwxz",
                                 long_options, &option_index)) != EOF) {
 #else
     while ((optchr =
-           getopt(argc, argv, "h?T:RVbcefiklmpr:s:tvwxz")) != EOF) {
+           getopt(argc, argv, "h?T:RVbcefgijklmpr:s:tvwxz")) != EOF) {
 #endif
 
        switch (optchr) {
@@ -2270,6 +2270,8 @@ int main(int argc, char *argv[])
        case 'b':
        case 'e':
        case 'f':
+       case 'g':
+       case 'j':
            /* Pico compatibility flags */
            break;
        case 'c':
diff --git a/nano.h b/nano.h
index 6b7bd4143b5902062110fc697127637a23c9f06c..223960156bc10c00f1acc6fdc4700c88e764ffaa 100644 (file)
--- a/nano.h
+++ b/nano.h
@@ -244,12 +244,13 @@ know what you're doing */
 #define REPLACE_LIST_LEN 6
 #define REPLACE_LIST_2_LEN 3
 #define GOTO_LIST_LEN 3
+#define GOTODIR_LIST_LEN 1
 #define HELP_LIST_LEN 3
 #define SPELL_LIST_LEN 1
 
 #ifndef DISABLE_BROWSER
 #define WRITEFILE_LIST_LEN 2
-#define BROWSER_LIST_LEN 3
+#define BROWSER_LIST_LEN 4
 #else
 #define WRITEFILE_LIST_LEN 1
 #endif
diff --git a/proto.h b/proto.h
index c982aa5493e17f64273717c139e03d9c22e9b292..554a757916a65ea3281583fb1f7e79600851a7f1 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -53,7 +53,7 @@ extern shortcut replace_list[REPLACE_LIST_LEN], goto_list[GOTO_LIST_LEN];
 extern shortcut writefile_list[WRITEFILE_LIST_LEN], help_list[HELP_LIST_LEN];
 extern shortcut spell_list[SPELL_LIST_LEN], replace_list_2[REPLACE_LIST_LEN];
 #ifndef DISABLE_BROWSER
-extern shortcut browser_list[BROWSER_LIST_LEN];
+extern shortcut browser_list[BROWSER_LIST_LEN], gotodir_list[GOTODIR_LIST_LEN];
 #endif
 extern shortcut *currshortcut;