Skip to content

Commit

Permalink
Merge pull request ohmyzsh#4649 from psprint/master
Browse files Browse the repository at this point in the history
znt: n-history supports multi-line cmds and starts with current buffer
Fixes ohmyzsh#4648
  • Loading branch information
mcornella committed Nov 30, 2015
2 parents 87f6ee3 + c628c62 commit f82bc0b
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 9 deletions.
1 change: 1 addition & 0 deletions 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
Expand Down
5 changes: 5 additions & 0 deletions plugins/zsh-navigation-tools/.config/znt/n-history.conf
Expand Up @@ -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
Expand Up @@ -2,16 +2,17 @@

http://imageshack.com/a/img633/7967/ps6rKR.png

A tool generating a selectable curses-based list of elements that has access to
current Zsh session, i.e. has broad capabilities to work together with it.
That's n-list. The files n-cd, n-env, n-kill, etc. are applications of
the tool. Feature highlights include incremental multi-word searching, ANSI
Set of tools like n-history – multi-word history searcher, n-cd – directory
bookmark manager, n-kill – htop like kill utility, and more. Based on
n-list, a tool generating selectable curses-based list of elements that has
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
various integrations with Zsh.

## 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
add:

Expand All @@ -21,13 +22,16 @@ add:

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
to key combinations:
to key combinations (no need for autoload when using Oh My Zsh):

zle -N znt-cd-widget
bindkey "^T" znt-cd-widget
zle -N 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

The tools are:
Expand Down Expand Up @@ -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
colorize output of the tools, via their config files (check out e.g. n-cd.conf,
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
7 changes: 4 additions & 3 deletions plugins/zsh-navigation-tools/n-history
Expand Up @@ -10,6 +10,7 @@ emulate -L zsh

setopt extendedglob
zmodload zsh/curses
zmodload zsh/parameter

local IFS="
"
Expand All @@ -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
Expand Down
15 changes: 15 additions & 0 deletions plugins/zsh-navigation-tools/n-list
Expand Up @@ -139,6 +139,7 @@ if [ "$#" -lt 1 ]; then
fi

REPLY="-1"
typeset -ga reply
reply=()

integer term_height="$LINES"
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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

Expand Down
2 changes: 2 additions & 0 deletions 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

0 comments on commit f82bc0b

Please sign in to comment.