Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
O
oh-my-zsh
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
github
oh-my-zsh
Commits
4c292ea2
Commit
4c292ea2
authored
Sep 20, 2015
by
Sebastian Gniazdowski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Initial commit of Zsh Navigation Tools
parent
9c08641d
Changes
28
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
28 changed files
with
2273 additions
and
0 deletions
+2273
-0
README.txt
plugins/zsh-navigation-tools/.config/znt/README.txt
+1
-0
n-aliases.conf
plugins/zsh-navigation-tools/.config/znt/n-aliases.conf
+5
-0
n-cd.conf
plugins/zsh-navigation-tools/.config/znt/n-cd.conf
+25
-0
n-env.conf
plugins/zsh-navigation-tools/.config/znt/n-env.conf
+9
-0
n-functions.conf
plugins/zsh-navigation-tools/.config/znt/n-functions.conf
+10
-0
n-history.conf
plugins/zsh-navigation-tools/.config/znt/n-history.conf
+5
-0
n-kill.conf
plugins/zsh-navigation-tools/.config/znt/n-kill.conf
+13
-0
n-list.conf
plugins/zsh-navigation-tools/.config/znt/n-list.conf
+3
-0
n-options.conf
plugins/zsh-navigation-tools/.config/znt/n-options.conf
+5
-0
n-panelize.conf
plugins/zsh-navigation-tools/.config/znt/n-panelize.conf
+5
-0
LICENSE
plugins/zsh-navigation-tools/LICENSE
+700
-0
README.txt
plugins/zsh-navigation-tools/README.txt
+101
-0
n-aliases
plugins/zsh-navigation-tools/n-aliases
+47
-0
n-cd
plugins/zsh-navigation-tools/n-cd
+68
-0
n-env
plugins/zsh-navigation-tools/n-env
+47
-0
n-functions
plugins/zsh-navigation-tools/n-functions
+54
-0
n-history
plugins/zsh-navigation-tools/n-history
+53
-0
n-kill
plugins/zsh-navigation-tools/n-kill
+96
-0
n-list
plugins/zsh-navigation-tools/n-list
+410
-0
n-list-draw
plugins/zsh-navigation-tools/n-list-draw
+131
-0
n-list-input
plugins/zsh-navigation-tools/n-list-input
+238
-0
n-options
plugins/zsh-navigation-tools/n-options
+84
-0
n-panelize
plugins/zsh-navigation-tools/n-panelize
+61
-0
znt-cd-widget
plugins/zsh-navigation-tools/znt-cd-widget
+8
-0
znt-history-widget
plugins/zsh-navigation-tools/znt-history-widget
+8
-0
znt-kill-widget
plugins/zsh-navigation-tools/znt-kill-widget
+8
-0
znt-usetty-wrapper
plugins/zsh-navigation-tools/znt-usetty-wrapper
+40
-0
zsh-navigation-tools.plugin.zsh
plugins/zsh-navigation-tools/zsh-navigation-tools.plugin.zsh
+38
-0
No files found.
plugins/zsh-navigation-tools/.config/znt/README.txt
0 → 100644
View file @
4c292ea2
These are skeletons, configuration is read from ~/.config/znt/*
plugins/zsh-navigation-tools/.config/znt/n-aliases.conf
0 → 100644
View file @
4c292ea2
# How should be current element of the list drawn. Possible values: reverse,
# underline. Default (without option set) is reverse
# On Linux virtual terminal this will be enforced to reverse (because of poor
# underline support on that terminal)
# local active_text=underline
plugins/zsh-navigation-tools/.config/znt/n-cd.conf
0 → 100644
View file @
4c292ea2
# Hotlist
local
hotlist
hotlist
=(
/
usr
/
share
/
zsh
/
site
-
functions
/
usr
/
share
/
zsh
/
usr
/
local
/
share
/
zsh
/
site
-
functions
/
usr
/
local
/
share
/
zsh
/
usr
/
local
/
bin
/
usr
/
lib
)
# Suppress adding (to directory stack) directories visited by n-cd
# Value 0 is the default (directories will be added to dirstack)
local
NCD_DONT_PUSHD
=
0
# How should be current element of the list drawn. Possible values: reverse,
# underline. Default (without option set) is reverse
# On Linux virtual terminal this will be enforced to reverse (because of poor
# underline support on that terminal)
# local active_text=underline
# Colorize last segments of the paths
# (#s) is ^, (#e) is $, # is *, ## is + (comparing to regex)
local
NLIST_COLORING_PATTERN
=
"[a-zA-Z0-9 ._-]##/#(#e)"
local
NLIST_COLORING_COLOR
=$
'\x1b[00;33m'
plugins/zsh-navigation-tools/.config/znt/n-env.conf
0 → 100644
View file @
4c292ea2
# How should be current element of the list drawn. Possible values: reverse,
# underline. Default (without option set) is reverse
# On Linux virtual terminal this will be enforced to reverse (because of poor
# underline support on that terminal)
# local active_text=underline
# (#s) is ^, (#e) is $, # is *, ## is + (comparing to regex)
local
NLIST_COLORING_PATTERN
=
"[a-zA-Z0-9_]##"
local
NLIST_COLORING_MATCH_MULTIPLE
=
0
plugins/zsh-navigation-tools/.config/znt/n-functions.conf
0 → 100644
View file @
4c292ea2
# Which editor to use, zed or vared
# vared is the default
local
feditor
=
"zed"
# local feditor="vared"
# How should be current element of the list drawn. Possible values: reverse,
# underline. Default (without option set) is reverse
# On Linux virtual terminal this will be enforced to reverse (because of poor
# underline support on that terminal)
# local active_text=underline
plugins/zsh-navigation-tools/.config/znt/n-history.conf
0 → 100644
View file @
4c292ea2
# How should be current element of the list drawn. Possible values: reverse,
# underline. Default (without option set) is reverse
# On Linux virtual terminal this will be enforced to reverse (because of poor
# underline support on that terminal)
local
active_text
=
underline
plugins/zsh-navigation-tools/.config/znt/n-kill.conf
0 → 100644
View file @
4c292ea2
# How should be current element of the list drawn. Possible values: reverse,
# underline. Default (without option set) is reverse
# On Linux virtual terminal this will be enforced to reverse (because of poor
# underline support on that terminal)
# local active_text=underline
# Colorize first number column and last path segment
# This doesn't cover scripts named "[0-9]## *", which should be very rare
# (#s) is ^, (#e) is $, # is *, ## is + (comparing to regex)
# | is alternative, but only in ()
local
NLIST_COLORING_PATTERN
=
"((#s) #[0-9]## |[[][^]]#](#e)|[^ 0-9/?\\\\][^/\\\\]#(#e)|[^ /\\\\]##[^0-9/\\\\ ]##[^/\\\\]#(#e))"
local
NLIST_COLORING_COLOR
=$
'\x1b[00;33m'
local
NLIST_COLORING_MATCH_MULTIPLE
=
1
plugins/zsh-navigation-tools/.config/znt/n-list.conf
0 → 100644
View file @
4c292ea2
# Should the list (text, borders) be drawn in bold
# Value 1 is the default
local
bold
=
1
plugins/zsh-navigation-tools/.config/znt/n-options.conf
0 → 100644
View file @
4c292ea2
# How should be current element of the list drawn. Possible values: reverse,
# underline. Default (without option set) is reverse
# On Linux virtual terminal this will be enforced to reverse (because of poor
# underline support on that terminal)
# local active_text=underline
plugins/zsh-navigation-tools/.config/znt/n-panelize.conf
0 → 100644
View file @
4c292ea2
# How should be current element of the list drawn. Possible values: reverse,
# underline. Default (without option set) is reverse
# On Linux virtual terminal this will be enforced to reverse (because of poor
# underline support on that terminal)
# local active_text=underline
plugins/zsh-navigation-tools/LICENSE
0 → 100644
View file @
4c292ea2
This diff is collapsed.
Click to expand it.
plugins/zsh-navigation-tools/README.txt
0 → 100644
View file @
4c292ea2
# Zsh Navigation Tools
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
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-*
files into the */site-functions dir (unless you use Oh My Zsh) and
add:
autoload znt-history-widget
zle -N znt-history-widget
bindkey "^R" znt-history-widget
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:
zle -N znt-cd-widget
bindkey "^T" znt-cd-widget
zle -N znt-kill-widget
bindkey "^Y" znt-kill-widget
## Introduction
The tools are:
- n-aliases - browses aliases, relegates editing to vared
- n-cd - browses dirstack and bookmarked directories, allows to enter selected directory
- n-functions - browses functions, relegates editing to zed or vared
- n-history - browses history, allows to edit and run commands from it
- n-kill - browses processes list, allows to send signal to selected process
- n-env - browses environment, relegates editing to vared
- n-options - browses options, allows to toggle their state
- n-panelize - loads output of given command into the list for browsing
All tools support horizontal scroll with <,>, {,}, h,l or left and right
cursors. Other keys are:
- [,] - jump directory bookmarks in n-cd and typical signals in n-kill
- Ctrl-d, Ctrl-u - half page up or down
- Ctrl-p, Ctrl-n - previous and next (also done with vim's j,k)
- Ctrl-l - redraw of whole display
- g, G - beginning and end of the list
- Ctrl-o, o - enter uniq mode (no duplicate lines)
- / - start incremental search
- Enter - finish incremental search, retaining filter
- Esc - exit incremental search, clearing filter
- Ctrl-w (in incremental search) - delete whole word
- Ctrl-k (in incremental search) - delete whole line
## Programming
The function n-list is used as follows:
n-list {element1} [element2] ... [elementN]
This is all that is needed to be done to have the features like ANSI coloring,
incremental multi-word search, unique mode, horizontal scroll, non-selectable
elements (grepping is done outside n-list, see the tools for how it can be
done). To set up non-selectable entries add their indices into array
NLIST_NONSELECTABLE_ELEMENTS:
typeset -a NLIST_NONSELECTABLE_ELEMENTS
NLIST_NONSELECTABLE_ELEMENTS=( 1 )
Result is stored as $reply[REPLY] ($ isn't needed before REPLY because
of arithmetic context inside []). The returned array might be different from
input arguments as n-list can process them via incremental search or uniq
mode. $REPLY is the index in that possibly processed array. If $REPLY
equals -1 it means that no selection have been made (user quitted via q
key).
To set up entries that can be jumped to with [,] keys add their indices to
NLIST_HOP_INDEXES array:
typeset -a NLIST_HOP_INDEXES
NLIST_HOP_INDEXES=( 1 10 )
n-list can automatically colorize entries according to a Zsh pattern.
Following example will colorize all numbers with blue:
local NLIST_COLORING_PATTERN="[0-9]##"
local NLIST_COLORING_COLOR=$'\x1b[00;34m'
local NLIST_COLORING_END_COLOR=$'\x1b[0m'
local NLIST_COLORING_MATCH_MULTIPLE=1
n-list "This is a number 123" "This line too has a number: 456"
Blue is the default color, it doesn't have to be set. See zshexpn man page
for more information on Zsh patterns. Briefly, comparing to regular
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).
plugins/zsh-navigation-tools/n-aliases
0 → 100644
View file @
4c292ea2
# Copy this file into /usr/share/zsh/site-functions/
# and add 'autoload n-aliases` to .zshrc
#
# This function allows to choose an alias for edition with vared
#
# Uses n-list
emulate
-L
zsh
setopt extendedglob
zmodload zsh/curses
zmodload zsh/parameter
local
IFS
=
"
"
unset
NLIST_COLORING_PATTERN
[
-f
~/.config/znt/n-list.conf
]
&&
.
~/.config/znt/n-list.conf
[
-f
~/.config/znt/n-aliases.conf
]
&&
.
~/.config/znt/n-aliases.conf
local
list
local
selected
NLIST_REMEMBER_STATE
=
0
list
=(
"
${
(@k)aliases
}
"
)
list
=(
"
${
(@M)list
:#
(#i)*
$1
*
}
"
)
local
NLIST_GREP_STRING
=
"
$1
"
if
[
"
$#list
"
-eq
0
]
;
then
echo
"No matching aliases"
return
1
fi
list
=(
"
${
(@i)list
}
"
)
n-list
"
$list
[@]"
if
[
"
$REPLY
"
-gt
0
]
;
then
selected
=
"
$reply
[REPLY]"
echo
"Editing
\`
$selected
':"
print
-rs
"vared aliases
\\
[
$selected
\\
]"
vared aliases
\[
$selected
\]
fi
# vim: set filetype=zsh:
plugins/zsh-navigation-tools/n-cd
0 → 100644
View file @
4c292ea2
# Copy this file into /usr/share/zsh/site-functions/
# and add 'autoload n-cd` to .zshrc
#
# This function allows to choose a directory from pushd stack
#
# Uses n-list
emulate
-L
zsh
setopt extendedglob pushdignoredups
zmodload zsh/curses
local
IFS
=
"
"
# Unset before configuration is read
unset
NLIST_COLORING_PATTERN
[
-f
~/.config/znt/n-list.conf
]
&&
.
~/.config/znt/n-list.conf
[
-f
~/.config/znt/n-cd.conf
]
&&
.
~/.config/znt/n-cd.conf
local
list
local
selected
NLIST_REMEMBER_STATE
=
0
list
=(
`
dirs
-p
`
)
list
=(
"
${
(@M)list
:#
(#i)*
$1
*
}
"
)
local
NLIST_GREP_STRING
=
"
$1
"
[
"
$#list
"
-eq
0
]
&&
echo
"No matching directories"
if
[
"
$#hotlist
"
-ge
1
]
;
then
typeset
-a
NLIST_NONSELECTABLE_ELEMENTS NLIST_HOP_INDEXES
local
tmp_list_size
=
"
$#list
"
NLIST_NONSELECTABLE_ELEMENTS
=(
$((
tmp_list_size+1
))
$((
tmp_list_size+2
))
)
list
=(
"
$list
[@]"
""
$'
\x
1b[00;31m'
"Hotlist"
$'
\x
1b[00;00m'
:
"
$hotlist
[@]"
)
((
tmp_list_size+
=
3
))
local
middle_hop
=
$((
(
tmp_list_size+
$#list
)
/
2
))
[[
"
$middle_hop
"
-eq
$tmp_list_size
||
"
$middle_hop
"
-eq
$#list
]]
&&
middle_hop
=
""
[
"
$tmp_list_size
"
-eq
$#list
]
&&
tmp_list_size
=
""
NLIST_HOP_INDEXES
=(
1
$tmp_list_size
$middle_hop
$#list
)
else
[
"
$#list
"
-eq
0
]
&&
return
1
fi
n-list
"
${
list
[@]
}
"
if
[
"
$REPLY
"
-gt
0
]
;
then
selected
=
"
$reply
[REPLY]"
selected
=
"
${
selected
/#\~/
$HOME
}
"
((
NCD_DONT_PUSHD
))
&&
setopt NO_AUTO_PUSHD
cd
"
$selected
"
((
NCD_DONT_PUSHD
))
&&
setopt AUTO_PUSHD
# ZLE?
if
[
"
${
(t)CURSOR
}
"
=
"integer-local-special"
]
;
then
zle
-M
"You have selected
$selected
"
else
echo
"You have selected
$selected
"
fi
else
[
"
${
(t)CURSOR
}
"
=
"integer-local-special"
]
&&
zle redisplay
fi
# vim: set filetype=zsh:
plugins/zsh-navigation-tools/n-env
0 → 100644
View file @
4c292ea2
# Copy this file into /usr/share/zsh/site-functions/
# and add 'autoload n-env` to .zshrc
#
# This function allows to choose an environment variable
# for edition with vared
#
# Uses n-list
emulate
-L
zsh
setopt extendedglob
unsetopt equals
zmodload zsh/curses
local
IFS
=
"
"
[
-f
~/.config/znt/n-list.conf
]
&&
.
~/.config/znt/n-list.conf
[
-f
~/.config/znt/n-env.conf
]
&&
.
~/.config/znt/n-env.conf
local
list
local
selected
NLIST_REMEMBER_STATE
=
0
list
=(
`
env
`
)
list
=(
"
${
(@M)list
:#
(#i)*
$1
*
}
"
)
local
NLIST_GREP_STRING
=
"
$1
"
if
[
"
$#list
"
-eq
0
]
;
then
echo
"No matching variables"
return
1
fi
list
=(
"
${
(@i)list
}
"
)
n-list
"
$list
[@]"
if
[
"
$REPLY
"
-gt
0
]
;
then
selected
=
"
$reply
[REPLY]"
selected
=
"
${
selected
%%=*
}
"
echo
"Editing
\`
$selected
':"
print
-rs
"vared
\"
$selected
\"
"
vared
"
$selected
"
fi
# vim: set filetype=zsh:
plugins/zsh-navigation-tools/n-functions
0 → 100644
View file @
4c292ea2
# Copy this file into /usr/share/zsh/site-functions/
# and add 'autoload n-functions` to .zshrc
#
# This function allows to choose a function for edition with vared
#
# Uses n-list
emulate
-L
zsh
setopt extendedglob
zmodload zsh/curses
zmodload zsh/parameter
local
IFS
=
"
"
unset
NLIST_COLORING_PATTERN
[
-f
~/.config/znt/n-list.conf
]
&&
.
~/.config/znt/n-list.conf
[
-f
~/.config/znt/n-functions.conf
]
&&
.
~/.config/znt/n-functions.conf
local
list
local
selected
NLIST_REMEMBER_STATE
=
0
list
=(
"
${
(@k)functions
}
"
)
list
=(
"
${
(@M)list
:#
(#i)*
$1
*
}
"
)
local
NLIST_GREP_STRING
=
"
$1
"
if
[
"
$#list
"
-eq
0
]
;
then
echo
"No matching functions"
return
1
fi
list
=(
"
${
(@i)list
}
"
)
n-list
"
$list
[@]"
if
[
"
$REPLY
"
-gt
0
]
;
then
selected
=
"
$reply
[REPLY]"
if
[
"
$feditor
"
=
"zed"
]
;
then
echo
"Editing
\`
$selected
' (ESC ZZ or Ctrl-x-w to finish):"
autoload zed
print
-rs
"zed -f --
\"
$selected
\"
"
zed
-f
--
"
$selected
"
else
echo
"Editing
\`
$selected
':"
print
-rs
"vared functions
\\
[
$selected
\\
]"
vared functions
\[
$selected
\]
fi
fi
# vim: set filetype=zsh:
plugins/zsh-navigation-tools/n-history
0 → 100644
View file @
4c292ea2
# Copy this file into /usr/share/zsh/site-functions/
# and add 'autoload n-history` to .zshrc
#
# This function allows to browse Z shell's history and use the
# entries
#
# Uses n-list
emulate
-L
zsh
setopt extendedglob
zmodload zsh/curses
local
IFS
=
"
"
unset
NLIST_COLORING_PATTERN
[
-f
~/.config/znt/n-list.conf
]
&&
.
~/.config/znt/n-list.conf
[
-f
~/.config/znt/n-history.conf
]
&&
.
~/.config/znt/n-history.conf
local
list
local
selected
NLIST_REMEMBER_STATE
=
0
list
=(
`
builtin history
-rn
1
`
)
list
=(
"
${
(@M)list
:#
(#i)*
$1
*
}
"
)
local
NLIST_GREP_STRING
=
"
$1
"
if
[
"
$#list
"
-eq
0
]
;
then
echo
"No matching history entries"
return
1
fi
n-list
"
${
list
[@]
}
"
if
[
"
$REPLY
"
-gt
0
]
;
then
selected
=
"
$reply
[REPLY]"
# ZLE?
if
[
"
${
(t)CURSOR
}
"
=
"integer-local-special"
]
;
then
zle redisplay
zle kill-whole-line
zle
-U
"
$selected
"
else
print
-zr
"
$selected
"
fi
else
[
"
${
(t)CURSOR
}
"
=
"integer-local-special"
]
&&
zle redisplay
fi
# vim: set filetype=zsh:
plugins/zsh-navigation-tools/n-kill
0 → 100644
View file @
4c292ea2
# Copy this file into /usr/share/zsh/site-functions/
# and add 'autoload n-kill` to .zshrc
#
# This function allows to choose a process and a signal to send to it
#
# Uses n-list
emulate
-L
zsh
setopt extendedglob
zmodload zsh/curses
local
IFS
=
"
"
[
-f
~/.config/znt/n-list.conf
]
&&
.
~/.config/znt/n-list.conf
[
-f
~/.config/znt/n-kill.conf
]
&&
.
~/.config/znt/n-kill.conf
typeset
-A
signals
signals
=(
1
"1 - HUP"
2
"2 - INT"
3
"3 - QUIT"
6
"6 - ABRT"
9
"9 - KILL"
14
"14 - ALRM"
15
"15 - TERM"
17
"17 - STOP"
19
"19 - CONT"
)
local
list
local
selected
local
signal
local
-a
signal_names
local
title
NLIST_REMEMBER_STATE
=
0
typeset
-a
NLIST_NONSELECTABLE_ELEMENTS
NLIST_NONSELECTABLE_ELEMENTS
=(
1
)
type
ps 2>/dev/null 1>&2
||
{
echo
>
&2
"Error:
\`
ps' not found"
;
return
1
}
case
"
$(
uname
)
"
in
CYGWIN
*
)
list
=(
`
command
ps
-Wa
`
)
;;
*
)
list
=(
`
command
ps
-o
pid,uid,command
-A
`
)
;;
esac
# Ask of PID
title
=
$'
\x
1b[00;31m'
"
${
list
[1]
}
"
$'
\x
1b[00;00m
\0
'
shift
list
list
=(
"
$title
"
"
${
(@M)list
:#
(#i)*
$1
*
}
"
)
local
NLIST_GREP_STRING
=
"
$1
"
if
[
"
$#list
"
-eq
1
]
;
then
echo
"No matching processes"
return
1
fi
n-list
"
$list
[@]"
# Got answer? (could be Ctrl-C or 'q')
if
[
"
$REPLY
"
-gt
0
]
;
then
selected
=
"
$reply
[REPLY]"
selected
=
"
${
selected
## #
}
"
pid
=
"
${
selected
%% *
}
"
# Now ask of signal
signal_names
=(
${
(vin)signals
}
)
typeset
-a
NLIST_HOP_INDEXES
NLIST_HOP_INDEXES
=(
3 6 8
)
unset
NLIST_COLORING_PATTERN
n-list
$'
\x
1b[00;31mSelect signal:
\x
1b[00;00m'
"
$signal_names
[@]"
if
[
"
$REPLY
"
-gt
0
]
;
then
selected
=
"
$reply
[REPLY]"
signal
=
"
${
(k)signals[(r)
$selected
]
}
"
# ZLE?
if
[
"
${
(t)CURSOR
}
"
=
"integer-local-special"
]
;
then
zle redisplay
zle kill-whole-line
zle
-U
"kill -
$signal
$pid
"
else
print
-zr
"kill -
$signal
$pid
"
fi
else
[
"
${
(t)CURSOR
}
"
=
"integer-local-special"
]
&&
zle redisplay
fi
else
[
"
${
(t)CURSOR
}
"
=
"integer-local-special"
]
&&
zle redisplay
fi
# vim: set filetype=zsh:
plugins/zsh-navigation-tools/n-list
0 → 100644
View file @
4c292ea2
This diff is collapsed.
Click to expand it.
plugins/zsh-navigation-tools/n-list-draw
0 → 100644
View file @
4c292ea2
# Copy this file into /usr/share/zsh/site-functions/
# and add 'autoload n-list-draw` to .zshrc
#
# This is an internal function not for direct use
emulate
-L
zsh
zmodload zsh/curses
setopt typesetsilent extendedglob
_nlist_print_with_ansi
()
{
local
win
=
"
$1
"
text
=
"
$2
"
out col chunk Xout
integer
text_offset
=
"
$3
"
max_text_len
=
"
$4
"
text_len
=
0
no_match
=
0 nochunk_text_len to_skip_from_chunk to_chop_off_from_chunk before_len
# 1 - non-escaped text, 2 - first number in the escaped text, with ;
# 3 - second number, 4 - text after whole escape text
typeset
-a
c
c
=(
black red green yellow blue magenta cyan white
)
while
[[
-n
"
$text
"
&&
"
$no_match
"
-eq
0
]]
;
do
if
[[
"
$text
"
=
(
#b)([^$'\x1b']#)$'\x1b'\[([0-9](#c0,2))(#B)(\;|)(#b)([0-9](#c0,2))m(*) ]]; then
# Text for further processing
text
=
"
$match
[4]"
# Text chunk to output now
out
=
"
$match
[1]"
# Save color
col
=
"
$match
[2]"
((
match[3]
>=
30
&&
match[3] <
=
37
))
&&
col
=
"
$match
[3]"
else
out
=
"
$text
"
no_match
=
1
fi
if
[
-n
"
$out
"
]
;
then
################ Expand tabs ################
chunk
=
"
$out
"
before_len
=
"
$text_len
"
Xout
=
""
while
[
-n
"
$chunk
"
]
;
do
[[
"
$chunk
"
=
(
#b)([^$'\t']#)$'\t'(*) ]] && {
((
all_text_len
=((
before_len+
${#
match
[1]
}
)
/8+1
)
*
8
))
Xout+
=
"
${
(r
:all_text_len-before_len::
:
)match[1]
}
"
before_len+
=
all_text_len-before_len
chunk
=
"
$match
[2]"
}
||
{
Xout+
=
"
$chunk
"
break
}
done
#############################################
# Input text length without the current chunk
nochunk_text_len
=
text_len
# Input text length up to current chunk
text_len+
=
"
$#Xout
"
# Should start displaying with this chunk?
# I.e. stop skipping left part of the input text?
if
((
text_len
>
text_offset
))
;
then
to_skip_from_chunk
=
text_offset-nochunk_text_len
# LEFT - is chunk off the left skip boundary? +1 for 1-based index in string
((
to_skip_from_chunk
>
0
))
&&
Xout
=
"
${
Xout
[to_skip_from_chunk+1,-1]
}
"
# RIGHT - is text off the screen?
if
((
text_len-text_offset
>
max_text_len
))
;
then
to_chop_off_from_chunk
=
0+
(
text_len-text_offset
)
-max_text_len
Xout
=
"
${
Xout
[1,-to_chop_off_from_chunk-1]
}
"
fi
[
-n
"
$Xout
"
]
&&
zcurses string
"
$win
"
"
$Xout
"
fi
fi
if
((
no_match
==
0
))
;
then
if
((
col
>=
30
&&
col <
=
37
))
;
then
zcurses attr
"
$win
"
$c
[
col-29]/black
elif
[[
"
$col
"
-eq
0
]]
;
then
zcurses attr
"
$win
"
white/black
fi
fi
done
}
integer
highlight
=
"
$1
"
integer
page_height
=
"
$2
"
integer
page_width
=
"
$3
"
local
y_offset
=
"
$4
"
local
x_offset
=
"
$5
"
local
text_offset
=
"
$6
"
local
win
=
"
$7
"
shift
7
integer
max_text_len
=
page_width-x_offset
[
"
$bold
"
=
"0"
]
&&
bold
=
""
||
bold
=
"+bold"
[[
"
$active_text
"
=
"underline"
||
"
$active_text
"
=
"reverse"
]]
||
active_text
=
"reverse"
# With Linux terminal underline won't work properly
[
"
$TERM
"
=
"linux"
]
&&
active_text
=
"reverse"
integer
max_idx
=
page_height
integer
end_idx
=
max_idx
[
"
$end_idx
"
-gt
"$#"
]
&&
end_idx
=
"$#"
integer
y
=
y_offset
zcurses attr
"
$win
"
$bold
white/black
integer i text_len
local
text
for
((
i
=
1
;
i<
=
end_idx
;
i++
))
;
do
zcurses move
"
$win
"
$y
"
$x_offset
"
[
"
$i
"
=
"
$highlight
"
]
&&
zcurses attr
"
$win
"
+
"
$active_text
"
_nlist_print_with_ansi
"
$win
"
"
$@
[i]"
"
$text_offset
"
"
$max_text_len
"
zcurses clear
"
$win
"
eol
[
"
$i
"
=
"
$highlight
"
]
&&
zcurses attr
"
$win
"
-
"
$active_text
"
y+
=
1
done
if
[
"
$end_idx
"
-lt
"
$max_idx
"
]
;
then
zcurses move
"
$win
"
$y
"
$x_offset
"
zcurses clear
"
$win
"
eol
fi
zcurses attr
"
$win
"
white/black
# vim: set filetype=zsh:
plugins/zsh-navigation-tools/n-list-input
0 → 100644
View file @
4c292ea2
# Copy this file into /usr/share/zsh/site-functions/
# and add 'autoload n-list-input` to .zshrc
#
# This is an internal function not for direct use
emulate
-L
zsh
zmodload zsh/curses
setopt typesetsilent
# Compute first to show index
_nlist_compute_first_to_show_idx
()
{
from_what_idx_list_is_shown
=
0+
((
current_idx-1
)
/page_height
)
*
page_height+1
}
typeset
-ga
reply
reply
=(
-1
''
)
integer
current_idx
=
"
$1
"
integer
from_what_idx_list_is_shown
=
"
$2
"
integer
page_height
=
"
$3
"
integer
page_width
=
"
$4
"
integer
last_element
=
"
$5
"
integer
hscroll
=
"
$6
"
local
key
=
"
$7
"
integer
search
=
"
$8
"
local
buffer
=
"
$9
"
integer
uniq_mode
=
"
$10
"
#
# Listening for input
#
if
[
"
$search
"
=
"0"
]
;
then
case
"
$key
"
in
(
UP|k|
$'
\C
-P'
)
# Are there any elements before the current one?
[
"
$current_idx
"
-gt
1
]
&&
current_idx
=
current_idx-1
;
_nlist_compute_first_to_show_idx
;;
(
DOWN|j|
$'
\C
-N'
)
# Are there any elements after the current one?
[
"
$current_idx
"
-lt
"
$last_element
"
]
&&
current_idx
=
current_idx+1
;
_nlist_compute_first_to_show_idx
;;
(
PPAGE
)
current_idx
=
current_idx-page_height
[
"
$current_idx
"
-lt
1
]
&&
current_idx
=
1
;
_nlist_compute_first_to_show_idx
;;
(
NPAGE|
" "
)
current_idx
=
current_idx+page_height
[
"
$current_idx
"
-gt
"
$last_element
"
]
&&
current_idx
=
last_element
;
_nlist_compute_first_to_show_idx
;;
(
$'
\C
-U'
)
current_idx
=
current_idx-page_height/2
[
"
$current_idx
"
-lt
1
]
&&
current_idx
=
1
;
_nlist_compute_first_to_show_idx
;;
(
$'
\C
-D'
)
current_idx
=
current_idx+page_height/2
[
"
$current_idx
"
-gt
"
$last_element
"
]
&&
current_idx
=
last_element
;
_nlist_compute_first_to_show_idx
;;
(
HOME|g
)
current_idx
=
1
_nlist_compute_first_to_show_idx
;;
(
END|G
)
current_idx
=
last_element
_nlist_compute_first_to_show_idx
;;
(
$'
\n
'
)
# Is that element selectable?
# Check for this only when there is no search
if
[[
"
$NLIST_SEARCH_BUFFER
"
!=
""
||
"
$NLIST_IS_UNIQ_MODE
"
-eq
1
||
${
NLIST_NONSELECTABLE_ELEMENTS
[(r)
$current_idx
]
}
!=
$current_idx
]]
then
# Save current element in the result variable
reply
=(
$current_idx
SELECT
)
fi
;;
(
q
)
reply
=(
-1
QUIT
)
;;
(
/
)
search
=
1
_nlist_cursor_visibility 1
;;
(
$'
\t
'
)
reply
=(
$current_idx
LEAVE
)
;;
(
$'
\C
-L'
)
reply
=(
-1
REDRAW
)
;;
(
\]
)
[[
"
${
(t)NLIST_HOP_INDEXES
}
"
=
"array"
||
"
${
(t)NLIST_HOP_INDEXES
}
"
=
"array-local"
]]
&&
[
-z
"
$NLIST_SEARCH_BUFFER
"
]
&&
[
"
$NLIST_IS_UNIQ_MODE
"
-eq
0
]
&&
for
idx
in
"
${
(n)NLIST_HOP_INDEXES[@]
}
"
;
do
if
[
"
$idx
"
-gt
"
$current_idx
"
]
;
then
current_idx
=
$idx
_nlist_compute_first_to_show_idx
break
fi
done
;;
(
\[
)
[[
"
${
(t)NLIST_HOP_INDEXES
}
"
=
"array"
||
"
${
(t)NLIST_HOP_INDEXES
}
"
=
"array-local"
]]
&&
[
-z
"
$NLIST_SEARCH_BUFFER
"
]
&&
[
"
$NLIST_IS_UNIQ_MODE
"
-eq
0
]
&&
for
idx
in
"
${
(nO)NLIST_HOP_INDEXES[@]
}
"
;
do
if
[
"
$idx
"
-lt
"
$current_idx
"
]
;
then
current_idx
=
$idx
_nlist_compute_first_to_show_idx
break
fi
done
;;
(
'<'
|
'{'
|
LEFT|
'h'
)
hscroll
=
hscroll-7
[
"
$hscroll
"
-lt
0
]
&&
hscroll
=
0
;;
(
'>'
|
'}'
|
RIGHT|
'l'
)
hscroll+
=
7
;;
(
$'
\E
'
)
buffer
=
""
;;
(
o|
$'
\C
-O'
)
uniq_mode
=
1-uniq_mode
;;
(
*
)
;;
esac
else
case
"
$key
"
in
(
$'
\n
'
)
search
=
0
_nlist_cursor_visibility 0
;;
(
$'
\C
-L'
)
reply
=(
-1
REDRAW
)
;;
#
# Slightly limited navigation
#
(
UP|
$'
\C
-P'
)
[
"
$current_idx
"
-gt
1
]
&&
current_idx
=
current_idx-1
;
_nlist_compute_first_to_show_idx
;;
(
DOWN|
$'
\C
-N'
)
[
"
$current_idx
"
-lt
"
$last_element
"
]
&&
current_idx
=
current_idx+1
;
_nlist_compute_first_to_show_idx
;;
(
PPAGE
)
current_idx
=
current_idx-page_height
[
"
$current_idx
"
-lt
1
]
&&
current_idx
=
1
;
_nlist_compute_first_to_show_idx
;;
(
NPAGE
)
current_idx
=
current_idx+page_height
[
"
$current_idx
"
-gt
"
$last_element
"
]
&&
current_idx
=
last_element
;
_nlist_compute_first_to_show_idx
;;
(
$'
\C
-U'
)
current_idx
=
current_idx-page_height/2
[
"
$current_idx
"
-lt
1
]
&&
current_idx
=
1
;
_nlist_compute_first_to_show_idx
;;
(
$'
\C
-D'
)
current_idx
=
current_idx+page_height/2
[
"
$current_idx
"
-gt
"
$last_element
"
]
&&
current_idx
=
last_element
;
_nlist_compute_first_to_show_idx
;;
(
HOME
)
current_idx
=
1
_nlist_compute_first_to_show_idx
;;
(
END
)
current_idx
=
last_element
_nlist_compute_first_to_show_idx
;;
(
LEFT
)
hscroll
=
hscroll-7
[
"
$hscroll
"
-lt
0
]
&&
hscroll
=
0
;;
(
RIGHT
)
hscroll+
=
7
;;
(
F1|F2|F3|F4|F5|F6|F7|F8|F9|F10
)
# ignore
;;
#
# The input
#
(
$'
\b
'
|
$'
\C
-?'
|
BACKSPACE
)
buffer
=
"
${
buffer
%?
}
"
;;
(
$'
\C
-W'
)
[
"
$buffer
"
=
"
${
buffer
% *
}
"
]
&&
buffer
=
""
||
buffer
=
"
${
buffer
% *
}
"
;;
(
$'
\C
-K'
)
buffer
=
""
;;
(
$'
\E
'
)
buffer
=
""
search
=
0
_nlist_cursor_visibility 0
;;
(
$'
\C
-O'
)
uniq_mode
=
1-uniq_mode
;;
(
*
)
if
[[
$#key
==
1
&&
$((
#key)) -lt 31 ]]; then
# ignore all other control keys
else
buffer+
=
"
$key
"
fi
;;
esac
fi
reply[3]
=
"
$current_idx
"
reply[4]
=
"
$from_what_idx_list_is_shown
"
reply[5]
=
"
$hscroll
"
reply[6]
=
"
$search
"
reply[7]
=
"
$buffer
"
reply[8]
=
"
$uniq_mode
"
# vim: set filetype=zsh:
plugins/zsh-navigation-tools/n-options
0 → 100644
View file @
4c292ea2
# Copy this file into /usr/share/zsh/site-functions/
# and add 'autoload n-options` to .zshrc
#
# This function allows to browse and toggle shell's options
#
# Uses n-list
#emulate -L zsh
zmodload zsh/curses
local
IFS
=
"
"
unset
NLIST_COLORING_PATTERN
[
-f
~/.config/znt/n-list.conf
]
&&
.
~/.config/znt/n-list.conf
[
-f
~/.config/znt/n-options.conf
]
&&
.
~/.config/znt/n-options.conf
# TODO restore options
unsetopt localoptions
integer
kshoptionprint
=
0
[[
-o
kshoptionprint
]]
&&
kshoptionprint
=
1
setopt kshoptionprint
local
list
local
selected
local
option
local
state
# 0 - don't remember, 1 - remember, 2 - init once, then remember
NLIST_REMEMBER_STATE
=
2
local
NLIST_GREP_STRING
=
"
${
1
:
=
}
"
while
((
1
))
;
do
list
=(
`
setopt
`
)
list
=(
"
${
(M)list[@]
:#
*
${
1
:
=
}
*
}
"
)
list
=(
"
${
list
[@]
:#kshoptionprint
*
}
"
)
if
[
"
$#list
"
-eq
0
]
;
then
echo
"No matching options"
break
fi
local
red
=
$'
\x
1b[00;31m'
green
=
$'
\x
1b[00;32m'
reset
=
$'
\x
1b[00;00m'
list
=(
"
${
list
[@]/ off/
${
red
}
off
$reset
}
"
)
#list=( "${list[@]/ on/${green} on$reset}" )
list
=(
"
${
(i)list[@]
}
"
)
n-list
"
${
list
[@]
}
"
if
[
"
$REPLY
"
-gt
0
]
;
then
[[
-o
ksharrays
]]
&&
selected
=
"
${
reply
[
$((
REPLY
-
1
))
]
}
"
||
selected
=
"
${
reply
[
$REPLY
]
}
"
option
=
"
${
selected
%% *
}
"
state
=
"
${
selected
##*
}
"
if
[[
-o
globsubst
]]
;
then
unsetopt globsubst
state
=
"
${
state
%
$reset
}
"
setopt globsubst
else
state
=
"
${
state
%
$reset
}
"
fi
# Toggle the option
if
[
"
$state
"
=
"on"
]
;
then
echo
"Setting |
$option
| to off"
unsetopt
"
$option
"
else
echo
"Setting |
$option
| to on"
setopt
"
$option
"
fi
else
break
fi
done
NLIST_REMEMBER_STATE
=
0
[[
"
$kshoptionprint
"
-eq
0
]]
&&
unsetopt kshoptionprint
# vim: set filetype=zsh:
plugins/zsh-navigation-tools/n-panelize
0 → 100644
View file @
4c292ea2
# Copy this file into /usr/share/zsh/site-functions/
# and add 'autoload n-panelize` to .zshrc
#
# This function somewhat reminds the panelize feature from Midnight Commander
# It allows browsing output of arbitrary command. Example usage:
# v-panelize ls /usr/local/bin
#
# Uses n-list
emulate
-L
zsh
setopt extendedglob
zmodload zsh/curses
local
IFS
=
"
"
unset
NLIST_COLORING_PATTERN
[
-f
~/.config/znt/n-list.conf
]
&&
.
~/.config/znt/n-list.conf
[
-f
~/.config/znt/n-panelize.conf
]
&&
.
~/.config/znt/n-panelize.conf
local
list
local
selected
NLIST_REMEMBER_STATE
=
0
if
[
-t
0
]
;
then
# Check if there is proper input
if
[
"$#"
-lt
1
]
;
then
echo
"Usage: n-panelize {command} [option|argument] ... or command | n-panelize"
return
1
fi
list
=(
`
"
$@
"
`
)
# TODO: $? doesn't reach user
[
"
$?
"
-eq
127
]
&&
return
$?
else
# Check if can reattach to terminal
if
[[
!
-c
/dev/tty
&&
!
-t
2
]]
;
then
echo
"No terminal available (no /dev/tty)"
return
1
fi
list
=(
"
${
(@f)
"
$(
<&0
)
"
}
"
)
if
[[
!
-c
/dev/tty
]]
;
then
exec
<&2
else
exec
</dev/tty
fi
fi
n-list
"
${
list
[@]
}
"
if
[
"
$REPLY
"
-gt
0
]
;
then
selected
=
"
$reply
[REPLY]"
print
-zr
"#
$selected
"
fi
# vim: set filetype=zsh:
plugins/zsh-navigation-tools/znt-cd-widget
0 → 100644
View file @
4c292ea2
autoload znt-usetty-wrapper n-cd
local NLIST_START_IN_SEARCH_MODE=0
local NLIST_START_IN_UNIQ_MODE=0
znt-usetty-wrapper n-cd "$@"
unset NLIST_START_IN_SEARCH_MODE
unset NLIST_START_IN_UNIQ_MODE
plugins/zsh-navigation-tools/znt-history-widget
0 → 100644
View file @
4c292ea2
autoload znt-usetty-wrapper n-history
local NLIST_START_IN_SEARCH_MODE=1
local NLIST_START_IN_UNIQ_MODE=1
znt-usetty-wrapper n-history "$@"
unset NLIST_START_IN_SEARCH_MODE
unset NLIST_START_IN_UNIQ_MODE
plugins/zsh-navigation-tools/znt-kill-widget
0 → 100644
View file @
4c292ea2
autoload znt-usetty-wrapper n-kill
local NLIST_START_IN_SEARCH_MODE=0
local NLIST_START_IN_UNIQ_MODE=0
znt-usetty-wrapper n-kill "$@"
unset NLIST_START_IN_SEARCH_MODE
unset NLIST_START_IN_UNIQ_MODE
plugins/zsh-navigation-tools/znt-usetty-wrapper
0 → 100644
View file @
4c292ea2
emulate
-L
zsh
zmodload zsh/curses
test_fd0
()
{
true
<&0
}
local
restore
=
0 FD
# Reattach to terminal
if
[
!
-t
0
]
;
then
# Check if can reattach to terminal in any way
if
[[
!
-c
/dev/tty
&&
!
-t
2
]]
;
then
echo
"No terminal available (no /dev/tty and no terminal at stderr)"
return
1
fi
if
test_fd0 2>/dev/null
;
then
exec
{
FD
}
<&0
restore
=
2
else
restore
=
1
fi
if
[[
!
-c
/dev/tty
]]
;
then
exec
<&2
else
exec
</dev/tty
fi
fi
# Run the command
"
$@
"
# Restore FD state
((
restore
==
1
))
&&
exec
<&-
((
restore
==
2
))
&&
exec
<&
$FD
&&
exec
{
FD
}
<&-
# vim: set filetype=zsh:
plugins/zsh-navigation-tools/zsh-navigation-tools.plugin.zsh
0 → 100755
View file @
4c292ea2
#!/usr/bin/env zsh
REPO_DIR
=
"
${
0
%/*
}
"
CONFIG_DIR
=
"
$HOME
/.config/znt"
#
# Copy configs
#
if
!
test
-d
"
$HOME
/.config"
;
then
mkdir
"
$HOME
/.config"
fi
if
!
test
-d
"
$CONFIG_DIR
"
;
then
mkdir
"
$CONFIG_DIR
"
fi
set
n-aliases.conf n-env.conf n-history.conf n-list.conf n-panelize.conf n-cd.conf n-functions.conf n-kill.conf n-options.conf
for
i
;
do
if
!
test
-f
"
$CONFIG_DIR
/
$i
"
;
then
cp
"
$REPO_DIR
/.config/znt/
$i
"
"
$CONFIG_DIR
"
fi
done
#
# Load functions
#
autoload n-aliases n-cd n-env n-functions n-history n-kill n-list n-list-draw n-list-input n-options n-panelize
autoload znt-usetty-wrapper znt-history-widget znt-cd-widget znt-kill-widget
alias
naliases
=
n-aliases
ncd
=
n-cd
nenv
=
n-env
nfunctions
=
n-functions
nhistory
=
n-history
alias
nkill
=
n-kill
noptions
=
n-options
npanelize
=
n-panelize
zle
-N
znt-history-widget
bindkey
'^R'
znt-history-widget
setopt AUTO_PUSHD HIST_IGNORE_DUPS PUSHD_IGNORE_DUPS
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment