mirror of
https://github.com/SqrtMinusOne/sqrtminusone.github.io.git
synced 2025-12-10 15:53:03 +03:00
deploy: a85d4d9550
This commit is contained in:
parent
e82fbf0245
commit
ad6999ef65
30 changed files with 289 additions and 234 deletions
|
|
@ -390,6 +390,7 @@
|
|||
</ul>
|
||||
<p>As of now, these are polybar, feh and, shepherd:</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/exwm-run-polybar</span> ()
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">call-process</span> <span style="color:#ba2121">"~/bin/polybar.sh"</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/exwm-set-wallpaper</span> ()
|
||||
|
|
|
|||
|
|
@ -258,19 +258,16 @@ 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">eval-when-compile</span> (<span style="color:#008000">require</span> <span style="color:#19177c">'use-package</span>))
|
||||
</span></span></code></pre></div><h3 id="variables-and-environment">Variables & environment</h3>
|
||||
<p>This section is about optioning the Emacs config.</p>
|
||||
<p>The following is true if Emacs is meant to be used with TRAMP over slow ssh. Take a look at the <a href="#tramp">TRAMP</a> section for more details.</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">my/slow-ssh</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">or</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">string=</span> (<span style="color:#19177c">getenv</span> <span style="color:#ba2121">"IS_TRAMP"</span>) <span style="color:#ba2121">"true"</span>)))
|
||||
</span></span></code></pre></div><p>The following is true is Emacs is run on a remote server where I don’t need stuff like my org workflow</p>
|
||||
<p>The following is true is Emacs is run on a remote server where I don’t need stuff like my org workflow</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">my/remote-server</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">or</span> (<span style="color:#19177c">string=</span> (<span style="color:#19177c">getenv</span> <span style="color:#ba2121">"IS_REMOTE"</span>) <span style="color:#ba2121">"true"</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">string=</span> (<span style="color:#00f">system-name</span>) <span style="color:#ba2121">"dev-digital"</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">string=</span> (<span style="color:#00f">system-name</span>) <span style="color:#ba2121">"viridian"</span>)))
|
||||
</span></span></code></pre></div><p>And the following is true if Emacs is run from termux on Android.</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">my/is-termux</span> (<span style="color:#19177c">string-match-p</span> (<span style="color:#008000">rx</span> (<span style="color:#00f">*</span> <span style="color:#19177c">nonl</span>) <span style="color:#ba2121">"com.termux"</span> (<span style="color:#00f">*</span> <span style="color:#19177c">nonl</span>)) (<span style="color:#19177c">getenv</span> <span style="color:#ba2121">"HOME"</span>)))
|
||||
</span></span></code></pre></div><p>Also, I sometimes need to know if a program is running inside Emacs (say, inside a terminal emulator). To do that, I set the following environment variable:</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:#19177c">setenv</span> <span style="color:#ba2121">"IS_EMACS"</span> <span style="color:#ba2121">"true"</span>)
|
||||
</span></span></code></pre></div><p>Also, I sometimes need to know if a program is running inside Emacs (say, inside a terminal emulator). And sometimes I need to know if I’m running a nested Emacs session. To do that, I set the following environment variable:</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">my/nested-emacs</span> (<span style="color:#008000">and</span> (<span style="color:#19177c">getenv</span> <span style="color:#ba2121">"IS_EMACS"</span>) <span style="color:#800">t</span>))
|
||||
</span></span><span style="display:flex;"><span>(<span style="color:#19177c">setenv</span> <span style="color:#ba2121">"IS_EMACS"</span> <span style="color:#ba2121">"true"</span>)
|
||||
</span></span></code></pre></div><p>Finally, I want to have a minimal Emacs config for debugging purposes. This has just straight.el, use-packages, and evil.</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:#19177c"><<minimal>></span>
|
||||
</span></span></code></pre></div><p>To launch Emacs with this config, run</p>
|
||||
|
|
@ -697,7 +694,7 @@ 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;font-weight:bold">fi</span>
|
||||
</span></span></code></pre></div><p>This script is being run from the <a href="/configs/desktop/#i3wm">i3 configuration</a>.</p>
|
||||
<p>For this to work, we need to make sure that Emacs starts a server, so here is an expression to do just that:</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">unless</span> <span style="color:#19177c">my/remote-server</span>
|
||||
<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">unless</span> (<span style="color:#008000">or</span> <span style="color:#19177c">my/remote-server</span> <span style="color:#19177c">my/nested-emacs</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">add-hook</span> <span style="color:#19177c">'after-init-hook</span> <span style="color:#00f">#'</span><span style="color:#19177c">server-start</span>))
|
||||
</span></span></code></pre></div><p>And here is a simple macro to do the Emacs -> i3 part:</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">defmacro</span> <span style="color:#19177c">i3-msg</span> (<span style="color:#008000">&rest</span> <span style="color:#19177c">args</span>)
|
||||
|
|
@ -970,7 +967,6 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
|
|||
<p>I used to have <a href="https://github.com/Alexander-Miller/treemacs">Treemacs</a> here, but in the end decided that dired with <a href="https://github.com/jojojames/dired-sidebar">dired-sidebar</a> does a better job. Dired has its separate section in “Applications”.</p>
|
||||
<h4 id="projectile">Projectile</h4>
|
||||
<p><a href="https://github.com/bbatsov/projectile">Projectile</a> gives a bunch of useful functions for managing projects, like finding files within a project, fuzzy-find, replace, etc.</p>
|
||||
<p><code>defadvice</code> is meant to speed projectile up with TRAMP a bit.</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">use-package</span> <span style="color:#19177c">projectile</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#800">t</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:config</span>
|
||||
|
|
@ -1013,7 +1009,6 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
|
|||
</span></span></code></pre></div><p><a href="https://github.com/emacsorphanage/git-gutter">git-gutter</a> is shows git changes for each line (added/changed/deleted lines).</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">use-package</span> <span style="color:#19177c">git-gutter</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#800">t</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:if</span> (<span style="color:#19177c">not</span> <span style="color:#19177c">my/slow-ssh</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:config</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">global-git-gutter-mode</span> <span style="color:#666">+1</span>))
|
||||
</span></span></code></pre></div><p><a href="https://github.com/emacsmirror/git-timemachine">git-timemachine</a> allows visiting previous versions of a file.</p>
|
||||
|
|
@ -1137,7 +1132,6 @@ 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">use-package</span> <span style="color:#19177c">editorconfig</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#800">t</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:config</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> <span style="color:#19177c">my/slow-ssh</span> (<span style="color:#19177c">editorconfig-mode</span> <span style="color:#666">1</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">add-to-list</span> <span style="color:#19177c">'editorconfig-indentation-alist</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>(<span style="color:#19177c">emmet-mode</span> <span style="color:#19177c">emmet-indentation</span>)))
|
||||
</span></span></code></pre></div><h4 id="editing-files">Editing files</h4>
|
||||
|
|
@ -2079,7 +2073,7 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
|
|||
<h5 id="setup">Setup</h5>
|
||||
<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">use-package</span> <span style="color:#19177c">lsp-mode</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#800">t</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:if</span> (<span style="color:#19177c">not</span> (<span style="color:#008000">or</span> <span style="color:#19177c">my/slow-ssh</span> <span style="color:#19177c">my/is-termux</span> <span style="color:#19177c">my/remote-server</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:if</span> (<span style="color:#19177c">not</span> (<span style="color:#008000">or</span> <span style="color:#19177c">my/is-termux</span> <span style="color:#19177c">my/remote-server</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:hook</span> (
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">typescript-mode</span> <span style="color:#666">.</span> <span style="color:#19177c">lsp</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">js-mode</span> <span style="color:#666">.</span> <span style="color:#19177c">lsp</span>)
|
||||
|
|
@ -3134,7 +3128,7 @@ 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">setq</span> <span style="color:#19177c">reverso-languages</span> <span style="color:#666">'</span>(<span style="color:#19177c">russian</span> <span style="color:#19177c">english</span> <span style="color:#19177c">german</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">reverso-history-mode</span>))
|
||||
</span></span></code></pre></div><h3 id="lisp">Lisp</h3>
|
||||
<figure><img src="/ox-hugo/lisp_cycles.png"/>
|
||||
<figure><img src="/ox-hugo/lisp_cycles.png">
|
||||
</figure>
|
||||
|
||||
<h4 id="meta-lisp">Meta Lisp</h4>
|
||||
|
|
@ -3255,7 +3249,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:#008000">use-package</span> <span style="color:#19177c">lsp-pyright</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#800">t</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:defer</span> <span style="color:#800">t</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:if</span> (<span style="color:#19177c">not</span> <span style="color:#19177c">my/slow-ssh</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:hook</span> (<span style="color:#19177c">python-mode</span> <span style="color:#666">.</span> (<span style="color:#008000">lambda</span> ()
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">require</span> <span style="color:#19177c">'lsp-pyright</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq-local</span> <span style="color:#19177c">lsp-pyright-python-executable-cmd</span> (<span style="color:#19177c">my/get-pipenv-python</span>))
|
||||
|
|
@ -3269,7 +3262,6 @@ 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">use-package</span> <span style="color:#19177c">pipenv</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#800">t</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:hook</span> (<span style="color:#19177c">python-mode</span> <span style="color:#666">.</span> <span style="color:#19177c">pipenv-mode</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:if</span> (<span style="color:#19177c">not</span> <span style="color:#19177c">my/slow-ssh</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:init</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">pipenv-projectile-after-switch-function</span>
|
||||
|
|
@ -3464,10 +3456,9 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
|
|||
<h4 id="json">JSON</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">use-package</span> <span style="color:#19177c">json-mode</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#800">t</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:mode</span> <span style="color:#ba2121">"\\.json\\'"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:config</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">add-hook</span> <span style="color:#19177c">'json-mode</span> <span style="color:#00f">#'</span><span style="color:#19177c">smartparens-mode</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">add-hook</span> <span style="color:#19177c">'json-mode</span> <span style="color:#00f">#'</span><span style="color:#19177c">hs-minor-mode</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">add-hook</span> <span style="color:#19177c">'json-mode-hook</span> <span style="color:#00f">#'</span><span style="color:#19177c">smartparens-mode</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">add-hook</span> <span style="color:#19177c">'json-mode-hook</span> <span style="color:#00f">#'</span><span style="color:#19177c">hs-minor-mode</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/set-smartparens-indent</span> <span style="color:#19177c">'json-mode</span>))
|
||||
</span></span></code></pre></div><h4 id="csv">CSV</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">use-package</span> <span style="color:#19177c">csv-mode</span>
|
||||
|
|
@ -3590,7 +3581,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:#19177c">add-hook</span> <span style="color:#19177c">'gnuplot-mode-hook</span> <span style="color:#00f">#'</span><span style="color:#19177c">smartparens-mode</span>))
|
||||
</span></span></code></pre></div><h3 id="x509">x509</h3>
|
||||
<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">use-package</span> <span style="color:#19177c">x509-mode</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#800">t</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> (<span style="color:#008000">:host</span> <span style="color:#19177c">github</span> <span style="color:#008000">:repo</span> <span style="color:#ba2121">"jobbflykt/x509-mode"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:build</span> (<span style="color:#008000">:not</span> <span style="color:#19177c">native-compile</span>)))
|
||||
</span></span></code></pre></div><h3 id="java">Java</h3>
|
||||
<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">use-package</span> <span style="color:#19177c">lsp-java</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#800">t</span>
|
||||
|
|
@ -5449,6 +5441,27 @@ Didn’t work out as I expected, so I’ve made <code>org-journal-tags</
|
|||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">add-hook</span> <span style="color:#19177c">'after-save-hook</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/org-roam--count-overlay-make-all</span> <span style="color:#800">nil</span> <span style="color:#800">t</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/org-roam--count-overlay-remove-all</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">remove-hook</span> <span style="color:#19177c">'after-save-hook</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/org-roam--count-overlay-remove-all</span> <span style="color:#800">t</span>)))
|
||||
</span></span></code></pre></div><h5 id="extract-all-links-from-page">Extract all links from page</h5>
|
||||
<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/org-roam-extract-links</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">let</span> ((<span style="color:#19177c">buffer</span> (<span style="color:#19177c">generate-new-buffer</span> <span style="color:#ba2121">"*roam-links*"</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">elems</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">org-element-map</span> (<span style="color:#19177c">org-element-parse-buffer</span>) <span style="color:#19177c">'link</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">elem</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#00f">string-equal</span> (<span style="color:#19177c">org-element-property</span> <span style="color:#008000">:type</span> <span style="color:#19177c">elem</span>) <span style="color:#ba2121">"id"</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">push</span> <span style="color:#19177c">elem</span> <span style="color:#19177c">elems</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:#008000">cl-loop</span> <span style="color:#19177c">for</span> <span style="color:#19177c">elem</span> <span style="color:#19177c">in</span> <span style="color:#19177c">elems</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">for</span> <span style="color:#19177c">file-name</span> <span style="color:#00f">=</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">file-name-nondirectory</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">caar</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">org-roam-db-query</span>
|
||||
</span></span><span style="display:flex;"><span> [<span style="color:#008000">:select</span> [<span style="color:#19177c">file</span>]
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:from</span> <span style="color:#19177c">nodes</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:where</span> (<span style="color:#00f">=</span> <span style="color:#19177c">id</span> <span style="color:#19177c">$s1</span>)]
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">org-element-property</span> <span style="color:#008000">:path</span> <span style="color:#19177c">elem</span>))))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">do</span> (<span style="color:#00f">insert</span> <span style="color:#19177c">file-name</span> <span style="color:#ba2121">"\n"</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">switch-to-buffer</span> <span style="color:#19177c">buffer</span>)))
|
||||
</span></span></code></pre></div><h5 id="org-roam-ui">Org Roam UI</h5>
|
||||
<p>A browser frontend to visualize the Roam database as a graph.</p>
|
||||
<p>Actually, I don’t find this quite as useful as structure nodes, because over time my graph grew somewhat convoluted. But it looks impressive.</p>
|
||||
|
|
@ -5861,6 +5874,7 @@ Didn’t work out as I expected, so I’ve made <code>org-journal-tags</
|
|||
<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">use-package</span> <span style="color:#19177c">ox-ipynb</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> (<span style="color:#008000">:host</span> <span style="color:#19177c">github</span> <span style="color:#008000">:repo</span> <span style="color:#ba2121">"jkitchin/ox-ipynb"</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:if</span> (<span style="color:#19177c">not</span> <span style="color:#19177c">my/remote-server</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:disabled</span> <span style="color:#800">t</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:after</span> <span style="color:#19177c">ox</span>)
|
||||
</span></span></code></pre></div><h4 id="html-export">Html export</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">use-package</span> <span style="color:#19177c">htmlize</span>
|
||||
|
|
@ -6154,7 +6168,8 @@ Didn’t work out as I expected, so I’ve made <code>org-journal-tags</
|
|||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">dired</span> (<span style="color:#00f">expand-file-name</span> <span style="color:#ba2121">"~"</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:#ba2121">"ad"</span> <span style="color:#00f">#'</span><span style="color:#19177c">dired</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"ad"</span> <span style="color:#00f">#'</span><span style="color:#19177c">dired</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"aD"</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/dired-bookmark-open</span>)
|
||||
</span></span></code></pre></div><h4 id="addons-1">Addons</h4>
|
||||
<p>I used to use <a href="https://www.emacswiki.org/emacs/DiredPlus">dired+</a>, which provides a lot of extensions for dired functionality, but it also creates some new problems, so I opt out of it. Fortunately, the one feature I want from this package - adding more colors to dired buffers - is available as a separate package.</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">use-package</span> <span style="color:#19177c">diredfl</span>
|
||||
|
|
@ -6236,7 +6251,7 @@ Didn’t work out as I expected, so I’ve made <code>org-journal-tags</
|
|||
</table>
|
||||
<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">use-package</span> <span style="color:#19177c">all-the-icons-dired</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#800">t</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:if</span> (<span style="color:#19177c">not</span> (<span style="color:#008000">or</span> <span style="color:#19177c">my/slow-ssh</span> (<span style="color:#19177c">not</span> (<span style="color:#19177c">display-graphic-p</span>))))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:if</span> (<span style="color:#19177c">display-graphic-p</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:hook</span> (<span style="color:#19177c">dired-mode</span> <span style="color:#666">.</span> (<span style="color:#008000">lambda</span> ()
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> (<span style="color:#19177c">string-match-p</span> <span style="color:#ba2121">"/gnu/store"</span> <span style="color:#19177c">default-directory</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">all-the-icons-dired-mode</span>))))
|
||||
|
|
@ -6263,7 +6278,6 @@ Didn’t work out as I expected, so I’ve made <code>org-journal-tags</
|
|||
<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">use-package</span> <span style="color:#19177c">dired-git-info</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#800">t</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:after</span> <span style="color:#19177c">dired</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:if</span> (<span style="color:#19177c">not</span> <span style="color:#19177c">my/slow-ssh</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:config</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">general-define-key</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:keymap</span> <span style="color:#19177c">'dired-mode-map</span>
|
||||
|
|
@ -6312,68 +6326,12 @@ Didn’t work out as I expected, so I’ve made <code>org-journal-tags</
|
|||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:states</span> <span style="color:#666">'</span>(<span style="color:#19177c">normal</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:keymaps</span> <span style="color:#19177c">'dired-mode-map</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"H"</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/dired-goto-project-root</span>))
|
||||
</span></span></code></pre></div><h4 id="tramp-1">TRAMP</h4>
|
||||
<p>TRAMP is a package that provides remote editing capacities. It is particularly useful for remote server management.</p>
|
||||
<p>Unfortunately, many Emacs packages don’t exactly moderate their rate of filesystem operations, and on TRAMP over network each operation adds additional overhead, so… it can get pretty slow. To debug these issues, set the following variable to 6:</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">tramp-verbose</span> <span style="color:#666">6</span>)
|
||||
</span></span></code></pre></div><p>I used to launch a separate Emacs instance for TRAMP, which had some of these packages disabled via environment variables, my <a href="https://www.gnu.org/software/emacs/manual/html_node/elisp/Advising-Functions.html">advice</a>-fu got better since then.</p>
|
||||
<p>So, to determine if the buffer is in TRAMP:</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/tramp-p</span> (<span style="color:#008000">&optional</span> <span style="color:#19177c">buffer</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">file-remote-p</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">buffer-local-value</span> <span style="color:#19177c">'default-directory</span> (<span style="color:#008000">or</span> <span style="color:#19177c">buffer</span> (<span style="color:#00f">current-buffer</span>)))))
|
||||
</span></span></code></pre></div><p>And advice to disable a function for TRAMP-related buffers:</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/tramp-void-if-tramp</span> (<span style="color:#19177c">fun</span> <span style="color:#008000">&rest</span> <span style="color:#19177c">args</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> (<span style="color:#19177c">my/tramp-p</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">apply</span> <span style="color:#19177c">fun</span> <span style="color:#19177c">args</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/tramp-void-if-file-is-tramp</span> (<span style="color:#19177c">fun</span> <span style="color:#008000">&optional</span> <span style="color:#19177c">dir</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> (<span style="color:#19177c">file-remote-p</span> (<span style="color:#008000">or</span> <span style="color:#19177c">dir</span> <span style="color:#19177c">default-directory</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">funcall</span> <span style="color:#19177c">fun</span> <span style="color:#19177c">dir</span>)))
|
||||
</span></span></code></pre></div><p><code>editorconfig</code>. This lovely package looks for <code>.editorconfig</code> in the file tree.</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/editorconfig--advice-find-file-noselect-around</span> (<span style="color:#19177c">f</span> <span style="color:#19177c">f1</span> <span style="color:#19177c">filename</span> <span style="color:#008000">&rest</span> <span style="color:#19177c">args</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> (<span style="color:#19177c">file-remote-p</span> <span style="color:#19177c">filename</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">apply</span> <span style="color:#19177c">f1</span> <span style="color:#19177c">filename</span> <span style="color:#19177c">args</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">apply</span> <span style="color:#19177c">f</span> <span style="color:#19177c">f1</span> <span style="color:#19177c">filename</span> <span style="color:#19177c">args</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">'editorconfig</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#00f">#'</span><span style="color:#19177c">editorconfig-apply</span> <span style="color:#008000">:around</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/tramp-void-if-tramp</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#00f">#'</span><span style="color:#19177c">editorconfig--disabled-for-filename</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:around</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/tramp-void-if-file-is-tramp</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#00f">#'</span><span style="color:#19177c">editorconfig--advice-find-file-noselect</span> <span style="color:#008000">:around</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#00f">#'</span><span style="color:#19177c">my/editorconfig--advice-find-file-noselect-around</span>))
|
||||
</span></span></code></pre></div><p><code>all-the-icons-dired</code> runs <code>test</code> on every file in the directory.</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">'all-the-icons-dired</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#00f">#'</span><span style="color:#19177c">all-the-icons-dired-mode</span> <span style="color:#008000">:around</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/tramp-void-if-tramp</span>))
|
||||
</span></span></code></pre></div><p><code>projectile</code> looks for <code>.git</code>, <code>.svn</code>, etc. to find the project root. Maybe I’ll make a more economic implementation if I need one.</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">'projectile</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#00f">#'</span><span style="color:#19177c">projectile-project-root</span> <span style="color:#008000">:around</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/tramp-void-if-file-is-tramp</span>))
|
||||
</span></span></code></pre></div><p><code>lsp</code> does a whole lot of stuff. It probably can be used with TRAMP on faster connections, but not in my case.</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">'lsp</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#00f">#'</span><span style="color:#19177c">lsp</span> <span style="color:#008000">:around</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/tramp-void-if-tramp</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#00f">#'</span><span style="color:#19177c">lsp-deferred</span> <span style="color:#008000">:around</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/tramp-void-if-tramp</span>))
|
||||
</span></span></code></pre></div><p><code>git-gutter</code> runs <code>git</code> a lot of times.</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">'git-gutter</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#00f">#'</span><span style="color:#19177c">git-gutter--turn-on</span> <span style="color:#008000">:around</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/tramp-void-if-tramp</span>))
|
||||
</span></span></code></pre></div><p>At any rate, it’s usable, although not perfect.
|
||||
Some other optimization settings:</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">remote-file-name-inhibit-cache</span> <span style="color:#800">nil</span>)
|
||||
</span></span><span style="display:flex;"><span>(<span style="color:#008000">setq</span> <span style="color:#19177c">vc-ignore-dir-regexp</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">format</span> <span style="color:#ba2121">"\\(%s\\)\\|\\(%s\\)"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">vc-ignore-dir-regexp</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">tramp-file-name-regexp</span>))
|
||||
</span></span></code></pre></div><p>Set the default shell to <code>bin/bash</code> for TRAMP or on a remote server.</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">when</span> (<span style="color:#008000">or</span> <span style="color:#19177c">my/remote-server</span> <span style="color:#19177c">my/slow-ssh</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">explicit-shell-file-name</span> <span style="color:#ba2121">"/bin/bash"</span>))
|
||||
</span></span></code></pre></div><p>Also, here is a hack to make TRAMP find <code>ls</code> on Guix:</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">'tramp</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">tramp-remote-path</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">append</span> <span style="color:#19177c">tramp-remote-path</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>(<span style="color:#19177c">tramp-own-remote-path</span>))))
|
||||
</span></span></code></pre></div><h4 id="bookmarks">Bookmarks</h4>
|
||||
<p>A simple bookmark list for Dired, mainly to use with TRAMP. I may look into a proper bookmarking system later.</p>
|
||||
<p>Bookmarks are listed in the <a href=".emacs.d/private.el">private.el</a> file, which has an expression like this:</p>
|
||||
<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>(setq my/dired-bookmarks
|
||||
</span></span><span style="display:flex;"><span> '(("sudo" . "/sudo::/")))
|
||||
</span></span><span style="display:flex;"><span> '(("HOME" . "~")
|
||||
</span></span><span style="display:flex;"><span> ("sudo" . "/sudo::/")))
|
||||
</span></span></code></pre></div><p>The file itself is encrypted with yadm.</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/dired-bookmark-open</span> ()
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span>)
|
||||
|
|
@ -6508,6 +6466,77 @@ Some other optimization settings:</p>
|
|||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:keymaps</span> <span style="color:#19177c">'notmuch-show-mode-map</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:states</span> <span style="color:#19177c">'normal</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">". s"</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/notmuch-save-to-dired</span>))
|
||||
</span></span></code></pre></div><h3 id="tramp">TRAMP</h3>
|
||||
<p>TRAMP is a package that provides remote editing capacities. It is particularly useful for remote server management.</p>
|
||||
<h4 id="general-settings-4">General settings</h4>
|
||||
<p>Some settings I copy-pasted from somewhere:</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">remote-file-name-inhibit-cache</span> <span style="color:#800">nil</span>)
|
||||
</span></span><span style="display:flex;"><span>(<span style="color:#008000">setq</span> <span style="color:#19177c">vc-ignore-dir-regexp</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">format</span> <span style="color:#ba2121">"\\(%s\\)\\|\\(%s\\)"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">vc-ignore-dir-regexp</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">tramp-file-name-regexp</span>))
|
||||
</span></span></code></pre></div><p>Also, a hack to make TRAMP find <code>ls</code> on Guix:</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">'tramp</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">tramp-remote-path</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">append</span> <span style="color:#19177c">tramp-remote-path</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>(<span style="color:#19177c">tramp-own-remote-path</span>))))
|
||||
</span></span></code></pre></div><p>Set the default shell to <code>bin/bash</code> for TRAMP or on a remote server.</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">when</span> (<span style="color:#008000">or</span> <span style="color:#19177c">my/remote-server</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">explicit-shell-file-name</span> <span style="color:#ba2121">"/bin/bash"</span>))
|
||||
</span></span></code></pre></div><h4 id="package-optimizations">Package optimizations</h4>
|
||||
<p>Unfortunately, many Emacs packages don’t exactly moderate their rate of filesystem operations, and on TRAMP over network each operation adds additional overhead, so… it can get pretty slow. To debug these issues, set the following variable to 6:</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">tramp-verbose</span> <span style="color:#666">0</span>)
|
||||
</span></span></code></pre></div><p>I used to launch a separate Emacs instance for TRAMP to disable these packages with an environment variable, but my <a href="https://www.gnu.org/software/emacs/manual/html_node/elisp/Advising-Functions.html">advice</a>-fu got better since then.</p>
|
||||
<p>So, to determine if the buffer is in TRAMP:</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/tramp-p</span> (<span style="color:#008000">&optional</span> <span style="color:#19177c">buffer</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">file-remote-p</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">buffer-local-value</span> <span style="color:#19177c">'default-directory</span> (<span style="color:#008000">or</span> <span style="color:#19177c">buffer</span> (<span style="color:#00f">current-buffer</span>)))))
|
||||
</span></span></code></pre></div><p>And advice to disable a function for TRAMP-related buffers:</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/tramp-void-if-tramp</span> (<span style="color:#19177c">fun</span> <span style="color:#008000">&rest</span> <span style="color:#19177c">args</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> (<span style="color:#19177c">my/tramp-p</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">apply</span> <span style="color:#19177c">fun</span> <span style="color:#19177c">args</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/tramp-void-if-file-is-tramp</span> (<span style="color:#19177c">fun</span> <span style="color:#008000">&optional</span> <span style="color:#19177c">dir</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> (<span style="color:#19177c">file-remote-p</span> (<span style="color:#008000">or</span> <span style="color:#19177c">dir</span> <span style="color:#19177c">default-directory</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">funcall</span> <span style="color:#19177c">fun</span> <span style="color:#19177c">dir</span>)))
|
||||
</span></span></code></pre></div><p><code>editorconfig</code>. This lovely package looks for <code>.editorconfig</code> in the file tree.</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/editorconfig--advice-find-file-noselect-around</span> (<span style="color:#19177c">f</span> <span style="color:#19177c">f1</span> <span style="color:#19177c">filename</span> <span style="color:#008000">&rest</span> <span style="color:#19177c">args</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> (<span style="color:#19177c">file-remote-p</span> <span style="color:#19177c">filename</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">apply</span> <span style="color:#19177c">f1</span> <span style="color:#19177c">filename</span> <span style="color:#19177c">args</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">apply</span> <span style="color:#19177c">f</span> <span style="color:#19177c">f1</span> <span style="color:#19177c">filename</span> <span style="color:#19177c">args</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">'editorconfig</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#00f">#'</span><span style="color:#19177c">editorconfig-apply</span> <span style="color:#008000">:around</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/tramp-void-if-tramp</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#00f">#'</span><span style="color:#19177c">editorconfig--disabled-for-filename</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:around</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/tramp-void-if-file-is-tramp</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#00f">#'</span><span style="color:#19177c">editorconfig--advice-find-file-noselect</span> <span style="color:#008000">:around</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#00f">#'</span><span style="color:#19177c">my/editorconfig--advice-find-file-noselect-around</span>))
|
||||
</span></span></code></pre></div><p><code>all-the-icons-dired</code> runs <code>test</code> on every file in the directory.</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">'all-the-icons-dired</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#00f">#'</span><span style="color:#19177c">all-the-icons-dired-mode</span> <span style="color:#008000">:around</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/tramp-void-if-tramp</span>))
|
||||
</span></span></code></pre></div><p><code>projectile</code> looks for <code>.git</code>, <code>.svn</code>, etc. to find the project root. Maybe I’ll make a more economic implementation if I need one.</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">'projectile</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#00f">#'</span><span style="color:#19177c">projectile-project-root</span> <span style="color:#008000">:around</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/tramp-void-if-file-is-tramp</span>))
|
||||
</span></span></code></pre></div><p><code>lsp</code> does a whole lot of stuff. It probably can be used with TRAMP on faster connections, but not in my case.</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">'lsp-mode</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#00f">#'</span><span style="color:#19177c">lsp</span> <span style="color:#008000">:around</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/tramp-void-if-tramp</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#00f">#'</span><span style="color:#19177c">lsp-deferred</span> <span style="color:#008000">:around</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/tramp-void-if-tramp</span>))
|
||||
</span></span></code></pre></div><p><code>git-gutter</code> runs <code>git</code> a lot of times.</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">'git-gutter</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#00f">#'</span><span style="color:#19177c">git-gutter--turn-on</span> <span style="color:#008000">:around</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/tramp-void-if-tramp</span>))
|
||||
</span></span></code></pre></div><p><code>dired-git-info</code> is runs <code>git</code> a lot of times.</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">'dired-git-info</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#00f">#'</span><span style="color:#19177c">dired-git-info-mode</span> <span style="color:#008000">:around</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/tramp-void-if-tramp</span>))
|
||||
</span></span></code></pre></div><p><code>pipenv</code>. Don’t remember what was the deal with this one.</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">'pipenv</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#00f">#'</span><span style="color:#19177c">pipenv-mode</span> <span style="color:#008000">:around</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/tramp-void-if-tramp</span>))
|
||||
</span></span></code></pre></div><p><code>eshell</code> works pretty well, but <code>company-mode</code> gets pretty slow.</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/shell-maybe-configure-for-tramp</span> ()
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#19177c">my/tramp-p</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">company-idle-delay</span> <span style="color:#800">nil</span>)))
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>(<span style="color:#19177c">add-hook</span> <span style="color:#19177c">'eshell-mode-hook</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/shell-maybe-configure-for-tramp</span>)
|
||||
</span></span><span style="display:flex;"><span>(<span style="color:#19177c">add-hook</span> <span style="color:#19177c">'shell-mode-hook</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/shell-maybe-configure-for-tramp</span>)
|
||||
</span></span></code></pre></div><h3 id="shells-terminals">Shells / Terminals</h3>
|
||||
<h4 id="vterm">vterm</h4>
|
||||
<p><a href="https://github.com/akermu/emacs-libvterm">vterm</a> is a terminal emulator for Emacs.</p>
|
||||
|
|
@ -6943,12 +6972,6 @@ Some other optimization settings:</p>
|
|||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">if-let</span> ((<span style="color:#19177c">root</span> (<span style="color:#19177c">projectile-project-root</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">eshell/cd</span> <span style="color:#19177c">root</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">message</span> <span style="color:#ba2121">"Not in a project"</span>)))
|
||||
</span></span></code></pre></div><h5 id="tramp-compatiblity">TRAMP compatiblity</h5>
|
||||
<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/eshell-maybe-configure-for-tramp</span> ()
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#19177c">file-remote-p</span> <span style="color:#19177c">default-directory</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq-local</span> <span style="color:#19177c">company-idle-delay</span> <span style="color:#800">nil</span>)))
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>(<span style="color:#19177c">add-hook</span> <span style="color:#19177c">'eshell-mode-hook</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/eshell-maybe-configure-for-tramp</span>)
|
||||
</span></span></code></pre></div><h5 id="global-keybindings">Global keybindings</h5>
|
||||
<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:#19177c">general-define-key</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:states</span> <span style="color:#666">'</span>(<span style="color:#19177c">normal</span>)
|
||||
|
|
@ -6960,10 +6983,12 @@ Some other optimization settings:</p>
|
|||
<p>Still, I’ll probably switch to <code>eat</code> if <code>eshell</code> doesn’t work for me.</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">use-package</span> <span style="color:#19177c">eat</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> (<span style="color:#008000">:files</span> (<span style="color:#ba2121">"*.el"</span> (<span style="color:#ba2121">"term"</span> <span style="color:#ba2121">"term/*.el"</span>) <span style="color:#ba2121">"*.texi"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"*.ti"</span> (<span style="color:#ba2121">"terminfo/e"</span> <span style="color:#ba2121">"terminfo/e/*"</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#ba2121">"terminfo/65"</span> <span style="color:#ba2121">"terminfo/65/*"</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#ba2121">"integration"</span> <span style="color:#ba2121">"integration/*"</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">:exclude</span> <span style="color:#ba2121">".dir-locals.el"</span> <span style="color:#ba2121">"*-tests.el"</span>))))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"*.ti"</span> (<span style="color:#ba2121">"terminfo/e"</span> <span style="color:#ba2121">"terminfo/e/*"</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#ba2121">"terminfo/65"</span> <span style="color:#ba2121">"terminfo/65/*"</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#ba2121">"integration"</span> <span style="color:#ba2121">"integration/*"</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">:exclude</span> <span style="color:#ba2121">".dir-locals.el"</span> <span style="color:#ba2121">"*-tests.el"</span>)))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:config</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">eat-shell</span> <span style="color:#ba2121">"/bin/bash"</span>))
|
||||
</span></span></code></pre></div><p>Yeah, and <code>eat</code> has integration with eshell too.</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:#19177c">add-hook</span> <span style="color:#19177c">'eshell-load-hook</span> <span style="color:#00f">#'</span><span style="color:#19177c">eat-eshell-mode</span>)
|
||||
</span></span></code></pre></div><h4 id="shell-1">shell</h4>
|
||||
|
|
@ -7027,7 +7052,7 @@ Some other optimization settings:</p>
|
|||
</span></span></code></pre></div><h3 id="elfeed">Elfeed</h3>
|
||||
<p><a href="https://github.com/skeeto/elfeed">elfeed</a> is one of the most popular Emacs packages, and it’s also one in which I ended up investing a lot of effort.</p>
|
||||
<p>There’s a lot of stuff in this section, so it’s here and not in “Internet and Multimedia”.</p>
|
||||
<h4 id="general-settings-4">General settings</h4>
|
||||
<h4 id="general-settings-5">General settings</h4>
|
||||
<p>The advice there sets <code>shr-use-fonts</code> to nil while rendering HTML, so the <code>elfeed-show</code> buffer will use monospace font.</p>
|
||||
<p>Using my own fork until the modifications are merged into master.</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">use-package</span> <span style="color:#19177c">elfeed</span>
|
||||
|
|
@ -10113,6 +10138,16 @@ Some other optimization settings:</p>
|
|||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>(<span style="color:#008000">setq</span> <span style="color:#19177c">calendar-latitude</span> <span style="color:#666">59.9375</span>)
|
||||
</span></span><span style="display:flex;"><span>(<span style="color:#008000">setq</span> <span style="color:#19177c">calendar-longitude</span> <span style="color:#666">30.308611</span>)
|
||||
</span></span></code></pre></div><h3 id="calc">Calc</h3>
|
||||
<p><a href="https://github.com/kickingvegas/Casual">casual</a> is a transient interface for the built-in calc.el</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">use-package</span> <span style="color:#19177c">casual</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> (<span style="color:#008000">:host</span> <span style="color:#19177c">github</span> <span style="color:#008000">:repo</span> <span style="color:#ba2121">"kickingvegas/Casual"</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:after</span> <span style="color:#19177c">calc</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:config</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">general-define-key</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:states</span> <span style="color:#666">'</span>(<span style="color:#19177c">normal</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:keymaps</span> <span style="color:#19177c">'calc-mode-map</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"M-o"</span> <span style="color:#00f">#'</span><span style="color:#19177c">casual-main-menu</span>))
|
||||
</span></span></code></pre></div><h3 id="chess">Chess</h3>
|
||||
<h4 id="chess-dot-el">chess.el</h4>
|
||||
<p>chess.el is a package by John Wiegley.</p>
|
||||
|
|
@ -10219,8 +10254,8 @@ Some other optimization settings:</p>
|
|||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">string=</span> (<span style="color:#00f">system-name</span>) <span style="color:#ba2121">"violet"</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">string=</span> (<span style="color:#00f">system-name</span>) <span style="color:#ba2121">"eminence"</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">string=</span> (<span style="color:#00f">system-name</span>) <span style="color:#ba2121">"iris"</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">not</span> <span style="color:#19177c">my/slow-ssh</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">not</span> <span style="color:#19177c">my/remote-server</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">not</span> <span style="color:#19177c">my/remote-server</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">not</span> <span style="color:#19177c">my/nested-emacs</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:config</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">elcord-buffer-details-format-function</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/elcord-buffer-details-format-functions</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#19177c">'elcord--try-update-presence</span> <span style="color:#008000">:filter-args</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/elcord-update-presence-mask-advice</span>)
|
||||
|
|
@ -10890,11 +10925,16 @@ I’ve seen a couple of cases where people would swap their username and ema
|
|||
<li><a href="#addons-1">Addons</a></li>
|
||||
<li><a href="#subdirectories">Subdirectories</a></li>
|
||||
<li><a href="#other-functions">Other functions</a></li>
|
||||
<li><a href="#tramp-1">TRAMP</a></li>
|
||||
<li><a href="#bookmarks">Bookmarks</a></li>
|
||||
<li><a href="#integrations-1">Integrations</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#tramp">TRAMP</a>
|
||||
<ul>
|
||||
<li><a href="#general-settings-4">General settings</a></li>
|
||||
<li><a href="#package-optimizations">Package optimizations</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#shells-terminals">Shells / Terminals</a>
|
||||
<ul>
|
||||
<li><a href="#vterm">vterm</a></li>
|
||||
|
|
@ -10912,7 +10952,7 @@ I’ve seen a couple of cases where people would swap their username and ema
|
|||
</li>
|
||||
<li><a href="#elfeed">Elfeed</a>
|
||||
<ul>
|
||||
<li><a href="#general-settings-4">General settings</a></li>
|
||||
<li><a href="#general-settings-5">General settings</a></li>
|
||||
<li><a href="#some-additions">Some additions</a></li>
|
||||
<li><a href="#custom-faces">Custom faces</a></li>
|
||||
<li><a href="#elfeed-summary">elfeed-summary</a></li>
|
||||
|
|
@ -10975,6 +11015,7 @@ I’ve seen a couple of cases where people would swap their username and ema
|
|||
<li><a href="#calendar">Calendar</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#calc">Calc</a></li>
|
||||
<li><a href="#chess">Chess</a>
|
||||
<ul>
|
||||
<li><a href="#chess-dot-el">chess.el</a></li>
|
||||
|
|
|
|||
|
|
@ -655,7 +655,8 @@ Remove <code>TAG</code> from emails which are outside the matching <code>PATH</c
|
|||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"вашей"</span> <span style="color:#ba2121">"вашему"</span> <span style="color:#ba2121">"вашим"</span> <span style="color:#ba2121">"вашем"</span> <span style="color:#ba2121">"вашеми"</span>))
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>(<span style="color:#008000">defvar</span> <span style="color:#19177c">my/ru-formal-pronous-regex</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">regexp-opt</span> <span style="color:#19177c">my/ru-formal-pronous</span> <span style="color:#19177c">'words</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">regexp-opt</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">mapcar</span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">p</span>) (<span style="color:#00f">format</span> <span style="color:#ba2121">" %s "</span> <span style="color:#19177c">p</span>)) <span style="color:#19177c">my/ru-formal-pronous</span>) <span style="color:#19177c">'words</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/message-ensure-capitalized-formal-pronouns</span> ()
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span>)
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@
|
|||
My dotfiles
|
||||
<iframe src="https://ghbtns.com/github-btn.html?user=SqrtMinusOne&repo=dotfiles&type=star&count=true" frameborder="0" scrolling="0" width="150" height="20" title="GitHub"></iframe>
|
||||
</h1>
|
||||
<figure><img src="/ox-hugo/works-on-my-machine.svg"/>
|
||||
<figure><img src="/ox-hugo/works-on-my-machine.svg">
|
||||
</figure>
|
||||
|
||||
<p>These are my GNU/Linux configuration files. <a href="https://github.com/SqrtMinusOne/dotfiles">View at GitHub</a>.</p>
|
||||
|
|
@ -122,13 +122,13 @@
|
|||
</ul>
|
||||
<p>See also <a href="https://sqrtminusone.xyz/posts/">my blog posts</a>.</p>
|
||||
<h2 id="some-statistics">Some statistics</h2>
|
||||
<figure><img src="https://sqrtminusone.xyz/stats/all.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/stats/all.png">
|
||||
</figure>
|
||||
|
||||
<figure><img src="https://sqrtminusone.xyz/stats/emacs-vim.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/stats/emacs-vim.png">
|
||||
</figure>
|
||||
|
||||
<figure><img src="https://sqrtminusone.xyz/stats/literate-config.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/stats/literate-config.png">
|
||||
</figure>
|
||||
|
||||
<h2 id="misc">Misc</h2>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang=""><head>
|
||||
<meta name="generator" content="Hugo 0.123.8">
|
||||
<meta name="generator" content="Hugo 0.124.1">
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
|
||||
|
|
@ -72,7 +72,7 @@
|
|||
<div id="content">
|
||||
<div class="container">
|
||||
<h2 id="about">About</h2>
|
||||
<figure class="avatar"><img src="/logo_sq.png"/>
|
||||
<figure class="avatar"><img src="/logo_sq.png">
|
||||
</figure>
|
||||
|
||||
<p><strong>Pavel Korytov</strong></p>
|
||||
|
|
|
|||
92
index.xml
92
index.xml
|
|
@ -110,7 +110,7 @@
|
|||
<guid>https://sqrtminusone.xyz/packages/org-clock-agg/</guid>
|
||||
<content type="html">
|
||||
<p>Aggregate <a href="https://orgmode.org/manual/Clocking-Work-Time.html">org-clock</a> records and display the results in an interactive buffer. The records are grouped by predicates such as file name, their outline path in the file, etc. Each record is placed in a tree structure; each node of the tree shows the total time spent in that node and its children. The top-level node shows the total time spent in all records found by the query.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/org-clock-agg-img/screenshot.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/org-clock-agg-img/screenshot.png">
|
||||
</figure>
|
||||
|
||||
<h2 id="installation">Installation</h2>
|
||||
|
|
@ -360,7 +360,7 @@ Customize the formatting of these records through <code>org-clock-agg-elem
|
|||
<p>Fortunately, I&rsquo;m well-acquainted (make-yourself-a) Swiss Army Knife of computing called <a href="https://www.gnu.org/software/emacs/">Emacs</a>, so&hellip; below is my attempt to make something of it. And another addition to the already substantial list of my Emacs uses.</p>
|
||||
<p>Also, my <code>M-x magit-log-buffer-file</code> shows I created that file on the same day I had written the embedded toot, so this must be the longest Emacs thing I&rsquo;ve been figuring out. And it&rsquo;s probably the least portable, but I nevertheless hope you find it useful.</p>
|
||||
<h2 id="idea">Idea</h2>
|
||||
<figure><img src="https://sqrtminusone.xyz/images/index/index.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/images/index/index.png">
|
||||
</figure>
|
||||
|
||||
<p>So, I decided to try declarative filesystem management.</p>
|
||||
|
|
@ -1165,12 +1165,12 @@ Customize the formatting of these records through <code>org-clock-agg-elem
|
|||
|
||||
<guid>https://sqrtminusone.xyz/packages/biome/</guid>
|
||||
<content type="html">
|
||||
<figure><a href="https://melpa.org/#/biome"><img src="https://melpa.org/packages/biome-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/biome"><img src="https://melpa.org/packages/biome-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>Interface to <a href="https://open-meteo.com/">Open Meteo</a> for Emacs. The service provides weather forecasts, historical weather data, climate change projections, and more.</p>
|
||||
<p>The service is AGPL-licensed; the hosted API is free for non-commercial use if you make less than 10000 requests per day.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/biome-img/report.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/biome-img/report.png">
|
||||
</figure>
|
||||
|
||||
<h2 id="installation">Installation</h2>
|
||||
|
|
@ -1180,11 +1180,11 @@ Customize the formatting of these records through <code>org-clock-agg-elem
|
|||
</span></span></code></pre></div><p>Or clone the repository, add it to <code>load-path</code>, and <code>require</code> the package.</p>
|
||||
<h2 id="usage">Usage</h2>
|
||||
<p>The main entry point is <code>M-x biome</code>. Each item under &ldquo;Open Meteo Data&rdquo; corresponds to a particular endpoint of the service. For instance, <code>M-x biome ww</code> is a generic weather forecast. Check out the <a href="https://open-meteo.com/en/docs">API docs</a> for more detailed descriptions.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/biome-img/root.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/biome-img/root.png">
|
||||
</figure>
|
||||
|
||||
<p>Each of these items opens a query interface. A query consists of &ldquo;global&rdquo; variables, such as location, units, etc., and &ldquo;group variables&rdquo;. Groups are usually &ldquo;hourly&rdquo; and &ldquo;daily&rdquo;.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/biome-img/query.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/biome-img/query.png">
|
||||
</figure>
|
||||
|
||||
<p>Global variables must always include a location (section &ldquo;Select Coordinates or City&rdquo;). To enter a location, you can either enter latitude and longitude (Open Meteo has an <a href="https://open-meteo.com/en/docs/geocoding-api">API for those</a> as well) or select a location from <code>biome-query-coords</code>. Example configuration:</p>
|
||||
|
|
@ -1200,9 +1200,10 @@ Customize the formatting of these records through <code>org-clock-agg-elem
|
|||
</span></span><span style="display:flex;"><span>Reason: Timezone is required
|
||||
</span></span></code></pre></div><p>Or it will open the results table (the first screenshot).</p>
|
||||
<p><code>tabulated-list</code> doesn&rsquo;t support horizontal scrolling, so press <code>c</code> to toggle columns&rsquo; visibility.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/biome-img/columns.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/biome-img/columns.png">
|
||||
</figure>
|
||||
|
||||
<p>Press <code>c</code> or invoke <code>M-x biome-grid-export-csv</code> to export the results in CSV format.</p>
|
||||
<h2 id="more-configuration">More configuration</h2>
|
||||
<p>To save a query for later, press <code>P</code> in the root of the query interface. This will generate a definition like this:</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:#19177c">biome-def-preset</span> <span style="color:#19177c">biome-query-preset-177</span>
|
||||
|
|
@ -1213,14 +1214,17 @@ Customize the formatting of these records through <code>org-clock-agg-elem
|
|||
</span></span><span style="display:flex;"><span> (<span style="color:#ba2121">&#34;longitude&#34;</span> <span style="color:#666">.</span> <span style="color:#666">24.93545</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#ba2121">&#34;latitude&#34;</span> <span style="color:#666">.</span> <span style="color:#666">60.16952</span>))))
|
||||
</span></span></code></pre></div><p>Add this somewhere in your config after the package is loaded, e.g., in the <code>:config</code> section of the <code>use-package</code> form or wrapped in <a href="https://www.gnu.org/software/emacs/manual/html_node/elisp/Hooks-for-Loading.html#index-with_002deval_002dafter_002dload">with-eval-after-load</a>. Running <code>M-x biome-query-preset-177</code> will create a query interface with this preset.</p>
|
||||
<p>Alternatively, use the <code>add-to-list</code> form (generated below the <code>biome-def-preset</code> form). Presets added that way will show up in <code>M-x biome-presets</code> or &ldquo;Presets&rdquo; in <code>M-x biome</code>.</p>
|
||||
<p>Table formatting can be configured with <code>biome-grid-format</code>; check the docstring for more information. For instance, if you want to disable all gradients:</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">biome-grid-format</span> (<span style="color:#19177c">seq-filter</span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">f</span>) (<span style="color:#19177c">not</span> (<span style="color:#00f">eq</span> (<span style="color:#00f">car-safe</span> (<span style="color:#00f">nth</span> <span style="color:#666">2</span> <span style="color:#19177c">f</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">&#39;gradient</span>)))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">biome-grid-format</span>))
|
||||
</span></span></code></pre></div><p>Turn off highlighting of the current hour or day 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">setq</span> <span style="color:#19177c">biome-grid-highlight-current</span> <span style="color:#800">nil</span>)
|
||||
</span></span></code></pre></div><h2 id="composite-queries">Composite queries</h2>
|
||||
<p>The package also allows executing multiple queries at once to join their results. This can be useful for comparing weather in different locations or for viewing different reports about the same location.</p>
|
||||
<p>Run <code>M-x biome-multi</code> to invoke the-multi query dialog.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/biome-img/multi.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/biome-img/multi.png">
|
||||
</figure>
|
||||
|
||||
<p>(<em>yes, I&rsquo;ve switched to a light theme since the time of the previous screenshot</em>)</p>
|
||||
|
|
@ -1261,7 +1265,7 @@ Customize the formatting of these records through <code>org-clock-agg-elem
|
|||
|
||||
<guid>https://sqrtminusone.xyz/packages/micromamba/</guid>
|
||||
<content type="html">
|
||||
<figure><a href="https://melpa.org/#/micromamba"><img src="https://melpa.org/packages/micromamba-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/micromamba"><img src="https://melpa.org/packages/micromamba-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>Emacs package for working with <a href="https://mamba.readthedocs.io/en/latest/user_guide/micromamba.html">micromamba</a> environments.</p>
|
||||
|
|
@ -1396,7 +1400,7 @@ Time spent in Emacs but not in an actual project (i.e. accounted by the <a hr
|
|||
|
||||
<guid>https://sqrtminusone.xyz/posts/2023-01-02-gource/</guid>
|
||||
<content type="html">
|
||||
<figure><img src="https://sqrtminusone.xyz/images/gource/gource.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/images/gource/gource.png">
|
||||
</figure>
|
||||
|
||||
<p><a href="https://gource.io/">Gource</a> is a program that draws an animated graph of users changing the repository over time.</p>
|
||||
|
|
@ -1650,7 +1654,7 @@ I&rsquo;ve seen a couple of cases where people would swap their username and
|
|||
<p>In my experience, finding something in a podcast is particularly troublesome. For example, occasionally I want to refer to some line in the podcast to make an <a href="https://github.com/org-roam/org-roam">org-roam</a> node, e.g. I want to check that I got that part right.</p>
|
||||
<p>And I have no reasonable way to get there because audio files in themselves don&rsquo;t allow for <a href="https://en.wikipedia.org/wiki/Random_access">random access</a>, i.e. there are no &ldquo;landmarks&rdquo; that point to this or that portion of the file. At least if nothing like a transcript is available.</p>
|
||||
<p>For obvious reasons, podcasts rarely ship with transcripts. So in this post, I&rsquo;ll be using a speech recognition engine to make up for that. A generated transcript is not quite as good as a manually written one, but for the purpose of finding a fragment of a known podcast, it works well enough.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/images/vosk/img.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/images/vosk/img.png">
|
||||
</figure>
|
||||
|
||||
<p>The general idea is to get the podcast info from <a href="https://github.com/skeeto/elfeed">elfeed</a>, process it with <a href="https://github.com/alphacep/vosk-api">vosk-api</a> and feed it to <a href="https://github.com/sachac/subed">subed</a> to control the playback in <a href="https://mpv.io/">MPV</a>. I&rsquo;ve done something similar for <a href="https://sqrtminusone.xyz/posts/2022-05-09-pdf/#youtube-transcripts">YouTube videos</a> in the previous post, by the way.</p>
|
||||
|
|
@ -1884,7 +1888,7 @@ I&rsquo;ve seen a couple of cases where people would swap their username and
|
|||
|
||||
<guid>https://sqrtminusone.xyz/packages/reverso/</guid>
|
||||
<content type="html">
|
||||
<figure><a href="https://melpa.org/#/reverso"><img src="https://melpa.org/packages/reverso-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/reverso"><img src="https://melpa.org/packages/reverso-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>Emacs client for <a href="https://www.reverso.net/">Reverso</a>. The implemented features are:</p>
|
||||
|
|
@ -1911,12 +1915,12 @@ I&rsquo;ve seen a couple of cases where people would swap their username and
|
|||
<p>Results are displayed in <code>reverso-result-mode</code> buffers. When launched within that buffer, the command uses the input string specific to the buffer. If launched with <code>C-u</code>, it uses the output string from that buffer (if available).</p>
|
||||
<h3 id="translation">Translation</h3>
|
||||
<p>Use <code>M-x reverso t</code> or <code>M-x reverso-translate</code> to invoke the translation transient.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/translation-transient.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/translation-transient.png">
|
||||
</figure>
|
||||
|
||||
<p>The &ldquo;Source language&rdquo; and &ldquo;Target language&rdquo; parameters are self-explanatory. Note that not every language is compatible with every other language in the general case. &ldquo;Swap languages&rdquo; attempts to swap them.</p>
|
||||
<p>Enabling &ldquo;Brief translation output&rdquo; will display only the translated version of the string in the output buffer.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/translation-res.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/translation-res.png">
|
||||
</figure>
|
||||
|
||||
<p>Otherwise, the result buffer may contain the following sections:</p>
|
||||
|
|
@ -1932,10 +1936,10 @@ I&rsquo;ve seen a couple of cases where people would swap their username and
|
|||
<p>Interestingly, direct context search often yields different results than the &ldquo;Context results&rdquo; section of the translation command. Hence, checking both might provide more comprehensive data.</p>
|
||||
<h3 id="synonyms">Synonyms</h3>
|
||||
<p>Use <code>M-x reverso s</code> or <code>M-x reverso-synonyms</code> to invoke the synonyms search.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/synonyms-transient.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/synonyms-transient.png">
|
||||
</figure>
|
||||
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/synonyms-res.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/synonyms-res.png">
|
||||
</figure>
|
||||
|
||||
<p>If necessary, results are segmented by parts of speech.</p>
|
||||
|
|
@ -1947,19 +1951,19 @@ I&rsquo;ve seen a couple of cases where people would swap their username and
|
|||
</ul>
|
||||
<h3 id="conjugation">Conjugation</h3>
|
||||
<p>Use <code>M-x reverso o</code> or <code>M-x reverso-conjugation</code> to invoke verb conjugation dialog.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/conjugation-transient.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/conjugation-transient.png">
|
||||
</figure>
|
||||
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/conjugation-res.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/conjugation-res.png">
|
||||
</figure>
|
||||
|
||||
<h3 id="grammar-check">Grammar check</h3>
|
||||
<p>Use <code>M-x reverso g</code> or <code>M-x reverso-grammar</code> to invoke the grammar check.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/grammar-transient.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/grammar-transient.png">
|
||||
</figure>
|
||||
|
||||
<p>Currently, only English, French, Spanish, and Italian languages are available.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/grammar-res.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/grammar-res.png">
|
||||
</figure>
|
||||
|
||||
<p>The results may contain the following sections:</p>
|
||||
|
|
@ -1970,7 +1974,7 @@ I&rsquo;ve seen a couple of cases where people would swap their username and
|
|||
</ul>
|
||||
<h3 id="grammar-check-in-buffer">Grammar check in buffer</h3>
|
||||
<p>It can be convenient to apply the grammar check directly to the current buffer without displaying results in another buffer. Use <code>M-x reverso b</code> or <code>M-x reverso-grammar-buffer</code> for this.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/grammar-buffer-transient.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/grammar-buffer-transient.png">
|
||||
</figure>
|
||||
|
||||
<p>Running <code>e</code> there (or <code>M-x reverso-check-buffer</code>) utilizes the current buffer as input and highlights any found errors using overlays. If a region is selected, the check is confined to that region.</p>
|
||||
|
|
@ -1978,7 +1982,7 @@ I&rsquo;ve seen a couple of cases where people would swap their username and
|
|||
<p>Secondly, the service usually freaks out with special syntax, for instance, Org Mode links.</p>
|
||||
<p>The third issue partly follows from the second one, as the service often finds &ldquo;errors&rdquo; within hidden parts of Org links. Either skip these errors or execute <code>M-x org-toggle-link-display</code> in Org files beforehand.</p>
|
||||
<p>Lastly (and this applies to all other methods as well), the API usually restricts input size. If the service returns an error, try running the command on a smaller region of the buffer.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/grammar-buffer-res.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/grammar-buffer-res.png">
|
||||
</figure>
|
||||
|
||||
<p>When the cursor is placed on an error, the &ldquo;Information&rdquo; section provides details.</p>
|
||||
|
|
@ -2042,7 +2046,7 @@ I&rsquo;ve seen a couple of cases where people would swap their username and
|
|||
<content type="html">
|
||||
<p>Sync read/marked status of entries between <a href="https://github.com/skeeto/elfeed">elfeed</a> and <a href="https://tt-rss.org/">tt-rss</a>. Supports <a href="https://github.com/SqrtMinusOne/elfeed-summary">elfeed-summary</a>.</p>
|
||||
<p>DISCLAIMER: It&rsquo;s still an alpha version of the package, so you may want to backup your elfeed index and tt-rss database.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/elfeed-sync-img/screenshot.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/elfeed-sync-img/screenshot.png">
|
||||
</figure>
|
||||
|
||||
<h2 id="installation">Installation</h2>
|
||||
|
|
@ -2570,7 +2574,7 @@ To mark such entries as read, run <code>M-x elfeed-sync-read-ttrss-old<
|
|||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:overwrite</span> <span style="color:#19177c">current-prefix-arg</span>)))
|
||||
</span></span></code></pre></div><p>If the <code>my/elfeed-show-rdrview-html</code> variable is bound and true, then the content in this buffer was retrieved via <code>rdrview</code>, so we&rsquo;ll use that instead of the output of <code>elfeed-deref</code>.</p>
|
||||
<p>Now we can open elfeed entries in a PDF viewer, which I find much nicer to read. Given that RSS feeds generally ship with simpler HTML than the regular websites, results usually look awesome:</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/images/pdf-prot.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/images/pdf-prot.png">
|
||||
</figure>
|
||||
|
||||
<h3 id="opening-arbitrary-sites">Opening arbitrary sites</h3>
|
||||
|
|
@ -2718,7 +2722,7 @@ To mark such entries as read, run <code>M-x elfeed-sync-read-ttrss-old<
|
|||
<guid>https://sqrtminusone.xyz/packages/avy-dired/</guid>
|
||||
<content type="html">
|
||||
<p>Doing some experimentation with avy &amp; dired. Still somewhat flaky.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/avy-dired-img/screenshot.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/avy-dired-img/screenshot.png">
|
||||
</figure>
|
||||
|
||||
<p>The only available command is <code>M-x avy-dired-goto-line</code>. Use <code>K</code> and <code>J</code> to scroll up and down while in the avy state, <code>C-g</code> or <code>q</code> to quit.</p>
|
||||
|
|
@ -2733,12 +2737,12 @@ To mark such entries as read, run <code>M-x elfeed-sync-read-ttrss-old<
|
|||
|
||||
<guid>https://sqrtminusone.xyz/packages/elfeed-summary/</guid>
|
||||
<content type="html">
|
||||
<figure><a href="https://melpa.org/#/elfeed-summary"><img src="https://melpa.org/packages/elfeed-summary-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/elfeed-summary"><img src="https://melpa.org/packages/elfeed-summary-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>The package provides a tree-based feed summary interface for <a href="https://github.com/skeeto/elfeed">elfeed</a>. The tree can include individual feeds, <a href="https://github.com/skeeto/elfeed#filter-syntax">searches</a>, and groups. It mainly serves as an easier &ldquo;jumping point&rdquo; for elfeed, so to make querying a subset of the elfeed database one action away.</p>
|
||||
<p>Inspired by <a href="https://github.com/newsboat/newsboat">newsboat</a>.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/elfeed-summary-img/screenshot.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/elfeed-summary-img/screenshot.png">
|
||||
</figure>
|
||||
|
||||
<h2 id="installation">Installation</h2>
|
||||
|
|
@ -3702,7 +3706,7 @@ assigned to group with the least amount of members.</li>
|
|||
|
||||
<guid>https://sqrtminusone.xyz/packages/org-journal-tags/</guid>
|
||||
<content type="html">
|
||||
<figure><a href="https://melpa.org/#/org-journal-tags"><img src="https://melpa.org/packages/org-journal-tags-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/org-journal-tags"><img src="https://melpa.org/packages/org-journal-tags-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>A package to make sense of <del>my life</del> <a href="https://github.com/bastibe/org-journal">org-journal</a> records.</p>
|
||||
|
|
@ -3758,14 +3762,14 @@ assigned to group with the least amount of members.</li>
|
|||
<p>The same mode enables saving the database on killing Emacs, but you can always run <code>M-x org-journal-tags-db-save</code> manually.</p>
|
||||
<p><code>M-x org-journal-tags-db-unload</code> saves and unloads the database from the memory, <code>M-x org-journal-tags-db-reset</code> creates a new database.</p>
|
||||
<h3 id="status-buffer">Status buffer</h3>
|
||||
<figure><img src="https://sqrtminusone.xyz/org-journal-tags-img/status.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/org-journal-tags-img/status.png">
|
||||
</figure>
|
||||
|
||||
<p><em>(I replaced tag names with &ldquo;X&rdquo; just for the screenshot)</em></p>
|
||||
<p><code>M-x org-journal-tags-status</code> opens the status buffer with some statistics about the journal and tags. Press <code>?</code> to see the available keybindings.</p>
|
||||
<p>Pressing <code>RET</code> on a tag name in the &ldquo;All tags&rdquo; section should open a query buffer set to return all references for this tag.</p>
|
||||
<h3 id="query-constructor">Query constructor</h3>
|
||||
<figure><img src="https://sqrtminusone.xyz/org-journal-tags-img/query.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/org-journal-tags-img/query.png">
|
||||
</figure>
|
||||
|
||||
<p>Pressing <code>s</code> in the status buffer or running <code>M-x org-journal-tags-transient-query</code> opens a <a href="https://magit.vc/manual/transient/">transient.el</a> buffer with query settings.</p>
|
||||
|
|
@ -3785,7 +3789,7 @@ timestamps by their date.</li>
|
|||
</ul>
|
||||
<p>Pressing <code>RET</code> or <code>e</code> executes the query. Journal files are cached, so subsequent queries within one session are much faster.</p>
|
||||
<h3 id="query-results">Query results</h3>
|
||||
<figure><img src="https://sqrtminusone.xyz/org-journal-tags-img/query-results.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/org-journal-tags-img/query-results.png">
|
||||
</figure>
|
||||
|
||||
<p>After the query completes, the package opens the results buffer. Press <code>?</code> to see the available keybindings there.</p>
|
||||
|
|
@ -4263,7 +4267,7 @@ timestamps by their date.</li>
|
|||
|
||||
<guid>https://sqrtminusone.xyz/packages/exwm-modeline/</guid>
|
||||
<content type="html">
|
||||
<figure><a href="https://melpa.org/#/exwm-modeline"><img src="https://melpa.org/packages/exwm-modeline-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/exwm-modeline"><img src="https://melpa.org/packages/exwm-modeline-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>A modeline segment to display exwm workspaces.</p>
|
||||
|
|
@ -4304,7 +4308,7 @@ timestamps by their date.</li>
|
|||
|
||||
<guid>https://sqrtminusone.xyz/packages/perspective-exwm/</guid>
|
||||
<content type="html">
|
||||
<figure><a href="https://melpa.org/#/perspective-exwm"><img src="https://melpa.org/packages/perspective-exwm-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/perspective-exwm"><img src="https://melpa.org/packages/perspective-exwm-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>A couple of tricks and fixes to make using <a href="https://github.com/ch11ng/exwm">EXWM</a> and <a href="https://github.com/nex3/perspective-el">perspective.el</a> a better experience.</p>
|
||||
|
|
@ -4342,7 +4346,7 @@ The mode does a couple of things:</p>
|
|||
<li>
|
||||
<p><code>M-x perspective-exwm-cycle-exwm-buffers-forward</code>, <code>perspective-exwm-cycle-exwm-buffers-backward</code><br />
|
||||
Cycle EXWM buffers in the current perspective.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/perspective-exwm-img/cycle-buffers.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/perspective-exwm-img/cycle-buffers.png">
|
||||
</figure>
|
||||
|
||||
<p>The buffer highlighted in yellow is the current one, the buffer highlighted in blue is shown in another window of the perspective so it will be omitted from the cycle.</p>
|
||||
|
|
@ -4355,7 +4359,7 @@ The same as above, but not restricted to EXWM buffers.</p>
|
|||
<li>
|
||||
<p><code>M-x perspective-exwm-switch-perspective</code><br />
|
||||
Select a perspective from the list of all perspectives on all workspaces.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/perspective-exwm-img/switch-perspective.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/perspective-exwm-img/switch-perspective.png">
|
||||
</figure>
|
||||
|
||||
</li>
|
||||
|
|
@ -4403,11 +4407,11 @@ A handy function to move the current window to a given workspace and/or perspect
|
|||
|
||||
<guid>https://sqrtminusone.xyz/packages/pomm/</guid>
|
||||
<content type="html">
|
||||
<figure><a href="https://melpa.org/#/pomm"><img src="https://melpa.org/packages/pomm-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/pomm"><img src="https://melpa.org/packages/pomm-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>Implementation of <a href="https://en.wikipedia.org/wiki/Pomodoro_Technique">Pomodoro</a> and <a href="https://www.lesswrong.com/posts/RWu8eZqbwgB9zaerh/third-time-a-better-way-to-work">Third Time</a> techniques for Emacs.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/pomm-img/screenshot.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/pomm-img/screenshot.png">
|
||||
</figure>
|
||||
|
||||
<p>Features:</p>
|
||||
|
|
@ -4443,7 +4447,7 @@ History of the timer can be stored in a CSV file. Eventually, I want to join thi
|
|||
<p>With &ldquo;r&rdquo; or <code>M-x pomm-set-context</code> you can set the current &ldquo;context&rdquo;, that is some description of the task you are currently working on. This description will show up in history and in the csv file. Also, <code>M-x pomm-start-with-context</code> will prompt for the context and then start the timer.</p>
|
||||
<h3 id="third-time">Third Time</h3>
|
||||
<p>Run <code>M-x pomm-third-time</code> to open the transient buffer for the Third Time technique.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/pomm-img/screenshot-tt.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/pomm-img/screenshot-tt.png">
|
||||
</figure>
|
||||
|
||||
<p>Essentially, the techique is designed aroud the formula:</p>
|
||||
|
|
@ -4792,7 +4796,7 @@ interval = 1
|
|||
<guid>https://sqrtminusone.xyz/posts/2021-09-07-emms/</guid>
|
||||
<content type="html">
|
||||
<h2 id="intro">Intro</h2>
|
||||
<figure><img src="https://sqrtminusone.xyz/images/emms/emms-screenshot.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/images/emms/emms-screenshot.png">
|
||||
</figure>
|
||||
|
||||
<p>This is the current state of my quest to live in Emacs, at least in part of reading RSS and music.</p>
|
||||
|
|
@ -5031,11 +5035,11 @@ interval = 1
|
|||
|
||||
<guid>https://sqrtminusone.xyz/packages/lyrics-fetcher/</guid>
|
||||
<content type="html">
|
||||
<figure><a href="https://melpa.org/#/lyrics-fetcher"><img src="https://melpa.org/packages/lyrics-fetcher-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/lyrics-fetcher"><img src="https://melpa.org/packages/lyrics-fetcher-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>A package to fetch song lyrics and album covers. Integrates with EMMS.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/lyrics-fetcher-img/screenshot.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/lyrics-fetcher-img/screenshot.png">
|
||||
</figure>
|
||||
|
||||
<p>The available backends are <a href="https://genius.com">genius.com</a> and <a href="https://music.163.com/">music.163.com</a>.</p>
|
||||
|
|
@ -5142,7 +5146,7 @@ interval = 1
|
|||
|
||||
<guid>https://sqrtminusone.xyz/posts/2021-05-01-org-python/</guid>
|
||||
<content type="html">
|
||||
<figure><img src="https://sqrtminusone.xyz/images/org-python/org-python-screenshot.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/images/org-python/org-python-screenshot.png">
|
||||
</figure>
|
||||
|
||||
<h2 id="why">Why?</h2>
|
||||
|
|
@ -5511,10 +5515,10 @@ interval = 1
|
|||
<p>Any classical IMAP/SMTP client is hard to use in my case, because a message with multiple labels is copied to IMAP folders for each of the label plus the inbox folder, and the copies look like different messages from the client-side. For example, a message can be read in one label and unread in another.</p>
|
||||
<p>For a few years, my solution was <a href="https://getmailspring.com/">Mailspring</a>, which provides first-class support for labels. However, it has a feature to deploy <a href="https://www.bbc.com/news/technology-56071437">spy pixels</a> on emails (and offers no protection from them, obviously), the client is Electron-based with a mouse-driven interface, and the sync engine was closed-source at the time.</p>
|
||||
<p>So, I found an alternative in Emacs+notmuch+lieer and ditched one more proprietary app (the last big one I can&rsquo;t let go of is DataGrip).</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/images/gmail/main.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/images/gmail/main.png">
|
||||
</figure>
|
||||
|
||||
<figure><img src="https://sqrtminusone.xyz/images/gmail/mail.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/images/gmail/mail.png">
|
||||
</figure>
|
||||
|
||||
<p>Notmuch&rsquo;s tags are just as advanced as Gmail&rsquo;s labels, so I have basically the same mail structure accessible from Emacs, Gmail Android client and even the web UI when I don&rsquo;t have access to the first two.</p>
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@
|
|||
|
||||
</h1>
|
||||
<p>Doing some experimentation with avy & dired. Still somewhat flaky.</p>
|
||||
<figure><img src="/avy-dired-img/screenshot.png"/>
|
||||
<figure><img src="/avy-dired-img/screenshot.png">
|
||||
</figure>
|
||||
|
||||
<p>The only available command is <code>M-x avy-dired-goto-line</code>. Use <code>K</code> and <code>J</code> to scroll up and down while in the avy state, <code>C-g</code> or <code>q</code> to quit.</p>
|
||||
|
|
|
|||
|
|
@ -83,12 +83,12 @@
|
|||
<iframe src="https://ghbtns.com/github-btn.html?user=SqrtMinusOne&repo=biome&type=star&count=true" frameborder="0" scrolling="0" width="150" height="20" title="GitHub"></iframe>
|
||||
|
||||
</h1>
|
||||
<figure><a href="https://melpa.org/#/biome"><img src="https://melpa.org/packages/biome-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/biome"><img src="https://melpa.org/packages/biome-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>Interface to <a href="https://open-meteo.com/">Open Meteo</a> for Emacs. The service provides weather forecasts, historical weather data, climate change projections, and more.</p>
|
||||
<p>The service is AGPL-licensed; the hosted API is free for non-commercial use if you make less than 10000 requests per day.</p>
|
||||
<figure><img src="/biome-img/report.png"/>
|
||||
<figure><img src="/biome-img/report.png">
|
||||
</figure>
|
||||
|
||||
<h2 id="installation">Installation</h2>
|
||||
|
|
@ -98,11 +98,11 @@
|
|||
</span></span></code></pre></div><p>Or clone the repository, add it to <code>load-path</code>, and <code>require</code> the package.</p>
|
||||
<h2 id="usage">Usage</h2>
|
||||
<p>The main entry point is <code>M-x biome</code>. Each item under “Open Meteo Data” corresponds to a particular endpoint of the service. For instance, <code>M-x biome ww</code> is a generic weather forecast. Check out the <a href="https://open-meteo.com/en/docs">API docs</a> for more detailed descriptions.</p>
|
||||
<figure><img src="/biome-img/root.png"/>
|
||||
<figure><img src="/biome-img/root.png">
|
||||
</figure>
|
||||
|
||||
<p>Each of these items opens a query interface. A query consists of “global” variables, such as location, units, etc., and “group variables”. Groups are usually “hourly” and “daily”.</p>
|
||||
<figure><img src="/biome-img/query.png"/>
|
||||
<figure><img src="/biome-img/query.png">
|
||||
</figure>
|
||||
|
||||
<p>Global variables must always include a location (section “Select Coordinates or City”). To enter a location, you can either enter latitude and longitude (Open Meteo has an <a href="https://open-meteo.com/en/docs/geocoding-api">API for those</a> as well) or select a location from <code>biome-query-coords</code>. Example configuration:</p>
|
||||
|
|
@ -118,9 +118,10 @@
|
|||
</span></span><span style="display:flex;"><span>Reason: Timezone is required
|
||||
</span></span></code></pre></div><p>Or it will open the results table (the first screenshot).</p>
|
||||
<p><code>tabulated-list</code> doesn’t support horizontal scrolling, so press <code>c</code> to toggle columns’ visibility.</p>
|
||||
<figure><img src="/biome-img/columns.png"/>
|
||||
<figure><img src="/biome-img/columns.png">
|
||||
</figure>
|
||||
|
||||
<p>Press <code>c</code> or invoke <code>M-x biome-grid-export-csv</code> to export the results in CSV format.</p>
|
||||
<h2 id="more-configuration">More configuration</h2>
|
||||
<p>To save a query for later, press <code>P</code> in the root of the query interface. This will generate a definition like this:</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:#19177c">biome-def-preset</span> <span style="color:#19177c">biome-query-preset-177</span>
|
||||
|
|
@ -131,14 +132,17 @@
|
|||
</span></span><span style="display:flex;"><span> (<span style="color:#ba2121">"longitude"</span> <span style="color:#666">.</span> <span style="color:#666">24.93545</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#ba2121">"latitude"</span> <span style="color:#666">.</span> <span style="color:#666">60.16952</span>))))
|
||||
</span></span></code></pre></div><p>Add this somewhere in your config after the package is loaded, e.g., in the <code>:config</code> section of the <code>use-package</code> form or wrapped in <a href="https://www.gnu.org/software/emacs/manual/html_node/elisp/Hooks-for-Loading.html#index-with_002deval_002dafter_002dload">with-eval-after-load</a>. Running <code>M-x biome-query-preset-177</code> will create a query interface with this preset.</p>
|
||||
<p>Alternatively, use the <code>add-to-list</code> form (generated below the <code>biome-def-preset</code> form). Presets added that way will show up in <code>M-x biome-presets</code> or “Presets” in <code>M-x biome</code>.</p>
|
||||
<p>Table formatting can be configured with <code>biome-grid-format</code>; check the docstring for more information. For instance, if you want to disable all gradients:</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">biome-grid-format</span> (<span style="color:#19177c">seq-filter</span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">f</span>) (<span style="color:#19177c">not</span> (<span style="color:#00f">eq</span> (<span style="color:#00f">car-safe</span> (<span style="color:#00f">nth</span> <span style="color:#666">2</span> <span style="color:#19177c">f</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">'gradient</span>)))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">biome-grid-format</span>))
|
||||
</span></span></code></pre></div><p>Turn off highlighting of the current hour or day 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">setq</span> <span style="color:#19177c">biome-grid-highlight-current</span> <span style="color:#800">nil</span>)
|
||||
</span></span></code></pre></div><h2 id="composite-queries">Composite queries</h2>
|
||||
<p>The package also allows executing multiple queries at once to join their results. This can be useful for comparing weather in different locations or for viewing different reports about the same location.</p>
|
||||
<p>Run <code>M-x biome-multi</code> to invoke the-multi query dialog.</p>
|
||||
<figure><img src="/biome-img/multi.png"/>
|
||||
<figure><img src="/biome-img/multi.png">
|
||||
</figure>
|
||||
|
||||
<p>(<em>yes, I’ve switched to a light theme since the time of the previous screenshot</em>)</p>
|
||||
|
|
|
|||
|
|
@ -83,12 +83,12 @@
|
|||
<iframe src="https://ghbtns.com/github-btn.html?user=SqrtMinusOne&repo=elfeed-summary&type=star&count=true" frameborder="0" scrolling="0" width="150" height="20" title="GitHub"></iframe>
|
||||
|
||||
</h1>
|
||||
<figure><a href="https://melpa.org/#/elfeed-summary"><img src="https://melpa.org/packages/elfeed-summary-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/elfeed-summary"><img src="https://melpa.org/packages/elfeed-summary-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>The package provides a tree-based feed summary interface for <a href="https://github.com/skeeto/elfeed">elfeed</a>. The tree can include individual feeds, <a href="https://github.com/skeeto/elfeed#filter-syntax">searches</a>, and groups. It mainly serves as an easier “jumping point” for elfeed, so to make querying a subset of the elfeed database one action away.</p>
|
||||
<p>Inspired by <a href="https://github.com/newsboat/newsboat">newsboat</a>.</p>
|
||||
<figure><img src="/elfeed-summary-img/screenshot.png"/>
|
||||
<figure><img src="/elfeed-summary-img/screenshot.png">
|
||||
</figure>
|
||||
|
||||
<h2 id="installation">Installation</h2>
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@
|
|||
</h1>
|
||||
<p>Sync read/marked status of entries between <a href="https://github.com/skeeto/elfeed">elfeed</a> and <a href="https://tt-rss.org/">tt-rss</a>. Supports <a href="https://github.com/SqrtMinusOne/elfeed-summary">elfeed-summary</a>.</p>
|
||||
<p>DISCLAIMER: It’s still an alpha version of the package, so you may want to backup your elfeed index and tt-rss database.</p>
|
||||
<figure><img src="/elfeed-sync-img/screenshot.png"/>
|
||||
<figure><img src="/elfeed-sync-img/screenshot.png">
|
||||
</figure>
|
||||
|
||||
<h2 id="installation">Installation</h2>
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@
|
|||
<iframe src="https://ghbtns.com/github-btn.html?user=SqrtMinusOne&repo=exwm-modeline&type=star&count=true" frameborder="0" scrolling="0" width="150" height="20" title="GitHub"></iframe>
|
||||
|
||||
</h1>
|
||||
<figure><a href="https://melpa.org/#/exwm-modeline"><img src="https://melpa.org/packages/exwm-modeline-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/exwm-modeline"><img src="https://melpa.org/packages/exwm-modeline-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>A modeline segment to display exwm workspaces.</p>
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@
|
|||
<guid>https://sqrtminusone.xyz/packages/org-clock-agg/</guid>
|
||||
<content type="html">
|
||||
<p>Aggregate <a href="https://orgmode.org/manual/Clocking-Work-Time.html">org-clock</a> records and display the results in an interactive buffer. The records are grouped by predicates such as file name, their outline path in the file, etc. Each record is placed in a tree structure; each node of the tree shows the total time spent in that node and its children. The top-level node shows the total time spent in all records found by the query.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/org-clock-agg-img/screenshot.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/org-clock-agg-img/screenshot.png">
|
||||
</figure>
|
||||
|
||||
<h2 id="installation">Installation</h2>
|
||||
|
|
@ -347,12 +347,12 @@ Customize the formatting of these records through <code>org-clock-agg-elem
|
|||
|
||||
<guid>https://sqrtminusone.xyz/packages/biome/</guid>
|
||||
<content type="html">
|
||||
<figure><a href="https://melpa.org/#/biome"><img src="https://melpa.org/packages/biome-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/biome"><img src="https://melpa.org/packages/biome-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>Interface to <a href="https://open-meteo.com/">Open Meteo</a> for Emacs. The service provides weather forecasts, historical weather data, climate change projections, and more.</p>
|
||||
<p>The service is AGPL-licensed; the hosted API is free for non-commercial use if you make less than 10000 requests per day.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/biome-img/report.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/biome-img/report.png">
|
||||
</figure>
|
||||
|
||||
<h2 id="installation">Installation</h2>
|
||||
|
|
@ -362,11 +362,11 @@ Customize the formatting of these records through <code>org-clock-agg-elem
|
|||
</span></span></code></pre></div><p>Or clone the repository, add it to <code>load-path</code>, and <code>require</code> the package.</p>
|
||||
<h2 id="usage">Usage</h2>
|
||||
<p>The main entry point is <code>M-x biome</code>. Each item under &ldquo;Open Meteo Data&rdquo; corresponds to a particular endpoint of the service. For instance, <code>M-x biome ww</code> is a generic weather forecast. Check out the <a href="https://open-meteo.com/en/docs">API docs</a> for more detailed descriptions.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/biome-img/root.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/biome-img/root.png">
|
||||
</figure>
|
||||
|
||||
<p>Each of these items opens a query interface. A query consists of &ldquo;global&rdquo; variables, such as location, units, etc., and &ldquo;group variables&rdquo;. Groups are usually &ldquo;hourly&rdquo; and &ldquo;daily&rdquo;.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/biome-img/query.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/biome-img/query.png">
|
||||
</figure>
|
||||
|
||||
<p>Global variables must always include a location (section &ldquo;Select Coordinates or City&rdquo;). To enter a location, you can either enter latitude and longitude (Open Meteo has an <a href="https://open-meteo.com/en/docs/geocoding-api">API for those</a> as well) or select a location from <code>biome-query-coords</code>. Example configuration:</p>
|
||||
|
|
@ -382,9 +382,10 @@ Customize the formatting of these records through <code>org-clock-agg-elem
|
|||
</span></span><span style="display:flex;"><span>Reason: Timezone is required
|
||||
</span></span></code></pre></div><p>Or it will open the results table (the first screenshot).</p>
|
||||
<p><code>tabulated-list</code> doesn&rsquo;t support horizontal scrolling, so press <code>c</code> to toggle columns&rsquo; visibility.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/biome-img/columns.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/biome-img/columns.png">
|
||||
</figure>
|
||||
|
||||
<p>Press <code>c</code> or invoke <code>M-x biome-grid-export-csv</code> to export the results in CSV format.</p>
|
||||
<h2 id="more-configuration">More configuration</h2>
|
||||
<p>To save a query for later, press <code>P</code> in the root of the query interface. This will generate a definition like this:</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:#19177c">biome-def-preset</span> <span style="color:#19177c">biome-query-preset-177</span>
|
||||
|
|
@ -395,14 +396,17 @@ Customize the formatting of these records through <code>org-clock-agg-elem
|
|||
</span></span><span style="display:flex;"><span> (<span style="color:#ba2121">&#34;longitude&#34;</span> <span style="color:#666">.</span> <span style="color:#666">24.93545</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#ba2121">&#34;latitude&#34;</span> <span style="color:#666">.</span> <span style="color:#666">60.16952</span>))))
|
||||
</span></span></code></pre></div><p>Add this somewhere in your config after the package is loaded, e.g., in the <code>:config</code> section of the <code>use-package</code> form or wrapped in <a href="https://www.gnu.org/software/emacs/manual/html_node/elisp/Hooks-for-Loading.html#index-with_002deval_002dafter_002dload">with-eval-after-load</a>. Running <code>M-x biome-query-preset-177</code> will create a query interface with this preset.</p>
|
||||
<p>Alternatively, use the <code>add-to-list</code> form (generated below the <code>biome-def-preset</code> form). Presets added that way will show up in <code>M-x biome-presets</code> or &ldquo;Presets&rdquo; in <code>M-x biome</code>.</p>
|
||||
<p>Table formatting can be configured with <code>biome-grid-format</code>; check the docstring for more information. For instance, if you want to disable all gradients:</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">biome-grid-format</span> (<span style="color:#19177c">seq-filter</span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">f</span>) (<span style="color:#19177c">not</span> (<span style="color:#00f">eq</span> (<span style="color:#00f">car-safe</span> (<span style="color:#00f">nth</span> <span style="color:#666">2</span> <span style="color:#19177c">f</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">&#39;gradient</span>)))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">biome-grid-format</span>))
|
||||
</span></span></code></pre></div><p>Turn off highlighting of the current hour or day 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">setq</span> <span style="color:#19177c">biome-grid-highlight-current</span> <span style="color:#800">nil</span>)
|
||||
</span></span></code></pre></div><h2 id="composite-queries">Composite queries</h2>
|
||||
<p>The package also allows executing multiple queries at once to join their results. This can be useful for comparing weather in different locations or for viewing different reports about the same location.</p>
|
||||
<p>Run <code>M-x biome-multi</code> to invoke the-multi query dialog.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/biome-img/multi.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/biome-img/multi.png">
|
||||
</figure>
|
||||
|
||||
<p>(<em>yes, I&rsquo;ve switched to a light theme since the time of the previous screenshot</em>)</p>
|
||||
|
|
@ -443,7 +447,7 @@ Customize the formatting of these records through <code>org-clock-agg-elem
|
|||
|
||||
<guid>https://sqrtminusone.xyz/packages/micromamba/</guid>
|
||||
<content type="html">
|
||||
<figure><a href="https://melpa.org/#/micromamba"><img src="https://melpa.org/packages/micromamba-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/micromamba"><img src="https://melpa.org/packages/micromamba-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>Emacs package for working with <a href="https://mamba.readthedocs.io/en/latest/user_guide/micromamba.html">micromamba</a> environments.</p>
|
||||
|
|
@ -479,7 +483,7 @@ Customize the formatting of these records through <code>org-clock-agg-elem
|
|||
|
||||
<guid>https://sqrtminusone.xyz/packages/reverso/</guid>
|
||||
<content type="html">
|
||||
<figure><a href="https://melpa.org/#/reverso"><img src="https://melpa.org/packages/reverso-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/reverso"><img src="https://melpa.org/packages/reverso-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>Emacs client for <a href="https://www.reverso.net/">Reverso</a>. The implemented features are:</p>
|
||||
|
|
@ -506,12 +510,12 @@ Customize the formatting of these records through <code>org-clock-agg-elem
|
|||
<p>Results are displayed in <code>reverso-result-mode</code> buffers. When launched within that buffer, the command uses the input string specific to the buffer. If launched with <code>C-u</code>, it uses the output string from that buffer (if available).</p>
|
||||
<h3 id="translation">Translation</h3>
|
||||
<p>Use <code>M-x reverso t</code> or <code>M-x reverso-translate</code> to invoke the translation transient.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/translation-transient.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/translation-transient.png">
|
||||
</figure>
|
||||
|
||||
<p>The &ldquo;Source language&rdquo; and &ldquo;Target language&rdquo; parameters are self-explanatory. Note that not every language is compatible with every other language in the general case. &ldquo;Swap languages&rdquo; attempts to swap them.</p>
|
||||
<p>Enabling &ldquo;Brief translation output&rdquo; will display only the translated version of the string in the output buffer.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/translation-res.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/translation-res.png">
|
||||
</figure>
|
||||
|
||||
<p>Otherwise, the result buffer may contain the following sections:</p>
|
||||
|
|
@ -527,10 +531,10 @@ Customize the formatting of these records through <code>org-clock-agg-elem
|
|||
<p>Interestingly, direct context search often yields different results than the &ldquo;Context results&rdquo; section of the translation command. Hence, checking both might provide more comprehensive data.</p>
|
||||
<h3 id="synonyms">Synonyms</h3>
|
||||
<p>Use <code>M-x reverso s</code> or <code>M-x reverso-synonyms</code> to invoke the synonyms search.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/synonyms-transient.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/synonyms-transient.png">
|
||||
</figure>
|
||||
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/synonyms-res.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/synonyms-res.png">
|
||||
</figure>
|
||||
|
||||
<p>If necessary, results are segmented by parts of speech.</p>
|
||||
|
|
@ -542,19 +546,19 @@ Customize the formatting of these records through <code>org-clock-agg-elem
|
|||
</ul>
|
||||
<h3 id="conjugation">Conjugation</h3>
|
||||
<p>Use <code>M-x reverso o</code> or <code>M-x reverso-conjugation</code> to invoke verb conjugation dialog.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/conjugation-transient.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/conjugation-transient.png">
|
||||
</figure>
|
||||
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/conjugation-res.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/conjugation-res.png">
|
||||
</figure>
|
||||
|
||||
<h3 id="grammar-check">Grammar check</h3>
|
||||
<p>Use <code>M-x reverso g</code> or <code>M-x reverso-grammar</code> to invoke the grammar check.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/grammar-transient.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/grammar-transient.png">
|
||||
</figure>
|
||||
|
||||
<p>Currently, only English, French, Spanish, and Italian languages are available.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/grammar-res.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/grammar-res.png">
|
||||
</figure>
|
||||
|
||||
<p>The results may contain the following sections:</p>
|
||||
|
|
@ -565,7 +569,7 @@ Customize the formatting of these records through <code>org-clock-agg-elem
|
|||
</ul>
|
||||
<h3 id="grammar-check-in-buffer">Grammar check in buffer</h3>
|
||||
<p>It can be convenient to apply the grammar check directly to the current buffer without displaying results in another buffer. Use <code>M-x reverso b</code> or <code>M-x reverso-grammar-buffer</code> for this.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/grammar-buffer-transient.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/grammar-buffer-transient.png">
|
||||
</figure>
|
||||
|
||||
<p>Running <code>e</code> there (or <code>M-x reverso-check-buffer</code>) utilizes the current buffer as input and highlights any found errors using overlays. If a region is selected, the check is confined to that region.</p>
|
||||
|
|
@ -573,7 +577,7 @@ Customize the formatting of these records through <code>org-clock-agg-elem
|
|||
<p>Secondly, the service usually freaks out with special syntax, for instance, Org Mode links.</p>
|
||||
<p>The third issue partly follows from the second one, as the service often finds &ldquo;errors&rdquo; within hidden parts of Org links. Either skip these errors or execute <code>M-x org-toggle-link-display</code> in Org files beforehand.</p>
|
||||
<p>Lastly (and this applies to all other methods as well), the API usually restricts input size. If the service returns an error, try running the command on a smaller region of the buffer.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/grammar-buffer-res.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/reverso-img/grammar-buffer-res.png">
|
||||
</figure>
|
||||
|
||||
<p>When the cursor is placed on an error, the &ldquo;Information&rdquo; section provides details.</p>
|
||||
|
|
@ -637,7 +641,7 @@ Customize the formatting of these records through <code>org-clock-agg-elem
|
|||
<content type="html">
|
||||
<p>Sync read/marked status of entries between <a href="https://github.com/skeeto/elfeed">elfeed</a> and <a href="https://tt-rss.org/">tt-rss</a>. Supports <a href="https://github.com/SqrtMinusOne/elfeed-summary">elfeed-summary</a>.</p>
|
||||
<p>DISCLAIMER: It&rsquo;s still an alpha version of the package, so you may want to backup your elfeed index and tt-rss database.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/elfeed-sync-img/screenshot.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/elfeed-sync-img/screenshot.png">
|
||||
</figure>
|
||||
|
||||
<h2 id="installation">Installation</h2>
|
||||
|
|
@ -730,7 +734,7 @@ To mark such entries as read, run <code>M-x elfeed-sync-read-ttrss-old<
|
|||
<guid>https://sqrtminusone.xyz/packages/avy-dired/</guid>
|
||||
<content type="html">
|
||||
<p>Doing some experimentation with avy &amp; dired. Still somewhat flaky.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/avy-dired-img/screenshot.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/avy-dired-img/screenshot.png">
|
||||
</figure>
|
||||
|
||||
<p>The only available command is <code>M-x avy-dired-goto-line</code>. Use <code>K</code> and <code>J</code> to scroll up and down while in the avy state, <code>C-g</code> or <code>q</code> to quit.</p>
|
||||
|
|
@ -745,12 +749,12 @@ To mark such entries as read, run <code>M-x elfeed-sync-read-ttrss-old<
|
|||
|
||||
<guid>https://sqrtminusone.xyz/packages/elfeed-summary/</guid>
|
||||
<content type="html">
|
||||
<figure><a href="https://melpa.org/#/elfeed-summary"><img src="https://melpa.org/packages/elfeed-summary-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/elfeed-summary"><img src="https://melpa.org/packages/elfeed-summary-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>The package provides a tree-based feed summary interface for <a href="https://github.com/skeeto/elfeed">elfeed</a>. The tree can include individual feeds, <a href="https://github.com/skeeto/elfeed#filter-syntax">searches</a>, and groups. It mainly serves as an easier &ldquo;jumping point&rdquo; for elfeed, so to make querying a subset of the elfeed database one action away.</p>
|
||||
<p>Inspired by <a href="https://github.com/newsboat/newsboat">newsboat</a>.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/elfeed-summary-img/screenshot.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/elfeed-summary-img/screenshot.png">
|
||||
</figure>
|
||||
|
||||
<h2 id="installation">Installation</h2>
|
||||
|
|
@ -1203,7 +1207,7 @@ assigned to group with the least amount of members.</li>
|
|||
|
||||
<guid>https://sqrtminusone.xyz/packages/org-journal-tags/</guid>
|
||||
<content type="html">
|
||||
<figure><a href="https://melpa.org/#/org-journal-tags"><img src="https://melpa.org/packages/org-journal-tags-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/org-journal-tags"><img src="https://melpa.org/packages/org-journal-tags-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>A package to make sense of <del>my life</del> <a href="https://github.com/bastibe/org-journal">org-journal</a> records.</p>
|
||||
|
|
@ -1259,14 +1263,14 @@ assigned to group with the least amount of members.</li>
|
|||
<p>The same mode enables saving the database on killing Emacs, but you can always run <code>M-x org-journal-tags-db-save</code> manually.</p>
|
||||
<p><code>M-x org-journal-tags-db-unload</code> saves and unloads the database from the memory, <code>M-x org-journal-tags-db-reset</code> creates a new database.</p>
|
||||
<h3 id="status-buffer">Status buffer</h3>
|
||||
<figure><img src="https://sqrtminusone.xyz/org-journal-tags-img/status.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/org-journal-tags-img/status.png">
|
||||
</figure>
|
||||
|
||||
<p><em>(I replaced tag names with &ldquo;X&rdquo; just for the screenshot)</em></p>
|
||||
<p><code>M-x org-journal-tags-status</code> opens the status buffer with some statistics about the journal and tags. Press <code>?</code> to see the available keybindings.</p>
|
||||
<p>Pressing <code>RET</code> on a tag name in the &ldquo;All tags&rdquo; section should open a query buffer set to return all references for this tag.</p>
|
||||
<h3 id="query-constructor">Query constructor</h3>
|
||||
<figure><img src="https://sqrtminusone.xyz/org-journal-tags-img/query.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/org-journal-tags-img/query.png">
|
||||
</figure>
|
||||
|
||||
<p>Pressing <code>s</code> in the status buffer or running <code>M-x org-journal-tags-transient-query</code> opens a <a href="https://magit.vc/manual/transient/">transient.el</a> buffer with query settings.</p>
|
||||
|
|
@ -1286,7 +1290,7 @@ timestamps by their date.</li>
|
|||
</ul>
|
||||
<p>Pressing <code>RET</code> or <code>e</code> executes the query. Journal files are cached, so subsequent queries within one session are much faster.</p>
|
||||
<h3 id="query-results">Query results</h3>
|
||||
<figure><img src="https://sqrtminusone.xyz/org-journal-tags-img/query-results.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/org-journal-tags-img/query-results.png">
|
||||
</figure>
|
||||
|
||||
<p>After the query completes, the package opens the results buffer. Press <code>?</code> to see the available keybindings there.</p>
|
||||
|
|
@ -1377,7 +1381,7 @@ timestamps by their date.</li>
|
|||
|
||||
<guid>https://sqrtminusone.xyz/packages/exwm-modeline/</guid>
|
||||
<content type="html">
|
||||
<figure><a href="https://melpa.org/#/exwm-modeline"><img src="https://melpa.org/packages/exwm-modeline-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/exwm-modeline"><img src="https://melpa.org/packages/exwm-modeline-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>A modeline segment to display exwm workspaces.</p>
|
||||
|
|
@ -1418,7 +1422,7 @@ timestamps by their date.</li>
|
|||
|
||||
<guid>https://sqrtminusone.xyz/packages/perspective-exwm/</guid>
|
||||
<content type="html">
|
||||
<figure><a href="https://melpa.org/#/perspective-exwm"><img src="https://melpa.org/packages/perspective-exwm-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/perspective-exwm"><img src="https://melpa.org/packages/perspective-exwm-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>A couple of tricks and fixes to make using <a href="https://github.com/ch11ng/exwm">EXWM</a> and <a href="https://github.com/nex3/perspective-el">perspective.el</a> a better experience.</p>
|
||||
|
|
@ -1456,7 +1460,7 @@ The mode does a couple of things:</p>
|
|||
<li>
|
||||
<p><code>M-x perspective-exwm-cycle-exwm-buffers-forward</code>, <code>perspective-exwm-cycle-exwm-buffers-backward</code><br />
|
||||
Cycle EXWM buffers in the current perspective.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/perspective-exwm-img/cycle-buffers.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/perspective-exwm-img/cycle-buffers.png">
|
||||
</figure>
|
||||
|
||||
<p>The buffer highlighted in yellow is the current one, the buffer highlighted in blue is shown in another window of the perspective so it will be omitted from the cycle.</p>
|
||||
|
|
@ -1469,7 +1473,7 @@ The same as above, but not restricted to EXWM buffers.</p>
|
|||
<li>
|
||||
<p><code>M-x perspective-exwm-switch-perspective</code><br />
|
||||
Select a perspective from the list of all perspectives on all workspaces.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/perspective-exwm-img/switch-perspective.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/perspective-exwm-img/switch-perspective.png">
|
||||
</figure>
|
||||
|
||||
</li>
|
||||
|
|
@ -1517,11 +1521,11 @@ A handy function to move the current window to a given workspace and/or perspect
|
|||
|
||||
<guid>https://sqrtminusone.xyz/packages/pomm/</guid>
|
||||
<content type="html">
|
||||
<figure><a href="https://melpa.org/#/pomm"><img src="https://melpa.org/packages/pomm-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/pomm"><img src="https://melpa.org/packages/pomm-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>Implementation of <a href="https://en.wikipedia.org/wiki/Pomodoro_Technique">Pomodoro</a> and <a href="https://www.lesswrong.com/posts/RWu8eZqbwgB9zaerh/third-time-a-better-way-to-work">Third Time</a> techniques for Emacs.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/pomm-img/screenshot.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/pomm-img/screenshot.png">
|
||||
</figure>
|
||||
|
||||
<p>Features:</p>
|
||||
|
|
@ -1557,7 +1561,7 @@ History of the timer can be stored in a CSV file. Eventually, I want to join thi
|
|||
<p>With &ldquo;r&rdquo; or <code>M-x pomm-set-context</code> you can set the current &ldquo;context&rdquo;, that is some description of the task you are currently working on. This description will show up in history and in the csv file. Also, <code>M-x pomm-start-with-context</code> will prompt for the context and then start the timer.</p>
|
||||
<h3 id="third-time">Third Time</h3>
|
||||
<p>Run <code>M-x pomm-third-time</code> to open the transient buffer for the Third Time technique.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/pomm-img/screenshot-tt.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/pomm-img/screenshot-tt.png">
|
||||
</figure>
|
||||
|
||||
<p>Essentially, the techique is designed aroud the formula:</p>
|
||||
|
|
@ -1704,11 +1708,11 @@ interval = 1
|
|||
|
||||
<guid>https://sqrtminusone.xyz/packages/lyrics-fetcher/</guid>
|
||||
<content type="html">
|
||||
<figure><a href="https://melpa.org/#/lyrics-fetcher"><img src="https://melpa.org/packages/lyrics-fetcher-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/lyrics-fetcher"><img src="https://melpa.org/packages/lyrics-fetcher-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>A package to fetch song lyrics and album covers. Integrates with EMMS.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/lyrics-fetcher-img/screenshot.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/lyrics-fetcher-img/screenshot.png">
|
||||
</figure>
|
||||
|
||||
<p>The available backends are <a href="https://genius.com">genius.com</a> and <a href="https://music.163.com/">music.163.com</a>.</p>
|
||||
|
|
|
|||
|
|
@ -83,11 +83,11 @@
|
|||
<iframe src="https://ghbtns.com/github-btn.html?user=SqrtMinusOne&repo=lyrics-fetcher.el&type=star&count=true" frameborder="0" scrolling="0" width="150" height="20" title="GitHub"></iframe>
|
||||
|
||||
</h1>
|
||||
<figure><a href="https://melpa.org/#/lyrics-fetcher"><img src="https://melpa.org/packages/lyrics-fetcher-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/lyrics-fetcher"><img src="https://melpa.org/packages/lyrics-fetcher-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>A package to fetch song lyrics and album covers. Integrates with EMMS.</p>
|
||||
<figure><img src="/lyrics-fetcher-img/screenshot.png"/>
|
||||
<figure><img src="/lyrics-fetcher-img/screenshot.png">
|
||||
</figure>
|
||||
|
||||
<p>The available backends are <a href="https://genius.com">genius.com</a> and <a href="https://music.163.com/">music.163.com</a>.</p>
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@
|
|||
<iframe src="https://ghbtns.com/github-btn.html?user=SqrtMinusOne&repo=micromamba.el&type=star&count=true" frameborder="0" scrolling="0" width="150" height="20" title="GitHub"></iframe>
|
||||
|
||||
</h1>
|
||||
<figure><a href="https://melpa.org/#/micromamba"><img src="https://melpa.org/packages/micromamba-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/micromamba"><img src="https://melpa.org/packages/micromamba-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>Emacs package for working with <a href="https://mamba.readthedocs.io/en/latest/user_guide/micromamba.html">micromamba</a> environments.</p>
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@
|
|||
|
||||
</h1>
|
||||
<p>Aggregate <a href="https://orgmode.org/manual/Clocking-Work-Time.html">org-clock</a> records and display the results in an interactive buffer. The records are grouped by predicates such as file name, their outline path in the file, etc. Each record is placed in a tree structure; each node of the tree shows the total time spent in that node and its children. The top-level node shows the total time spent in all records found by the query.</p>
|
||||
<figure><img src="/org-clock-agg-img/screenshot.png"/>
|
||||
<figure><img src="/org-clock-agg-img/screenshot.png">
|
||||
</figure>
|
||||
|
||||
<h2 id="installation">Installation</h2>
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@
|
|||
<iframe src="https://ghbtns.com/github-btn.html?user=SqrtMinusOne&repo=org-journal-tags&type=star&count=true" frameborder="0" scrolling="0" width="150" height="20" title="GitHub"></iframe>
|
||||
|
||||
</h1>
|
||||
<figure><a href="https://melpa.org/#/org-journal-tags"><img src="https://melpa.org/packages/org-journal-tags-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/org-journal-tags"><img src="https://melpa.org/packages/org-journal-tags-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>A package to make sense of <del>my life</del> <a href="https://github.com/bastibe/org-journal">org-journal</a> records.</p>
|
||||
|
|
@ -139,14 +139,14 @@
|
|||
<p>The same mode enables saving the database on killing Emacs, but you can always run <code>M-x org-journal-tags-db-save</code> manually.</p>
|
||||
<p><code>M-x org-journal-tags-db-unload</code> saves and unloads the database from the memory, <code>M-x org-journal-tags-db-reset</code> creates a new database.</p>
|
||||
<h3 id="status-buffer">Status buffer</h3>
|
||||
<figure><img src="/org-journal-tags-img/status.png"/>
|
||||
<figure><img src="/org-journal-tags-img/status.png">
|
||||
</figure>
|
||||
|
||||
<p><em>(I replaced tag names with “X” just for the screenshot)</em></p>
|
||||
<p><code>M-x org-journal-tags-status</code> opens the status buffer with some statistics about the journal and tags. Press <code>?</code> to see the available keybindings.</p>
|
||||
<p>Pressing <code>RET</code> on a tag name in the “All tags” section should open a query buffer set to return all references for this tag.</p>
|
||||
<h3 id="query-constructor">Query constructor</h3>
|
||||
<figure><img src="/org-journal-tags-img/query.png"/>
|
||||
<figure><img src="/org-journal-tags-img/query.png">
|
||||
</figure>
|
||||
|
||||
<p>Pressing <code>s</code> in the status buffer or running <code>M-x org-journal-tags-transient-query</code> opens a <a href="https://magit.vc/manual/transient/">transient.el</a> buffer with query settings.</p>
|
||||
|
|
@ -166,7 +166,7 @@ timestamps by their date.</li>
|
|||
</ul>
|
||||
<p>Pressing <code>RET</code> or <code>e</code> executes the query. Journal files are cached, so subsequent queries within one session are much faster.</p>
|
||||
<h3 id="query-results">Query results</h3>
|
||||
<figure><img src="/org-journal-tags-img/query-results.png"/>
|
||||
<figure><img src="/org-journal-tags-img/query-results.png">
|
||||
</figure>
|
||||
|
||||
<p>After the query completes, the package opens the results buffer. Press <code>?</code> to see the available keybindings there.</p>
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@
|
|||
<iframe src="https://ghbtns.com/github-btn.html?user=SqrtMinusOne&repo=perspective-exwm.el&type=star&count=true" frameborder="0" scrolling="0" width="150" height="20" title="GitHub"></iframe>
|
||||
|
||||
</h1>
|
||||
<figure><a href="https://melpa.org/#/perspective-exwm"><img src="https://melpa.org/packages/perspective-exwm-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/perspective-exwm"><img src="https://melpa.org/packages/perspective-exwm-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>A couple of tricks and fixes to make using <a href="https://github.com/ch11ng/exwm">EXWM</a> and <a href="https://github.com/nex3/perspective-el">perspective.el</a> a better experience.</p>
|
||||
|
|
@ -121,7 +121,7 @@ The mode does a couple of things:</p>
|
|||
<li>
|
||||
<p><code>M-x perspective-exwm-cycle-exwm-buffers-forward</code>, <code>perspective-exwm-cycle-exwm-buffers-backward</code><br />
|
||||
Cycle EXWM buffers in the current perspective.</p>
|
||||
<figure><img src="/perspective-exwm-img/cycle-buffers.png"/>
|
||||
<figure><img src="/perspective-exwm-img/cycle-buffers.png">
|
||||
</figure>
|
||||
|
||||
<p>The buffer highlighted in yellow is the current one, the buffer highlighted in blue is shown in another window of the perspective so it will be omitted from the cycle.</p>
|
||||
|
|
@ -134,7 +134,7 @@ The same as above, but not restricted to EXWM buffers.</p>
|
|||
<li>
|
||||
<p><code>M-x perspective-exwm-switch-perspective</code><br />
|
||||
Select a perspective from the list of all perspectives on all workspaces.</p>
|
||||
<figure><img src="/perspective-exwm-img/switch-perspective.png"/>
|
||||
<figure><img src="/perspective-exwm-img/switch-perspective.png">
|
||||
</figure>
|
||||
|
||||
</li>
|
||||
|
|
|
|||
|
|
@ -83,11 +83,11 @@
|
|||
<iframe src="https://ghbtns.com/github-btn.html?user=SqrtMinusOne&repo=pomm.el&type=star&count=true" frameborder="0" scrolling="0" width="150" height="20" title="GitHub"></iframe>
|
||||
|
||||
</h1>
|
||||
<figure><a href="https://melpa.org/#/pomm"><img src="https://melpa.org/packages/pomm-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/pomm"><img src="https://melpa.org/packages/pomm-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>Implementation of <a href="https://en.wikipedia.org/wiki/Pomodoro_Technique">Pomodoro</a> and <a href="https://www.lesswrong.com/posts/RWu8eZqbwgB9zaerh/third-time-a-better-way-to-work">Third Time</a> techniques for Emacs.</p>
|
||||
<figure><img src="/pomm-img/screenshot.png"/>
|
||||
<figure><img src="/pomm-img/screenshot.png">
|
||||
</figure>
|
||||
|
||||
<p>Features:</p>
|
||||
|
|
@ -123,7 +123,7 @@ History of the timer can be stored in a CSV file. Eventually, I want to join thi
|
|||
<p>With “r” or <code>M-x pomm-set-context</code> you can set the current “context”, that is some description of the task you are currently working on. This description will show up in history and in the csv file. Also, <code>M-x pomm-start-with-context</code> will prompt for the context and then start the timer.</p>
|
||||
<h3 id="third-time">Third Time</h3>
|
||||
<p>Run <code>M-x pomm-third-time</code> to open the transient buffer for the Third Time technique.</p>
|
||||
<figure><img src="/pomm-img/screenshot-tt.png"/>
|
||||
<figure><img src="/pomm-img/screenshot-tt.png">
|
||||
</figure>
|
||||
|
||||
<p>Essentially, the techique is designed aroud the formula:</p>
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@
|
|||
<iframe src="https://ghbtns.com/github-btn.html?user=SqrtMinusOne&repo=reverso.el&type=star&count=true" frameborder="0" scrolling="0" width="150" height="20" title="GitHub"></iframe>
|
||||
|
||||
</h1>
|
||||
<figure><a href="https://melpa.org/#/reverso"><img src="https://melpa.org/packages/reverso-badge.svg"/></a>
|
||||
<figure><a href="https://melpa.org/#/reverso"><img src="https://melpa.org/packages/reverso-badge.svg"></a>
|
||||
</figure>
|
||||
|
||||
<p>Emacs client for <a href="https://www.reverso.net/">Reverso</a>. The implemented features are:</p>
|
||||
|
|
@ -110,12 +110,12 @@
|
|||
<p>Results are displayed in <code>reverso-result-mode</code> buffers. When launched within that buffer, the command uses the input string specific to the buffer. If launched with <code>C-u</code>, it uses the output string from that buffer (if available).</p>
|
||||
<h3 id="translation">Translation</h3>
|
||||
<p>Use <code>M-x reverso t</code> or <code>M-x reverso-translate</code> to invoke the translation transient.</p>
|
||||
<figure><img src="/reverso-img/translation-transient.png"/>
|
||||
<figure><img src="/reverso-img/translation-transient.png">
|
||||
</figure>
|
||||
|
||||
<p>The “Source language” and “Target language” parameters are self-explanatory. Note that not every language is compatible with every other language in the general case. “Swap languages” attempts to swap them.</p>
|
||||
<p>Enabling “Brief translation output” will display only the translated version of the string in the output buffer.</p>
|
||||
<figure><img src="/reverso-img/translation-res.png"/>
|
||||
<figure><img src="/reverso-img/translation-res.png">
|
||||
</figure>
|
||||
|
||||
<p>Otherwise, the result buffer may contain the following sections:</p>
|
||||
|
|
@ -131,10 +131,10 @@
|
|||
<p>Interestingly, direct context search often yields different results than the “Context results” section of the translation command. Hence, checking both might provide more comprehensive data.</p>
|
||||
<h3 id="synonyms">Synonyms</h3>
|
||||
<p>Use <code>M-x reverso s</code> or <code>M-x reverso-synonyms</code> to invoke the synonyms search.</p>
|
||||
<figure><img src="/reverso-img/synonyms-transient.png"/>
|
||||
<figure><img src="/reverso-img/synonyms-transient.png">
|
||||
</figure>
|
||||
|
||||
<figure><img src="/reverso-img/synonyms-res.png"/>
|
||||
<figure><img src="/reverso-img/synonyms-res.png">
|
||||
</figure>
|
||||
|
||||
<p>If necessary, results are segmented by parts of speech.</p>
|
||||
|
|
@ -146,19 +146,19 @@
|
|||
</ul>
|
||||
<h3 id="conjugation">Conjugation</h3>
|
||||
<p>Use <code>M-x reverso o</code> or <code>M-x reverso-conjugation</code> to invoke verb conjugation dialog.</p>
|
||||
<figure><img src="/reverso-img/conjugation-transient.png"/>
|
||||
<figure><img src="/reverso-img/conjugation-transient.png">
|
||||
</figure>
|
||||
|
||||
<figure><img src="/reverso-img/conjugation-res.png"/>
|
||||
<figure><img src="/reverso-img/conjugation-res.png">
|
||||
</figure>
|
||||
|
||||
<h3 id="grammar-check">Grammar check</h3>
|
||||
<p>Use <code>M-x reverso g</code> or <code>M-x reverso-grammar</code> to invoke the grammar check.</p>
|
||||
<figure><img src="/reverso-img/grammar-transient.png"/>
|
||||
<figure><img src="/reverso-img/grammar-transient.png">
|
||||
</figure>
|
||||
|
||||
<p>Currently, only English, French, Spanish, and Italian languages are available.</p>
|
||||
<figure><img src="/reverso-img/grammar-res.png"/>
|
||||
<figure><img src="/reverso-img/grammar-res.png">
|
||||
</figure>
|
||||
|
||||
<p>The results may contain the following sections:</p>
|
||||
|
|
@ -169,7 +169,7 @@
|
|||
</ul>
|
||||
<h3 id="grammar-check-in-buffer">Grammar check in buffer</h3>
|
||||
<p>It can be convenient to apply the grammar check directly to the current buffer without displaying results in another buffer. Use <code>M-x reverso b</code> or <code>M-x reverso-grammar-buffer</code> for this.</p>
|
||||
<figure><img src="/reverso-img/grammar-buffer-transient.png"/>
|
||||
<figure><img src="/reverso-img/grammar-buffer-transient.png">
|
||||
</figure>
|
||||
|
||||
<p>Running <code>e</code> there (or <code>M-x reverso-check-buffer</code>) utilizes the current buffer as input and highlights any found errors using overlays. If a region is selected, the check is confined to that region.</p>
|
||||
|
|
@ -177,7 +177,7 @@
|
|||
<p>Secondly, the service usually freaks out with special syntax, for instance, Org Mode links.</p>
|
||||
<p>The third issue partly follows from the second one, as the service often finds “errors” within hidden parts of Org links. Either skip these errors or execute <code>M-x org-toggle-link-display</code> in Org files beforehand.</p>
|
||||
<p>Lastly (and this applies to all other methods as well), the API usually restricts input size. If the service returns an error, try running the command on a smaller region of the buffer.</p>
|
||||
<figure><img src="/reverso-img/grammar-buffer-res.png"/>
|
||||
<figure><img src="/reverso-img/grammar-buffer-res.png">
|
||||
</figure>
|
||||
|
||||
<p>When the cursor is placed on an error, the “Information” section provides details.</p>
|
||||
|
|
|
|||
|
|
@ -80,10 +80,10 @@
|
|||
<p>Any classical IMAP/SMTP client is hard to use in my case, because a message with multiple labels is copied to IMAP folders for each of the label plus the inbox folder, and the copies look like different messages from the client-side. For example, a message can be read in one label and unread in another.</p>
|
||||
<p>For a few years, my solution was <a href="https://getmailspring.com/">Mailspring</a>, which provides first-class support for labels. However, it has a feature to deploy <a href="https://www.bbc.com/news/technology-56071437">spy pixels</a> on emails (and offers no protection from them, obviously), the client is Electron-based with a mouse-driven interface, and the sync engine was closed-source at the time.</p>
|
||||
<p>So, I found an alternative in Emacs+notmuch+lieer and ditched one more proprietary app (the last big one I can’t let go of is DataGrip).</p>
|
||||
<figure><img src="/images/gmail/main.png"/>
|
||||
<figure><img src="/images/gmail/main.png">
|
||||
</figure>
|
||||
|
||||
<figure><img src="/images/gmail/mail.png"/>
|
||||
<figure><img src="/images/gmail/mail.png">
|
||||
</figure>
|
||||
|
||||
<p>Notmuch’s tags are just as advanced as Gmail’s labels, so I have basically the same mail structure accessible from Emacs, Gmail Android client and even the web UI when I don’t have access to the first two.</p>
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@
|
|||
<h1 id="title-small-screen">Replacing Jupyter Notebook with Org Mode</h1>
|
||||
<div class="container" id="actual-content">
|
||||
<h1 id="title-large-screen">Replacing Jupyter Notebook with Org Mode</h1>
|
||||
<figure><img src="/images/org-python/org-python-screenshot.png"/>
|
||||
<figure><img src="/images/org-python/org-python-screenshot.png">
|
||||
</figure>
|
||||
|
||||
<h2 id="why">Why?</h2>
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@
|
|||
<div class="container" id="actual-content">
|
||||
<h1 id="title-large-screen">My EMMS and elfeed setup</h1>
|
||||
<h2 id="intro">Intro</h2>
|
||||
<figure><img src="/images/emms/emms-screenshot.png"/>
|
||||
<figure><img src="/images/emms/emms-screenshot.png">
|
||||
</figure>
|
||||
|
||||
<p>This is the current state of my quest to live in Emacs, at least in part of reading RSS and music.</p>
|
||||
|
|
|
|||
|
|
@ -510,7 +510,7 @@
|
|||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:overwrite</span> <span style="color:#19177c">current-prefix-arg</span>)))
|
||||
</span></span></code></pre></div><p>If the <code>my/elfeed-show-rdrview-html</code> variable is bound and true, then the content in this buffer was retrieved via <code>rdrview</code>, so we’ll use that instead of the output of <code>elfeed-deref</code>.</p>
|
||||
<p>Now we can open elfeed entries in a PDF viewer, which I find much nicer to read. Given that RSS feeds generally ship with simpler HTML than the regular websites, results usually look awesome:</p>
|
||||
<figure><img src="/images/pdf-prot.png"/>
|
||||
<figure><img src="/images/pdf-prot.png">
|
||||
</figure>
|
||||
|
||||
<h3 id="opening-arbitrary-sites">Opening arbitrary sites</h3>
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@
|
|||
<p>In my experience, finding something in a podcast is particularly troublesome. For example, occasionally I want to refer to some line in the podcast to make an <a href="https://github.com/org-roam/org-roam">org-roam</a> node, e.g. I want to check that I got that part right.</p>
|
||||
<p>And I have no reasonable way to get there because audio files in themselves don’t allow for <a href="https://en.wikipedia.org/wiki/Random_access">random access</a>, i.e. there are no “landmarks” that point to this or that portion of the file. At least if nothing like a transcript is available.</p>
|
||||
<p>For obvious reasons, podcasts rarely ship with transcripts. So in this post, I’ll be using a speech recognition engine to make up for that. A generated transcript is not quite as good as a manually written one, but for the purpose of finding a fragment of a known podcast, it works well enough.</p>
|
||||
<figure><img src="/images/vosk/img.png"/>
|
||||
<figure><img src="/images/vosk/img.png">
|
||||
</figure>
|
||||
|
||||
<p>The general idea is to get the podcast info from <a href="https://github.com/skeeto/elfeed">elfeed</a>, process it with <a href="https://github.com/alphacep/vosk-api">vosk-api</a> and feed it to <a href="https://github.com/sachac/subed">subed</a> to control the playback in <a href="https://mpv.io/">MPV</a>. I’ve done something similar for <a href="https://sqrtminusone.xyz/posts/2022-05-09-pdf/#youtube-transcripts">YouTube videos</a> in the previous post, by the way.</p>
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@
|
|||
<h1 id="title-small-screen">Running Gource with Emacs</h1>
|
||||
<div class="container" id="actual-content">
|
||||
<h1 id="title-large-screen">Running Gource with Emacs</h1>
|
||||
<figure><img src="/images/gource/gource.png"/>
|
||||
<figure><img src="/images/gource/gource.png">
|
||||
</figure>
|
||||
|
||||
<p><a href="https://gource.io/">Gource</a> is a program that draws an animated graph of users changing the repository over time.</p>
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@
|
|||
<p>Fortunately, I’m well-acquainted (make-yourself-a) Swiss Army Knife of computing called <a href="https://www.gnu.org/software/emacs/">Emacs</a>, so… below is my attempt to make something of it. And another addition to the already substantial list of my Emacs uses.</p>
|
||||
<p>Also, my <code>M-x magit-log-buffer-file</code> shows I created that file on the same day I had written the embedded toot, so this must be the longest Emacs thing I’ve been figuring out. And it’s probably the least portable, but I nevertheless hope you find it useful.</p>
|
||||
<h2 id="idea">Idea</h2>
|
||||
<figure><img src="/images/index/index.png"/>
|
||||
<figure><img src="/images/index/index.png">
|
||||
</figure>
|
||||
|
||||
<p>So, I decided to try declarative filesystem management.</p>
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
<p>Fortunately, I&rsquo;m well-acquainted (make-yourself-a) Swiss Army Knife of computing called <a href="https://www.gnu.org/software/emacs/">Emacs</a>, so&hellip; below is my attempt to make something of it. And another addition to the already substantial list of my Emacs uses.</p>
|
||||
<p>Also, my <code>M-x magit-log-buffer-file</code> shows I created that file on the same day I had written the embedded toot, so this must be the longest Emacs thing I&rsquo;ve been figuring out. And it&rsquo;s probably the least portable, but I nevertheless hope you find it useful.</p>
|
||||
<h2 id="idea">Idea</h2>
|
||||
<figure><img src="https://sqrtminusone.xyz/images/index/index.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/images/index/index.png">
|
||||
</figure>
|
||||
|
||||
<p>So, I decided to try declarative filesystem management.</p>
|
||||
|
|
@ -931,7 +931,7 @@ Time spent in Emacs but not in an actual project (i.e. accounted by the <a hr
|
|||
|
||||
<guid>https://sqrtminusone.xyz/posts/2023-01-02-gource/</guid>
|
||||
<content type="html">
|
||||
<figure><img src="https://sqrtminusone.xyz/images/gource/gource.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/images/gource/gource.png">
|
||||
</figure>
|
||||
|
||||
<p><a href="https://gource.io/">Gource</a> is a program that draws an animated graph of users changing the repository over time.</p>
|
||||
|
|
@ -1185,7 +1185,7 @@ I&rsquo;ve seen a couple of cases where people would swap their username and
|
|||
<p>In my experience, finding something in a podcast is particularly troublesome. For example, occasionally I want to refer to some line in the podcast to make an <a href="https://github.com/org-roam/org-roam">org-roam</a> node, e.g. I want to check that I got that part right.</p>
|
||||
<p>And I have no reasonable way to get there because audio files in themselves don&rsquo;t allow for <a href="https://en.wikipedia.org/wiki/Random_access">random access</a>, i.e. there are no &ldquo;landmarks&rdquo; that point to this or that portion of the file. At least if nothing like a transcript is available.</p>
|
||||
<p>For obvious reasons, podcasts rarely ship with transcripts. So in this post, I&rsquo;ll be using a speech recognition engine to make up for that. A generated transcript is not quite as good as a manually written one, but for the purpose of finding a fragment of a known podcast, it works well enough.</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/images/vosk/img.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/images/vosk/img.png">
|
||||
</figure>
|
||||
|
||||
<p>The general idea is to get the podcast info from <a href="https://github.com/skeeto/elfeed">elfeed</a>, process it with <a href="https://github.com/alphacep/vosk-api">vosk-api</a> and feed it to <a href="https://github.com/sachac/subed">subed</a> to control the playback in <a href="https://mpv.io/">MPV</a>. I&rsquo;ve done something similar for <a href="https://sqrtminusone.xyz/posts/2022-05-09-pdf/#youtube-transcripts">YouTube videos</a> in the previous post, by the way.</p>
|
||||
|
|
@ -1855,7 +1855,7 @@ I&rsquo;ve seen a couple of cases where people would swap their username and
|
|||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:overwrite</span> <span style="color:#19177c">current-prefix-arg</span>)))
|
||||
</span></span></code></pre></div><p>If the <code>my/elfeed-show-rdrview-html</code> variable is bound and true, then the content in this buffer was retrieved via <code>rdrview</code>, so we&rsquo;ll use that instead of the output of <code>elfeed-deref</code>.</p>
|
||||
<p>Now we can open elfeed entries in a PDF viewer, which I find much nicer to read. Given that RSS feeds generally ship with simpler HTML than the regular websites, results usually look awesome:</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/images/pdf-prot.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/images/pdf-prot.png">
|
||||
</figure>
|
||||
|
||||
<h3 id="opening-arbitrary-sites">Opening arbitrary sites</h3>
|
||||
|
|
@ -3102,7 +3102,7 @@ I&rsquo;ve seen a couple of cases where people would swap their username and
|
|||
<guid>https://sqrtminusone.xyz/posts/2021-09-07-emms/</guid>
|
||||
<content type="html">
|
||||
<h2 id="intro">Intro</h2>
|
||||
<figure><img src="https://sqrtminusone.xyz/images/emms/emms-screenshot.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/images/emms/emms-screenshot.png">
|
||||
</figure>
|
||||
|
||||
<p>This is the current state of my quest to live in Emacs, at least in part of reading RSS and music.</p>
|
||||
|
|
@ -3341,7 +3341,7 @@ I&rsquo;ve seen a couple of cases where people would swap their username and
|
|||
|
||||
<guid>https://sqrtminusone.xyz/posts/2021-05-01-org-python/</guid>
|
||||
<content type="html">
|
||||
<figure><img src="https://sqrtminusone.xyz/images/org-python/org-python-screenshot.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/images/org-python/org-python-screenshot.png">
|
||||
</figure>
|
||||
|
||||
<h2 id="why">Why?</h2>
|
||||
|
|
@ -3710,10 +3710,10 @@ I&rsquo;ve seen a couple of cases where people would swap their username and
|
|||
<p>Any classical IMAP/SMTP client is hard to use in my case, because a message with multiple labels is copied to IMAP folders for each of the label plus the inbox folder, and the copies look like different messages from the client-side. For example, a message can be read in one label and unread in another.</p>
|
||||
<p>For a few years, my solution was <a href="https://getmailspring.com/">Mailspring</a>, which provides first-class support for labels. However, it has a feature to deploy <a href="https://www.bbc.com/news/technology-56071437">spy pixels</a> on emails (and offers no protection from them, obviously), the client is Electron-based with a mouse-driven interface, and the sync engine was closed-source at the time.</p>
|
||||
<p>So, I found an alternative in Emacs+notmuch+lieer and ditched one more proprietary app (the last big one I can&rsquo;t let go of is DataGrip).</p>
|
||||
<figure><img src="https://sqrtminusone.xyz/images/gmail/main.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/images/gmail/main.png">
|
||||
</figure>
|
||||
|
||||
<figure><img src="https://sqrtminusone.xyz/images/gmail/mail.png"/>
|
||||
<figure><img src="https://sqrtminusone.xyz/images/gmail/mail.png">
|
||||
</figure>
|
||||
|
||||
<p>Notmuch&rsquo;s tags are just as advanced as Gmail&rsquo;s labels, so I have basically the same mail structure accessible from Emacs, Gmail Android client and even the web UI when I don&rsquo;t have access to the first two.</p>
|
||||
|
|
|
|||
BIN
stats/all.png
BIN
stats/all.png
Binary file not shown.
|
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 120 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 61 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB |
Loading…
Add table
Reference in a new issue