selected.el
provides the selected-minor-mode
for Emacs. When selected-minor-mode
is active, the keybindings in selected-keymap
will be enabled when the region is active. This is useful for commands that operates on the region, which you only want bound to a key when the region is active. selected.el
also provides selected-global-mode
, if you want selected-minor-mode
in every buffer.
selected-keymap
has no default bindings. Bind it yourself:
(require 'selected)
(define-key selected-keymap (kbd "q") #'selected-off)
(define-key selected-keymap (kbd "u") #'upcase-region)
(define-key selected-keymap (kbd "d") #'downcase-region)
(define-key selected-keymap (kbd "w") #'count-words-region)
(define-key selected-keymap (kbd "m") #'apply-macro-to-region-lines)
It is cleaner with use-package:
(use-package selected
:ensure t
:commands selected-minor-mode
:bind (:map selected-keymap
("q" . selected-off)
("u" . upcase-region)
("d" . downcase-region)
("w" . count-words-region)
("m" . apply-macro-to-region-lines)))
Then activate it with M-x selected-minor-mode
. It can be a good idea to add selected-minor-mode
to the hooks of the major-modes where you want it activated. selected-off
is a function which deactivates the keybindings until the next time the region becomes active. This is useful when you want to execute a command on the region, but then disable selected-minor-mode
in favour of other commands like multiple-cursors.
You might have other minor-modes which conflict with selected
, such as worf, lispy or ryo. In that case you can use (setq selected-minor-mode-override t)
.
You may want some keybindings to operate on the region, but only if you’re in a certain major-mode. This is possible if you create a keymap named selected-<major-mode>-map
(for instance selected-org-mode-map
) and add the mode-specific bindings there. Here’s an example, using use-package
:
(use-package selected
:ensure t
:commands selected-minor-mode
:init
(setq selected-org-mode-map (make-sparse-keymap))
:bind (:map selected-keymap
("q" . selected-off)
("u" . upcase-region)
("d" . downcase-region)
("w" . count-words-region)
("m" . apply-macro-to-region-lines)
:map selected-org-mode-map
("t" . org-table-convert-region)))
If the major-mode specific keymap isn’t found, derived from modes will be searched. For instance if you open an org-mode
file, don’t have selected-org-mode-map
but do have a selected-text-mode-map
then selected-text-mode-map
will be used.
selected.el
is on MELPA, so the easiest way is to install it from there using M-x package-install
. MELPA needs to be in your package-archives
:
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t)
If you add (selected-global-mode)
to your init-file, or if you add selected-minor-mode
to a hook, please do so towards the end of your init-file. This is in order to prioritize the bindings in selected-keymap
over other minor-modes.
Here’s some functions and packages that are useful with selected.el
:
- expand-region
- multiple-cursors
- move-text
- randomize-region
- highlight
- google-this or lookup-word-on-internet
Feel free to suggest additions to this list!
- 1.01
- Added
selected-global-mode
. - 1.02
- Derived modes now searches up the hierarchy for
selected-<major-mode>-map
.