Provide commands easy-kill
and easy-mark
to let users kill or
mark things easily.
Comments, bug reports and patches are highly appreciated.
easy-kill
is a drop-in replacement for kill-ring-save
. To Use:
(global-set-key [remap kill-ring-save] 'easy-kill)
After this configuration, M-w
serves as both a command and a
prefix key for other commands. M-w
alone saves in the order of
active region, url, email and finally current line (See
easy-kill-try-things
). As a prefix key:
M-w w
: save word at pointM-w s
: save sexp at pointM-w l
: save list at point (enclosing sexp)M-w d
: save defun at pointM-w D
: save current defun nameM-w f
: save file at pointM-w b
: savebuffer-file-name
ordefault-directory
.-
changes the kill to the directory name,+
to full name and0
to basename.
The following keys modify the selection:
@
: append selection to previous kill and exit. For example,M-w d @
will append current function to last kill.C-w
: kill selection and exit+
,-
and1..9
: expand/shrink selection0
shrink the selection to the initial size i.e. before any expansionSPC
: cycle through things ineasy-kill-alist
C-SPC
: turn selection into an active regionC-g
: abort?
: help
For example, M-w w
saves current word, repeat w
to expand the
kill to include the next word. 5
to include the next 5 words etc.
The other commands also follow this pattern.
+
/-
does expanding/shrinking according to the thing selected.
So for word
the expansion is word-wise, for line
line-wise,
for list
or sexp
, list-wise.
list-wise
expanding/shrinking work well in lispy modes (elisp,
Common Lisp, Scheme, Clojure etc.), smie-based modes (Prolog, SML,
Modula2, Shell, Ruby, Octave, CSS, SQL etc.), Org mode, Nxml mode and
Js2 mode.
To copy the enclosing list in lispy modes, I used to do a lot of
C-M-u C-M-SPC M-w
. Now the key sequence is replaced by M-w l
(save list at point) as shown in screenshot:
easy-mark
is similar to easy-kill
but marks the region
immediately. It can be a handy replacement for mark-sexp
allowing
+
/-
to do list-wise expanding/shrinking and marks the whole
sexp even when in the middle of one.
(global-set-key [remap mark-sexp] 'easy-mark)
easy-kill
is part of GNU ELPA and is also available on MELPA.
New things can be defined by following package thingatpt.el
's
convention, or by defining new functions named like
easy-kill-on-THING-NAME
. See easy-kill-on-buffer-file-name
and
easy-kill-on-url
for examples.
- [BREAKING] Emacs >= 25 required.
- [BREAKING] Remove deprecated format for
easy-kill-alist
. - Include
uuid
ineasy-kill-try-things
andeasy-mark-try-things
.
- New user variable
easy-kill-unhighlight-key
. - key
D
selects current defun name. - Key
SPC
selects things ineasy-kill-alist
in turn.
- Key
?
ineasy-kill
oreasy-mark
prints help info. M-w l
can select the enclosing string.easy-mark
learns exchanging point & mark.- Key
0
now sets the selection to its initial size before any expansion. M-w l
,M-w s
and list-wise+/-
now work in Org mode.
-
can move pass the first selection.+
/-
onsexp
no longer changething
tolist
- Mouse over the selection now shows description.
- Echo js2 node name.
- Append now uses sensible separator (customisable via
easy-kill-alist
). - The format of easy-kill-alist has changed. The old
(CHAR . THING)
format is still supported but may be removed in future.