From 091cbd9d5864173433c6937dd1dcc7742081ae13 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Wed, 16 Jun 2010 21:50:39 +0000 Subject: 28042: transpose-lines widget --- Functions/Zle/.distfiles | 49 +++++++++++++++++++++++++++++-------------- Functions/Zle/transpose-lines | 43 +++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 16 deletions(-) create mode 100644 Functions/Zle/transpose-lines (limited to 'Functions') diff --git a/Functions/Zle/.distfiles b/Functions/Zle/.distfiles index 4f01a8c01..2ec4adc22 100644 --- a/Functions/Zle/.distfiles +++ b/Functions/Zle/.distfiles @@ -1,28 +1,45 @@ DISTFILES_SRC=' .distfiles -backward-kill-word-match backward-word-match -capitalize-word-match copy-earlier-word -cycle-completion-positions define-composed-chars -delete-whole-word-match down-case-word-match -down-line-or-beginning-search edit-command-line -forward-word-match history-beginning-search-menu -history-pattern-search history-search-end -incarg incremental-complete-word -insert-composed-char insert-files -insert-unicode-char keeper -keymap+widget kill-word-match +backward-kill-word-match +backward-word-match +capitalize-word-match +copy-earlier-word +cycle-completion-positions +define-composed-chars +delete-whole-word-match +down-case-word-match +down-line-or-beginning-search +edit-command-line +forward-word-match +history-beginning-search-menu +history-pattern-search +history-search-end +incarg +incremental-complete-word +insert-composed-char +insert-files +insert-unicode-char +keeper +keymap+widget +kill-word-match match-word-context match-words-by-style modify-current-argument narrow-to-region -narrow-to-region-invisible predict-on -quote-and-complete-word read-from-minibuffer -replace-string select-word-style +narrow-to-region-invisible +predict-on +quote-and-complete-word +read-from-minibuffer +replace-string replace-string-again +select-word-style smart-insert-last-word split-shell-arguments +transpose-lines transpose-words-match -up-case-word-match up-line-or-beginning-search -url-quote-magic which-command +up-case-word-match +up-line-or-beginning-search +url-quote-magic +which-command zed-set-file-name ' diff --git a/Functions/Zle/transpose-lines b/Functions/Zle/transpose-lines new file mode 100644 index 000000000..06e1da4ac --- /dev/null +++ b/Functions/Zle/transpose-lines @@ -0,0 +1,43 @@ +# Transpose lines. This is like in emacs: with a positive argument +# (default 1) the current line and the previous line are swapped and the +# cursor goes down one line; with a negative argument the previous two +# lines are swapped and the cursor goes up one line. + +emulate -L zsh +setopt extendedglob # xtrace + +local -a match mbegin mend +integer count=${NUMERIC:-1} +local init prev lline final rrline + +if (( ${NUMERIC:-1} < 0 )); then + while (( count++ )); do + [[ $LBUFFER != (#b)(|*$'\n')([^$'\n']#$'\n')([^$'\n']#$'\n')([^$'\n']#) ]] && return 1 + + LBUFFER=$match[1]$match[3] + RBUFFER=$match[2]$match[4]$RBUFFER + done +else + while (( count-- )); do + [[ $LBUFFER != (#b)(*)$'\n'([^$'\n']#) ]] && return 1 + + prev=$match[1] + lline=$match[2] + + if [[ $prev = (#b)(*$'\n')([^$'\n']#) ]]; then + init=$match[1] + prev=$match[2] + fi + + if [[ $RBUFFER = (#b)([^$'\n']#)$'\n'(*) ]]; then + rline=$match[1] + final=$match[2] + prev+=$'\n' + else + rline=$RBUFFER + fi + + LBUFFER=$init$lline$rline$'\n'$prev + RBUFFER=$final + done +fi -- cgit 1.4.1