Random stuff, mostly Clojure/Emacs, I expect. https://philjackson.github.io Hydra for evil-mc <p>At least in Doom Emacs the default keybindings for evil-mc are really cumbersome, here’s a Hydra that makes things much easier:</p> <div class="language-elisp highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="p">(</span><span class="nv">defhydra</span> <span class="nv">my-mc-hydra</span> <span class="p">(</span><span class="ss">:color</span> <span class="nv">pink</span> <span class="ss">:hint</span> <span class="no">nil</span> <span class="ss">:pre</span> <span class="p">(</span><span class="nv">evil-mc-pause-cursors</span><span class="p">))</span> <span class="s">" ^Match^ ^Line-wise^ ^Manual^ ^^^^^^---------------------------------------------------- _Z_: match all _J_: make &amp; go down _z_: toggle here _m_: make &amp; next _K_: make &amp; go up _r_: remove last _M_: make &amp; prev ^ ^ _R_: remove all _n_: skip &amp; next ^ ^ _p_: pause/resume _N_: skip &amp; prev Current pattern: %`evil-mc-pattern "</span> <span class="p">(</span><span class="s">"Z"</span> <span class="nf">#'</span><span class="nv">evil-mc-make-all-cursors</span><span class="p">)</span> <span class="p">(</span><span class="s">"m"</span> <span class="nf">#'</span><span class="nv">evil-mc-make-and-goto-next-match</span><span class="p">)</span> <span class="p">(</span><span class="s">"M"</span> <span class="nf">#'</span><span class="nv">evil-mc-make-and-goto-prev-match</span><span class="p">)</span> <span class="p">(</span><span class="s">"n"</span> <span class="nf">#'</span><span class="nv">evil-mc-skip-and-goto-next-match</span><span class="p">)</span> <span class="p">(</span><span class="s">"N"</span> <span class="nf">#'</span><span class="nv">evil-mc-skip-and-goto-prev-match</span><span class="p">)</span> <span class="p">(</span><span class="s">"J"</span> <span class="nf">#'</span><span class="nv">evil-mc-make-cursor-move-next-line</span><span class="p">)</span> <span class="p">(</span><span class="s">"K"</span> <span class="nf">#'</span><span class="nv">evil-mc-make-cursor-move-prev-line</span><span class="p">)</span> <span class="p">(</span><span class="s">"z"</span> <span class="nf">#'</span><span class="nv">+multiple-cursors/evil-mc-toggle-cursor-here</span><span class="p">)</span> <span class="p">(</span><span class="s">"r"</span> <span class="nf">#'</span><span class="nv">+multiple-cursors/evil-mc-undo-cursor</span><span class="p">)</span> <span class="p">(</span><span class="s">"R"</span> <span class="nf">#'</span><span class="nv">evil-mc-undo-all-cursors</span><span class="p">)</span> <span class="p">(</span><span class="s">"p"</span> <span class="nf">#'</span><span class="nv">+multiple-cursors/evil-mc-toggle-cursors</span><span class="p">)</span> <span class="p">(</span><span class="s">"q"</span> <span class="nf">#'</span><span class="nv">evil-mc-resume-cursors</span> <span class="s">"quit"</span> <span class="ss">:color</span> <span class="nv">blue</span><span class="p">)</span> <span class="p">(</span><span class="s">"&lt;escape&gt;"</span> <span class="nf">#'</span><span class="nv">evil-mc-resume-cursors</span> <span class="s">"quit"</span> <span class="ss">:color</span> <span class="nv">blue</span><span class="p">))</span> </code></pre></div></div> <p>Here’s how I map it in Doom:</p> <div class="language-elisp highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="p">(</span><span class="nv">map!</span> <span class="p">(</span><span class="ss">:when</span> <span class="p">(</span><span class="nv">featurep!</span> <span class="ss">:editor</span> <span class="nv">multiple-cursors</span><span class="p">)</span> <span class="ss">:prefix</span> <span class="s">"g"</span> <span class="ss">:nv</span> <span class="s">"z"</span> <span class="nf">#'</span><span class="nv">my-mc-hydra/body</span><span class="p">))</span> </code></pre></div></div> Tue, 16 May 2023 14:42:08 +0100 https://philjackson.github.io//emacs/hydra/doom/2023/05/16/hydra-for-multiple-cursors/ https://philjackson.github.io//emacs/hydra/doom/2023/05/16/hydra-for-multiple-cursors/ Keeping backups of every edited file <p>I recently ran <code class="language-html highlighter-rouge">rm -rf *</code> in my home directory, which apart from being very foolish, reminded me that I have backups of basically every file I’ve edited:</p> <div class="language-elisp highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="p">(</span><span class="k">setq</span> <span class="nv">backup-directory-alist</span> <span class="o">`</span><span class="p">((</span><span class="s">"."</span> <span class="o">.</span> <span class="s">"~/.backups"</span><span class="p">))</span> <span class="nv">backup-by-copying</span> <span class="no">t</span> <span class="nv">delete-old-versions</span> <span class="no">t</span> <span class="nv">kept-new-versions</span> <span class="mi">6</span> <span class="nv">kept-old-versions</span> <span class="mi">2</span> <span class="nv">version-control</span> <span class="no">t</span><span class="p">)</span> </code></pre></div></div> <p>Most of those are self-explanatory, but the long-and-short of it is that I end up with this sort of thing in <code class="language-html highlighter-rouge">~/.backups</code> (for example):</p> <div class="language-html highlighter-rouge"><div class="highlight"><pre class="syntax"><code>-rw-r--r-- 1 phil phil 593 Nov 7 2020 '!home!phil!.xinitrc.~1~' -rw-r--r-- 1 phil phil 593 Nov 8 2020 '!home!phil!.xinitrc.~2~' -rw-r--r-- 1 phil phil 593 Nov 8 2020 '!home!phil!.xinitrc.~3~' -rw-r--r-- 1 phil phil 593 Nov 8 2020 '!home!phil!.xinitrc.~4~' -rw-r--r-- 1 phil phil 603 Nov 8 2020 '!home!phil!.xinitrc.~5~' -rw-r--r-- 1 phil phil 603 Jan 7 2021 '!home!phil!.xinitrc.~6~' -rw-r--r-- 1 phil phil 785 Oct 6 11:03 '!home!phil!.xinitrc.~7~' </code></pre></div></div> <p>The backups rotate and actually don’t take up much space at all. Just 20Mb for a few years in my case.</p> Mon, 31 Jan 2022 15:28:13 +0000 https://philjackson.github.io//emacs/backups/2022/01/31/keeping-backups-of-every-edited-file/ https://philjackson.github.io//emacs/backups/2022/01/31/keeping-backups-of-every-edited-file/ Delta for Git and Magit <p>I was just introduced to a <a href="https://github.com/dandavison/delta">tool called Delta</a> which is a pager you can use with Git to give you Github-esque diffs.</p> <p><img src="/assets/img/magit-delta.png" alt="Magit and Delta" /></p> <p>Tiny bit of elisp to configure:</p> <div class="language-elisp highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="p">(</span><span class="nb">use-package</span> <span class="nv">magit-delta</span> <span class="ss">:ensure</span> <span class="no">t</span> <span class="ss">:hook</span> <span class="p">(</span><span class="nv">magit-mode</span> <span class="o">.</span> <span class="nv">magit-delta-mode</span><span class="p">))</span> </code></pre></div></div> <p>Delta itself is incredibly configurable and from the command line has some nice features such as side-by-side diffs.</p> Thu, 09 Sep 2021 14:58:52 +0100 https://philjackson.github.io//magit/git/emacs/delta/2021/09/09/delta-for-git-and-magit/ https://philjackson.github.io//magit/git/emacs/delta/2021/09/09/delta-for-git-and-magit/ Save all mu4e attachments <p>To save all attachments from an mu4e email to a particular directory, you can use this <a href="https://gist.github.com/philjackson/aecfab1706f05079aec7000e328fd183">handy snippet</a> for older versions of the client. For more modern mu4e versions, use the <a href="https://github.com/sje30/emacs/blob/master/mu4e-view-save-all-attachments.el">elisp by @sj30</a>.</p> Mon, 30 Aug 2021 20:14:34 +0100 https://philjackson.github.io//emacs/mu4e/email/2021/08/30/save-all-mu4e-attachments/ https://philjackson.github.io//emacs/mu4e/email/2021/08/30/save-all-mu4e-attachments/ Export an environment variable to Emacs <p>Handy function to export environment variables to Emacs from the command line:</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="k">function </span>export-emacs <span class="o">{</span> <span class="k">if</span> <span class="o">[</span> <span class="s2">"</span><span class="si">$(</span>emacsclient <span class="nt">-e</span> t<span class="si">)</span><span class="s2">"</span> <span class="o">!=</span> <span class="s1">'t'</span> <span class="o">]</span><span class="p">;</span> <span class="k">then return </span>1 <span class="k">fi for </span>name <span class="k">in</span> <span class="s2">"</span><span class="k">${</span><span class="p">@</span><span class="k">}</span><span class="s2">"</span><span class="p">;</span> <span class="k">do </span><span class="nv">value</span><span class="o">=</span><span class="si">$(</span><span class="nb">eval echo</span> <span class="se">\"\$</span><span class="o">{</span><span class="k">${</span><span class="nv">name</span><span class="k">}</span>//<span class="se">\\\"</span>/<span class="se">\\\\</span>042<span class="o">}</span><span class="se">\"</span><span class="si">)</span> emacsclient <span class="nt">-e</span> <span class="s2">"(setenv </span><span class="se">\"</span><span class="k">${</span><span class="nv">name</span><span class="k">}</span><span class="se">\"</span><span class="s2"> </span><span class="se">\"</span><span class="k">${</span><span class="nv">value</span><span class="k">}</span><span class="se">\"</span><span class="s2">)"</span> <span class="o">&gt;</span>/dev/null <span class="k">done</span> <span class="o">}</span> </code></pre></div></div> <p>Use it like this:</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="nb">export </span><span class="nv">BLAH</span><span class="o">=</span><span class="s2">"Some value"</span> export-emacs BLAH </code></pre></div></div> <p>And in emacs:</p> <div class="language-elisp highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="p">(</span><span class="nv">getenv</span> <span class="s">"BLAH"</span><span class="p">)</span> <span class="c1">; =&gt; "Some value"</span> </code></pre></div></div> <p><em>update</em>: A very kind soul <a href="https://github.com/philjackson/philjackson.github.io/issues/1">updated the function</a> to handle quoting properly. Thanks, <a href="https://github.com/pcrama">@pcrama</a>!</p> Mon, 26 Jul 2021 16:04:50 +0100 https://philjackson.github.io//emacs/shell/2021/07/26/export-an-environment-variable-to-emacs/ https://philjackson.github.io//emacs/shell/2021/07/26/export-an-environment-variable-to-emacs/ Using yadm via magit <p><a href="https://yadm.io/">Yadm’s</a> an amazing dotfile manager that’s basically a thin wrapper around git and a bare repo. With it being a bare repo, you’ll not be able to manage it directly with Magit so here’s a really <a href="https://www.reddit.com/r/emacs/comments/gjukb3/yadm_magit/">smart tip I found</a> that will let you access it via Tramp:</p> <div class="language-elisp highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="p">(</span><span class="nb">use-package</span> <span class="nv">tramp</span> <span class="ss">:config</span> <span class="p">(</span><span class="nv">add-to-list</span> <span class="ss">'tramp-methods</span> <span class="o">'</span><span class="p">(</span><span class="s">"yadm"</span> <span class="p">(</span><span class="nv">tramp-login-program</span> <span class="s">"yadm"</span><span class="p">)</span> <span class="p">(</span><span class="nv">tramp-login-args</span> <span class="p">((</span><span class="s">"enter"</span><span class="p">)))</span> <span class="p">(</span><span class="nv">tramp-login-env</span> <span class="p">((</span><span class="s">"SHELL"</span><span class="p">)</span> <span class="p">(</span><span class="s">"/bin/sh"</span><span class="p">)))</span> <span class="p">(</span><span class="nv">tramp-remote-shell</span> <span class="s">"/bin/sh"</span><span class="p">)</span> <span class="p">(</span><span class="nv">tramp-remote-shell-args</span> <span class="p">(</span><span class="s">"-c"</span><span class="p">)))))</span> <span class="p">(</span><span class="nb">defun</span> <span class="nv">yadm</span> <span class="p">()</span> <span class="p">(</span><span class="nv">interactive</span><span class="p">)</span> <span class="p">(</span><span class="nv">magit-status</span> <span class="s">"/yadm::"</span><span class="p">))</span> </code></pre></div></div> Sun, 25 Jul 2021 18:22:13 +0100 https://philjackson.github.io//yadm/emacs/magit/2021/07/25/using-yadm-via-magit/ https://philjackson.github.io//yadm/emacs/magit/2021/07/25/using-yadm-via-magit/ Load a random emacs theme on startup <p>To load a random emacs theme on startup (I restart daily) you can use the following snippet. Just add your theme as a new function to <code class="language-html highlighter-rouge">funs</code>. If you don’t restart often, you could add a timer to change themes while you’re going.</p> <p>My current favourite themes included.</p> <div class="language-elisp highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="p">(</span><span class="nb">use-package</span> <span class="nv">doom-themes</span> <span class="ss">:ensure</span> <span class="no">t</span> <span class="ss">:init</span> <span class="p">(</span><span class="k">setq</span> <span class="nv">doom-themes-enable-bold</span> <span class="no">t</span> <span class="nv">doom-themes-enable-italic</span> <span class="no">t</span><span class="p">)</span> <span class="ss">:config</span> <span class="c1">;; list of themes (just called as functions) which also contain</span> <span class="c1">;; theme specific config</span> <span class="p">(</span><span class="k">let*</span> <span class="p">((</span><span class="nv">funs</span> <span class="o">'</span><span class="p">((</span><span class="k">lambda</span> <span class="p">()</span> <span class="p">(</span><span class="nv">load-theme</span> <span class="ss">'doom-outrun-electric</span><span class="p">))</span> <span class="p">(</span><span class="k">lambda</span> <span class="p">()</span> <span class="p">(</span><span class="nv">load-theme</span> <span class="ss">'doom-palenight</span><span class="p">))</span> <span class="p">(</span><span class="k">lambda</span> <span class="p">()</span> <span class="p">(</span><span class="nv">load-theme</span> <span class="ss">'doom-challenger-deep</span> <span class="no">t</span><span class="p">)</span> <span class="p">(</span><span class="nv">set-face-attribute</span> <span class="ss">'markdown-code-face</span> <span class="no">nil</span> <span class="ss">:background</span> <span class="s">"#32333d"</span><span class="p">)</span> <span class="p">(</span><span class="nv">set-face-attribute</span> <span class="ss">'font-lock-comment-face</span> <span class="no">nil</span> <span class="ss">:foreground</span> <span class="s">"#999"</span><span class="p">))</span> <span class="p">(</span><span class="k">lambda</span> <span class="p">()</span> <span class="p">(</span><span class="nv">load-theme</span> <span class="ss">'doom-dracula</span> <span class="no">t</span><span class="p">)</span> <span class="p">(</span><span class="nv">set-face-attribute</span> <span class="ss">'ivy-minibuffer-match-face-1</span> <span class="no">nil</span> <span class="ss">:foreground</span> <span class="s">"pink"</span><span class="p">))))</span> <span class="p">(</span><span class="nv">rand</span> <span class="p">(</span><span class="nb">random</span> <span class="p">(</span><span class="nb">length</span> <span class="nv">funs</span><span class="p">))))</span> <span class="p">(</span><span class="nb">funcall</span> <span class="p">(</span><span class="nb">nth</span> <span class="nv">rand</span> <span class="nv">funs</span><span class="p">)))</span> <span class="c1">;; any global theme config goes here</span> <span class="p">(</span><span class="nv">set-face-attribute</span> <span class="ss">'show-paren-match</span> <span class="no">nil</span> <span class="ss">:foreground</span> <span class="s">"#111"</span> <span class="ss">:background</span> <span class="s">"orange"</span><span class="p">)</span> <span class="p">(</span><span class="nv">doom-themes-org-config</span><span class="p">))</span> </code></pre></div></div> Sun, 11 Jul 2021 21:16:34 +0100 https://philjackson.github.io//emacs/themes/doom/2021/07/11/load-a-random-emacs-theme-on-startup/ https://philjackson.github.io//emacs/themes/doom/2021/07/11/load-a-random-emacs-theme-on-startup/ Start evil substitution on selection <p>Here’s a little evil operator that will fill in the first part of an evil/ex substitution with the region / visual / object. This allows you to replace objects quickly without having to type out the ex command in full.</p> <p>If I’ve missed something like this that’s built-in, let me know.</p> <div class="language-elisp highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="p">(</span><span class="nv">evil-define-operator</span> <span class="nv">start-ex-sub-on-region</span> <span class="p">(</span><span class="nv">beg</span> <span class="nv">end</span><span class="p">)</span> <span class="p">(</span><span class="k">let</span> <span class="p">((</span><span class="nv">region</span> <span class="p">(</span><span class="nv">buffer-substring</span> <span class="nv">beg</span> <span class="nv">end</span><span class="p">)))</span> <span class="p">(</span><span class="nv">evil-ex</span> <span class="p">(</span><span class="nv">concat</span> <span class="s">"%s/"</span> <span class="p">(</span><span class="nv">replace-regexp-in-string</span> <span class="s">"\/"</span> <span class="s">"\\\\/"</span> <span class="p">(</span><span class="nv">regexp-quote</span> <span class="nv">region</span><span class="p">))</span> <span class="s">"/"</span><span class="p">))))</span> </code></pre></div></div> <p>I bind this globally to <code class="language-html highlighter-rouge">",s"</code> with:</p> <div class="language-elisp highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="p">(</span><span class="nv">evil-global-set-key</span> <span class="ss">'normal</span> <span class="p">(</span><span class="nv">kbd</span> <span class="s">",s"</span><span class="p">)</span> <span class="ss">'start-ex-sub-on-region</span><span class="p">)</span> </code></pre></div></div> Sun, 11 Jul 2021 11:23:27 +0100 https://philjackson.github.io//evil/emacs/2021/07/11/start-evil-substitution-on-selection/ https://philjackson.github.io//evil/emacs/2021/07/11/start-evil-substitution-on-selection/ Search specific extensions with counsel-projectile-rg <p>If you’re in a monorepo searching through stuff can be a bit chaotic. Here’s a way of narrowing down to specific file extensions with <code class="language-html highlighter-rouge">counsel-projectile-rg</code>:</p> <div class="language-elisp highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="p">(</span><span class="nb">defun</span> <span class="nv">search-specific-glob</span> <span class="p">()</span> <span class="p">(</span><span class="nv">interactive</span><span class="p">)</span> <span class="p">(</span><span class="k">let</span> <span class="p">((</span><span class="nv">glob</span> <span class="p">(</span><span class="nv">ivy-completing-read</span> <span class="s">"Glob?: "</span> <span class="o">'</span><span class="p">(</span><span class="s">"*.cljs"</span> <span class="s">"*.clj"</span> <span class="s">"*.md"</span> <span class="s">"*.styl"</span> <span class="s">"*.css"</span><span class="p">))))</span> <span class="p">(</span><span class="nv">counsel-projectile-rg</span> <span class="p">(</span><span class="nv">concat</span> <span class="s">"--glob "</span> <span class="nv">glob</span><span class="p">))))</span> </code></pre></div></div> <p>First it’ll list the extensions with Ivy, then lets you input a search term as normal.</p> Fri, 25 Jun 2021 22:31:02 +0100 https://philjackson.github.io//emacs/search/rg/2021/06/25/search-specific-extensions-with-counsel-projectile-rg/ https://philjackson.github.io//emacs/search/rg/2021/06/25/search-specific-extensions-with-counsel-projectile-rg/ Using the CIDER debugger in Evil <p>When using <a href="https://github.com/emacs-evil/evil">evil</a> and <a href="https://github.com/clojure-emacs/cider">CIDER</a> together, you might find that rebinding the keys required to control the debugger is a pain. Luckily, you don’t actually have to, you can just enter insert mode instead:</p> <div class="language-elisp highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="p">(</span><span class="nb">defun</span> <span class="nv">my-cider-debug-toggle-insert-state</span> <span class="p">()</span> <span class="p">(</span><span class="k">if</span> <span class="nv">cider--debug-mode</span> <span class="c1">;; Checks if you're entering the debugger</span> <span class="p">(</span><span class="nv">evil-insert-state</span><span class="p">)</span> <span class="c1">;; If so, turn on evil-insert-state</span> <span class="p">(</span><span class="nv">evil-normal-state</span><span class="p">)))</span> <span class="c1">;; Otherwise, turn on normal-state</span> <span class="p">(</span><span class="nv">add-hook</span> <span class="ss">'cider--debug-mode-hook</span> <span class="ss">'my-cider-debug-toggle-insert-state</span><span class="p">)</span> </code></pre></div></div> <p>Borrowed from <a href="https://emacs.stackexchange.com/questions/20804">here.</a></p> Sun, 06 Jun 2021 17:00:40 +0100 https://philjackson.github.io//emacs/evil/cider/debugging/2021/06/06/using-the-cider-debugger-in-evil/ https://philjackson.github.io//emacs/evil/cider/debugging/2021/06/06/using-the-cider-debugger-in-evil/ Widescreen emacs and vertical splits <p>On a widescreen monitor, especially the really wide ones, it’s nice to have only vertical splits. This snippet will give bias to vertical splits:</p> <div class="language-elisp highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="p">(</span><span class="nb">defun</span> <span class="nv">my-split-window-sensibly</span> <span class="p">(</span><span class="k">&amp;optional</span> <span class="nv">window</span><span class="p">)</span> <span class="s">"replacement `split-window-sensibly' function which prefers vertical splits"</span> <span class="p">(</span><span class="nv">interactive</span><span class="p">)</span> <span class="p">(</span><span class="k">let</span> <span class="p">((</span><span class="nv">window</span> <span class="p">(</span><span class="nb">or</span> <span class="nv">window</span> <span class="p">(</span><span class="nv">selected-window</span><span class="p">))))</span> <span class="p">(</span><span class="nb">or</span> <span class="p">(</span><span class="nb">and</span> <span class="p">(</span><span class="nv">window-splittable-p</span> <span class="nv">window</span> <span class="no">t</span><span class="p">)</span> <span class="p">(</span><span class="nv">with-selected-window</span> <span class="nv">window</span> <span class="p">(</span><span class="nv">split-window-right</span><span class="p">)))</span> <span class="p">(</span><span class="nb">and</span> <span class="p">(</span><span class="nv">window-splittable-p</span> <span class="nv">window</span><span class="p">)</span> <span class="p">(</span><span class="nv">with-selected-window</span> <span class="nv">window</span> <span class="p">(</span><span class="nv">split-window-below</span><span class="p">))))))</span> <span class="p">(</span><span class="k">setq</span> <span class="nv">split-window-preferred-function</span> <span class="nf">#'</span><span class="nv">my-split-window-sensibly</span><span class="p">)</span> </code></pre></div></div> Sun, 06 Jun 2021 13:14:51 +0100 https://philjackson.github.io//emacs/widescreen/2021/06/06/wide-screen-emacs/ https://philjackson.github.io//emacs/widescreen/2021/06/06/wide-screen-emacs/ Having Smartparens commands work with Evil-mc <p><a href="https://hungyi.net/posts/how-to-evil-mc-smartparens/">As described here</a>, when using <a href="https://github.com/gabesoft/evil-mc">evil-mc</a>, it’s very frustrating when a <a href="https://github.com/Fuco1/smartparens">Smartparens</a> command works on only the first of the multiple cursors. Here’s how to fix that:</p> <div class="language-elisp highlighter-rouge"><div class="highlight"><pre class="syntax"><code><span class="p">(</span><span class="nb">dolist</span> <span class="p">(</span><span class="nv">cmd</span> <span class="o">'</span><span class="p">(</span><span class="nv">sp-up-sexp</span> <span class="nv">sp-copy-sexp</span> <span class="nv">sp-down-sexp</span> <span class="nv">sp-join-sexp</span> <span class="nv">sp-kill-sexp</span> <span class="nv">sp-next-sexp</span> <span class="nv">sp-split-sexp</span> <span class="nv">sp-wrap-curly</span> <span class="nv">sp-wrap-round</span> <span class="nv">sp-raise-sexp</span> <span class="nv">sp-clone-sexp</span> <span class="nv">sp-wrap-square</span> <span class="nv">sp-splice-sexp</span> <span class="nv">sp-end-of-sexp</span> <span class="nv">sp-forward-sexp</span> <span class="nv">sp-backward-sexp</span> <span class="nv">sp-convolute-sexp</span> <span class="nv">sp-transpose-sexp</span> <span class="nv">sp-kill-whole-line</span> <span class="nv">sp-beginning-of-sexp</span> <span class="nv">sp-forward-barf-sexp</span> <span class="nv">sp-forward-slurp-sexp</span> <span class="nv">sp-backward-barf-sexp</span> <span class="nv">sp-backward-slurp-sexp</span> <span class="nv">sp-splice-sexp-killing-forward</span> <span class="nv">sp-splice-sexp-killing-backward</span><span class="p">))</span> <span class="p">(</span><span class="nv">add-to-list</span> <span class="ss">'evil-mc-custom-known-commands</span> <span class="o">`</span><span class="p">(</span><span class="o">,</span><span class="nv">cmd</span> <span class="p">(</span><span class="ss">:default</span> <span class="o">.</span> <span class="nv">evil-mc-execute-call</span><span class="p">))))</span> </code></pre></div></div> Sat, 05 Jun 2021 00:38:51 +0100 https://philjackson.github.io//elisp/evil-mc/smartparens/emacs/2021/06/05/smartparens-and-evil-mc/ https://philjackson.github.io//elisp/evil-mc/smartparens/emacs/2021/06/05/smartparens-and-evil-mc/