;;; input.el --- Configure behaviour of input devices. -*- lexical-binding: t; -*- ;; Time-stamp: <2020-01-28T10:24:44+0100> ;;; Commentary: ;; * Setup mouse & keyboard behaviour. ;; * Setup basic keybindings. ;;; Code: (use-package emacs :ensure nil :custom (mouse-wheel-scroll-amount '(1 ((shift) . 1))) ; Scroll 1 line at a time. ;; Paste text where the cursor is, not where the mouse is. (mouse-yank-at-point t) ;; Reduce scroll lag significantly. (auto-window-vscroll nil) :config (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. ;; (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) (line-beginning-position 2))))) ) (use-package bind-key :functions (my/delete-word my/backward-delete-word) :config (defun my/delete-word (arg) "Delete characters forward until encountering the end of a word. With argument, do this 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 argument, do this that many times." (interactive "p") (my/delete-word (- arg))) (bind-keys ;; Reduce whitespace around cursor to 0 or 1, according to context. ("C-S-" . fixup-whitespace) ;; Scroll without moving the cursor. ("M-" . scroll-up-line) ("M-" . scroll-down-line) ;; Delete words without storing them in the kill buffer. ("C-" . my/delete-word) ("C-" . my/backward-delete-word) ("C-q" . delete-frame) ;; Insert next character with control characters. Like C-V in the shell. ("C-S-v" . quoted-insert) ) ) ; Multiple cursors. (use-package multiple-cursors :init (global-unset-key (kbd "M-")) :bind ("C-x M-m" . mc/edit-lines) ("M-" . mc/add-cursor-on-click) ) ;; Edit multiple regions in the same way simultaneously. (use-package iedit :bind ("C-;" . iedit-mode) ) ;; Display available keybindings. (use-package which-key :config (which-key-mode) ) ;; Navigate between windows with alt+arrows. (use-package windmove :config (windmove-default-keybindings '(meta shift)) :bind ; Needed for Emacs-over-SSH. 🤷 ([(meta shift left)] . windmove-left) ([(meta shift right)] . windmove-right) ([(meta shift up)] . windmove-up) ([(meta shift down)] . windmove-down) ) (provide 'basics/input) ;;; input.el ends here