]> Sergey Matveev's repositories - nnn.git/commitdiff
Plugin fzhist
authorArun Prakash Jana <engineerarun@gmail.com>
Sun, 17 Nov 2019 13:44:30 +0000 (19:14 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Sun, 17 Nov 2019 13:44:30 +0000 (19:14 +0530)
plugins/README.md
plugins/fzhist [new file with mode: 0755]

index 1300233b3a0f7f8030cf470f4b92dd24493de87d..304888b38586a29bd009837f220ff783c86c4d02 100644 (file)
@@ -15,6 +15,7 @@ The currently available plugins are listed below.
 | dragdrop | sh | [dragon](https://github.com/mwh/dragon) | Drag/drop files from/into nnn |
 | exetoggle | sh | chmod | Toggle executable status of hovered file |
 | fzcd | sh | fzy/fzf<br>(optional fd) | Change to the directory of a fuzzy-selected file/dir |
+| fzhist | sh | fzy | Fuzzy-select a cmd from history, edit in $EDITOR and run |
 | fzopen | sh | fzy, xdg-open | Fuzzy find a file in dir subtree and edit or xdg-open |
 | getplugs | sh | curl | Update plugins |
 | gutenread | sh | curl, unzip, w3m<br>[epr](https://github.com/wustho/epr) (optional)| Browse, download, read from Project Gutenberg |
diff --git a/plugins/fzhist b/plugins/fzhist
new file mode 100755 (executable)
index 0000000..bad4e2d
--- /dev/null
@@ -0,0 +1,31 @@
+#!/usr/bin/env sh
+
+# Description: Fuzzy find a command from history, edit in $EDITOR and run as a command
+#              Currently supports only bash and fish history
+#
+# Shell: POSIX compliant
+# Author: Arun Prakash Jana
+
+shellname="$(basename "$SHELL")"
+
+if [ "$shellname" = "bash" ]; then
+    hist_file="$HOME/.bash_history"
+    entry="$(cat "$hist_file" | fzy)"
+elif [ "$shellname" = "fish" ]; then
+    hist_file="$HOME/.config/fish/fish_history"
+    entry="$(cat "$hist_file" | grep "\- cmd: " | cut -c 8- | fzy)"
+fi
+
+if ! [ -z "$entry" ]; then
+    tmpfile=$(mktemp)
+    echo "$entry" >> $tmpfile
+    $EDITOR $tmpfile
+
+    cmd="$(cat $tmpfile)"
+
+    if ! [ -z "$cmd" ]; then
+        $SHELL -c "$cmd"
+    fi
+
+    rm $tmpfile
+fi