Commit db90589c authored by Tristan Carel's avatar Tristan Carel
Browse files

Merge remote-tracking branch 'upstream/master' into emacs

Conflicts:
	plugins/emacs/emacs.plugin.zsh
	plugins/emacs/emacsclient.sh
parents 7066bf7c 57f04b92
To activate this script, load it into an interactive ZSH session:
% source history-substring-search.zsh
See the "history-substring-search.zsh" file for more information:
% sed -n '2,/^$/s/^#//p' history-substring-search.zsh | more
# This file integrates the history-substring-search script into oh-my-zsh.
source "$ZSH/plugins/history-substring-search/history-substring-search.zsh"
if test "$CASE_SENSITIVE" = true; then
unset HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS
fi
if test "$DISABLE_COLOR" = true; then
unset HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND
unset HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND
fi
#!/usr/bin/env zsh
#
# This is a clean-room implementation of the Fish[1] shell's history search
# feature, where you can type in any part of any previously entered command
# and press the UP and DOWN arrow keys to cycle through the matching commands.
#
#-----------------------------------------------------------------------------
# Usage
#-----------------------------------------------------------------------------
#
# 1. Load this script into your interactive ZSH session:
#
# % source history-substring-search.zsh
#
# If you want to use the zsh-syntax-highlighting[6] script along with this
# script, then make sure that you load it *before* you load this script:
#
# % source zsh-syntax-highlighting.zsh
# % source history-substring-search.zsh
#
# 2. Type any part of any previous command and then:
#
# * Press the UP arrow key to select the nearest command that (1) contains
# your query and (2) is older than the current command in the command
# history.
#
# * Press the DOWN arrow key to select the nearest command that (1)
# contains your query and (2) is newer than the current command in the
# command history.
#
# * Press ^U (the Control and U keys simultaneously) to abort the search.
#
# 3. If a matching command spans more than one line of text, press the LEFT
# arrow key to move the cursor away from the end of the command, and then:
#
# * Press the UP arrow key to move the cursor to the line above. When the
# cursor reaches the first line of the command, pressing the UP arrow
# key again will cause this script to perform another search.
#
# * Press the DOWN arrow key to move the cursor to the line below. When
# the cursor reaches the last line of the command, pressing the DOWN
# arrow key again will cause this script to perform another search.
#
#-----------------------------------------------------------------------------
# Configuration
#-----------------------------------------------------------------------------
#
# This script defines the following global variables. You may override their
# default values only after having loaded this script into your ZSH session.
#
# * HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND is a global variable that defines
# how the query should be highlighted inside a matching command. Its default
# value causes this script to highlight using bold, white text on a magenta
# background. See the "Character Highlighting" section in the zshzle(1) man
# page to learn about the kinds of values you may assign to this variable.
#
# * HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND is a global variable that
# defines how the query should be highlighted when no commands in the
# history match it. Its default value causes this script to highlight using
# bold, white text on a red background. See the "Character Highlighting"
# section in the zshzle(1) man page to learn about the kinds of values you
# may assign to this variable.
#
# * HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS is a global variable that defines
# how the command history will be searched for your query. Its default value
# causes this script to perform a case-insensitive search. See the "Globbing
# Flags" section in the zshexpn(1) man page to learn about the kinds of
# values you may assign to this variable.
#
#-----------------------------------------------------------------------------
# History
#-----------------------------------------------------------------------------
#
# This script was originally written by Peter Stephenson[2], who published it
# to the ZSH users mailing list (thereby making it public domain) in September
# 2009. It was later revised by Guido van Steen and released under the BSD
# license (see below) as part of the fizsh[3] project in January 2011.
#
# It was later extracted from fizsh[3] release 1.0.1, refactored heavily, and
# repackaged as both an oh-my-zsh plugin[4] and as an independently loadable
# ZSH script[5] by Suraj N. Kurapati in 2011.
#
# It was further developed[4] by Guido van Steen, Suraj N. Kurapati, Sorin
# Ionescu, and Vincent Guerci in 2011.
#
# [1]: http://fishshell.com
# [2]: http://www.zsh.org/mla/users/2009/msg00818.html
# [3]: http://sourceforge.net/projects/fizsh/
# [4]: https://github.com/robbyrussell/oh-my-zsh/pull/215
# [5]: https://github.com/sunaku/zsh-history-substring-search
# [6]: https://github.com/nicoulaj/zsh-syntax-highlighting
#
##############################################################################
#
# Copyright (c) 2009 Peter Stephenson
# Copyright (c) 2011 Guido van Steen
# Copyright (c) 2011 Suraj N. Kurapati
# Copyright (c) 2011 Sorin Ionescu
# Copyright (c) 2011 Vincent Guerci
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following
# disclaimer in the documentation and/or other materials provided
# with the distribution.
#
# * Neither the name of the FIZSH nor the names of its contributors
# may be used to endorse or promote products derived from this
# software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
##############################################################################
#-----------------------------------------------------------------------------
# configuration variables
#-----------------------------------------------------------------------------
HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND='bg=magenta,fg=white,bold'
HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND='bg=red,fg=white,bold'
HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS='i'
#-----------------------------------------------------------------------------
# the main ZLE widgets
#-----------------------------------------------------------------------------
function history-substring-search-up() {
_history-substring-search-begin
_history-substring-search-up-history ||
_history-substring-search-up-buffer ||
_history-substring-search-up-search
_history-substring-search-end
}
function history-substring-search-down() {
_history-substring-search-begin
_history-substring-search-down-history ||
_history-substring-search-down-buffer ||
_history-substring-search-down-search
_history-substring-search-end
}
zle -N history-substring-search-up
zle -N history-substring-search-down
bindkey '\e[A' history-substring-search-up
bindkey '\e[B' history-substring-search-down
#-----------------------------------------------------------------------------
# implementation details
#-----------------------------------------------------------------------------
setopt extendedglob
zmodload -F zsh/parameter
#
# We have to "override" some keys and widgets if the
# zsh-syntax-highlighting plugin has not been loaded:
#
# https://github.com/nicoulaj/zsh-syntax-highlighting
#
if [[ $+functions[_zsh_highlight] -eq 0 ]]; then
#
# Dummy implementation of _zsh_highlight()
# that simply removes existing highlights
#
function _zsh_highlight() {
region_highlight=()
}
#
# Remove existing highlights when the user
# inserts printable characters into $BUFFER
#
function ordinary-key-press() {
if [[ $KEYS == [[:print:]] ]]; then
region_highlight=()
fi
zle .self-insert
}
zle -N self-insert ordinary-key-press
#
# Override ZLE widgets to invoke _zsh_highlight()
#
# https://github.com/nicoulaj/zsh-syntax-highlighting/blob/
# bb7fcb79fad797a40077bebaf6f4e4a93c9d8163/zsh-syntax-highlighting.zsh#L121
#
#--------------8<-------------------8<-------------------8<-----------------
#
# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# * Neither the name of the zsh-syntax-highlighting contributors nor the
# names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# Load ZSH module zsh/zleparameter, needed to override user defined widgets.
zmodload zsh/zleparameter 2>/dev/null || {
echo 'zsh-syntax-highlighting: failed loading zsh/zleparameter, exiting.' >&2
return -1
}
# Override ZLE widgets to make them invoke _zsh_highlight.
for event in ${${(f)"$(zle -la)"}:#(_*|orig-*|.run-help|.which-command)}; do
if [[ "$widgets[$event]" == completion:* ]]; then
eval "zle -C orig-$event ${${${widgets[$event]}#*:}/:/ } ; $event() { builtin zle orig-$event && _zsh_highlight } ; zle -N $event"
else
case $event in
accept-and-menu-complete)
eval "$event() { builtin zle .$event && _zsh_highlight } ; zle -N $event"
;;
# The following widgets should NOT remove any previously
# applied highlighting. Therefore we do not remap them.
.forward-char|.backward-char|.up-line-or-history|.down-line-or-history)
;;
.*)
clean_event=$event[2,${#event}] # Remove the leading dot in the event name
case ${widgets[$clean_event]-} in
(completion|user):*)
;;
*)
eval "$clean_event() { builtin zle $event && _zsh_highlight } ; zle -N $clean_event"
;;
esac
;;
*)
;;
esac
fi
done
unset event clean_event
#-------------->8------------------->8------------------->8-----------------
fi
function _history-substring-search-begin() {
_history_substring_search_move_cursor_eol=false
_history_substring_search_query_highlight=
#
# Continue using the previous $_history_substring_search_result by default,
# unless the current query was cleared or a new/different query was entered.
#
if [[ -z $BUFFER || $BUFFER != $_history_substring_search_result ]]; then
#
# For the purpose of highlighting we will also keep
# a version without doubly-escaped meta characters.
#
_history_substring_search_query=$BUFFER
#
# $BUFFER contains the text that is in the command-line currently.
# we put an extra "\\" before meta characters such as "\(" and "\)",
# so that they become "\\\(" and "\\\)".
#
_history_substring_search_query_escaped=${BUFFER//(#m)[\][()|\\*?#<>~^]/\\$MATCH}
#
# Find all occurrences of the search query in the history file.
#
# (k) turns it an array of line numbers.
#
# (on) seems to remove duplicates, which are default
# options. They can be turned off by (ON).
#
_history_substring_search_matches=(${(kon)history[(R)(#$HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS)*${_history_substring_search_query_escaped}*]})
#
# Define the range of values that $_history_substring_search_match_index
# can take: [0, $_history_substring_search_matches_count_plus].
#
_history_substring_search_matches_count=$#_history_substring_search_matches
_history_substring_search_matches_count_plus=$(( _history_substring_search_matches_count + 1 ))
_history_substring_search_matches_count_sans=$(( _history_substring_search_matches_count - 1 ))
#
# If $_history_substring_search_match_index is equal to
# $_history_substring_search_matches_count_plus, this indicates that we
# are beyond the beginning of $_history_substring_search_matches.
#
# If $_history_substring_search_match_index is equal to 0, this indicates
# that we are beyond the end of $_history_substring_search_matches.
#
# If we have initially pressed "up" we have to initialize
# $_history_substring_search_match_index to
# $_history_substring_search_matches_count_plus so that it will be
# decreased to $_history_substring_search_matches_count.
#
# If we have initially pressed "down" we have to initialize
# $_history_substring_search_match_index to
# $_history_substring_search_matches_count so that it will be increased to
# $_history_substring_search_matches_count_plus.
#
if [[ $WIDGET == history-substring-search-down ]]; then
_history_substring_search_match_index=$_history_substring_search_matches_count
else
_history_substring_search_match_index=$_history_substring_search_matches_count_plus
fi
fi
}
function _history-substring-search-end() {
_history_substring_search_result=$BUFFER
# move the cursor to the end of the command line
if [[ $_history_substring_search_move_cursor_eol == true ]]; then
CURSOR=${#BUFFER}
fi
# highlight command line using zsh-syntax-highlighting
_zsh_highlight
# highlight the search query inside the command line
if [[ -n $_history_substring_search_query_highlight && -n $_history_substring_search_query ]]; then
#
# The following expression yields a variable $MBEGIN, which
# indicates the begin position + 1 of the first occurrence
# of _history_substring_search_query_escaped in $BUFFER.
#
: ${(S)BUFFER##(#m$HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS)($_history_substring_search_query##)}
local begin=$(( MBEGIN - 1 ))
local end=$(( begin + $#_history_substring_search_query ))
region_highlight+=("$begin $end $_history_substring_search_query_highlight")
fi
# For debugging purposes:
# zle -R "mn: "$_history_substring_search_match_index" m#: "${#_history_substring_search_matches}
# read -k -t 200 && zle -U $REPLY
# Exit successfully from the history-substring-search-* widgets.
true
}
function _history-substring-search-up-buffer() {
#
# Check if the UP arrow was pressed to move the cursor within a multi-line
# buffer. This amounts to three tests:
#
# 1. $#buflines -gt 1.
#
# 2. $CURSOR -ne $#BUFFER.
#
# 3. Check if we are on the first line of the current multi-line buffer.
# If so, pressing UP would amount to leaving the multi-line buffer.
#
# We check this by adding an extra "x" to $LBUFFER, which makes
# sure that xlbuflines is always equal to the number of lines
# until $CURSOR (including the line with the cursor on it).
#
local buflines XLBUFFER xlbuflines
buflines=(${(f)BUFFER})
XLBUFFER=$LBUFFER"x"
xlbuflines=(${(f)XLBUFFER})
if [[ $#buflines -gt 1 && $CURSOR -ne $#BUFFER && $#xlbuflines -ne 1 ]]; then
zle up-line-or-history
return true
fi
false
}
function _history-substring-search-down-buffer() {
#
# Check if the DOWN arrow was pressed to move the cursor within a multi-line
# buffer. This amounts to three tests:
#
# 1. $#buflines -gt 1.
#
# 2. $CURSOR -ne $#BUFFER.
#
# 3. Check if we are on the last line of the current multi-line buffer.
# If so, pressing DOWN would amount to leaving the multi-line buffer.
#
# We check this by adding an extra "x" to $RBUFFER, which makes
# sure that xrbuflines is always equal to the number of lines
# from $CURSOR (including the line with the cursor on it).
#
local buflines XRBUFFER xrbuflines
buflines=(${(f)BUFFER})
XRBUFFER="x"$RBUFFER
xrbuflines=(${(f)XRBUFFER})
if [[ $#buflines -gt 1 && $CURSOR -ne $#BUFFER && $#xrbuflines -ne 1 ]]; then
zle down-line-or-history
return true
fi
false
}
function _history-substring-search-up-history() {
#
# Behave like up in ZSH, except clear the $BUFFER
# when beginning of history is reached like in Fish.
#
if [[ -z $_history_substring_search_query ]]; then
# we have reached the absolute top of history
if [[ $HISTNO -eq 1 ]]; then
BUFFER=
# going up from somewhere below the top of history
else
zle up-history
fi
return true
fi
false
}
function _history-substring-search-down-history() {
#
# Behave like down-history in ZSH, except clear the
# $BUFFER when end of history is reached like in Fish.
#
if [[ -z $_history_substring_search_query ]]; then
# going down from the absolute top of history
if [[ $HISTNO -eq 1 && -z $BUFFER ]]; then
BUFFER=${history[1]}
_history_substring_search_move_cursor_eol=true
# going down from somewhere above the bottom of history
else
zle down-history
fi
return true
fi
false
}
function _history-substring-search-up-search() {
_history_substring_search_move_cursor_eol=true
#
# Highlight matches during history-substring-up-search:
#
# The following constants have been initialized in
# _history-substring-search-up/down-search():
#
# $_history_substring_search_matches is the current list of matches
# $_history_substring_search_matches_count is the current number of matches
# $_history_substring_search_matches_count_plus is the current number of matches + 1
# $_history_substring_search_matches_count_sans is the current number of matches - 1
# $_history_substring_search_match_index is the index of the current match
#
# The range of values that $_history_substring_search_match_index can take
# is: [0, $_history_substring_search_matches_count_plus]. A value of 0
# indicates that we are beyond the end of
# $_history_substring_search_matches. A value of
# $_history_substring_search_matches_count_plus indicates that we are beyond
# the beginning of $_history_substring_search_matches.
#
# In _history-substring-search-up-search() the initial value of
# $_history_substring_search_match_index is
# $_history_substring_search_matches_count_plus. This value is set in
# _history-substring-search-begin(). _history-substring-search-up-search()
# will initially decrease it to $_history_substring_search_matches_count.
#
if [[ $_history_substring_search_match_index -ge 2 ]]; then
#
# Highlight the next match:
#
# 1. Decrease the value of $_history_substring_search_match_index.
#
# 2. Use $HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND
# to highlight the current buffer.
#
(( _history_substring_search_match_index-- ))
BUFFER=$history[$_history_substring_search_matches[$_history_substring_search_match_index]]
_history_substring_search_query_highlight=$HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND
elif [[ $_history_substring_search_match_index -eq 1 ]]; then
#
# We will move beyond the end of $_history_substring_search_matches:
#
# 1. Decrease the value of $_history_substring_search_match_index.
#
# 2. Save the current buffer in $_history_substring_search_old_buffer,
# so that it can be retrieved by
# _history-substring-search-down-search() later.
#
# 3. Make $BUFFER equal to $_history_substring_search_query.
#
# 4. Use $HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND
# to highlight the current buffer.
#
(( _history_substring_search_match_index-- ))
_history_substring_search_old_buffer=$BUFFER
BUFFER=$_history_substring_search_query
_history_substring_search_query_highlight=$HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND
elif [[ $_history_substring_search_match_index -eq $_history_substring_search_matches_count_plus ]]; then
#
# We were beyond the beginning of $_history_substring_search_matches but
# UP makes us move back to $_history_substring_search_matches:
#
# 1. Decrease the value of $_history_substring_search_match_index.
#
# 2. Restore $BUFFER from $_history_substring_search_old_buffer.
#
# 3. Use $HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND
# to highlight the current buffer.
#
(( _history_substring_search_match_index-- ))
BUFFER=$_history_substring_search_old_buffer
_history_substring_search_query_highlight=$HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND
fi
}
function _history-substring-search-down-search() {
_history_substring_search_move_cursor_eol=true
#
# Highlight matches during history-substring-up-search:
#
# The following constants have been initialized in
# _history-substring-search-up/down-search():
#
# $_history_substring_search_matches is the current list of matches
# $_history_substring_search_matches_count is the current number of matches
# $_history_substring_search_matches_count_plus is the current number of matches + 1
# $_history_substring_search_matches_count_sans is the current number of matches - 1
# $_history_substring_search_match_index is the index of the current match
#
# The range of values that $_history_substring_search_match_index can take
# is: [0, $_history_substring_search_matches_count_plus]. A value of 0
# indicates that we are beyond the end of
# $_history_substring_search_matches. A value of
# $_history_substring_search_matches_count_plus indicates that we are beyond
# the beginning of $_history_substring_search_matches.
#
# In _history-substring-search-down-search() the initial value of
# $_history_substring_search_match_index is
# $_history_substring_search_matches_count. This value is set in
# _history-substring-search-begin().
# _history-substring-search-down-search() will initially increase it to
# $_history_substring_search_matches_count_plus.
#
if [[ $_history_substring_search_match_index -le $_history_substring_search_matches_count_sans ]]; then
#
# Highlight the next match:
#
# 1. Increase $_history_substring_search_match_index by 1.
#
# 2. Use $HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND
# to highlight the current buffer.
#
(( _history_substring_search_match_index++ ))
BUFFER=$history[$_history_substring_search_matches[$_history_substring_search_match_index]]
_history_substring_search_query_highlight=$HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND
elif [[ $_history_substring_search_match_index -eq $_history_substring_search_matches_count ]]; then
#
# We will move beyond the beginning of $_history_substring_search_matches:
#
# 1. Increase $_history_substring_search_match_index by 1.
#
# 2. Save the current buffer in $_history_substring_search_old_buffer, so
# that it can be retrieved by _history-substring-search-up-search()
# later.
#
# 3. Make $BUFFER equal to $_history_substring_search_query.
#
# 4. Use $HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND
# to highlight the current buffer.
#
(( _history_substring_search_match_index++ ))
_history_substring_search_old_buffer=$BUFFER
BUFFER=$_history_substring_search_query
_history_substring_search_query_highlight=$HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND
elif [[ $_history_substring_search_match_index -eq 0 ]]; then
#
# We were beyond the end of $_history_substring_search_matches but DOWN
# makes us move back to the $_history_substring_search_matches:
#
# 1. Increase $_history_substring_search_match_index by 1.
#
# 2. Restore $BUFFER from $_history_substring_search_old_buffer.
#
# 3. Use $HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND
# to highlight the current buffer.
#
(( _history_substring_search_match_index++ ))
BUFFER=$_history_substring_search_old_buffer
_history_substring_search_query_highlight=$HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND
fi
}
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
# vim: ft=zsh sw=2 ts=2 et
# Kate
# Start kate always silent
alias kate='kate >/dev/null 2>&1'
function kt () {
cd $1
kate $1
}
\ No newline at end of file
#compdef knife
# These flags should be available everywhere according to man knife
knife_general_flags=( --help --server-url --key --config --editor --format --log_level --logfile --no-editor --user --print-after --version --yes )
# knife has a very special syntax, some example calls are:
# knife status
# knife cookbook list
# knife role show ROLENAME
# knife data bag show DATABAGNAME
# knife role show ROLENAME --attribute ATTRIBUTENAME
# knife cookbook show COOKBOOKNAME COOKBOOKVERSION recipes
# The -Q switch in compadd allow for completions of things like "data bag" without having to go through two rounds of completion and avoids zsh inserting a \ for escaping spaces
_knife() {
local curcontext="$curcontext" state line
typeset -A opt_args
cloudproviders=(bluebox ec2 rackspace slicehost terremark)
_arguments \
'1: :->knifecmd'\
'2: :->knifesubcmd'\
'3: :->knifesubcmd2' \
'4: :->knifesubcmd3' \
'5: :->knifesubcmd4' \
'6: :->knifesubcmd5'
case $state in
knifecmd)
compadd -Q "$@" bootstrap client configure cookbook "cookbook site" "data bag" exec index node recipe role search ssh status windows $cloudproviders
;;
knifesubcmd)
case $words[2] in
(bluebox|ec2|rackspace|slicehost|terremark)
compadd "$@" server images
;;
client)
compadd -Q "$@" "bulk delete" list create show delete edit reregister
;;
configure)
compadd "$@" client
;;
cookbook)
compadd -Q "$@" test list create download delete "metadata from" show "bulk delete" metadata upload
;;
node)
compadd -Q "$@" "from file" create show edit delete list run_list "bulk delete"
;;
recipe)
compadd "$@" list
;;
role)
compadd -Q "$@" "bulk delete" create delete edit "from file" list show
;;
windows)
compadd "$@" bootstrap
;;
*)
_arguments '2:Subsubcommands:($(_knife_options1))'
esac
;;
knifesubcmd2)
case $words[3] in
server)
compadd "$@" list create delete
;;
images)
compadd "$@" list
;;
site)
compadd "$@" vendor show share search download list unshare
;;
(show|delete|edit)
_arguments '3:Subsubcommands:($(_chef_$words[2]s_remote))'
;;
(upload|test)
_arguments '3:Subsubcommands:($(_chef_$words[2]s_local) --all)'
;;
list)
compadd -a "$@" knife_general_flags
;;
bag)
compadd -Q "$@" show edit list "from file" create delete
;;
*)
_arguments '3:Subsubcommands:($(_knife_options2))'
esac
;;
knifesubcmd3)
case $words[3] in
show)
case $words[2] in
cookbook)
versioncomp=1
_arguments '4:Cookbookversions:($(_cookbook_versions) latest)'
;;
(node|client|role)
compadd "$@" --attribute
esac
esac
case $words[4] in
(show|edit)
_arguments '4:Subsubsubcommands:($(_chef_$words[2]_$words[3]s_remote))'
;;
file)
_arguments '*:file or directory:_files -g "*.(rb|json)"'
;;
list)
compadd -a "$@" knife_general_flags
;;
*)
_arguments '*:Subsubcommands:($(_knife_options3))'
esac
;;
knifesubcmd4)
if (( versioncomp > 0 )); then
compadd "$@" attributes definitions files libraries providers recipes resources templates
else
_arguments '*:Subsubcommands:($(_knife_options2))'
fi
;;
knifesubcmd5)
_arguments '*:Subsubcommands:($(_knife_options3))'
esac
}
# Helper functions to provide the argument completion for several depths of commands
_knife_options1() {
( for line in $( knife $words[2] --help | grep -v "^knife" ); do echo $line | grep "\-\-"; done )
}
_knife_options2() {
( for line in $( knife $words[2] $words[3] --help | grep -v "^knife" ); do echo $line | grep "\-\-"; done )
}
_knife_options3() {
( for line in $( knife $words[2] $words[3] $words[4] --help | grep -v "^knife" ); do echo $line | grep "\-\-"; done )
}
# The chef_x_remote functions use knife to get a list of objects of type x on the server
_chef_roles_remote() {
(knife role list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
}
_chef_clients_remote() {
(knife client list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
}
_chef_nodes_remote() {
(knife node list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
}
_chef_cookbooks_remote() {
(knife cookbook list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
}
_chef_sitecookbooks_remote() {
(knife cookbook site list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
}
_chef_data_bags_remote() {
(knife data bag list | grep \" | awk '{print $1}' | awk -F"," '{print $1}' | awk -F"\"" '{print $2}')
}
# The chef_x_local functions use the knife config to find the paths of relevant objects x to be uploaded to the server
_chef_cookbooks_local() {
(for i in $( grep cookbook_path $HOME/.chef/knife.rb | awk 'BEGIN {FS = "[" }; {print $2}' | sed 's/\,//g' | sed "s/'//g" | sed 's/\(.*\)]/\1/' ); do ls $i; done)
}
# This function extracts the available cookbook versions on the chef server
_cookbook_versions() {
(knife cookbook show $words[4] | grep -v $words[4] | grep -v -E '\]|\[|\{|\}' | sed 's/ //g' | sed 's/"//g')
}
_knife "$@"
function _lein_commands() {
local ret=1 state
_arguments ':subcommand:->subcommand' && ret=0
case $state in
subcommand)
subcommands=(
"clean:remove compiled files and dependencies from project"
"compile:ahead-of-time compile the project"
"deps:download and install all dependencies"
"help:display a list of tasks or help for a given task"
"install:install the project and its dependencies in your local repository"
"jar:create a jar file containing the compiled .class files"
"new:create a new project skeleton"
"pom:write a pom.xml file to disk for maven interop"
"test:run the project's tests"
"uberjar:Create a jar including the contents of each of deps"
"upgrade:upgrade leiningen to the latest stable release"
"version:print leiningen's version"
)
_describe -t subcommands 'leiningen subcommands' subcommands && ret=0
esac
return ret
}
compdef _lein_commands lein
...@@ -8,19 +8,30 @@ alias rtfm='man' ...@@ -8,19 +8,30 @@ alias rtfm='man'
alias visible='echo' alias visible='echo'
alias invisible='cat' alias invisible='cat'
alias moar='more' alias moar='more'
alias tldr='less'
alias alwayz='tail -f'
alias icanhas='mkdir' alias icanhas='mkdir'
alias gimmeh='touch'
alias donotwant='rm' alias donotwant='rm'
alias dowant='cp' alias dowant='cp'
alias gtfo='mv' alias gtfo='mv'
alias nowai='chmod'
alias hai='cd' alias hai='cd'
alias iz='ls'
alias plz='pwd' alias plz='pwd'
alias ihasbucket='df -h'
alias inur='locate' alias inur='locate'
alias iminurbase='finger'
alias btw='nice'
alias obtw='nohup'
alias nomz='ps -aux' alias nomz='ps -aux'
alias nomnom='killall' alias nomnom='killall'
alias byes='exit'
alias cya='reboot' alias cya='reboot'
alias kthxbai='halt' alias kthxbai='halt'
...@@ -6,7 +6,3 @@ alias puni="sudo port uninstall inactive" ...@@ -6,7 +6,3 @@ alias puni="sudo port uninstall inactive"
alias puo="sudo port upgrade outdated" alias puo="sudo port upgrade outdated"
alias pup="psu && puo" alias pup="psu && puo"
# add macports completion function to path
fpath=($ZSH/plugins/macports $fpath)
autoload -U compinit
compinit -i
# Mercurial
alias hgc='hg commit -v'
alias hgb='hg branch -v'
alias hgba='hg branches'
alias hgco='hg checkout'
alias hgd='hg diff'
alias hged='hg diffmerge'
# pull and update
alias hgl='hg pull -u -v'
alias hgp='hg push -v'
alias hgs='hg status -v'
# this is the 'git commit --amend' equivalent
alias hgca='hg qimport -r tip ; hg qrefresh -e ; hg qfinish tip'
# commands to control local mysql-server installation
# paths are for osx installation via macports
alias mysqlstart='sudo /opt/local/share/mysql5/mysql/mysql.server start'
alias mysqlstop='sudo /opt/local/share/mysql5/mysql/mysql.server stop'
alias mysqlrestart='sudo /opt/local/share/mysql5/mysql/mysql.server restart'
alias mysqlstatus='mysqladmin5 -u root -p ping'
# commands to control local mysql-server installation
# paths are for osx installtion via macports
alias mysqlstart='sudo /opt/local/bin/mysqld_safe5'
alias mysqlstop='/opt/local/bin/mysqladmin5 -u root -p shutdown'
alias mysqlstatus='mysqladmin5 -u root -p ping'
\ No newline at end of file
# Open the node api for your current version to the optional section.
# TODO: Make the section part easier to use.
function node-docs {
open "http://nodejs.org/docs/$(node --version)/api/all.html#$1"
}
eval "$(npm completion 2>/dev/null)"
#compdef man-preview
#autoload
_man
function savepath() { # ------------------------------------------------------------------------------
pwd > ~/.current_path~ # FILE: osx.plugin.zsh
} # DESCRIPTION: oh-my-zsh plugin file.
# AUTHOR: Sorin Ionescu (sorin.ionescu@gmail.com)
# VERSION: 1.0.1
# ------------------------------------------------------------------------------
function tab() { function tab() {
savepath local command="cd \\\"$PWD\\\""
osascript >/dev/null <<EOF (( $# > 0 )) && command="${command}; $*"
on do_submenu(app_name, menu_name, menu_item, submenu_item)
-- bring the target application to the front the_app=$(
tell application app_name osascript 2>/dev/null <<EOF
activate tell application "System Events"
end tell name of first item of (every process whose frontmost is true)
tell application "System Events"
tell process app_name
tell menu bar 1
tell menu bar item menu_name
tell menu menu_name
tell menu item menu_item
tell menu menu_item
click menu item submenu_item
end tell
end tell
end tell
end tell
end tell
end tell end tell
end tell EOF
end do_submenu )
do_submenu("Terminal", "Shell", "New Tab", 1) [[ "$the_app" == 'Terminal' ]] && {
osascript 2>/dev/null <<EOF
tell application "System Events"
tell process "Terminal" to keystroke "t" using command down
tell application "Terminal" to do script "${command}" in front window
end tell
EOF EOF
} }
function itab() { [[ "$the_app" == 'iTerm' ]] && {
savepath osascript 2>/dev/null <<EOF
osascript >/dev/null <<EOF tell application "iTerm"
on do_submenu(app_name, menu_name, menu_item) set current_terminal to current terminal
-- bring the target application to the front tell current_terminal
tell application app_name launch session "Default Session"
activate set current_session to current session
end tell tell current_session
tell application "System Events" write text "${command}"
tell process app_name
tell menu bar 1
tell menu bar item menu_name
tell menu menu_name
click menu item menu_item
end tell
end tell end tell
end tell end tell
end tell end tell
EOF
}
}
function pfd() {
osascript 2>/dev/null <<EOF
tell application "Finder"
return POSIX path of (target of window 1 as alias)
end tell end tell
end do_submenu EOF
}
do_submenu("iTerm", "Shell", "New Tab") function pfs() {
osascript 2>/dev/null <<EOF
set output to ""
tell application "Finder" to set the_selection to selection
set item_count to count the_selection
repeat with item_index from 1 to count the_selection
if item_index is less than item_count then set the_delimiter to "\n"
if item_index is item_count then set the_delimiter to ""
set output to output & ((item item_index of the_selection as alias)'s POSIX path) & the_delimiter
end repeat
EOF EOF
} }
function cdf() {
cd "$(pfd)"
}
function pushdf() {
pushd "$(pfd)"
}
function quick-look() {
(( $# > 0 )) && qlmanage -p $* &>/dev/null &
}
function man-preview() {
man -t "$@" | open -f -a Preview
}
function trash() {
local trash_dir="${HOME}/.Trash"
local temp_ifs=$IFS
IFS=$'\n'
for item in "$@"; do
if [[ -e "$item" ]]; then
item_name="$(basename $item)"
if [[ -e "${trash_dir}/${item_name}" ]]; then
mv -f "$item" "${trash_dir}/${item_name} $(date "+%H-%M-%S")"
else
mv -f "$item" "${trash_dir}/"
fi
fi
done
IFS=$temp_ifs
}
...@@ -10,7 +10,6 @@ _phing_does_target_list_need_generating () { ...@@ -10,7 +10,6 @@ _phing_does_target_list_need_generating () {
_phing () { _phing () {
if [ -f build.xml ]; then if [ -f build.xml ]; then
if _phing_does_target_list_need_generating; then if _phing_does_target_list_need_generating; then
echo "\nGenerating .phing_targets..." > /dev/stderr
phing -l |grep -v ":" |grep -v "^$"|grep -v "\-" > .phing_targets phing -l |grep -v ":" |grep -v "^$"|grep -v "\-" > .phing_targets
fi fi
compadd `cat .phing_targets` compadd `cat .phing_targets`
......
# add brew completion function to path
fpath=($ZSH/plugins/pip $fpath)
autoload -U compinit
compinit -i
# Thanks to Christopher Sexton
# https://gist.github.com/965032
function kapow {
touch ~/.pow/$1/tmp/restart.txt
if [ $? -eq 0 ]; then
echo "$fg[yellow]Pow restarting $1...$reset_color"
fi
}
compctl -W ~/.pow -/ kapow
#compdef powder
#autoload
compadd `powder help | grep powder | cut -d " " -f 4`
# Find python file
alias pyfind='find . -name "*.py"'
# Remove python compiled byte-code
alias pyclean='find . -type f -name "*.py[co]" -exec rm -f \{\} \;'
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment