diff options
author | Arun Prakash Jana <engineerarun@gmail.com> | 2019-01-24 12:05:13 +0530 |
---|---|---|
committer | Arun Prakash Jana <engineerarun@gmail.com> | 2019-01-24 12:05:13 +0530 |
commit | 94e4201dc1f6973c4a03e60134c42c762d263baa (patch) | |
tree | 8a217b7796237bc280626d5cce54da4f0ec04a4e | |
parent | 31849fd5fb7b919a7cb99669c0bcd6f2685af2cc (diff) | |
download | nnn-94e4201dc1f6973c4a03e60134c42c762d263baa.tar.gz |
Use libreadline at command prompt
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | README.md | 4 | ||||
-rw-r--r-- | packagecore.yaml | 23 | ||||
-rw-r--r-- | src/nnn.c | 18 |
4 files changed, 42 insertions, 5 deletions
@@ -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 @@ -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 diff --git a/packagecore.yaml b/packagecore.yaml index ebf1236..5270d2b 100644 --- a/packagecore.yaml +++ b/packagecore.yaml @@ -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 @@ -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); |