This commit is contained in:
SqrtMinusOne 2024-01-31 10:30:25 +00:00
parent 711f6c23e8
commit b91f322e61
4 changed files with 32 additions and 11 deletions

View file

@ -366,6 +366,10 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/run-in-background</span> (<span style="color:#19177c">command</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">command-parts</span> (<span style="color:#19177c">split-string</span> <span style="color:#19177c">command</span> <span style="color:#ba2121">&#34;[ ]+&#34;</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#00f">apply</span> <span style="color:#00f">#&#39;call-process</span> <span style="color:#666">`</span>(<span style="color:#666">,</span>(<span style="color:#00f">car</span> <span style="color:#19177c">command-parts</span>) <span style="color:#800">nil</span> <span style="color:#666">0</span> <span style="color:#800">nil</span> <span style="color:#666">,@</span>(<span style="color:#00f">cdr</span> <span style="color:#19177c">command-parts</span>)))))
</span></span></code></pre></div><h4 id="close-buffer-and-its-windows">Close buffer and its windows</h4>
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/quit-window-and-buffer</span> ()
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">quit-window</span> <span style="color:#800">t</span>))
</span></span></code></pre></div><h3 id="prevent-emacs-from-closing">Prevent Emacs from closing</h3>
<p>This adds a confirmation to avoid accidental Emacs closing.</p>
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">setq</span> <span style="color:#19177c">confirm-kill-emacs</span> <span style="color:#19177c">&#39;y-or-n-p</span>)
@ -3751,10 +3755,6 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">find-file</span>
</span></span><span style="display:flex;"><span> (<span style="color:#00f">concat</span> <span style="color:#19177c">org-directory</span> <span style="color:#ba2121">&#34;/&#34;</span>
</span></span><span style="display:flex;"><span> (<span style="color:#00f">completing-read</span> <span style="color:#ba2121">&#34;Org file: &#34;</span> <span style="color:#19177c">files</span>)))))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(<span style="color:#008000">with-eval-after-load</span> <span style="color:#19177c">&#39;org</span>
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my-leader-def</span>
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;o o&#34;</span> <span style="color:#19177c">&#39;my/org-file-open</span>))
</span></span></code></pre></div><h3 id="literate-programing">Literate programing</h3>
<h4 id="python-and-jupyter">Python &amp; Jupyter</h4>
<p>Use jupyter kernels for Org Mode.</p>
@ -4956,7 +4956,8 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
</span></span><span style="display:flex;"><span> <span style="color:#008000">:infix</span> <span style="color:#ba2121">&#34;o&#34;</span>
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;&#34;</span> <span style="color:#666">&#39;</span>(<span style="color:#008000">:which-key</span> <span style="color:#ba2121">&#34;org-mode&#34;</span>)
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;c&#34;</span> <span style="color:#19177c">&#39;org-capture</span>
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;a&#34;</span> <span style="color:#19177c">&#39;org-agenda</span>)
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;a&#34;</span> <span style="color:#19177c">&#39;org-agenda</span>
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;o&#34;</span> <span style="color:#00f">#&#39;</span><span style="color:#19177c">my/org-file-open</span>)
</span></span></code></pre></div><p>Local keybindings</p>
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">with-eval-after-load</span> <span style="color:#19177c">&#39;org</span>
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my-leader-def</span>
@ -5989,7 +5990,8 @@ Didn&rsquo;t work out as I expected, so I&rsquo;ve made <code>org-journal-tags</
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;M-r&#34;</span> <span style="color:#00f">#&#39;</span><span style="color:#19177c">wdired-change-to-wdired-mode</span>
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;&lt;left&gt;&#34;</span> <span style="color:#00f">#&#39;</span><span style="color:#19177c">dired-up-directory</span>
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;&lt;right&gt;&#34;</span> <span style="color:#00f">#&#39;</span><span style="color:#19177c">dired-find-file</span>
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;M-&lt;return&gt;&#34;</span> <span style="color:#00f">#&#39;</span><span style="color:#19177c">dired-open-xdg</span>))
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;M-&lt;return&gt;&#34;</span> <span style="color:#00f">#&#39;</span><span style="color:#19177c">dired-open-xdg</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">dired-async-mode</span>))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/dired-home</span> ()
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;Open dired at $HOME&#34;</span>
@ -9528,8 +9530,21 @@ Some other optimization settings:</p>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>my/index-get-symlink-commands
</span></span></code></pre></div><h5 id="run-all-commands">Run all commands</h5>
<p>And put that all together.</p>
<p>First, as I want to check what&rsquo;s going to be executed, let&rsquo;s make a function to display commands in a separate buffer. Making it <code>sh-mode</code> is enough for now.</p>
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defvar-local</span> <span style="color:#19177c">my/index-commands</span> <span style="color:#800">nil</span>
<p>First, as I want to check what&rsquo;s going to be executed, let&rsquo;s make a function to display commands in a separate buffer.</p>
<p>The mode definition is as follows:</p>
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defvar</span> <span style="color:#19177c">my/index-commands-mode-map</span>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">keymap</span> (<span style="color:#00f">make-sparse-keymap</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#00f">define-key</span> <span style="color:#19177c">keymap</span> (<span style="color:#19177c">kbd</span> <span style="color:#ba2121">&#34;C-c C-c&#34;</span>) <span style="color:#00f">#&#39;</span><span style="color:#19177c">my/index-commands-exec</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#00f">define-key</span> <span style="color:#19177c">keymap</span> (<span style="color:#19177c">kbd</span> <span style="color:#ba2121">&#34;q&#34;</span>) <span style="color:#00f">#&#39;</span><span style="color:#19177c">my/quit-window-and-buffer</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#00f">fboundp</span> <span style="color:#19177c">&#39;evil-define-key*</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">evil-define-key*</span> <span style="color:#19177c">&#39;normal</span> <span style="color:#19177c">keymap</span>
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;q&#34;</span> <span style="color:#00f">#&#39;</span><span style="color:#19177c">my/quit-window-and-buffer</span>))
</span></span><span style="display:flex;"><span> <span style="color:#19177c">keymap</span>)
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;Keymap for </span><span style="color:#19177c">`biome-api-error-mode&#39;</span><span style="color:#ba2121">.&#34;</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(<span style="color:#008000">define-derived-mode</span> <span style="color:#19177c">my/index-commands-mode</span> <span style="color:#19177c">sh-mode</span> <span style="color:#ba2121">&#34;Index Commands&#34;</span>
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;A mode to display index commands.&#34;</span>)
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defvar-local</span> <span style="color:#19177c">my/index-commands</span> <span style="color:#800">nil</span>
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;Commands to be executed by </span><span style="color:#19177c">`my/index-commands-exec&#39;</span><span style="color:#ba2121">&#34;</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/index--commands-display</span> (<span style="color:#19177c">commands</span>)
@ -9545,7 +9560,7 @@ Some other optimization settings:</p>
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">seq-group-by</span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">c</span>) (<span style="color:#00f">nth</span> <span style="color:#666">1</span> <span style="color:#19177c">c</span>))
</span></span><span style="display:flex;"><span> <span style="color:#19177c">commands</span>))))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">with-current-buffer</span> <span style="color:#19177c">buffer</span>
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">sh-mode</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/index-commands-mode</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">inhibit-read-only</span> <span style="color:#800">t</span>)
</span></span><span style="display:flex;"><span> <span style="color:#19177c">commands-sequence</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#00f">erase-buffer</span>)
@ -9562,7 +9577,7 @@ Some other optimization settings:</p>
</span></span></code></pre></div><p>In order to execute these commands, <a href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Compilation.html">compile</a> with <code>bash -x</code> on a temporary file is quite sufficient.</p>
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/index-commands-exec</span> ()
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> (<span style="color:#00f">eq</span> <span style="color:#19177c">major-mode</span> <span style="color:#19177c">&#39;sh-mode</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> (<span style="color:#00f">eq</span> <span style="color:#19177c">major-mode</span> <span style="color:#19177c">&#39;my/index-commands-mode</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#d2413a;font-weight:bold">user-error</span> <span style="color:#ba2121">&#34;Not shell mode&#34;</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">filename</span> (<span style="color:#19177c">make-temp-file</span> <span style="color:#ba2121">&#34;index-commands-&#34;</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#00f">write-region</span> (<span style="color:#00f">point-min</span>) (<span style="color:#00f">point-max</span>) <span style="color:#19177c">filename</span>)
@ -9762,12 +9777,17 @@ Some other optimization settings:</p>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">default-directory</span> <span style="color:#19177c">dir</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">projectile-find-file</span>)))))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/index-open-file</span> ()
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">find-file</span> <span style="color:#19177c">my/index-file</span>))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(<span style="color:#19177c">my-leader-def</span>
</span></span><span style="display:flex;"><span> <span style="color:#008000">:infix</span> <span style="color:#ba2121">&#34;i&#34;</span>
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;&#34;</span> <span style="color:#666">&#39;</span>(<span style="color:#008000">:wk</span> <span style="color:#ba2121">&#34;index&#34;</span>)
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;i&#34;</span> <span style="color:#00f">#&#39;</span><span style="color:#19177c">my/index-nav</span>
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;s&#34;</span> <span style="color:#00f">#&#39;</span><span style="color:#19177c">my/index-commands-sync</span>
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;p&#34;</span> <span style="color:#00f">#&#39;</span><span style="color:#19177c">my/index-nav-with-select-file</span>)
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;p&#34;</span> <span style="color:#00f">#&#39;</span><span style="color:#19177c">my/index-nav-with-select-file</span>
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;f&#34;</span> <span style="color:#00f">#&#39;</span><span style="color:#19177c">my/index-open-file</span>)
</span></span></code></pre></div><h4 id="export-tree">Export tree</h4>
<p>I also need the tree to use in my <code>sqrt-data</code>, so let&rsquo;s export this to JSON.</p>
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/index-export</span> (<span style="color:#19177c">file</span>)
@ -10392,6 +10412,7 @@ I&rsquo;ve seen a couple of cases where people would swap their username and ema
<li><a href="#helper-functions">Helper functions</a>
<ul>
<li><a href="#run-command-in-background">Run command in background</a></li>
<li><a href="#close-buffer-and-its-windows">Close buffer and its windows</a></li>
</ul>
</li>
<li><a href="#prevent-emacs-from-closing">Prevent Emacs from closing</a></li>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 68 KiB