]> Sergey Matveev's repositories - nnn.git/commitdiff
Use libreadline at command prompt
authorArun Prakash Jana <engineerarun@gmail.com>
Thu, 24 Jan 2019 06:35:13 +0000 (12:05 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Thu, 24 Jan 2019 06:35:13 +0000 (12:05 +0530)
Makefile
README.md
packagecore.yaml
src/nnn.c

index c975dcebd9239c823e6d579c24d4b0aff6cd6449..ba4fa7ae835d43cf87430f105e6b568fa2091c96 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -22,7 +22,7 @@ CFLAGS += -Wall -Wextra -Wno-unused-parameter
 CFLAGS += $(CFLAGS_OPTIMIZATION)
 CFLAGS += $(CFLAGS_CURSES)
 
-LDLIBS += $(LDLIBS_CURSES)
+LDLIBS += -lreadline $(LDLIBS_CURSES)
 
 DISTFILES = src nnn.1 Makefile README.md LICENSE
 SRC = src/nnn.c
index 4990db49fe8bc532362d4daf613d9c2a88c89824..1e559754b4d9e5203a4ee74368951220d4fc0815 100644 (file)
--- a/README.md
+++ b/README.md
@@ -133,7 +133,7 @@ Intrigued? Find out [HOW](https://github.com/jarun/nnn/wiki/performance-factors)
 
 #### Dependencies
 
-`nnn` needs a curses library with wide character support (like ncursesw) and standard libc.
+`nnn` needs a curses library with wide character support (like ncursesw), libreadline and standard libc.
 
 #### From a package manager
 
@@ -167,7 +167,7 @@ Packages for Arch Linux, CentOS, Debian, Fedora, Solus, and Ubuntu are available
 
 To cook yourself, download the [latest stable release](https://github.com/jarun/nnn/releases/latest) or clone this repository (*risky*). Then install the dependencies and compile (e.g. on Ubuntu 16.04):
 
-    $ sudo apt-get install pkg-config libncursesw5-dev
+    $ sudo apt-get install pkg-config libncursesw5-dev libreadline6-dev
     $ make
     $ sudo make install
 
index ebf123686e05875af5100299e3ebcd9049708ca5..5270d2b91d36aa068878922c00a6bd02f841d11d 100644 (file)
@@ -14,6 +14,7 @@ packages:
       - pkg-config
     deps:
       - ncurses
+      - readline
     container: "base/archlinux"
   centos7.2:
     builddeps:
@@ -21,8 +22,10 @@ packages:
       - gcc
       - pkgconfig
       - ncurses-devel
+      - readline-devel
     deps:
       - ncurses
+      - readline
     commands:
       pre:
         - yum install epel-release
@@ -32,8 +35,10 @@ packages:
       - gcc
       - pkgconfig
       - ncurses-devel
+      - readline-devel
     deps:
       - ncurses
+      - readline
     commands:
       pre:
         - yum install epel-release
@@ -43,8 +48,10 @@ packages:
       - gcc
       - pkgconfig
       - ncurses-devel
+      - readline-devel
     deps:
       - ncurses
+      - readline
     commands:
       pre:
         - yum install epel-release
@@ -54,48 +61,60 @@ packages:
       - gcc
       - pkg-config
       - libncursesw5-dev
+      - libreadline-dev
     deps:
       - libncursesw5
+      - libreadline-common
   fedora25:
     builddeps:
       - make
       - gcc
       - pkgconfig
       - ncurses-devel
+      - readline-devel
     deps:
       - ncurses
+      - readline
   fedora26:
     builddeps:
       - make
       - gcc
       - pkg-config
       - ncurses-devel
+      - readline-devel
     deps:
       - ncurses
+      - readline
   fedora27:
     builddeps:
       - make
       - gcc
       - pkg-config
       - ncurses-devel
+      - readline-devel
     deps:
       - ncurses
+      - readline
   fedora28:
     builddeps:
       - make
       - gcc
       - pkg-config
       - ncurses-devel
+      - readline-devel
     deps:
       - ncurses
+      - readline
   fedora29:
     builddeps:
       - make
       - gcc
       - pkg-config
       - ncurses-devel
+      - readline-devel
     deps:
       - ncurses
+      - readline
 #  opensuse42.3:
 #    builddeps:
 #      - make
@@ -110,13 +129,17 @@ packages:
       - gcc
       - pkg-config
       - libncursesw5-dev
+      - libreadline6-dev
     deps:
       - libncursesw5
+      - libreadline6
   ubuntu18.04:
     builddeps:
       - make
       - gcc
       - pkg-config
       - libncursesw5-dev
+      - libreadline-dev
     deps:
       - libncursesw5
+      - libreadline7
index 178eb96b2c4d8642873089f237fab318d3af6fbe..e516752a29bd62fd91899ef497c5ec13d66d71ca 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -78,6 +78,8 @@
 #endif
 #include <locale.h>
 #include <pwd.h>
+#include <readline/history.h>
+#include <readline/readline.h>
 #include <regex.h>
 #include <signal.h>
 #include <stdarg.h>
@@ -3710,9 +3712,14 @@ nochange:
                                }
                                break;
                        default: /* SEL_RUNCMD */
-                               tmp = xreadline(NULL, "> ");
-                               if (tmp && tmp[0])
+                               exitcurses();
+                               tmp = readline("nnn> ");
+                               refresh();
+                               if (tmp && tmp[0]) {
                                        spawn(shell, "-c", tmp, path, F_NORMAL | F_SIGINT);
+                                       add_history(tmp);
+                                       free(tmp);
+                               }
                        }
 
                        /* Continue in navigate-as-you-type mode, if enabled */
@@ -4022,6 +4029,11 @@ int main(int argc, char *argv[])
        setlocale(LC_ALL, "");
        crc8init();
 
+       /* Bind TAB to cycling */
+       rl_variable_bind("completion-ignore-case", "on");
+       rl_bind_key('\t', rl_menu_complete);
+       read_history(NULL);
+
 #ifdef DEBUGMODE
        enabledbg();
 #endif
@@ -4031,6 +4043,8 @@ int main(int argc, char *argv[])
        browse(ipath);
        exitcurses();
 
+       write_history(NULL);
+
        if (cfg.pickraw) {
                if (copybufpos) {
                        opt = selectiontofd(1);