From 586030d9702a03121e57a4326124b248732342e5 Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Fri, 2 Jan 2015 21:04:36 +0100 Subject: Add old posts --- quick-normal-state.post | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 quick-normal-state.post (limited to 'quick-normal-state.post') diff --git a/quick-normal-state.post b/quick-normal-state.post new file mode 100644 index 0000000..6dfe67a --- /dev/null +++ b/quick-normal-state.post @@ -0,0 +1,47 @@ +;;;;; +title: Quick normal-state +tags: emacs, evil +date: 2014-07-11 00:47 +format: md +;;;;; + +I realized today that most of the time (over 90%) of the time I save a +file I feel I have finished typing something. Typing this out makes it +sound very obvious, actually. One other thing I noticed is that I +still forget to return to normal-state after I'm done editing. Emacs +being hackable and not being content with twisting my brain to suit my +editor but rather twisting my editor to suit me, I thought I might +automate it a little. + +My first idea was to have evil automatically revert to normal-state +whenever I save and also whenever I switch buffers. I haven't found a +hook that runs when switching buffers, so I'll need to brush up on my +advising skills and have it run just before switching, perhaps even +when `execute-extended-command` or `smex` run, so any explicit minibuffer +action returns to normal state. + +For now it's just the save file, and only for buffers that aren't in +the emacs-state as default list: + +``` emacs-lisp +(defun modes-starting-in (state) + "Get a list of modes whose default state is STATE." + (symbol-value (evil-state-property state :modes))) + +(defun maybe-switch-to-normal-state () + "Switch the current buffer to normal state. + +Only do this when the mode is not in emacs state by +default." + (unless (memql major-mode (modes-starting-in 'emacs)) + (evil-normal-state))) + +(with-eval-after-load 'evil + (add-hook 'after-save-hook + #'maybe-switch-to-normal-state)) +``` + +I personally only use either normal-state or emacs-state as default +states when a mode loads, if you want to check more you'll have to add +some more calls to `memq` and change `emacs` to, for example `insert` or +`visual` or whichever you need. -- cgit v1.2.3-54-g00ecf