mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2024-11-11 00:10:08 +00:00
Merge pull request #4649 from psprint/master
znt: n-history supports multi-line cmds and starts with current buffer Fixes #4648
This commit is contained in:
commit
a19ec1040e
6 changed files with 43 additions and 9 deletions
|
@ -1,6 +1,7 @@
|
||||||
# Hotlist
|
# Hotlist
|
||||||
local hotlist
|
local hotlist
|
||||||
hotlist=(
|
hotlist=(
|
||||||
|
~/.config/znt
|
||||||
/usr/share/zsh/site-functions
|
/usr/share/zsh/site-functions
|
||||||
/usr/share/zsh
|
/usr/share/zsh
|
||||||
/usr/local/share/zsh/site-functions
|
/usr/local/share/zsh/site-functions
|
||||||
|
|
|
@ -3,3 +3,8 @@
|
||||||
# On Linux virtual terminal this will be enforced to reverse (because of poor
|
# On Linux virtual terminal this will be enforced to reverse (because of poor
|
||||||
# underline support on that terminal)
|
# underline support on that terminal)
|
||||||
local active_text=underline
|
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
|
||||||
|
|
|
@ -2,16 +2,17 @@
|
||||||
|
|
||||||
http://imageshack.com/a/img633/7967/ps6rKR.png
|
http://imageshack.com/a/img633/7967/ps6rKR.png
|
||||||
|
|
||||||
A tool generating a selectable curses-based list of elements that has access to
|
Set of tools like n-history – multi-word history searcher, n-cd – directory
|
||||||
current Zsh session, i.e. has broad capabilities to work together with it.
|
bookmark manager, n-kill – htop like kill utility, and more. Based on
|
||||||
That's n-list. The files n-cd, n-env, n-kill, etc. are applications of
|
n-list, a tool generating selectable curses-based list of elements that has
|
||||||
the tool. Feature highlights include incremental multi-word searching, ANSI
|
access to current Zsh session, i.e. has broad capabilities to work together
|
||||||
|
with it. Feature highlights include incremental multi-word searching, ANSI
|
||||||
coloring, unique mode, horizontal scroll, non-selectable elements, grepping and
|
coloring, unique mode, horizontal scroll, non-selectable elements, grepping and
|
||||||
various integrations with Zsh.
|
various integrations with Zsh.
|
||||||
|
|
||||||
## History Widget
|
## History Widget
|
||||||
|
|
||||||
To have n-history as the incremental searcher bound to Ctrl-R copy znt-*
|
To have n-history as multi-word incremental searcher bound to Ctrl-R copy znt-*
|
||||||
files into the */site-functions dir (unless you use Oh My Zsh) and
|
files into the */site-functions dir (unless you use Oh My Zsh) and
|
||||||
add:
|
add:
|
||||||
|
|
||||||
|
@ -21,13 +22,16 @@ add:
|
||||||
|
|
||||||
to .zshrc. This is done automatically when using Oh My Zsh. Two other
|
to .zshrc. This is done automatically when using Oh My Zsh. Two other
|
||||||
widgets exist, znt-cd-widget and znt-kill-widget, they can be too assigned
|
widgets exist, znt-cd-widget and znt-kill-widget, they can be too assigned
|
||||||
to key combinations:
|
to key combinations (no need for autoload when using Oh My Zsh):
|
||||||
|
|
||||||
zle -N znt-cd-widget
|
zle -N znt-cd-widget
|
||||||
bindkey "^T" znt-cd-widget
|
bindkey "^T" znt-cd-widget
|
||||||
zle -N znt-kill-widget
|
zle -N znt-kill-widget
|
||||||
bindkey "^Y" znt-kill-widget
|
bindkey "^Y" znt-kill-widget
|
||||||
|
|
||||||
|
Oh My Zsh stores history into ~/.zsh_history. When you switch to OMZ you could
|
||||||
|
want to copy your previous data (from e.g. ~/.zhistory) into the new location.
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
||||||
The tools are:
|
The tools are:
|
||||||
|
@ -99,3 +103,9 @@ expressions, (#s) is ^, (#e) is $, # is *, ## is +. Alternative
|
||||||
will work when in parenthesis, i.e. (a|b). BTW by using this method you can
|
will work when in parenthesis, i.e. (a|b). BTW by using this method you can
|
||||||
colorize output of the tools, via their config files (check out e.g. n-cd.conf,
|
colorize output of the tools, via their config files (check out e.g. n-cd.conf,
|
||||||
it uses this).
|
it uses this).
|
||||||
|
|
||||||
|
## Performance
|
||||||
|
ZNT is fastest with Zsh before 5.0.8 and starting from 5.2 (the version yet to
|
||||||
|
be released).
|
||||||
|
|
||||||
|
# vim:filetype=conf
|
|
@ -10,6 +10,7 @@ emulate -L zsh
|
||||||
|
|
||||||
setopt extendedglob
|
setopt extendedglob
|
||||||
zmodload zsh/curses
|
zmodload zsh/curses
|
||||||
|
zmodload zsh/parameter
|
||||||
|
|
||||||
local IFS="
|
local IFS="
|
||||||
"
|
"
|
||||||
|
@ -24,16 +25,16 @@ local selected
|
||||||
|
|
||||||
NLIST_REMEMBER_STATE=0
|
NLIST_REMEMBER_STATE=0
|
||||||
|
|
||||||
list=( `builtin history -rn 1` )
|
list=( "$history[@]" )
|
||||||
list=( "${(@M)list:#(#i)*$1*}" )
|
list=( "${(@M)list:#(#i)*$1*}" )
|
||||||
|
|
||||||
local NLIST_GREP_STRING="$1"
|
|
||||||
|
|
||||||
if [ "$#list" -eq 0 ]; then
|
if [ "$#list" -eq 0 ]; then
|
||||||
echo "No matching history entries"
|
echo "No matching history entries"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
local NLIST_GREP_STRING="$1"
|
||||||
|
local NLIST_REPLACE_NEWLINES="1"
|
||||||
n-list "${list[@]}"
|
n-list "${list[@]}"
|
||||||
|
|
||||||
if [ "$REPLY" -gt 0 ]; then
|
if [ "$REPLY" -gt 0 ]; then
|
||||||
|
|
|
@ -139,6 +139,7 @@ if [ "$#" -lt 1 ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
REPLY="-1"
|
REPLY="-1"
|
||||||
|
typeset -ga reply
|
||||||
reply=()
|
reply=()
|
||||||
|
|
||||||
integer term_height="$LINES"
|
integer term_height="$LINES"
|
||||||
|
@ -188,6 +189,11 @@ if [ "$NLIST_START_IN_SEARCH_MODE" -eq 1 ]; then
|
||||||
NLIST_IS_SEARCH_MODE=1
|
NLIST_IS_SEARCH_MODE=1
|
||||||
fi
|
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
|
if [ "$NLIST_START_IN_UNIQ_MODE" -eq 1 ]; then
|
||||||
NLIST_START_IN_UNIQ_MODE=0
|
NLIST_START_IN_UNIQ_MODE=0
|
||||||
NLIST_IS_UNIQ_MODE=1
|
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
|
if [ "$prev_start_idx" -ne "$NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN" ]; then
|
||||||
prev_start_idx="$NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN"
|
prev_start_idx="$NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN"
|
||||||
disp_list=( "${(@)col_list[NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN, end_idx]}" )
|
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
|
fi
|
||||||
|
|
||||||
# Output colored list
|
# Output colored list
|
||||||
|
@ -333,11 +342,17 @@ while (( 1 )); do
|
||||||
if [ "$prev_start_idx" -ne "$NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN" ]; then
|
if [ "$prev_start_idx" -ne "$NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN" ]; then
|
||||||
prev_start_idx="$NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN"
|
prev_start_idx="$NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN"
|
||||||
disp_list=( "${(@)list[NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN, end_idx]}" )
|
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
|
fi
|
||||||
else
|
else
|
||||||
if [ "$prev_start_idx" -ne "$NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN" ]; then
|
if [ "$prev_start_idx" -ne "$NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN" ]; then
|
||||||
prev_start_idx="$NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN"
|
prev_start_idx="$NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN"
|
||||||
disp_list=( "${(@)col_list[NLIST_FROM_WHAT_IDX_LIST_IS_SHOWN, end_idx]}" )
|
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
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
autoload znt-usetty-wrapper n-history
|
autoload znt-usetty-wrapper n-history
|
||||||
local NLIST_START_IN_SEARCH_MODE=1
|
local NLIST_START_IN_SEARCH_MODE=1
|
||||||
local NLIST_START_IN_UNIQ_MODE=1
|
local NLIST_START_IN_UNIQ_MODE=1
|
||||||
|
local NLIST_SET_SEARCH_TO="$BUFFER"
|
||||||
|
|
||||||
znt-usetty-wrapper n-history "$@"
|
znt-usetty-wrapper n-history "$@"
|
||||||
|
|
||||||
unset NLIST_START_IN_SEARCH_MODE
|
unset NLIST_START_IN_SEARCH_MODE
|
||||||
unset NLIST_START_IN_UNIQ_MODE
|
unset NLIST_START_IN_UNIQ_MODE
|
||||||
|
unset NLIST_SET_SEARCH_TO
|
||||||
|
|
Loading…
Reference in a new issue