.emacs.d/init.d/basics/input.el

99 lines
4.0 KiB
EmacsLisp
Raw Normal View History

2019-10-14 17:38:14 +02:00
;;; input.el --- Configure behaviour of input devices. -*- lexical-binding: t; -*-
;;; Commentary:
;; * Setup mouse & keyboard behaviour.
;; * Setup basic keybindings.
;;; Code:
(require 'basics/package-management)
2019-10-14 17:38:14 +02:00
(use-package emacs
:straight (:type built-in)
2020-03-31 03:47:58 +02:00
:demand t
2020-03-10 14:33:47 +01:00
:custom ((mouse-wheel-scroll-amount '(1 ((shift) . 1))) ; Scroll 1 line.
;; Paste text where the cursor is, not where the mouse is.
(mouse-yank-at-point t)
;; Reduce scroll lag. <https://emacs.stackexchange.com/a/28746>
(auto-window-vscroll nil))
:config (progn
(delete-selection-mode t) ; Delete selection when you start to write.
;; kill-region (cut) and kill-ring-save (copy) act on the current
;; line if no text is visually selected.
;; <https://www.emacswiki.org/emacs/WholeLineOrRegion>
(put 'kill-ring-save 'interactive-form
'(interactive
(if (use-region-p)
(list (region-beginning) (region-end))
(list (line-beginning-position)
(line-beginning-position 2)))))
(put 'kill-region 'interactive-form
'(interactive
(if (use-region-p)
(list (region-beginning) (region-end))
(list (line-beginning-position)
2020-03-31 03:47:58 +02:00
(line-beginning-position 2)))))
2020-03-10 14:33:47 +01:00
(defun my/delete-word (arg)
"Delete characters forward until encountering the end of a word.
With ARG, do it that many times."
(interactive "p")
(if (use-region-p)
(delete-region (region-beginning) (region-end))
(delete-region (point) (progn (forward-word arg) (point)))))
(defun my/backward-delete-word (arg)
"Delete characters backward until encountering the end of a word.
With ARG, do it that many times."
(interactive "p")
(my/delete-word (- arg)))
;; Enable keybindings.
(put 'set-goal-column 'disabled nil)
(put 'upcase-region 'disabled nil)
(put 'downcase-region 'disabled nil))
2020-03-31 03:47:58 +02:00
:bind (("C-S-<delete>" . fixup-whitespace) ; Reduce whitespace around cursor.
("M-<down>" . scroll-up-line) ; Scroll without moving the cursor.
("M-<up>" . scroll-down-line)
;; Delete words without storing them in the kill buffer.
("C-<delete>" . my/delete-word)
("M-<delete>" . my/delete-word)
2020-03-31 03:47:58 +02:00
("C-<backspace>" . my/backward-delete-word)
("C-DEL" . my/backward-delete-word)
("M-DEL" . my/backward-delete-word)
2020-03-31 03:47:58 +02:00
("C-q" . delete-frame)
;; Insert next character with control characters.
("C-S-v" . quoted-insert)
;; C-x C-f will be replaced with projectile-find-file.
("C-x C-S-f" . find-file)
("C-x F" . find-file))) ; Workaround for terminals.
2019-10-14 17:38:14 +02:00
; Multiple cursors.
(use-package multiple-cursors
2020-03-10 14:33:47 +01:00
:init (global-unset-key (kbd "M-<down-mouse-1>"))
:bind (("C-c m" . mc/edit-lines)
2020-03-10 14:33:47 +01:00
("M-<mouse-1>" . mc/add-cursor-on-click)))
2019-10-14 17:38:14 +02:00
;; Edit multiple regions in the same way simultaneously.
(use-package iedit
:bind (("C-;" . iedit-mode)
("M-;" . iedit-mode)
;; ↓↑ Compatibility with TUI.
(:map iedit-mode-keymap
("M-;" . iedit-mode))))
2019-10-14 17:38:14 +02:00
2019-12-01 11:26:26 +01:00
;; Display available keybindings.
(use-package which-key
:defer 2
:diminish which-key-mode
2020-03-31 16:15:00 +02:00
:defines (which-key-mode)
2020-03-10 14:33:47 +01:00
:config (which-key-mode))
2019-12-01 11:26:26 +01:00
;; Navigate between windows with alt+arrows.
(use-package windmove
2020-03-10 14:33:47 +01:00
:config (windmove-default-keybindings '(meta shift))
:bind (([(meta shift left)] . windmove-left) ; Needed for Emacs-over-SSH. 🤷
([(meta shift right)] . windmove-right)
([(meta shift up)] . windmove-up)
([(meta shift down)] . windmove-down)))
2019-10-14 17:38:14 +02:00
(provide 'basics/input)
;;; input.el ends here