mirror of
https://github.com/abo-abo/avy.git
synced 2025-10-13 21:33:05 +00:00
parent
e460d7ebe8
commit
07153e4fb7
114
avy.el
114
avy.el
@ -83,6 +83,10 @@ in the avy overlays."
|
||||
(const avy-copy-region)
|
||||
(const avy-move-line)
|
||||
(const avy-move-region)
|
||||
(const avy-kill-whole-line)
|
||||
(const avy-kill-region)
|
||||
(const avy-kill-ring-save-whole-line)
|
||||
(const avy-kill-ring-save-region)
|
||||
(function :tag "Other command"))
|
||||
:value-type (repeat :tag "Keys" character)))
|
||||
|
||||
@ -113,6 +117,10 @@ If the commands isn't on the list, `avy-style' is used."
|
||||
(const avy-copy-region)
|
||||
(const avy-move-line)
|
||||
(const avy-move-region)
|
||||
(const avy-kill-whole-line)
|
||||
(const avy-kill-region)
|
||||
(const avy-kill-ring-save-whole-line)
|
||||
(const avy-kill-ring-save-region)
|
||||
(function :tag "Other command"))
|
||||
:value-type (choice
|
||||
(const :tag "Pre" pre)
|
||||
@ -1457,6 +1465,112 @@ The window scope is determined by `avy-all-windows' or
|
||||
(delete-region beg end)
|
||||
(insert text pad))))
|
||||
|
||||
;;;###autoload
|
||||
(defun avy-kill-region (arg)
|
||||
"Select two lines and kill the region between them.
|
||||
|
||||
The window scope is determined by `avy-all-windows' or
|
||||
`avy-all-windows-alt' when ARG is non-nil."
|
||||
(interactive "P")
|
||||
(let ((initial-window (selected-window)))
|
||||
(avy-with avy-kill-region
|
||||
(let* ((beg (save-selected-window
|
||||
(list (avy--line arg) (selected-window))))
|
||||
(end (list (avy--line arg) (selected-window))))
|
||||
(cond
|
||||
((not (numberp (car beg)))
|
||||
(user-error "Fail to select the beginning of region."))
|
||||
((not (numberp (car end)))
|
||||
(user-error "Fail to select the end of region"))
|
||||
;; Restrict operation to same window. It's better if it can be
|
||||
;; different windows but same buffer; however, then the cloned
|
||||
;; buffers with different narrowed regions might cause problem.
|
||||
((not (equal (cdr beg) (cdr end)))
|
||||
(user-error "Selected points are not in the same window"))
|
||||
((< (car beg) (car end))
|
||||
(save-excursion
|
||||
(kill-region
|
||||
(car beg)
|
||||
(progn (goto-char (car end)) (forward-visible-line 1) (point)))))
|
||||
(t
|
||||
(save-excursion
|
||||
(kill-region
|
||||
(progn (goto-char (car beg)) (forward-visible-line 1) (point))
|
||||
(car end)))))))
|
||||
(select-window initial-window)))
|
||||
|
||||
;;;###autoload
|
||||
(defun avy-kill-ring-save-region (arg)
|
||||
"Select two lines and save the region between them to the kill ring."
|
||||
(interactive "P")
|
||||
(let ((initial-window (selected-window)))
|
||||
(avy-with avy-kill-ring-save-region
|
||||
(let* ((beg (save-selected-window
|
||||
(list (avy--line arg) (selected-window))))
|
||||
(end (list (avy--line arg) (selected-window))))
|
||||
(cond
|
||||
((not (numberp (car beg)))
|
||||
(user-error "Fail to select the beginning of region."))
|
||||
((not (numberp (car end)))
|
||||
(user-error "Fail to select the end of region"))
|
||||
((not (equal (cdr beg) (cdr end)))
|
||||
(user-error "Selected points are not in the same window"))
|
||||
((< (car beg) (car end))
|
||||
(save-excursion
|
||||
(kill-ring-save
|
||||
(car beg)
|
||||
(progn (goto-char (car end)) (forward-visible-line 1) (point)))))
|
||||
(t
|
||||
(save-excursion
|
||||
(kill-ring-save
|
||||
(progn (goto-char (car beg)) (forward-visible-line 1) (point))
|
||||
(car end)))))))
|
||||
(select-window initial-window)))
|
||||
|
||||
;;;###autoload
|
||||
(defun avy-kill-whole-line (arg)
|
||||
"Select line and kill the whole selected line.
|
||||
|
||||
With a numerical prefix ARG, kill ARG line(s) starting from the
|
||||
selected line. If ARG is negative, kill backward.
|
||||
|
||||
If ARG is zero, kill the selected line but exclude the trailing
|
||||
newline.
|
||||
|
||||
\\[universal-argument] 3 \\[avy-kil-whole-line] kill three lines
|
||||
starting from the selected line. \\[universal-argument] -3
|
||||
|
||||
\\[avy-kill-whole-line] kill three lines backward including the
|
||||
selected line."
|
||||
(interactive "P")
|
||||
(let ((initial-window (selected-window)))
|
||||
(avy-with avy-kill-whole-line
|
||||
(let* ((start (avy--line)))
|
||||
(if (not (numberp start))
|
||||
(user-error "Fail to select the line to kill")
|
||||
(save-excursion (goto-char start)
|
||||
(kill-whole-line arg)))))
|
||||
(select-window initial-window)))
|
||||
|
||||
;;;###autoload
|
||||
(defun avy-kill-ring-save-whole-line (arg)
|
||||
"Select line and Save the whole selected line as if killed, but don’t kill it.
|
||||
|
||||
This command is similar to `avy-kill-whole-line', except that it
|
||||
saves the line(s) as if killed, but does not kill it(them)."
|
||||
(interactive "P")
|
||||
(let ((initial-window (selected-window)))
|
||||
(avy-with avy-kill-ring-save-whole-line
|
||||
(let* ((start (avy--line)))
|
||||
(if (not (numberp start))
|
||||
(user-error "Fail to select the line to kill")
|
||||
(save-excursion
|
||||
(let ((kill-read-only-ok t)
|
||||
(buffer-read-only t))
|
||||
(goto-char start)
|
||||
(kill-whole-line arg))))))
|
||||
(select-window initial-window)))
|
||||
|
||||
;;;###autoload
|
||||
(defun avy-setup-default ()
|
||||
"Setup the default shortcuts."
|
||||
|
Loading…
x
Reference in New Issue
Block a user