浏览代码

znt: n-history supports multi-line cmds and starts with current buffer

Sebastian Gniazdowski 9 年之前
父节点
当前提交
c2b4d9ff40

+ 1 - 0
plugins/zsh-navigation-tools/.config/znt/n-cd.conf

@@ -1,6 +1,7 @@
 # Hotlist
 local hotlist
 hotlist=(
+    ~/.config/znt
     /usr/share/zsh/site-functions
     /usr/share/zsh
     /usr/local/share/zsh/site-functions

+ 5 - 0
plugins/zsh-navigation-tools/.config/znt/n-history.conf

@@ -3,3 +3,8 @@
 # On Linux virtual terminal this will be enforced to reverse (because of poor
 # underline support on that terminal)
 local active_text=underline
+
+# Highlight a few keywords
+local NLIST_COLORING_PATTERN="(while|for |sudo|make|(#s)git|vim(#e)|vim |emacs(#e)|emacs )"
+local NLIST_COLORING_COLOR=$'\x1b[00;33m'
+local NLIST_COLORING_MATCH_MULTIPLE=1

+ 4 - 3
plugins/zsh-navigation-tools/n-history

@@ -10,6 +10,7 @@ emulate -L zsh
 
 setopt extendedglob
 zmodload zsh/curses
+zmodload zsh/parameter
 
 local IFS="
 "
@@ -24,16 +25,16 @@ local selected
 
 NLIST_REMEMBER_STATE=0
 
-list=( `builtin history -rn 1` )
+list=( "$history[@]" )
 list=( "${(@M)list:#(#i)*$1*}" )
 
-local NLIST_GREP_STRING="$1"
-
 if [ "$#list" -eq 0 ]; then
     echo "No matching history entries"
     return 1
 fi
 
+local NLIST_GREP_STRING="$1"
+local NLIST_REPLACE_NEWLINES="1"
 n-list "${list[@]}"
 
 if [ "$REPLY" -gt 0 ]; then

+ 15 - 0
plugins/zsh-navigation-tools/n-list

@@ -139,6 +139,7 @@ if [ "$#" -lt 1 ]; then
 fi
 
 REPLY="-1"
+typeset -ga reply
 reply=()
 
 integer term_height="$LINES"
@@ -188,6 +189,11 @@ if [ "$NLIST_START_IN_SEARCH_MODE" -eq 1 ]; then
     NLIST_IS_SEARCH_MODE=1
 fi
 
+if [ -n "$NLIST_SET_SEARCH_TO" ]; then
+    NLIST_SEARCH_BUFFER="$NLIST_SET_SEARCH_TO"
+    NLIST_SET_SEARCH_TO=""
+fi
+
 if [ "$NLIST_START_IN_UNIQ_MODE" -eq 1 ]; then
     NLIST_START_IN_UNIQ_MODE=0
     NLIST_IS_UNIQ_MODE=1
@@ -281,6 +287,9 @@ while (( 1 )); do
         if [ "$prev_start_idx" -ne "$NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN" ]; then
             prev_start_idx="$NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN"
             disp_list=( "${(@)col_list[NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN, end_idx]}" )
+
+            # We have display list, lets replace newlines with "\n" when needed (1/3)
+            [ "$NLIST_REPLACE_NEWLINES" -eq 1 ] && disp_list=( "${(@)disp_list//$'\n'/\\n}" )
         fi
 
         # Output colored list
@@ -333,11 +342,17 @@ while (( 1 )); do
             if [ "$prev_start_idx" -ne "$NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN" ]; then
                 prev_start_idx="$NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN"
                 disp_list=( "${(@)list[NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN, end_idx]}" )
+
+                # We have display list, lets replace newlines with "\n" when needed (2/3)
+                [ "$NLIST_REPLACE_NEWLINES" -eq 1 ] && disp_list=( "${(@)disp_list//$'\n'/\\n}" )
             fi
         else
             if [ "$prev_start_idx" -ne "$NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN" ]; then
                 prev_start_idx="$NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN"
                 disp_list=( "${(@)col_list[NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN, end_idx]}" )
+
+                # We have display list, lets replace newlines with "\n" when needed (3/3)
+                [ "$NLIST_REPLACE_NEWLINES" -eq 1 ] && disp_list=( "${(@)disp_list//$'\n'/\\n}" )
             fi
         fi
 

+ 2 - 0
plugins/zsh-navigation-tools/znt-history-widget

@@ -1,8 +1,10 @@
 autoload znt-usetty-wrapper n-history
 local NLIST_START_IN_SEARCH_MODE=1
 local NLIST_START_IN_UNIQ_MODE=1
+local NLIST_SET_SEARCH_TO="$BUFFER"
 
 znt-usetty-wrapper n-history "$@"
 
 unset NLIST_START_IN_SEARCH_MODE
 unset NLIST_START_IN_UNIQ_MODE
+unset NLIST_SET_SEARCH_TO