mirror of
https://github.com/SqrtMinusOne/sqrtminusone.github.io.git
synced 2025-12-11 00:03:02 +03:00
deploy: ec9d4f60e5
This commit is contained in:
parent
66a38c001a
commit
16ffe40781
10 changed files with 689 additions and 307 deletions
|
|
@ -85,7 +85,7 @@
|
|||
</span></span></code></pre></div><p>Set ripgrep config path</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span><span style="color:#008000">export</span> <span style="color:#19177c">RIPGREP_CONFIG_PATH</span><span style="color:#666">=</span><span style="color:#19177c">$HOME</span>/.config/ripgrep/ripgreprc
|
||||
</span></span></code></pre></div><p>hledger path</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span><span style="color:#008000">export</span> <span style="color:#19177c">LEDGER_FILE</span><span style="color:#666">=</span>~/Documents/org-mode/ledger/ledger.journal
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span><span style="color:#008000">export</span> <span style="color:#19177c">LEDGER_FILE</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#19177c">$HOME</span><span style="color:#ba2121">/30-39 Life/32 org-mode/ledger/ledger.journal"</span>
|
||||
</span></span></code></pre></div><p>Checking if running inside termux</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#008000">command</span> -v termux-setup-storage > /dev/null; <span style="color:#008000;font-weight:bold">then</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">export</span> <span style="color:#19177c">IS_ANDROID</span><span style="color:#666">=</span><span style="color:#008000">true</span>
|
||||
|
|
@ -154,7 +154,7 @@
|
|||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cfg" data-lang="cfg"><span style="display:flex;"><span><span style="color:#7d9029">prefix</span><span style="color:#666">=</span><span style="color:#ba2121">/home/pavel/.npm-packages</span>
|
||||
</span></span></code></pre></div><p>But I also want to use node from conda occasionally, where prefix is already set correctly. So instead of tangling the above to the <code>~/.npmrc</code> directly, I set an environment variable in the profile:</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span><span style="color:#008000">export</span> <span style="color:#19177c">NPM_CONFIG_USERCONFIG</span><span style="color:#666">=</span><span style="color:#19177c">$HOME</span>/._npmrc
|
||||
</span></span></code></pre></div><p>The variable is unset in a script in <a href="/configs/guix/#conda">Guix.org</a>.</p>
|
||||
</span></span></code></pre></div><p>The variable is unset in a script in <a href="/configs/guix/#micromamba">Guix.org</a>.</p>
|
||||
<p>Set PATH & MANPATH</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span><span style="color:#19177c">NPM_PACKAGES</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">HOME</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#ba2121">/.npm-packages"</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
|
|
@ -251,6 +251,8 @@
|
|||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>xhost +local:root > /dev/null 2>&<span style="color:#666">1</span>
|
||||
</span></span></code></pre></div><p>Set manpager to bat</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#008000">export</span> <span style="color:#19177c">MANPAGER</span><span style="color:#666">=</span><span style="color:#ba2121">"sh -c 'sed -e s/.\\\\x08//g | bat -l man -p'"</span>
|
||||
</span></span></code></pre></div><p><a href="https://codeberg.org/akib/emacs-eat">eat</a> integration</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#666">[</span> -n <span style="color:#ba2121">"</span><span style="color:#19177c">$EAT_SHELL_INTEGRATION_DIR</span><span style="color:#ba2121">"</span> <span style="color:#666">]</span> <span style="color:#666">&&</span> <span style="color:#008000">source</span> <span style="color:#ba2121">"</span><span style="color:#19177c">$EAT_SHELL_INTEGRATION_DIR</span><span style="color:#ba2121">/bash"</span>
|
||||
</span></span></code></pre></div><h4 id="launch-fish">Launch fish</h4>
|
||||
<p>Launch fish shell unless bash itself is launched from fish.</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#19177c">use_fish</span><span style="color:#666">=</span><span style="color:#008000">true</span>
|
||||
|
|
@ -333,40 +335,45 @@
|
|||
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
||||
</span></span></code></pre></div><h4 id="aliases">Aliases</h4>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#008000">alias</span> <span style="color:#19177c">v</span><span style="color:#666">=</span><span style="color:#ba2121">"vim"</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000">alias</span> <span style="color:#19177c">gg</span><span style="color:#666">=</span><span style="color:#ba2121">"lazygit"</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000">alias</span> <span style="color:#19177c">ls</span><span style="color:#666">=</span><span style="color:#ba2121">"exa --icons"</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000">alias</span> <span style="color:#19177c">ll</span><span style="color:#666">=</span><span style="color:#ba2121">"exa -lah --icons"</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#008000">command</span> -v exa > /dev/null; <span style="color:#008000;font-weight:bold">then</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">alias</span> <span style="color:#19177c">ls</span><span style="color:#666">=</span><span style="color:#ba2121">"exa --icons"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">alias</span> <span style="color:#19177c">ll</span><span style="color:#666">=</span><span style="color:#ba2121">"exa -lah --icons"</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">else</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">alias</span> <span style="color:#19177c">ll</span><span style="color:#666">=</span><span style="color:#ba2121">'ls -lah'</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000">alias</span> <span style="color:#19177c">q</span><span style="color:#666">=</span><span style="color:#ba2121">"exit"</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000">alias</span> <span style="color:#19177c">c</span><span style="color:#666">=</span><span style="color:#ba2121">"clear"</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000">alias</span> <span style="color:#19177c">ci</span><span style="color:#666">=</span><span style="color:#ba2121">"init_conda"</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000">alias</span> <span style="color:#19177c">ca</span><span style="color:#666">=</span><span style="color:#ba2121">"conda activate"</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000">alias</span> <span style="color:#19177c">cii</span><span style="color:#666">=</span><span style="color:#ba2121">"export INIT_CONDA=true && init_conda"</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000">alias</span> <span style="color:#19177c">ci</span><span style="color:#666">=</span><span style="color:#ba2121">"init_mamba"</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000">alias</span> <span style="color:#19177c">ca</span><span style="color:#666">=</span><span style="color:#ba2121">"micromamba activate"</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000">alias</span> <span style="color:#19177c">cii</span><span style="color:#666">=</span><span style="color:#ba2121">"export INIT_MAMBA=true && init_mamba"</span>
|
||||
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[[</span> ! -z <span style="color:#ba2121">"</span><span style="color:#19177c">$SIMPLE</span><span style="color:#ba2121">"</span> <span style="color:#666">]]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">unalias</span> ls
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">alias</span> <span style="color:#19177c">ll</span><span style="color:#666">=</span><span style="color:#ba2121">"ls -lah"</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
||||
</span></span></code></pre></div><h4 id="anaconda">Anaconda</h4>
|
||||
</span></span></code></pre></div><h4 id="micromamba">Micromamba</h4>
|
||||
<p>I’ve moved from conda to <a href="https://github.com/mamba-org/mamba">micromamba</a> because it’s faster.</p>
|
||||
<blockquote>
|
||||
<p>managed by ‘conda init’ !!!</p>
|
||||
<p>managed by ‘mamba init’ !!!</p>
|
||||
</blockquote>
|
||||
<p>Yeah, tell this to yourself</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>init_conda <span style="color:#666">()</span> <span style="color:#666">{</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">__conda_setup</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#008000;font-weight:bold">$(</span><span style="color:#ba2121">'/home/pavel/.guix-extra-profiles/dev/dev/bin/conda'</span> <span style="color:#ba2121">'shell.bash'</span> <span style="color:#ba2121">'hook'</span> 2> /dev/null<span style="color:#008000;font-weight:bold">)</span><span style="color:#ba2121">"</span>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>init_mamba <span style="color:#666">()</span> <span style="color:#666">{</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">export</span> <span style="color:#19177c">MAMBA_EXE</span><span style="color:#666">=</span><span style="color:#ba2121">"/gnu/store/w0rrglxs2247nr4wawrh5dylisjra1q4-micromamba-bin-1.4.4-0/bin/micromamba"</span>;
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">export</span> <span style="color:#19177c">MAMBA_ROOT_PREFIX</span><span style="color:#666">=</span><span style="color:#ba2121">"/home/pavel/micromamba"</span>;
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">__mamba_setup</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#008000;font-weight:bold">$(</span><span style="color:#ba2121">"</span><span style="color:#19177c">$MAMBA_EXE</span><span style="color:#ba2121">"</span> shell hook --shell bash --prefix <span style="color:#ba2121">"</span><span style="color:#19177c">$MAMBA_ROOT_PREFIX</span><span style="color:#ba2121">"</span> 2> /dev/null<span style="color:#008000;font-weight:bold">)</span><span style="color:#ba2121">"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[</span> <span style="color:#19177c">$?</span> -eq <span style="color:#666">0</span> <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">eval</span> <span style="color:#ba2121">"</span><span style="color:#19177c">$__conda_setup</span><span style="color:#ba2121">"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">eval</span> <span style="color:#ba2121">"</span><span style="color:#19177c">$__mamba_setup</span><span style="color:#ba2121">"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">else</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[</span> -f <span style="color:#ba2121">"/home/pavel/.guix-extra-profiles/dev/dev/etc/profile.d/conda.sh"</span> <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
||||
</span></span><span style="display:flex;"><span> . <span style="color:#ba2121">"/home/pavel/.guix-extra-profiles/dev/dev/etc/profile.d/conda.sh"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[</span> -f <span style="color:#ba2121">"/home/pavel/micromamba/etc/profile.d/micromamba.sh"</span> <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
||||
</span></span><span style="display:flex;"><span> . <span style="color:#ba2121">"/home/pavel/micromamba/etc/profile.d/micromamba.sh"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">else</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># export PATH="/home/pavel/Programs/miniconda3/bin:$PATH"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#ba2121">"what"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">export</span> <span style="color:#19177c">PATH</span><span style="color:#666">=</span><span style="color:#ba2121">"/home/pavel/micromamba/bin:</span><span style="color:#19177c">$PATH</span><span style="color:#ba2121">"</span> <span style="color:#408080;font-style:italic"># extra space after export prevents interference from conda init</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">fi</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">fi</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">unset</span> __conda_setup
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">unset</span> __mamba_setup
|
||||
</span></span><span style="display:flex;"><span><span style="color:#666">}</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[[</span> ! -z <span style="color:#ba2121">"</span><span style="color:#19177c">$INIT_CONDA</span><span style="color:#ba2121">"</span> <span style="color:#666">]]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
||||
</span></span><span style="display:flex;"><span> init_conda
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[[</span> ! -z <span style="color:#ba2121">"</span><span style="color:#19177c">$INIT_MAMBA</span><span style="color:#ba2121">"</span> <span style="color:#666">]]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
||||
</span></span><span style="display:flex;"><span> init_mamba
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
||||
</span></span></code></pre></div><h4 id="starship">Starship</h4>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[[</span> -z <span style="color:#ba2121">"</span><span style="color:#19177c">$SIMPLE</span><span style="color:#ba2121">"</span> <span style="color:#666">&&</span> <span style="color:#ba2121">"</span><span style="color:#19177c">$TERM</span><span style="color:#ba2121">"</span> !<span style="color:#666">=</span> <span style="color:#ba2121">"dumb"</span> <span style="color:#666">]]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
||||
|
|
@ -403,8 +410,14 @@
|
|||
</span></span></code></pre></div><p>Enable vi keybindings & aliases. The alias syntax is the same as in bash, so it’s just a noweb reference to <code>.bashrc</code>.</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-fish" data-lang="fish"><span style="display:flex;"><span><span style="color:#00f">fish_vi_key_bindings</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#ba2121"><<shell-alias</span>es<span style="color:#666">>></span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000">alias </span><span style="color:#19177c">cad</span><span style="color:#666">=</span><span style="color:#ba2121">"conda activate (basename (pwd))"</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000">alias </span><span style="color:#19177c">q</span><span style="color:#666">=</span><span style="color:#ba2121">"exit"</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000">alias </span><span style="color:#19177c">c</span><span style="color:#666">=</span><span style="color:#ba2121">"clear"</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#008000">type</span> <span style="color:#7d9029">-q</span> exa
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">alias </span><span style="color:#19177c">ls</span><span style="color:#666">=</span><span style="color:#ba2121">"exa --icons"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">alias </span><span style="color:#19177c">ll</span><span style="color:#666">=</span><span style="color:#ba2121">"exa -lah --icons"</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">else</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">alias </span><span style="color:#19177c">ll</span><span style="color:#666">=</span><span style="color:#ba2121">"ls -h"</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">end</span>
|
||||
</span></span></code></pre></div><table>
|
||||
<thead>
|
||||
<tr>
|
||||
|
|
@ -423,20 +436,26 @@
|
|||
</span></span></span><span style="display:flex;"><span><span style="color:#008000"></span><span style="color:#008000;font-weight:bold">end</span>
|
||||
</span></span></code></pre></div><p>Suppress fish greeting</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-fish" data-lang="fish"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> <span style="color:#008000">fish_greeting</span>
|
||||
</span></span></code></pre></div><h3 id="anaconda-1">Anaconda</h3>
|
||||
<p>First, a function to initialize anaconda.</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-fish" data-lang="fish"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">function</span> <span style="color:#00f">init_conda</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">eval</span> /home/pavel/.guix-extra-profiles/dev/dev/bin/conda <span style="color:#ba2121">"shell.fish"</span> <span style="color:#ba2121">"hook"</span> <span style="color:#19177c">$argv</span> <span style="color:#666">|</span> <span style="color:#008000">source
|
||||
</span></span></code></pre></div><h3 id="micromamba-1">Micromamba</h3>
|
||||
<p>First, a function to initialize micromamba.</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-fish" data-lang="fish"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">function</span> <span style="color:#00f">init_mamba</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">set</span> <span style="color:#7d9029">-gx</span> <span style="color:#19177c">MAMBA_EXE</span> <span style="color:#ba2121">"/gnu/store/w0rrglxs2247nr4wawrh5dylisjra1q4-micromamba-bin-1.4.4-0/bin/micromamba"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">set</span> <span style="color:#7d9029">-gx</span> <span style="color:#19177c">MAMBA_ROOT_PREFIX</span> <span style="color:#ba2121">"/home/pavel/micromamba"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">$MAMBA_EXE</span> shell hook <span style="color:#7d9029">--shell</span> <span style="color:#008000">fish</span> <span style="color:#7d9029">--prefix</span> <span style="color:#19177c">$MAMBA_ROOT_PREFIX</span> <span style="color:#666">|</span> <span style="color:#008000">source
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#008000"></span><span style="color:#008000;font-weight:bold">end</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#008000;font-weight:bold">test</span> <span style="color:#7d9029">-n</span> <span style="color:#ba2121">"</span><span style="color:#19177c">$INIT_CONDA</span><span style="color:#ba2121">"</span>;
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#00f">init_conda</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#008000;font-weight:bold">test</span> <span style="color:#7d9029">-n</span> <span style="color:#ba2121">"</span><span style="color:#19177c">$INIT_MAMBA</span><span style="color:#ba2121">"</span>;
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#00f">init_mamba</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">end</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000">alias </span><span style="color:#19177c">ca</span><span style="color:#666">=</span><span style="color:#ba2121">"micromamba activate"</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000">alias </span><span style="color:#19177c">ci</span><span style="color:#666">=</span><span style="color:#ba2121">"init_mamba"</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000">alias </span><span style="color:#19177c">cii</span><span style="color:#666">=</span><span style="color:#ba2121">"export INIT_MAMBA=true && init_mamba"</span>
|
||||
</span></span></code></pre></div><p>Then, check if launched from Emacs with environment activated.</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-fish" data-lang="fish"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#008000;font-weight:bold">test</span> <span style="color:#7d9029">-n</span> <span style="color:#ba2121">"</span><span style="color:#19177c">$EMACS_CONDA_ENV</span><span style="color:#ba2121">"</span>;
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#00f">conda</span> activate <span style="color:#19177c">$EMACS_CONDA_ENV</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">end</span>
|
||||
</span></span></code></pre></div><h3 id="colors-1">Colors</h3>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-fish" data-lang="fish"><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># if test -n "$EMACS_CONDA_ENV";
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"></span> <span style="color:#408080;font-style:italic"># conda activate $EMACS_CONDA_ENV
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># end
|
||||
</span></span></span></code></pre></div><h3 id="colors-1">Colors</h3>
|
||||
<p>Fish seems to have hardcoded colorcodes in some color settings. I set these to base16 colors, so they would match Xresources.</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-fish" data-lang="fish"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> <span style="color:#19177c">fish_color_command</span> cyan
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> <span style="color:#19177c">fish_color_comment</span> green
|
||||
|
|
@ -716,13 +735,12 @@
|
|||
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Cyan</span>:<span style="color:#bbb"> </span><span style="color:#ba2121">'<<get-xrdb(color="color14")>>'</span><span style="color:#bbb">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">White</span>:<span style="color:#bbb"> </span><span style="color:#ba2121">'<<get-xrdb(color="color15")>>'</span><span style="color:#bbb">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#bbb">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">background_opacity</span>:<span style="color:#bbb"> </span><span style="color:#666">0.80</span><span style="color:#bbb">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#bbb">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">window</span>:<span style="color:#bbb">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">padding</span>:<span style="color:#bbb">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">x</span>:<span style="color:#bbb"> </span><span style="color:#666">0</span><span style="color:#bbb">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">y</span>:<span style="color:#bbb"> </span><span style="color:#666">0</span><span style="color:#bbb">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">dynamic_padding</span>:<span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">true</span><span style="color:#bbb">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">opacity</span>:<span style="color:#bbb"> </span><span style="color:#666">0.80</span><span style="color:#bbb">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#bbb">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">key_bindings</span>:<span style="color:#bbb">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#bbb"> </span>- {<span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">key: Paste, action</span>:<span style="color:#bbb"> </span>Paste }<span style="color:#bbb">
|
||||
|
|
@ -831,13 +849,21 @@
|
|||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>jless</td>
|
||||
<td>jless-bin</td>
|
||||
<td>JSON viewer</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>megacmd</td>
|
||||
<td>mega.nz client</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ncdu</td>
|
||||
<td>disk usage analyzer</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>openssl</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="ripgrep-config">ripgrep config</h3>
|
||||
|
|
@ -1053,7 +1079,7 @@
|
|||
<li><a href="#colors">Colors</a></li>
|
||||
<li><a href="#settings">Settings</a></li>
|
||||
<li><a href="#aliases">Aliases</a></li>
|
||||
<li><a href="#anaconda">Anaconda</a></li>
|
||||
<li><a href="#micromamba">Micromamba</a></li>
|
||||
<li><a href="#starship">Starship</a></li>
|
||||
<li><a href="#yandex-cloud">Yandex Cloud</a></li>
|
||||
</ul>
|
||||
|
|
@ -1062,7 +1088,7 @@
|
|||
</li>
|
||||
<li><a href="#fish">Fish</a>
|
||||
<ul>
|
||||
<li><a href="#anaconda-1">Anaconda</a></li>
|
||||
<li><a href="#micromamba-1">Micromamba</a></li>
|
||||
<li><a href="#colors-1">Colors</a></li>
|
||||
<li><a href="#keybindings">Keybindings</a></li>
|
||||
<li><a href="#functions">Functions</a></li>
|
||||
|
|
|
|||
|
|
@ -417,7 +417,9 @@
|
|||
</ul>
|
||||
<p>I can’t say it’s better or worse than the built-in functionality or one provided by evil, but I’m used to it and I think it fits better for managing a lot of windows.</p>
|
||||
<p>So, first, we need a predicate that checks whether there is space in the given direction:</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-direction-exists-p</span> (<span style="color:#19177c">dir</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">require</span> <span style="color:#19177c">'windmove</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-direction-exists-p</span> (<span style="color:#19177c">dir</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"Check if there is space in the direction DIR.
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">Does not take the minibuffer into account."</span>
|
||||
|
|
@ -978,6 +980,191 @@
|
|||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq-local</span> <span style="color:#19177c">focus-follows-mouse</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">'exwm-floating-setup-hook</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/fix-exwm-floating-windows</span>)
|
||||
</span></span></code></pre></div><h4 id="fix-exwm-on-clientmessage">Fix exwm–on-ClientMessage</h4>
|
||||
<p>It seems like this strange commit: <a href="https://github.com/ch11ng/exwm/commit/ce2191c444ae29edf669790a1002238b8fc90ac4">c90ac4</a> breaks focusing on an X frame when switching to a workspace, at least on Emacs <= 28. This reverts to the previous version.</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">exwm--on-ClientMessage-old</span> (<span style="color:#19177c">raw-data</span> <span style="color:#19177c">_synthetic</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"Handle ClientMessage event."</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">obj</span> (<span style="color:#19177c">make-instance</span> <span style="color:#19177c">'xcb:ClientMessage</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">type</span> <span style="color:#19177c">id</span> <span style="color:#19177c">data</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">xcb:unmarshal</span> <span style="color:#19177c">obj</span> <span style="color:#19177c">raw-data</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">type</span> (<span style="color:#19177c">slot-value</span> <span style="color:#19177c">obj</span> <span style="color:#19177c">'type</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">id</span> (<span style="color:#19177c">slot-value</span> <span style="color:#19177c">obj</span> <span style="color:#19177c">'window</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">data</span> (<span style="color:#19177c">slot-value</span> (<span style="color:#19177c">slot-value</span> <span style="color:#19177c">obj</span> <span style="color:#19177c">'data</span>) <span style="color:#19177c">'data32</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm--log</span> <span style="color:#ba2121">"atom=%s(%s)"</span> (<span style="color:#00f">x-get-atom-name</span> <span style="color:#19177c">type</span> <span style="color:#19177c">exwm-workspace--current</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">type</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cond</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; _NET_NUMBER_OF_DESKTOPS.</span>
|
||||
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">type</span> <span style="color:#19177c">xcb:Atom:_NET_NUMBER_OF_DESKTOPS</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">current</span> (<span style="color:#19177c">exwm-workspace--count</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">requested</span> (<span style="color:#00f">elt</span> <span style="color:#19177c">data</span> <span style="color:#666">0</span>)))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; Only allow increasing/decreasing the workspace number by 1.</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cond</span>
|
||||
</span></span><span style="display:flex;"><span> ((<span style="color:#00f"><</span> <span style="color:#19177c">current</span> <span style="color:#19177c">requested</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">make-frame</span>))
|
||||
</span></span><span style="display:flex;"><span> ((<span style="color:#008000">and</span> (<span style="color:#00f">></span> <span style="color:#19177c">current</span> <span style="color:#19177c">requested</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">></span> <span style="color:#19177c">current</span> <span style="color:#666">1</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">frame</span> (<span style="color:#00f">car</span> (<span style="color:#19177c">last</span> <span style="color:#19177c">exwm-workspace--list</span>))))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-workspace--get-remove-frame-next-workspace</span> <span style="color:#19177c">frame</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">delete-frame</span> <span style="color:#19177c">frame</span>))))))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; _NET_CURRENT_DESKTOP.</span>
|
||||
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">type</span> <span style="color:#19177c">xcb:Atom:_NET_CURRENT_DESKTOP</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-workspace-switch</span> (<span style="color:#00f">elt</span> <span style="color:#19177c">data</span> <span style="color:#666">0</span>)))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; _NET_ACTIVE_WINDOW.</span>
|
||||
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">type</span> <span style="color:#19177c">xcb:Atom:_NET_ACTIVE_WINDOW</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">buffer</span> (<span style="color:#19177c">exwm--id->buffer</span> <span style="color:#19177c">id</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">iconic</span> <span style="color:#19177c">window</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#00f">buffer-live-p</span> <span style="color:#19177c">buffer</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">when</span> (<span style="color:#00f">eq</span> <span style="color:#19177c">exwm--frame</span> <span style="color:#19177c">exwm-workspace--current</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> <span style="color:#19177c">exwm--floating-frame</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">select-frame</span> <span style="color:#19177c">exwm--floating-frame</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">iconic</span> (<span style="color:#19177c">exwm-layout--iconic-state-p</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> <span style="color:#19177c">iconic</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; State change: iconic => normal.</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">set-window-buffer</span> (<span style="color:#00f">frame-selected-window</span> <span style="color:#19177c">exwm--frame</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">current-buffer</span>)))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; Focus transfer.</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">window</span> (<span style="color:#00f">get-buffer-window</span> <span style="color:#800">nil</span> <span style="color:#800">t</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#008000">or</span> <span style="color:#19177c">iconic</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">not</span> (<span style="color:#00f">eq</span> <span style="color:#19177c">window</span> (<span style="color:#00f">selected-window</span>))))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">select-window</span> <span style="color:#19177c">window</span>))))))))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; _NET_CLOSE_WINDOW.</span>
|
||||
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">type</span> <span style="color:#19177c">xcb:Atom:_NET_CLOSE_WINDOW</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">buffer</span> (<span style="color:#19177c">exwm--id->buffer</span> <span style="color:#19177c">id</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#00f">buffer-live-p</span> <span style="color:#19177c">buffer</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm--defer</span> <span style="color:#666">0</span> <span style="color:#00f">#'kill-buffer</span> <span style="color:#19177c">buffer</span>))))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; _NET_WM_MOVERESIZE</span>
|
||||
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">type</span> <span style="color:#19177c">xcb:Atom:_NET_WM_MOVERESIZE</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">direction</span> (<span style="color:#00f">elt</span> <span style="color:#19177c">data</span> <span style="color:#666">2</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">buffer</span> (<span style="color:#19177c">exwm--id->buffer</span> <span style="color:#19177c">id</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> (<span style="color:#008000">and</span> <span style="color:#19177c">buffer</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">not</span> (<span style="color:#00f">buffer-local-value</span> <span style="color:#19177c">'exwm--floating-frame</span> <span style="color:#19177c">buffer</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cond</span> ((<span style="color:#00f">=</span> <span style="color:#19177c">direction</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">xcb:ewmh:_NET_WM_MOVERESIZE_SIZE_KEYBOARD</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; FIXME</span>
|
||||
</span></span><span style="display:flex;"><span> )
|
||||
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">direction</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">xcb:ewmh:_NET_WM_MOVERESIZE_MOVE_KEYBOARD</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; FIXME</span>
|
||||
</span></span><span style="display:flex;"><span> )
|
||||
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">direction</span> <span style="color:#19177c">xcb:ewmh:_NET_WM_MOVERESIZE_CANCEL</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-floating--stop-moveresize</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; In case it's a workspace frame.</span>
|
||||
</span></span><span style="display:flex;"><span> ((<span style="color:#008000">and</span> (<span style="color:#19177c">not</span> <span style="color:#19177c">buffer</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">catch</span> <span style="color:#19177c">'break</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">dolist</span> (<span style="color:#19177c">f</span> <span style="color:#19177c">exwm-workspace--list</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#008000">or</span> (<span style="color:#00f">eq</span> <span style="color:#19177c">id</span> (<span style="color:#00f">frame-parameter</span> <span style="color:#19177c">f</span> <span style="color:#19177c">'exwm-outer-id</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">eq</span> <span style="color:#19177c">id</span> (<span style="color:#00f">frame-parameter</span> <span style="color:#19177c">f</span> <span style="color:#19177c">'exwm-id</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">throw</span> <span style="color:#19177c">'break</span> <span style="color:#800">t</span>)))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#800">nil</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#800">t</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; In case it's a floating frame,</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; move the corresponding X window instead.</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> <span style="color:#19177c">buffer</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">catch</span> <span style="color:#19177c">'break</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">dolist</span> (<span style="color:#19177c">pair</span> <span style="color:#19177c">exwm--id-buffer-alist</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">with-current-buffer</span> (<span style="color:#00f">cdr</span> <span style="color:#19177c">pair</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">and</span> <span style="color:#19177c">exwm--floating-frame</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">or</span> (<span style="color:#00f">eq</span> <span style="color:#19177c">id</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">frame-parameter</span> <span style="color:#19177c">exwm--floating-frame</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">'exwm-outer-id</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">eq</span> <span style="color:#19177c">id</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">frame-parameter</span> <span style="color:#19177c">exwm--floating-frame</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">'exwm-id</span>))))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">id</span> <span style="color:#19177c">exwm--id</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">throw</span> <span style="color:#19177c">'break</span> <span style="color:#800">nil</span>))))))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; Start to move it.</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-floating--start-moveresize</span> <span style="color:#19177c">id</span> <span style="color:#19177c">direction</span>))))))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; _NET_REQUEST_FRAME_EXTENTS</span>
|
||||
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">type</span> <span style="color:#19177c">xcb:Atom:_NET_REQUEST_FRAME_EXTENTS</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">buffer</span> (<span style="color:#19177c">exwm--id->buffer</span> <span style="color:#19177c">id</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">top</span> <span style="color:#19177c">btm</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> (<span style="color:#008000">or</span> (<span style="color:#19177c">not</span> <span style="color:#19177c">buffer</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">not</span> (<span style="color:#00f">buffer-local-value</span> <span style="color:#19177c">'exwm--floating-frame</span> <span style="color:#19177c">buffer</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">top</span> <span style="color:#666">0</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">btm</span> <span style="color:#666">0</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">top</span> (<span style="color:#00f">window-header-line-height</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">btm</span> (<span style="color:#00f">window-mode-line-height</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">xcb:+request</span> <span style="color:#19177c">exwm--connection</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">make-instance</span> <span style="color:#19177c">'xcb:ewmh:set-_NET_FRAME_EXTENTS</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:window</span> <span style="color:#19177c">id</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:left</span> <span style="color:#666">0</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:right</span> <span style="color:#666">0</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:top</span> <span style="color:#19177c">top</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:bottom</span> <span style="color:#19177c">btm</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">xcb:flush</span> <span style="color:#19177c">exwm--connection</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; _NET_WM_DESKTOP.</span>
|
||||
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">type</span> <span style="color:#19177c">xcb:Atom:_NET_WM_DESKTOP</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">buffer</span> (<span style="color:#19177c">exwm--id->buffer</span> <span style="color:#19177c">id</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#00f">buffer-live-p</span> <span style="color:#19177c">buffer</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-workspace-move-window</span> (<span style="color:#00f">elt</span> <span style="color:#19177c">data</span> <span style="color:#666">0</span>) <span style="color:#19177c">id</span>))))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; _NET_WM_STATE</span>
|
||||
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">type</span> <span style="color:#19177c">xcb:Atom:_NET_WM_STATE</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">action</span> (<span style="color:#00f">elt</span> <span style="color:#19177c">data</span> <span style="color:#666">0</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">props</span> (<span style="color:#00f">list</span> (<span style="color:#00f">elt</span> <span style="color:#19177c">data</span> <span style="color:#666">1</span>) (<span style="color:#00f">elt</span> <span style="color:#19177c">data</span> <span style="color:#666">2</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">buffer</span> (<span style="color:#19177c">exwm--id->buffer</span> <span style="color:#19177c">id</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">props-new</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; only support _NET_WM_STATE_FULLSCREEN / _NET_WM_STATE_ADD for frames</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#008000">and</span> (<span style="color:#19177c">not</span> <span style="color:#19177c">buffer</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">memq</span> <span style="color:#19177c">xcb:Atom:_NET_WM_STATE_FULLSCREEN</span> <span style="color:#19177c">props</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">=</span> <span style="color:#19177c">action</span> <span style="color:#19177c">xcb:ewmh:_NET_WM_STATE_ADD</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">xcb:+request</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">exwm--connection</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">make-instance</span> <span style="color:#19177c">'xcb:ewmh:set-_NET_WM_STATE</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:window</span> <span style="color:#19177c">id</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:data</span> (<span style="color:#00f">vector</span> <span style="color:#19177c">xcb:Atom:_NET_WM_STATE_FULLSCREEN</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">xcb:flush</span> <span style="color:#19177c">exwm--connection</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> <span style="color:#19177c">buffer</span> <span style="color:#408080;font-style:italic">;ensure it's managed</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:#408080;font-style:italic">;; _NET_WM_STATE_FULLSCREEN</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#008000">or</span> (<span style="color:#00f">memq</span> <span style="color:#19177c">xcb:Atom:_NET_WM_STATE_FULLSCREEN</span> <span style="color:#19177c">props</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">memq</span> <span style="color:#19177c">xcb:Atom:_NET_WM_STATE_ABOVE</span> <span style="color:#19177c">props</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cond</span> ((<span style="color:#00f">=</span> <span style="color:#19177c">action</span> <span style="color:#19177c">xcb:ewmh:_NET_WM_STATE_ADD</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> (<span style="color:#19177c">exwm-layout--fullscreen-p</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-layout-set-fullscreen</span> <span style="color:#19177c">id</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">push</span> <span style="color:#19177c">xcb:Atom:_NET_WM_STATE_FULLSCREEN</span> <span style="color:#19177c">props-new</span>))
|
||||
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">action</span> <span style="color:#19177c">xcb:ewmh:_NET_WM_STATE_REMOVE</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#19177c">exwm-layout--fullscreen-p</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-layout-unset-fullscreen</span> <span style="color:#19177c">id</span>)))
|
||||
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">action</span> <span style="color:#19177c">xcb:ewmh:_NET_WM_STATE_TOGGLE</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> (<span style="color:#19177c">exwm-layout--fullscreen-p</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-layout-unset-fullscreen</span> <span style="color:#19177c">id</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-layout-set-fullscreen</span> <span style="color:#19177c">id</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">push</span> <span style="color:#19177c">xcb:Atom:_NET_WM_STATE_FULLSCREEN</span> <span style="color:#19177c">props-new</span>)))))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; _NET_WM_STATE_DEMANDS_ATTENTION</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; FIXME: check (may require other properties set)</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#00f">memq</span> <span style="color:#19177c">xcb:Atom:_NET_WM_STATE_DEMANDS_ATTENTION</span> <span style="color:#19177c">props</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#00f">=</span> <span style="color:#19177c">action</span> <span style="color:#19177c">xcb:ewmh:_NET_WM_STATE_ADD</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> (<span style="color:#00f">eq</span> <span style="color:#19177c">exwm--frame</span> <span style="color:#19177c">exwm-workspace--current</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">set-frame-parameter</span> <span style="color:#19177c">exwm--frame</span> <span style="color:#19177c">'exwm-urgency</span> <span style="color:#800">t</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">exwm-workspace--switch-history-outdated</span> <span style="color:#800">t</span>)))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; xcb:ewmh:_NET_WM_STATE_REMOVE?</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; xcb:ewmh:_NET_WM_STATE_TOGGLE?</span>
|
||||
</span></span><span style="display:flex;"><span> )
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">xcb:+request</span> <span style="color:#19177c">exwm--connection</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">make-instance</span> <span style="color:#19177c">'xcb:ewmh:set-_NET_WM_STATE</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:window</span> <span style="color:#19177c">id</span> <span style="color:#008000">:data</span> (<span style="color:#00f">vconcat</span> <span style="color:#19177c">props-new</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">xcb:flush</span> <span style="color:#19177c">exwm--connection</span>)))))
|
||||
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">type</span> <span style="color:#19177c">xcb:Atom:WM_PROTOCOLS</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">type</span> (<span style="color:#00f">elt</span> <span style="color:#19177c">data</span> <span style="color:#666">0</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cond</span> ((<span style="color:#00f">=</span> <span style="color:#19177c">type</span> <span style="color:#19177c">xcb:Atom:_NET_WM_PING</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">exwm-manage--ping-lock</span> <span style="color:#800">nil</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#800">t</span> (<span style="color:#19177c">exwm--log</span> <span style="color:#ba2121">"Unhandled WM_PROTOCOLS of type: %d"</span> <span style="color:#19177c">type</span>)))))
|
||||
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">type</span> <span style="color:#19177c">xcb:Atom:WM_CHANGE_STATE</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">buffer</span> (<span style="color:#19177c">exwm--id->buffer</span> <span style="color:#19177c">id</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#008000">and</span> (<span style="color:#00f">buffer-live-p</span> <span style="color:#19177c">buffer</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">=</span> (<span style="color:#00f">elt</span> <span style="color:#19177c">data</span> <span style="color:#666">0</span>) <span style="color:#19177c">xcb:icccm:WM_STATE:IconicState</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">if</span> <span style="color:#19177c">exwm--floating-frame</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">call-interactively</span> <span style="color:#00f">#'</span><span style="color:#19177c">exwm-floating-hide</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">bury-buffer</span>))))))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#800">t</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm--log</span> <span style="color:#ba2121">"Unhandled: %s(%d)"</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">x-get-atom-name</span> <span style="color:#19177c">type</span> <span style="color:#19177c">exwm-workspace--current</span>) <span style="color:#19177c">type</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">'exwm</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#19177c">'exwm--on-ClientMessage</span> <span style="color:#008000">:override</span> <span style="color:#00f">#'</span><span style="color:#19177c">exwm--on-ClientMessage-old</span>))
|
||||
</span></span></code></pre></div><h3 id="application-specific-settings">Application-specific settings</h3>
|
||||
<p>Start Nyxt in <code>char-mode</code>.</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">exwm-manage-configurations</span>
|
||||
|
|
@ -3499,7 +3686,7 @@
|
|||
<tbody>
|
||||
<tr>
|
||||
<td>dev</td>
|
||||
<td>conda</td>
|
||||
<td>micromamba-bin</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
@ -3882,7 +4069,7 @@
|
|||
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:one-shot?</span> <span style="color:#800">#t</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:start</span> (<span style="color:#00f">make-system-constructor</span> <span style="color:#ba2121">"xmodmap /home/pavel/.Xmodmap"</span>)))
|
||||
</span></span></code></pre></div><h3 id="vpn">VPN</h3>
|
||||
<p>Run my <a href="/configs/guix/#vpn">OpenVPN setup</a>. Not lauching this automatially, as it requires an active connection.</p>
|
||||
<p>Run my <a href="/configs/guix/#openvpn">OpenVPN setup</a>. Not lauching this automatially, as it requires an active connection.</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#008000;font-weight:bold">define </span><span style="color:#19177c">vpn</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">make</span> <span style="color:#19177c"><service></span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:provides</span> <span style="color:#666">'</span>(<span style="color:#19177c">vpn</span>)
|
||||
|
|
@ -4055,6 +4242,11 @@
|
|||
<td>font-google-noto-emoji</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>desktop-misc</td>
|
||||
<td>remmina</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><a id="code-snippet--packages"></a></p>
|
||||
|
|
@ -4129,6 +4321,7 @@
|
|||
<ul>
|
||||
<li><a href="#catch-and-report-all-errors-raised-when-invoking-command-hooks">Catch and report all errors raised when invoking command hooks</a></li>
|
||||
<li><a href="#improve-floating-windows-behavior">Improve floating windows behavior</a></li>
|
||||
<li><a href="#fix-exwm-on-clientmessage">Fix exwm–on-ClientMessage</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#application-specific-settings">Application-specific settings</a></li>
|
||||
|
|
|
|||
|
|
@ -172,6 +172,30 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
|
|||
<td>wallabag</td>
|
||||
<td>9b0e73a4703ff35a2d30fd704200052888191217</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>conda</td>
|
||||
<td>609fc84e439b11ea5064f3a948079daebb654aca</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>notmuch tags keybindings</td>
|
||||
<td>eac134c5456051171c1c777254f503cc71ce12cd</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>expand-region</td>
|
||||
<td>ab0d01c525f2b44dd64ec09747daf0fced4bd9c7</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>org-latex-impatient</td>
|
||||
<td>ab0d01c525f2b44dd64ec09747daf0fced4bd9c7</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>dired-single</td>
|
||||
<td>ab0d01c525f2b44dd64ec09747daf0fced4bd9c7</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>progidy</td>
|
||||
<td>ab0d01c525f2b44dd64ec09747daf0fced4bd9c7</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="initial-setup">Initial setup</h2>
|
||||
|
|
@ -288,34 +312,14 @@ 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">my/get-ram-usage-async</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">data</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">message</span> <span style="color:#ba2121">"%f Gb"</span> (<span style="color:#00f">/</span> (<span style="color:#00f">float</span> <span style="color:#19177c">data</span>) <span style="color:#666">1024</span> <span style="color:#666">1024</span>)))))
|
||||
</span></span></code></pre></div><h3 id="anaconda">Anaconda</h3>
|
||||
<p><a href="https://www.anaconda.com/">Anaconda</a> is a free package and environment manager. I currently use it to manage multiple versions of Python and Node.js. Take a look at <a href="/configs/guix/#conda">the corresponding entry</a> in the Guix config for details about using it on Guix.</p>
|
||||
<p>The following code uses the <code>conda</code> package to activate the base environment on startup if Emacs is launched outside the environment.</p>
|
||||
<p>Also, some strange things are happening if vterm is launched with conda activated from Emacs, so I advise <code>conda-env-activate</code> to set an auxiliary environment variable. This variable is used in the <a href="/configs/console/#anaconda">shell config</a>.</p>
|
||||
<p>References:</p>
|
||||
<ul>
|
||||
<li><a href="https://docs.anaconda.com/">Anaconda docs</a></li>
|
||||
<li><a href="https://github.com/necaris/conda.el">conda.el repo</a></li>
|
||||
</ul>
|
||||
<!--listend-->
|
||||
<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">conda</span>
|
||||
</span></span></code></pre></div><h3 id="micromamba">Micromamba</h3>
|
||||
<p><a href="https://github.com/mamba-org/mamba">mamba</a> is a faster alternative to <a href="https://www.anaconda.com/">Anaconda</a>, a package and environment manager. <code>micromamba</code> is a tiny version that provides a subset of mamba commands.</p>
|
||||
<p><a href="https://github.com/SqrtMinusOne/micromamba.el">micromamba.el</a> is my package to interact with the latter.</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">micromamba</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">executable-find</span> <span style="color:#ba2121">"conda"</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:if</span> (<span style="color:#19177c">executable-find</span> <span style="color:#ba2121">"micromamba"</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">conda-anaconda-home</span> (<span style="color:#19177c">string-replace</span> <span style="color:#ba2121">"/bin/conda"</span> <span style="color:#ba2121">""</span> (<span style="color:#19177c">executable-find</span> <span style="color:#ba2121">"conda"</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">conda-env-home-directory</span> (<span style="color:#00f">expand-file-name</span> <span style="color:#ba2121">"~/.conda/"</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">conda-env-subdirectory</span> <span style="color:#ba2121">"envs"</span>)
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#19177c">'conda-env-activate</span> <span style="color:#008000">:after</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#008000">&rest</span> <span style="color:#19177c">_</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">setenv</span> <span style="color:#ba2121">"EMACS_CONDA_ENV"</span> <span style="color:#19177c">conda-env-current-name</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">setenv</span> <span style="color:#ba2121">"INIT_CONDA"</span> <span style="color:#ba2121">"true"</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#19177c">'conda-env-deactivate</span> <span style="color:#008000">:after</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#008000">&rest</span> <span style="color:#19177c">_</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">setenv</span> <span style="color:#ba2121">"EMACS_CONDA_ENV"</span> <span style="color:#800">nil</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">setenv</span> <span style="color:#ba2121">"INIT_CONDA"</span> <span style="color:#800">nil</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> (<span style="color:#19177c">getenv</span> <span style="color:#ba2121">"CONDA_DEFAULT_ENV"</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">conda-env-activate</span> <span style="color:#ba2121">"general"</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">micromamba-activate</span> <span style="color:#ba2121">"general"</span>))
|
||||
</span></span></code></pre></div><h3 id="config-files">Config files</h3>
|
||||
<h4 id="custom-file-location">Custom file location</h4>
|
||||
<p>By default, <code>custom</code> writes stuff to <code>init.el</code>, which is somewhat annoying. The following makes it write to a separate file <code>custom.el</code></p>
|
||||
|
|
@ -477,47 +481,11 @@ 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">:after</span> <span style="color:#19177c">evil</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">evil-collection-init</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>(<span style="color:#19177c">eww</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">devdocs</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">proced</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">emms</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">pass</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">calendar</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">dired</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">ivy</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">debug</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">guix</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">calc</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">docker</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">ibuffer</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">geiser</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">pdf</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">info</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">elfeed</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">edebug</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">bookmark</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">company</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">vterm</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">flycheck</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">profiler</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">cider</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">explain-pause-mode</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">notmuch</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">custom</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">xref</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">eshell</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">helpful</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">compile</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">comint</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">git-timemachine</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">magit</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">prodigy</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">slime</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">forge</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">deadgrep</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">vc-annonate</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">telega</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">doc-view</span>)))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>(<span style="color:#19177c">eww</span> <span style="color:#19177c">devdocs</span> <span style="color:#19177c">proced</span> <span style="color:#19177c">emms</span> <span style="color:#19177c">pass</span> <span style="color:#19177c">calendar</span> <span style="color:#19177c">dired</span> <span style="color:#19177c">ivy</span> <span style="color:#19177c">debug</span> <span style="color:#19177c">guix</span> <span style="color:#19177c">calc</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">docker</span> <span style="color:#19177c">ibuffer</span> <span style="color:#19177c">geiser</span> <span style="color:#19177c">pdf</span> <span style="color:#19177c">info</span> <span style="color:#19177c">elfeed</span> <span style="color:#19177c">edebug</span> <span style="color:#19177c">bookmark</span> <span style="color:#19177c">company</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">vterm</span> <span style="color:#19177c">flycheck</span> <span style="color:#19177c">profiler</span> <span style="color:#19177c">cider</span> <span style="color:#19177c">explain-pause-mode</span> <span style="color:#19177c">notmuch</span> <span style="color:#19177c">custom</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">xref</span> <span style="color:#19177c">eshell</span> <span style="color:#19177c">helpful</span> <span style="color:#19177c">compile</span> <span style="color:#19177c">comint</span> <span style="color:#19177c">git-timemachine</span> <span style="color:#19177c">magit</span> <span style="color:#19177c">prodigy</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">slime</span> <span style="color:#19177c">forge</span> <span style="color:#19177c">deadgrep</span> <span style="color:#19177c">vc-annonate</span> <span style="color:#19177c">telega</span> <span style="color:#19177c">doc-view</span> <span style="color:#19177c">gnus</span>)))
|
||||
</span></span></code></pre></div><h4 id="avy">Avy</h4>
|
||||
<p><a href="https://github.com/abo-abo/avy">Avy</a> is a package that helps navigate Emacs in a tree-like manner.</p>
|
||||
<p>References:</p>
|
||||
|
|
@ -910,13 +878,6 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
|
|||
<!--listend-->
|
||||
<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">smartparens</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#800">t</span>)
|
||||
</span></span></code></pre></div><h5 id="expand-region">Expand region</h5>
|
||||
<p>A package to select an ever-increasing (or ever-decreasing) region of text.</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">expand-region</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">:commands</span> (<span style="color:#19177c">er/expand-region</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:init</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">general-nmap</span> <span style="color:#ba2121">"+"</span> <span style="color:#19177c">'er/expand-region</span>))
|
||||
</span></span></code></pre></div><h5 id="visual-fill-column-mode">Visual fill column mode</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">visual-fill-column</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#800">t</span>
|
||||
|
|
@ -924,9 +885,30 @@ 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">:config</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">add-hook</span> <span style="color:#19177c">'visual-fill-column-mode-hook</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> () (<span style="color:#008000">setq</span> <span style="color:#19177c">visual-fill-column-center-text</span> <span style="color:#800">t</span>))))
|
||||
</span></span></code></pre></div><h5 id="accents">Accents</h5>
|
||||
<p>Input accented characters.</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">accent</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">:init</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:#ba2121">"gs"</span> <span style="color:#00f">#'</span><span style="color:#19177c">accent-menu</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 style="color:#00f">insert</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"M-n"</span> <span style="color:#00f">#'</span><span style="color:#19177c">accent-menu</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:commands</span> (<span style="color:#19177c">accent-menu</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">:keymaps</span> <span style="color:#19177c">'popup-menu-keymap</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"C-j"</span> <span style="color:#00f">#'</span><span style="color:#19177c">popup-next</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"C-k"</span> <span style="color:#00f">#'</span><span style="color:#19177c">popup-previous</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"M-j"</span> <span style="color:#00f">#'</span><span style="color:#19177c">popup-next</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"M-k"</span> <span style="color:#00f">#'</span><span style="color:#19177c">popup-previous</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">accent-custom</span> <span style="color:#666">'</span>((<span style="color:#19177c">a</span> (<span style="">ā</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">A</span> (<span style="">Ā</span>)))))
|
||||
</span></span></code></pre></div><h3 id="working-with-projects">Working with projects</h3>
|
||||
<p>Packages related to managing projects.</p>
|
||||
<p>Another important package that also touches this category is <a href="#dired">dired</a>, but it has its separate section in “Applications”. 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.</p>
|
||||
<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>
|
||||
|
|
@ -1003,7 +985,7 @@ 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:#19177c">save-place-mode</span> <span style="color:#800">nil</span>)
|
||||
</span></span></code></pre></div><h4 id="deadgrep">Deadgrep</h4>
|
||||
<p><a href="https://github.com/Wilfred/deadgrep">deadgrep</a> is a nice Emacs interface for <a href="https://github.com/BurntSushi/ripgrep">ripgrep</a>. Running <code>ivy-occur</code> in <code>counsel-rg</code> does something a bit similar, but the deadgrep is more full-featured.</p>
|
||||
<p>Somehow I couldn’t hook <code>toogle-truncate-lines</code> into the existing hooks, so here goes advice.</p>
|
||||
<p>Somehow I couldn’t hook <code>toogle-truncate-lines</code> into the existing package hooks, so here goes advice.</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/deadgrep-fix-buffer-advice</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">let</span> ((<span style="color:#19177c">buf</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 style="color:#008000">with-current-buffer</span> <span style="color:#19177c">buf</span>
|
||||
|
|
@ -1099,7 +1081,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:#ba2121">""</span> <span style="color:#666">'</span>(<span style="color:#008000">:which-key</span> <span style="color:#ba2121">"various completions"</span>)<span style="color:#666">'</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; "b" 'counsel-switch-buffer</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"b"</span> <span style="color:#19177c">'persp-ivy-switch-buffer</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"e"</span> <span style="color:#19177c">'conda-env-activate</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"e"</span> <span style="color:#19177c">'micromamba-activate</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"f"</span> <span style="color:#19177c">'project-find-file</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"c"</span> <span style="color:#19177c">'counsel-yank-pop</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"a"</span> <span style="color:#19177c">'counsel-rg</span>
|
||||
|
|
@ -1184,7 +1166,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:#ba2121">"v"</span> <span style="color:#19177c">'helpful-variable</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"o"</span> <span style="color:#19177c">'helpful-symbol</span>)
|
||||
</span></span></code></pre></div><h3 id="time-trackers">Time trackers</h3>
|
||||
<p>A bunch of time trackers I use.</p>
|
||||
<p>Time trackers I happen to use.</p>
|
||||
<p>References:</p>
|
||||
<ul>
|
||||
<li><a href="https://wakatime.com">WakaTime</a></li>
|
||||
|
|
@ -1202,13 +1184,14 @@ 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">:straight</span> (<span style="color:#008000">:host</span> <span style="color:#19177c">github</span> <span style="color:#008000">:repo</span> <span style="color:#ba2121">"SqrtMinusOne/wakatime-mode"</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/remote-server</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">wakatime-ignore-exit-codes</span> <span style="color:#666">'</span>(<span style="color:#666">0</span> <span style="color:#666">1</span> <span style="color:#666">102</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">wakatime-ignore-exit-codes</span> <span style="color:#666">'</span>(<span style="color:#666">0</span> <span style="color:#666">1</span> <span style="color:#666">102</span> <span style="color:#666">112</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#19177c">'wakatime-init</span> <span style="color:#008000">:after</span> (<span style="color:#008000">lambda</span> () (<span style="color:#008000">setq</span> <span style="color:#19177c">wakatime-cli-path</span> (<span style="color:#00f">expand-file-name</span> <span style="color:#ba2121">"~/bin/wakatime-cli"</span>))))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; (setq wakatime-cli-path (executable-find "wakatime"))</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">global-wakatime-mode</span>))
|
||||
</span></span></code></pre></div><h4 id="activitywatch">ActivityWatch</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">request</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:#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></span><span style="display:flex;"><span>(<span style="color:#008000">use-package</span> <span style="color:#19177c">activity-watch-mode</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#800">t</span>
|
||||
|
|
@ -1226,7 +1209,7 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
|
|||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>(<span style="color:#008000">when</span> <span style="color:#19177c">my/is-termux</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">menu-bar-mode</span> <span style="color:#666">-1</span>))
|
||||
</span></span></code></pre></div><p>Transparency. Not setting it now, as I’m using <a href="/configs/desktop/#picom">picom</a>.</p>
|
||||
</span></span></code></pre></div><p>Transparency. Not setting it here, as I used to use <a href="/configs/desktop/#picom">picom</a> with i3, and EXWM config has its own 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:#408080;font-style:italic">;; (set-frame-parameter (selected-frame) 'alpha '(90 . 90))</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">;; (add-to-list 'default-frame-alist '(alpha . (90 . 90)))</span>
|
||||
</span></span></code></pre></div><p>Prettify symbols. Also not setting it, ligatures seem to be enough for me.</p>
|
||||
|
|
@ -1314,7 +1297,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">doom-themes-treemacs-theme</span> <span style="color:#ba2121">"doom-colors"</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">doom-themes-treemacs-config</span>))
|
||||
</span></span></code></pre></div><h4 id="custom-theme">Custom theme</h4>
|
||||
<p>Here I define a custom theme, dependent on colors from <code>doom-themes</code>.</p>
|
||||
<p>Here I define a custom theme dependent on colors from <code>doom-themes</code>.</p>
|
||||
<p>A custom theme is necessary because if one calls <code>custom-set-faces</code> and <code>custom-set-variables</code> in code, whenever a variable is changed and saved in a customize buffer, data from all calls of these functions is saved as well.</p>
|
||||
<p>To make defining colors a bit easier, here is a function to blend two colors, taken from <a href="https://oremacs.com/2015/04/28/blending-faces/">this post</a> by abo-abo.</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/color-join</span> (<span style="color:#19177c">r</span> <span style="color:#19177c">g</span> <span style="color:#19177c">b</span>)
|
||||
|
|
@ -1754,6 +1737,35 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
|
|||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"s"</span> <span style="color:#19177c">'lsp-ui-find-workspace-symbol</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"l"</span> <span style="color:#19177c">'lsp-execute-code-action</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"e"</span> <span style="color:#19177c">'list-flycheck-errors</span>)
|
||||
</span></span></code></pre></div><h5 id="ui">UI</h5>
|
||||
<p>I don’t like how some LSPs print the full filename in the progress indicator.</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/lsp--progress-status</span> ()
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"Returns the status of the progress for the current workspaces."</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">-let</span> ((<span style="color:#19177c">progress-status</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">s-join</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"|"</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">-keep</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">workspace</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">tokens</span> (<span style="color:#19177c">lsp--workspace-work-done-tokens</span> <span style="color:#19177c">workspace</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> (<span style="color:#19177c">ht-empty?</span> <span style="color:#19177c">tokens</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">mapconcat</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">-lambda</span> ((<span style="color:#19177c">&WorkDoneProgressBegin</span> <span style="color:#008000">:message?</span> <span style="color:#008000">:title</span> <span style="color:#008000">:percentage?</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">concat</span> (<span style="color:#008000">if</span> <span style="color:#19177c">percentage?</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> (<span style="color:#00f">numberp</span> <span style="color:#19177c">percentage?</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">format</span> <span style="color:#ba2121">"%.0f%%%% "</span> <span style="color:#19177c">percentage?</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">format</span> <span style="color:#ba2121">"%s%%%% "</span> <span style="color:#19177c">percentage?</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">""</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">msg</span> (<span style="color:#19177c">url-unhex-string</span> (<span style="color:#008000">or</span> <span style="color:#19177c">message\?</span> <span style="color:#19177c">title</span>))))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> (<span style="color:#19177c">string-match-p</span> <span style="color:#ba2121">"\\`file:///"</span> <span style="color:#19177c">msg</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">file-name-nondirectory</span> <span style="color:#19177c">msg</span>)))))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">ht-values</span> <span style="color:#19177c">tokens</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"|"</span>))))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">lsp-workspaces</span>)))))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> (<span style="color:#19177c">s-blank?</span> <span style="color:#19177c">progress-status</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">concat</span> <span style="color:#19177c">lsp-progress-prefix</span> <span style="color:#19177c">progress-status</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">'lsp-mode</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#19177c">'lsp--progress-status</span> <span style="color:#008000">:override</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/lsp--progress-status</span>))
|
||||
</span></span></code></pre></div><h4 id="flycheck">Flycheck</h4>
|
||||
<p>A syntax checking extension for Emacs. Integrates with LSP-mode, but can also use various standalone checkers.</p>
|
||||
<p>References:</p>
|
||||
|
|
@ -2106,7 +2118,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">:init</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">add-hook</span> <span style="color:#19177c">'prog-mode-hook</span> <span style="color:#00f">#'</span><span style="color:#19177c">copilot-mode</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">copilot-node-executable</span> <span style="color:#ba2121">"/home/pavel/.conda/envs/traject/bin/node"</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">copilot-node-executable</span> <span style="color:#ba2121">"/home/pavel/.guix-extra-profiles/dev/dev/bin/node"</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">:keymaps</span> <span style="color:#19177c">'company-active-map</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"<backtab>"</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/copilot-tab</span>)
|
||||
|
|
@ -2597,16 +2609,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">setq</span> <span style="color:#19177c">plantuml-default-exec-mode</span> <span style="color:#19177c">'executable</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">plantuml-indent-level</span> <span style="color:#666">2</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">my/plantuml-indent-regexp-return</span> <span style="color:#ba2121">"^\s*return\s+.+$"</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">add-to-list</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">'plantuml-indent-regexp-end</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">my/plantuml-indent-regexp-return</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#408080;font-style:italic">;; (add-to-list</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; 'plantuml-indent-regexp-end</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; my/plantuml-indent-regexp-return)</span>
|
||||
</span></span><span style="display:flex;"><span> )
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">add-to-list</span> <span style="color:#19177c">'auto-mode-alist</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"\\.plantuml\\'"</span> <span style="color:#666">.</span> <span style="color:#19177c">plantuml-mode</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">add-to-list</span> <span style="color:#19177c">'auto-mode-alist</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"\\.uml\\'"</span> <span style="color:#666">.</span> <span style="color:#19177c">plantuml-mode</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">add-hook</span> <span style="color:#19177c">'plantuml-mode-hook</span> <span style="color:#00f">#'</span><span style="color:#19177c">smartparens-mode</span>))
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>(<span style="color:#19177c">general-nmap</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:keymaps</span> <span style="color:#19177c">'plantuml-mode-map</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"RET"</span> <span style="color:#19177c">'plantuml-preview</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">add-hook</span> <span style="color:#19177c">'plantuml-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">general-nmap</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:keymaps</span> <span style="color:#19177c">'plantuml-mode-map</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"RET"</span> <span style="color:#19177c">'plantuml-preview</span>))
|
||||
</span></span></code></pre></div><h4 id="subtitles">Subtitles</h4>
|
||||
<p>A major mode to work with subtitles.</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">subed</span>
|
||||
|
|
@ -2717,6 +2729,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:#ba2121">"Remove all advices from symbol SYM."</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span> <span style="color:#ba2121">"aFunction symbol: "</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-mapc</span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">advice</span> <span style="color:#19177c">_props</span>) (<span style="color:#19177c">advice-remove</span> <span style="color:#19177c">sym</span> <span style="color:#19177c">advice</span>)) <span style="color:#19177c">sym</span>))
|
||||
</span></span></code></pre></div><h5 id="ielm">IELM</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">add-hook</span> <span style="color:#19177c">'inferior-emacs-lisp-mode-hook</span> <span style="color:#00f">#'</span><span style="color:#19177c">lispy-mode</span>)
|
||||
</span></span></code></pre></div><h4 id="common-lisp">Common lisp</h4>
|
||||
<h5 id="slime">SLIME</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">slime</span>
|
||||
|
|
@ -3205,7 +3219,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">: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">:defer</span> <span style="color:#800">t</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 style="color:#19177c">org-directory</span> (<span style="color:#00f">expand-file-name</span> <span style="color:#ba2121">"~/Documents/org-mode"</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">org-directory</span> (<span style="color:#00f">expand-file-name</span> <span style="color:#ba2121">"~/30-39 Life/32 org-mode"</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> (<span style="color:#00f">file-exists-p</span> <span style="color:#19177c">org-directory</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">mkdir</span> <span style="color:#19177c">org-directory</span> <span style="color:#800">t</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:config</span>
|
||||
|
|
@ -3281,6 +3295,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:#19177c">add-to-list</span> <span style="color:#19177c">'evil-emacs-state-modes</span> <span style="color:#19177c">'org-agenda-mode</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">require</span> <span style="color:#19177c">'evil-org-agenda</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">evil-org-agenda-set-keys</span>))
|
||||
</span></span></code></pre></div><h4 id="support-for-relative-urls">Support for relative URLs</h4>
|
||||
<p>Source: <a href="https://emacs.stackexchange.com/questions/9807/org-mode-dont-change-relative-urls">https://emacs.stackexchange.com/questions/9807/org-mode-dont-change-relative-urls</a></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/export-rel-url</span> (<span style="color:#19177c">path</span> <span style="color:#19177c">desc</span> <span style="color:#00f">format</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cl-case</span> <span style="color:#00f">format</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">html</span> (<span style="color:#00f">format</span> <span style="color:#ba2121">"<a href=\"%s\">%s</a>"</span> <span style="color:#19177c">path</span> (<span style="color:#008000">or</span> <span style="color:#19177c">desc</span> <span style="color:#19177c">path</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">latex</span> (<span style="color:#00f">format</span> <span style="color:#ba2121">"\\href{%s}{%s}"</span> <span style="color:#19177c">path</span> (<span style="color:#008000">or</span> <span style="color:#19177c">desc</span> <span style="color:#19177c">path</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">otherwise</span> <span style="color:#19177c">path</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">'org</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">org-link-set-parameters</span> <span style="color:#ba2121">"rel"</span> <span style="color:#008000">:follow</span> <span style="color:#00f">#'</span><span style="color:#19177c">browse-url</span> <span style="color:#008000">:export</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/export-rel-url</span>))
|
||||
</span></span></code></pre></div><h3 id="literate-programing">Literate programing</h3>
|
||||
<h4 id="python-and-jupyter">Python & Jupyter</h4>
|
||||
<p>Use jupyter kernels for Org Mode.</p>
|
||||
|
|
@ -3351,7 +3375,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">:after</span> (<span style="color:#19177c">org</span> <span style="color:#19177c">restclient</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">:straight</span> <span style="color:#800">t</span>)
|
||||
</span></span></code></pre></div><h4 id="setup-1">Setup</h4>
|
||||
</span></span></code></pre></div><h4 id="org-babel-setup">Org Babel Setup</h4>
|
||||
<p>Enable languages</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">with-eval-after-load-norem</span> <span style="color:#19177c">'org</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">org-babel-do-load-languages</span>
|
||||
|
|
@ -4183,12 +4207,12 @@ Emacs is also particularly great at writing Lisp code, e.g. Clojure, Common Lisp
|
|||
<p>As of now, this package loads Helm on start. To avoid this, I have to exclude Helm from the <code>Package-requires</code> in the <a href=".emacs.d/straight/repos/org-ref/org-ref.el">org-ref.el</a> file. I haven’t found a way to do this without modifying the package source yet.</p>
|
||||
<p>There’s a package called <a href="https://github.com/org-roam/org-roam-bibtex">org-roam-bibtex</a> that allows to keep literature notes in <a href="https://github.com/org-roam/org-roam">org-roam</a> and access them from <code>org-ref</code>, but as for now I store literature notes separately.</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">org-ref</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> (<span style="color:#008000">:files</span> (<span style="color:#008000">:defaults</span> (<span style="color:#008000">:exclude</span> <span style="color:#ba2121">"*helm*"</span>)))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> (<span style="color:#008000">:files</span> (<span style="color:#008000">:defaults</span> <span style="color:#ba2121">"citeproc"</span> (<span style="color:#008000">:exclude</span> <span style="color:#ba2121">"*helm*"</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">:init</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">bibtex-dialect</span> <span style="color:#19177c">'biblatex</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">bibtex-completion-bibliography</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"~/Documents/org-mode/library.bib"</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">bibtex-completion-library-path</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"~/Documents/library"</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">bibtex-completion-bibliography</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"~/30-39 Life/32 org-mode/library.bib"</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">bibtex-completion-library-path</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"~/30-39 Life/33 Library"</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">bibtex-completion-notes-path</span> <span style="color:#ba2121">"~/Documents/org-mode/literature-notes"</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">bibtex-completion-display-formats</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>((<span style="color:#800">t</span> <span style="color:#666">.</span> <span style="color:#ba2121">"${author:36} ${title:*} ${note:10} ${year:4} ${=has-pdf=:1}${=type=:7}"</span>)))
|
||||
|
|
@ -4695,27 +4719,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:#008000">use-package</span> <span style="color:#19177c">calfw-org</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:after</span> (<span style="color:#19177c">calfw</span> <span style="color:#19177c">org</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#800">t</span>)
|
||||
</span></span></code></pre></div><h3 id="ui">UI</h3>
|
||||
<h4 id="off--instant-equations-preview"><span class="org-todo done OFF">OFF</span> (OFF) Instant equations preview</h4>
|
||||
<p>Instant math previews for org mode.</p>
|
||||
<p>References:</p>
|
||||
<ul>
|
||||
<li><a href="https://github.com/yangsheng6810/org-latex-impatient">org-latex-impatient repo</a></li>
|
||||
</ul>
|
||||
<!--listend-->
|
||||
<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">org-latex-impatient</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> (<span style="color:#008000">:repo</span> <span style="color:#ba2121">"yangsheng6810/org-latex-impatient"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:branch</span> <span style="color:#ba2121">"master"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:host</span> <span style="color:#19177c">github</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:hook</span> (<span style="color:#19177c">org-mode</span> <span style="color:#666">.</span> <span style="color:#19177c">org-latex-impatient-mode</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:disabled</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 style="color:#19177c">org-latex-impatient-tex2svg-bin</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"/home/pavel/Programs/miniconda3/lib/node_modules/mathjax-node-cli/bin/tex2svg"</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">org-latex-impatient-scale</span> <span style="color:#666">1.75</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">org-latex-impatient-delay</span> <span style="color:#666">1</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">org-latex-impatient-border-color</span> <span style="color:#ba2121">"#ffffff"</span>))
|
||||
</span></span></code></pre></div><h4 id="latex-fragments">LaTeX fragments</h4>
|
||||
</span></span></code></pre></div><h3 id="ui-1">UI</h3>
|
||||
<h4 id="latex-fragments">LaTeX fragments</h4>
|
||||
<p>A function to enable LaTeX native highlighting. Not setting this as default, because it loads LaTeX stuff.</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/enable-org-latex</span> ()
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span>)
|
||||
|
|
@ -4803,6 +4808,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">: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">:config</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">org-html-htmlize-output-type</span> <span style="color:#19177c">'css</span>))
|
||||
</span></span></code></pre></div><h4 id="org-ref-1">org-ref</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">with-eval-after-load</span> <span style="color:#19177c">'org-ref</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">org-ref-csl-default-locale</span> <span style="color:#ba2121">"ru-RU"</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">org-ref-csl-default-style</span> (<span style="color:#00f">expand-file-name</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">concat</span> <span style="color:#19177c">user-emacs-directory</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"gost-r-7-0-5-2008-numeric.csl"</span>))))
|
||||
</span></span></code></pre></div><h4 id="latex-1">LaTeX</h4>
|
||||
<p>Add a custom LaTeX template without default packages. Packages are indented to be imported with function from <a href="#import-dot-sty-1">Import *.sty</a>.</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/setup-org-latex</span> ()
|
||||
|
|
@ -4856,6 +4867,18 @@ 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:#408080;font-style:italic">;; Make sure to eval the function when org-latex-classes list already exists</span>
|
||||
</span></span><span style="display:flex;"><span>(<span style="color:#19177c">with-eval-after-load-norem</span> <span style="color:#19177c">'ox-latex</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/setup-org-latex</span>))
|
||||
</span></span></code></pre></div><h5 id="fix-russian-dictionary">Fix Russian dictionary</h5>
|
||||
<p>No idea why, but somehow the exported uses english words if there isn’t <code>:default</code> key in the dictionary.</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">'ox</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">org-export-dictionary</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">item</span> <span style="color:#19177c">in</span> <span style="color:#19177c">org-export-dictionary</span> <span style="color:#19177c">collect</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">cons</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">car</span> <span style="color:#19177c">item</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">entry</span> <span style="color:#19177c">in</span> (<span style="color:#00f">cdr</span> <span style="color:#19177c">item</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">if</span> (<span style="color:#008000">and</span> (<span style="color:#00f">equal</span> (<span style="color:#00f">car</span> <span style="color:#19177c">entry</span>) <span style="color:#ba2121">"ru"</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">plist-get</span> (<span style="color:#00f">cdr</span> <span style="color:#19177c">entry</span>) <span style="color:#008000">:utf-8</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">collect</span> (<span style="color:#00f">list</span> <span style="color:#ba2121">"ru"</span> <span style="color:#008000">:default</span> (<span style="color:#00f">plist-get</span> (<span style="color:#00f">cdr</span> <span style="color:#19177c">entry</span>) <span style="color:#008000">:utf-8</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">else</span> <span style="color:#19177c">collect</span> <span style="color:#19177c">entry</span>)))))
|
||||
</span></span></code></pre></div><h3 id="keybindings-and-stuff">Keybindings & stuff</h3>
|
||||
<h4 id="general-keybindings">General keybindings</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:#19177c">with-eval-after-load-norem</span> <span style="color:#19177c">'org</span>
|
||||
|
|
@ -5122,7 +5145,7 @@ 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">when</span> (<span style="color:#00f">file-exists-p</span> <span style="color:#19177c">folders-file</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">load-file</span> <span style="color:#19177c">folders-file</span>)))
|
||||
</span></span></code></pre></div><h2 id="applications">Applications</h2>
|
||||
<h3 id="dired-1">Dired</h3>
|
||||
<h3 id="dired">Dired</h3>
|
||||
<p>Dired is the built-in Emacs file manager. It’s so good that it’s strange that, to my knowledge, no one tried to replicate it outside of Emacs.</p>
|
||||
<p>I currently use it as my primary file manager.</p>
|
||||
<h4 id="basic-config-and-keybindings">Basic config & keybindings</h4>
|
||||
|
|
@ -5229,11 +5252,6 @@ 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:#ba2121">"C-x C-d"</span> <span style="color:#800">nil</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:#666">'</span>(<span style="color:#19177c">dired-recent-open</span> <span style="color:#008000">:wk</span> <span style="color:#ba2121">"dired history"</span>)))
|
||||
</span></span></code></pre></div><p><del>Reuse the current dired buffer instead of spamming new ones.</del> Looks like not necessary with Emacs 28.1</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">dired-single</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">:disabled</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#800">t</span>)
|
||||
</span></span></code></pre></div><p>Display icons for files.</p>
|
||||
<table>
|
||||
<thead>
|
||||
|
|
@ -5399,7 +5417,83 @@ 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:#00f">assoc</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">completing-read</span> <span style="color:#ba2121">"Dired: "</span> <span style="color:#19177c">bookmarks</span> <span style="color:#800">nil</span> <span style="color:#800">nil</span> <span style="color:#ba2121">"^"</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">bookmarks</span>)))))
|
||||
</span></span></code></pre></div><h3 id="shells">Shells</h3>
|
||||
</span></span></code></pre></div><h4 id="integrations-1">Integrations</h4>
|
||||
<p>A few functions to send files from Dired to various places.</p>
|
||||
<p>First, a function to get the target buffer.</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/get-good-buffer</span> (<span style="color:#19177c">buffer-major-mode</span> <span style="color:#19177c">prompt</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">or</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cl-loop</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">for</span> <span style="color:#19177c">buf</span> <span style="color:#19177c">being</span> <span style="color:#19177c">the</span> <span style="color:#19177c">buffers</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">if</span> (<span style="color:#00f">eq</span> (<span style="color:#00f">buffer-local-value</span> <span style="color:#19177c">'major-mode</span> <span style="color:#19177c">buf</span>) <span style="color:#19177c">buffer-major-mode</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">collect</span> <span style="color:#19177c">buf</span> <span style="color:#19177c">into</span> <span style="color:#19177c">all-buffers</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">if</span> (<span style="color:#008000">and</span> (<span style="color:#00f">eq</span> (<span style="color:#00f">buffer-local-value</span> <span style="color:#19177c">'major-mode</span> <span style="color:#19177c">buf</span>) <span style="color:#19177c">buffer-major-mode</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">get-buffer-window</span> <span style="color:#19177c">buf</span> <span style="color:#800">t</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">collect</span> <span style="color:#19177c">buf</span> <span style="color:#19177c">into</span> <span style="color:#19177c">visible-buffers</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">finally</span> <span style="color:#008000">return</span> (<span style="color:#008000">if</span> (<span style="color:#00f">=</span> (<span style="color:#00f">length</span> <span style="color:#19177c">visible-buffers</span>) <span style="color:#666">1</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">car</span> <span style="color:#19177c">visible-buffers</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> (<span style="color:#00f">=</span> (<span style="color:#00f">length</span> <span style="color:#19177c">all-buffers</span>) <span style="color:#666">1</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">car</span> <span style="color:#19177c">all-buffers</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">when-let</span> ((<span style="color:#19177c">buffers-by-name</span> (<span style="color:#00f">mapcar</span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">b</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">cons</span> (<span style="color:#00f">buffer-name</span> <span style="color:#19177c">b</span>) <span style="color:#19177c">b</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">all-buffers</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">cdr</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">assoc</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">completing-read</span> <span style="color:#19177c">prompt</span> <span style="color:#19177c">buffers-by-name</span> <span style="color:#800">nil</span> <span style="color:#800">t</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">buffers-by-name</span>))))))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#d2413a;font-weight:bold">user-error</span> <span style="color:#ba2121">"No buffer found!"</span>)))
|
||||
</span></span></code></pre></div><p>Attach file to telega.</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-attach-to-telega</span> (<span style="color:#19177c">files</span> <span style="color:#19177c">telega-buffer</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">list</span> (<span style="color:#19177c">dired-get-marked-files</span> <span style="color:#800">nil</span> <span style="color:#800">nil</span> <span style="color:#00f">#'</span><span style="color:#19177c">dired-nondirectory-p</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/get-good-buffer</span> <span style="color:#19177c">'telega-chat-mode</span> <span style="color:#ba2121">"Telega buffer: "</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> <span style="color:#19177c">files</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#d2413a;font-weight:bold">user-error</span> <span style="color:#ba2121">"No (non-directory) files selected"</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">with-current-buffer</span> <span style="color:#19177c">telega-buffer</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">dolist</span> (<span style="color:#19177c">file</span> <span style="color:#19177c">files</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">telega-chatbuf-attach-file</span> <span style="color:#19177c">file</span>))))
|
||||
</span></span></code></pre></div><p>Attach files to notmuch.</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-attach-to-notmuch</span> (<span style="color:#19177c">files</span> <span style="color:#19177c">notmuch-buffer</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">list</span> (<span style="color:#19177c">dired-get-marked-files</span> <span style="color:#800">nil</span> <span style="color:#800">nil</span> <span style="color:#00f">#'</span><span style="color:#19177c">dired-nondirectory-p</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/get-good-buffer</span> <span style="color:#19177c">'notmuch-message-mode</span> <span style="color:#ba2121">"Notmuch message buffer: "</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> <span style="color:#19177c">files</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#d2413a;font-weight:bold">user-error</span> <span style="color:#ba2121">"No (non-directory) files selected"</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">with-current-buffer</span> <span style="color:#19177c">notmuch-buffer</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">goto-char</span> (<span style="color:#00f">point-max</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">dolist</span> (<span style="color:#19177c">file</span> <span style="color:#19177c">files</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">type</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">or</span> (<span style="color:#19177c">mm-default-file-type</span> <span style="color:#19177c">file</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"application/octet-stream"</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">mml-attach-file</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">file</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">type</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">mml-minibuffer-read-description</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">mml-minibuffer-read-disposition</span> <span style="color:#19177c">type</span> <span style="color:#800">nil</span> <span style="color:#19177c">file</span>))))))
|
||||
</span></span></code></pre></div><p>Attach files to ement.</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-attach-to-ement</span> (<span style="color:#19177c">files</span> <span style="color:#19177c">ement-buffer</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">list</span> (<span style="color:#19177c">dired-get-marked-files</span> <span style="color:#800">nil</span> <span style="color:#800">nil</span> <span style="color:#00f">#'</span><span style="color:#19177c">dired-nondirectory-p</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/get-good-buffer</span> <span style="color:#19177c">'ement-room-mode</span> <span style="color:#ba2121">"Ement room buffer: "</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> <span style="color:#19177c">files</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#d2413a;font-weight:bold">user-error</span> <span style="color:#ba2121">"No (non-directory) files selected"</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">with-current-buffer</span> <span style="color:#19177c">ement-buffer</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">ement-with-room-and-session</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">dolist</span> (<span style="color:#19177c">file</span> <span style="color:#19177c">files</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">ement-room-send-file</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">file</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">read-from-minibuffer</span> (<span style="color:#00f">format</span> <span style="color:#ba2121">"Message body for %s: "</span> <span style="color:#19177c">file</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">ement-room</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">ement-session</span>)))))
|
||||
</span></span></code></pre></div><p>And the keybindings:</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">with-eval-after-load</span> <span style="color:#19177c">'dired</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">'dired-mode-map</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"a"</span> <span style="color:#800">nil</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"at"</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/dired-attach-to-telega</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"am"</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/dired-attach-to-notmuch</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"ai"</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/dired-attach-to-ement</span>))
|
||||
</span></span></code></pre></div><h3 id="shells-terminals">Shells / Terminals</h3>
|
||||
<h4 id="vterm">vterm</h4>
|
||||
<p>My terminal emulator of choice.</p>
|
||||
<p>References:</p>
|
||||
|
|
@ -6251,35 +6345,34 @@ Didn’t work out as I expected, so I’ve made <code>org-journal-tags</
|
|||
<p>For obvious reasons, podcasts rarely ship with transcripts. So in this <del>post</del> section I’ll be using a speech recognition engine to make up for that. The general idea is to obtain the podcast information from <a href="https://github.com/skeeto/elfeed">elfeed</a>, process it with <a href="https://github.com/openai/whisper">OpenAI Whisper</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>.</p>
|
||||
<p>Edit <span class="timestamp-wrapper"><span class="timestamp"><2022-10-08 Sat></span></span>: Changed <a href="https://github.com/alphacep/vosk-api">vosk-api</a> to OpenAI Whisper.</p>
|
||||
<h5 id="whisper">Whisper</h5>
|
||||
<p><a href="https://github.com/openai/whisper">OpenAI Whisper</a> is an amazing speech recognition toolkit. It’s pretty slow on my PC (compared to <a href="https://github.com/alphacep/vosk-api">vosk-api</a> which I’ve been using before), but the quality is so much better so I think it’s completely worth it.</p>
|
||||
<p>All we need to do is install Whisper in a virtual environment:</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>python -m virtualenv venv
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000">source</span> venv/bin/activate
|
||||
</span></span><span style="display:flex;"><span>pip install openai-whisper
|
||||
</span></span></code></pre></div><p>After which the program can be used as follows:</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>whisper <path-to-file> --output-dir <path-to-output-dir>
|
||||
</span></span></code></pre></div><h5 id="running-it-from-emacs">Running it from Emacs</h5>
|
||||
<p><a href="https://github.com/openai/whisper">OpenAI Whisper</a> is an amazing speech recognition toolkit.</p>
|
||||
<p>The implementation by OpenAI is rather slow on my PC (speed around 0.75 on tiny.en), but <a href="https://github.com/ggerganov/whisper.cpp">whisper.cpp</a> by Georgi Gerganov works much faster (5.9x). I’ve packaged the latter for Guix.</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Guix dependency</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>whisper-cpp</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h5 id="running-it-from-emacs">Running it from Emacs</h5>
|
||||
<p>Running the program from Emacs is rather straightforward with <a href="https://www.gnu.org/software/emacs/manual/html_node/elisp/Asynchronous-Processes.html">asyncronous processes</a>.</p>
|
||||
<p>I’m using an English-language-only model because that’s the only language I need at the moment.</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defvar</span> <span style="color:#19177c">my/whisper-env-path</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"/home/pavel/10-19 Code/13 Other Projects/13.01 whisper-test/"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"Path to the folder with </span><span style="color:#19177c">`whisper'</span><span style="color:#ba2121"> environment."</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/invoke-whisper</span> (<span style="color:#19177c">input</span> <span style="color:#19177c">output-dir</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"Extract subtitles from the audio file.
|
||||
<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/invoke-whisper--direct</span> (<span style="color:#19177c">input</span> <span style="color:#19177c">output-dir</span> <span style="color:#19177c">remove-wav</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"Extract subtitles from a WAV audio file.
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">INPUT is the audio file, OUTPUT-DIR is the path to the directory with
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">resulting files."</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">list</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">read-file-name</span> <span style="color:#ba2121">"Input file: "</span> <span style="color:#800">nil</span> <span style="color:#800">nil</span> <span style="color:#800">t</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">read-directory-name</span> <span style="color:#ba2121">"Output directory: "</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">"whisper"</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">default-directory</span> <span style="color:#19177c">my/whisper-env-path</span>)
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">INPUT is the absolute path to audio file, OUTPUT-DIR is the path to
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">the directory with resulting files."</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let*</span> ((<span style="color:#19177c">default-directory</span> <span style="color:#19177c">output-dir</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">buffer</span> (<span style="color:#19177c">generate-new-buffer</span> <span style="color:#ba2121">"whisper"</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">proc</span> (<span style="color:#00f">start-process</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"whisper"</span> <span style="color:#19177c">buffer</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">concat</span> <span style="color:#19177c">my/whisper-env-path</span> <span style="color:#ba2121">"venv/bin/whisper"</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"--output_dir"</span> <span style="color:#19177c">output-dir</span> <span style="color:#ba2121">"--model"</span> <span style="color:#ba2121">"tiny.en"</span> <span style="color:#19177c">input</span>)))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"whisper-cpp"</span> <span style="color:#ba2121">"--model"</span> <span style="color:#ba2121">"/home/pavel/.whisper/ggml-tiny.en.bin"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"-otxt"</span> <span style="color:#ba2121">"-ovtt"</span> <span style="color:#ba2121">"-osrt"</span> <span style="color:#19177c">input</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">set-process-sentinel</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">proc</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">process</span> <span style="color:#19177c">_msg</span>)
|
||||
|
|
@ -6288,12 +6381,48 @@ 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">cond</span> ((<span style="color:#008000">and</span> (<span style="color:#00f">eq</span> <span style="color:#19177c">status</span> <span style="color:#19177c">'exit</span>) (<span style="color:#00f">=</span> <span style="color:#19177c">code</span> <span style="color:#666">0</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">notifications-notify</span> <span style="color:#008000">:body</span> <span style="color:#ba2121">"Audio conversion completed"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:title</span> <span style="color:#ba2121">"Whisper"</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> <span style="color:#19177c">remove-wav</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">delete-file</span> <span style="color:#19177c">input</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">dolist</span> (<span style="color:#19177c">extension</span> <span style="color:#666">'</span>(<span style="color:#ba2121">".txt"</span> <span style="color:#ba2121">".vtt"</span> <span style="color:#ba2121">".srt"</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">rename-file</span> (<span style="color:#00f">concat</span> <span style="color:#19177c">input</span> <span style="color:#19177c">extension</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">concat</span> (<span style="color:#19177c">file-name-sans-extension</span> <span style="color:#19177c">input</span>) <span style="color:#19177c">extension</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">kill-buffer</span> (<span style="color:#00f">process-buffer</span> <span style="color:#19177c">process</span>)))
|
||||
</span></span><span style="display:flex;"><span> ((<span style="color:#008000">or</span> (<span style="color:#008000">and</span> (<span style="color:#00f">eq</span> <span style="color:#19177c">status</span> <span style="color:#19177c">'exit</span>) (<span style="color:#00f">></span> <span style="color:#19177c">code</span> <span style="color:#666">0</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">eq</span> <span style="color:#19177c">status</span> <span style="color:#19177c">'signal</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">err</span> (<span style="color:#008000">with-current-buffer</span> (<span style="color:#00f">process-buffer</span> <span style="color:#19177c">process</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">buffer-string</span>))))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#d2413a;font-weight:bold">user-error</span> <span style="color:#ba2121">"Error in Whisper: %s"</span> <span style="color:#19177c">err</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/invoke-whisper</span> (<span style="color:#19177c">input</span> <span style="color:#19177c">output-dir</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"Extract subtitles from the audio file.
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">INPUT is the absolute path to the audio file, OUTPUT-DIR is the path
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">to the directory with resulting files.
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">Run ffmpeg if the file is not WAV."</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">list</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">read-file-name</span> <span style="color:#ba2121">"Input file: "</span> <span style="color:#800">nil</span> <span style="color:#800">nil</span> <span style="color:#800">t</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">read-directory-name</span> <span style="color:#ba2121">"Output directory: "</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> (<span style="color:#19177c">string-match-p</span> (<span style="color:#008000">rx</span> <span style="color:#ba2121">".wav"</span> <span style="color:#19177c">eos</span>) <span style="color:#19177c">input</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/invoke-whisper--direct</span> <span style="color:#19177c">input</span> <span style="color:#19177c">output-dir</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let*</span> ((<span style="color:#19177c">ffmpeg-proc</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">start-process</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"ffmpef"</span> <span style="color:#800">nil</span> <span style="color:#ba2121">"ffmpeg"</span> <span style="color:#ba2121">"-i"</span> <span style="color:#19177c">input</span> <span style="color:#ba2121">"-ar"</span> <span style="color:#ba2121">"16000"</span> <span style="color:#ba2121">"-ac"</span> <span style="color:#ba2121">"1"</span> <span style="color:#ba2121">"-c:a"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"pcm_s16le"</span> (<span style="color:#00f">concat</span> (<span style="color:#19177c">file-name-sans-extension</span> <span style="color:#19177c">input</span>) <span style="color:#ba2121">".wav"</span>))))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">set-process-sentinel</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">ffmpeg-proc</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">process</span> <span style="color:#19177c">_msg</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">status</span> (<span style="color:#00f">process-status</span> <span style="color:#19177c">process</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">code</span> (<span style="color:#00f">process-exit-status</span> <span style="color:#19177c">process</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cond</span> ((<span style="color:#008000">and</span> (<span style="color:#00f">eq</span> <span style="color:#19177c">status</span> <span style="color:#19177c">'exit</span>) (<span style="color:#00f">=</span> <span style="color:#19177c">code</span> <span style="color:#666">0</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/invoke-whisper--direct</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">concat</span> (<span style="color:#19177c">file-name-sans-extension</span> <span style="color:#19177c">input</span>) <span style="color:#ba2121">".wav"</span>) <span style="color:#19177c">output-dir</span> <span style="color:#800">t</span>))
|
||||
</span></span><span style="display:flex;"><span> ((<span style="color:#008000">or</span> (<span style="color:#008000">and</span> (<span style="color:#00f">eq</span> <span style="color:#19177c">status</span> <span style="color:#19177c">'exit</span>) (<span style="color:#00f">></span> <span style="color:#19177c">code</span> <span style="color:#666">0</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">eq</span> <span style="color:#19177c">status</span> <span style="color:#19177c">'signal</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">err</span> (<span style="color:#008000">with-current-buffer</span> (<span style="color:#00f">process-buffer</span> <span style="color:#19177c">process</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">buffer-string</span>))))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#d2413a;font-weight:bold">user-error</span> <span style="color:#ba2121">"Error in running ffmpeg: %s"</span> <span style="color:#19177c">err</span>))))))))))
|
||||
</span></span></code></pre></div><p>If run interactively, the defined function prompts for paths to both files.</p>
|
||||
<p>The process sentinel sends a <a href="https://www.gnu.org/software/emacs/manual/html_node/elisp/Desktop-Notifications.html">desktop notification</a> because it’s a bit more noticeable than <code>message</code>, and the process is expected to take some time.</p>
|
||||
<h5 id="integrating-with-elfeed">Integrating with elfeed</h5>
|
||||
|
|
@ -6433,6 +6562,69 @@ 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">if</span> (<span style="color:#00f">file-exists-p</span> <span style="color:#19177c">mail-file</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">load-file</span> <span style="color:#19177c">mail-file</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">message</span> <span style="color:#ba2121">"Can't load mail.el"</span>))))
|
||||
</span></span></code></pre></div><h4 id="gnus">Gnus</h4>
|
||||
<p><a href="https://www.gnu.org/software/emacs/manual/html_node/gnus/index.html">Gnus</a> is an Emacs newsreader.</p>
|
||||
<p>I’ll try to use it for NTTP for now. Will see if I can do more with it.</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">gnus</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">:init</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my-leader-def</span> <span style="color:#ba2121">"au"</span> <span style="color:#00f">#'</span><span style="color:#19177c">gnus</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">my/persp-add-rule</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">gnus-summary-mode</span> <span style="color:#666">0</span> <span style="color:#ba2121">"gnus"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; gnus-article-edit-mode 0 "gnus"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">gnus-browse-mode</span> <span style="color:#666">0</span> <span style="color:#ba2121">"gnus"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">gnus-server-mode</span> <span style="color:#666">0</span> <span style="color:#ba2121">"gnus"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">gnus-article-mode</span> <span style="color:#666">0</span> <span style="color:#ba2121">"gnus"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">gnus-group-mode</span> <span style="color:#666">0</span> <span style="color:#ba2121">"gnus"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">gnus-category-mode</span> <span style="color:#666">0</span> <span style="color:#ba2121">"gnus"</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">gnus-directory</span> (<span style="color:#00f">concat</span> <span style="color:#19177c">user-emacs-directory</span> <span style="color:#ba2121">"gnus"</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> (<span style="color:#00f">file-directory-p</span> <span style="color:#19177c">gnus-directory</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">make-directory</span> <span style="color:#19177c">gnus-directory</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">gnus-dribble-directory</span> (<span style="color:#00f">concat</span> <span style="color:#19177c">gnus-directory</span> <span style="color:#ba2121">"/dribble"</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">gnus-init-file</span> (<span style="color:#00f">concat</span> <span style="color:#19177c">gnus-directory</span> <span style="color:#ba2121">"/gnus.el"</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">gnus-startup-file</span> (<span style="color:#00f">concat</span> <span style="color:#19177c">gnus-directory</span> <span style="color:#ba2121">"/newsrc"</span>)))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; Sources</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">gnus-select-method</span> <span style="color:#666">'</span>(<span style="color:#19177c">nntp</span> <span style="color:#ba2121">"news.gwene.org"</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; Dribble</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">gnus-always-read-dribble-file</span> <span style="color:#800">t</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; Agent</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">gnus-agent-article-alist-save-format</span> <span style="color:#666">1</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">gnus-agent-cache</span> <span style="color:#800">t</span>))
|
||||
</span></span></code></pre></div><h5 id="groups">Groups</h5>
|
||||
<p>Toggle current topic.</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/gnus-topic-toggle-topic</span> ()
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span> <span style="color:#ba2121">""</span> <span style="color:#19177c">gnus-topic-mode</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#19177c">gnus-group-topic-p</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">topic</span> (<span style="color:#19177c">gnus-topic-find-topology</span> (<span style="color:#19177c">gnus-current-topic</span>))))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> (<span style="color:#00f">eq</span> (<span style="color:#19177c">cadadr</span> <span style="color:#19177c">topic</span>) <span style="color:#19177c">'visible</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">progn</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">gnus-topic-goto-topic</span> (<span style="color:#19177c">gnus-current-topic</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">gnus-topic-remove-topic</span> <span style="color:#800">nil</span> <span style="color:#800">nil</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">gnus-topic-remove-topic</span> <span style="color:#800">t</span> <span style="color:#800">nil</span>)))))
|
||||
</span></span></code></pre></div><p>Custom keybindings.</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">with-eval-after-load</span> <span style="color:#19177c">'gnus-group</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; Group</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">add-hook</span> <span style="color:#19177c">'gnus-group-mode-hook</span> <span style="color:#00f">#'</span><span style="color:#19177c">gnus-topic-mode</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:#666">'</span>(<span style="color:#19177c">gnus-group-mode-map</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"a"</span> <span style="color:#00f">#'</span><span style="color:#19177c">gnus-group-toggle-subscription-at-point</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:#666">'</span>(<span style="color:#19177c">gnus-topic-mode-map</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"TAB"</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/gnus-topic-toggle-topic</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"r"</span> <span style="color:#00f">#'</span><span style="color:#19177c">gnus-topic-catchup-articles</span>))
|
||||
</span></span></code></pre></div><h5 id="summary">Summary</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">with-eval-after-load</span> <span style="color:#19177c">'gnus-summary</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">gnus-summary-line-format</span> <span style="color:#ba2121">"%U%R%z%I%(%[%4L: %-23,23f%]%) %s\n"</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">gnus-sum-thread-tree-false-root</span> <span style="color:#ba2121">"> "</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">gnus-sum-thread-tree-indent</span> <span style="color:#ba2121">" "</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">gnus-sum-thread-tree-single-indent</span> <span style="color:#ba2121">" "</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">gnus-sum-thread-tree-leaf-with-other</span> <span style="color:#ba2121">"+-> "</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">gnus-sum-thread-tree-root</span> <span style="color:#ba2121">"> "</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">gnus-sum-thread-tree-single-leaf</span> <span style="color:#ba2121">"\\-> "</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">gnus-sum-thread-tree-vertical</span> <span style="color:#ba2121">"| "</span>))
|
||||
</span></span></code></pre></div><h4 id="emms">EMMS</h4>
|
||||
<p>EMMS is the Emacs Multi-Media System. I use it to control MPD & MPV.</p>
|
||||
<p>References:</p>
|
||||
|
|
@ -6900,10 +7092,10 @@ 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">let</span> ((<span style="color:#19177c">tgt</span> (<span style="color:#19177c">erc-default-target</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">erc-server-send</span> (<span style="color:#00f">format</span> <span style="color:#ba2121">"DETACH %s"</span> <span style="color:#19177c">tgt</span>) <span style="color:#800">nil</span> <span style="color:#19177c">tgt</span>))))))
|
||||
</span></span></code></pre></div><h4 id="mastodon">Mastodon</h4>
|
||||
<p>Mastodon is a decentralized social media network. I use an instance called <a href="https://emacs.ch/">emacs.ch</a></p>
|
||||
<p>Mastodon is a decentralized social media network. I use an instance called <a href="https://emacs.ch/">emacs.ch</a>.</p>
|
||||
<h5 id="package-configuration">Package configuration</h5>
|
||||
<p><a href="https://codeberg.org/martianh/mastodon.el">mastodon.el</a> is an Emacs client for Mastodon.</p>
|
||||
<p>The default UI is a bit rough, but Nicolas Rougier’s <a href="https://github.com/rougier/mastodon-alt">mastodon-alt</a> package makes things a bit more how I would like to see them.</p>
|
||||
<p>The default UI is rather rough, but Nicolas Rougier’s <a href="https://github.com/rougier/mastodon-alt">mastodon-alt</a> package makes things a bit more how I would like to see them.</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">mastodon</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">:commands</span> (<span style="color:#19177c">my/mastodon</span>)
|
||||
|
|
@ -6968,6 +7160,7 @@ 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:#ba2121">"q"</span> <span style="color:#00f">#'</span><span style="color:#19177c">kill-current-buffer</span>))
|
||||
</span></span></code></pre></div><h5 id="modeline-segment">Modeline segment</h5>
|
||||
<p>This is my attempt to make a modeline indicator for new mastodon notifications.</p>
|
||||
<p>Edit <span class="timestamp-wrapper"><span class="timestamp">[2023-07-28 Fri]</span></span>: I’ll probably remove that, don’t feel like it’s actually useful.</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defvar</span> <span style="color:#19177c">my/mastodon-mode-string</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/mastodon-mode-line-unread-ids</span> <span style="color:#800">nil</span>)
|
||||
|
|
@ -7058,7 +7251,9 @@ 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">remove-hook</span> <span style="color:#19177c">'kill-emacs-hook</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/mastodon-mode-line-persist-meta</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/mastodon-mode-line-persist-meta</span>)))))
|
||||
</span></span></code></pre></div><h5 id="timeline-transient">Timeline Transient</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/mastodon-get-update-funciton</span> (<span style="color:#19177c">hide-boosts</span> <span style="color:#19177c">hide-replies</span>)
|
||||
<p>The default <code>mastodon-tl--get-home-timeline</code> allows only to hide replies, and not boosted posts.</p>
|
||||
<p>So here’s a custom update function:</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/mastodon-get-update-funciton</span> (<span style="color:#19177c">hide-replies</span> <span style="color:#19177c">hide-boosts</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">toots</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let*</span> ((<span style="color:#19177c">is-profile</span> (<span style="color:#00f">eq</span> (<span style="color:#19177c">mastodon-tl--get-buffer-type</span>) <span style="color:#19177c">'profile-statuses</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">hide-replies</span> (<span style="color:#008000">and</span> (<span style="color:#19177c">not</span> <span style="color:#19177c">is-profile</span>) <span style="color:#19177c">hide-replies</span>))
|
||||
|
|
@ -7072,11 +7267,9 @@ 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">or</span> (<span style="color:#19177c">not</span> <span style="color:#19177c">hide-boosts</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">not</span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">'reblog</span> <span style="color:#19177c">toot</span>)))))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">toots</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">message</span> <span style="color:#ba2121">"Hide replies: %s"</span> <span style="color:#19177c">hide-replies</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">message</span> <span style="color:#ba2121">"Hide boosts: %s"</span> <span style="color:#19177c">hide-boosts</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">message</span> <span style="color:#ba2121">"Buffer: %s"</span> (<span style="color:#00f">buffer-name</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">mapc</span> <span style="color:#00f">#'</span><span style="color:#19177c">mastodon-tl--toot</span> <span style="color:#19177c">toots</span>))))
|
||||
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/mastodon-tl--get-home</span> (<span style="color:#19177c">hide-replies</span> <span style="color:#19177c">hide-boosts</span>)
|
||||
</span></span></code></pre></div><p>In order to use it, the function has to be passed to <code>mastodon-tl--init</code>:</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/mastodon-tl--get-home</span> (<span style="color:#19177c">hide-replies</span> <span style="color:#19177c">hide-boosts</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">mastodon-tl--init</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"home"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"timelines/home"</span>
|
||||
|
|
@ -7084,7 +7277,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:#800">nil</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#666">`</span>((<span style="color:#ba2121">"limit"</span> <span style="color:#666">.</span> <span style="color:#666">,</span><span style="color:#19177c">mastodon-tl--timeline-posts-count</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#800">nil</span>))
|
||||
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">with-eval-after-load</span> <span style="color:#19177c">'mastodon</span>
|
||||
</span></span></code></pre></div><p>And a transient to use it.</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">'mastodon</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">require</span> <span style="color:#19177c">'transient</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">transient-define-prefix</span> <span style="color:#19177c">my/mastodon-tl</span> ()
|
||||
</span></span><span style="display:flex;"><span> [<span style="color:#ba2121">"Home timeline params"</span>
|
||||
|
|
@ -7318,6 +7512,7 @@ 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:#ba2121">"r"</span> <span style="color:#00f">#'</span><span style="color:#19177c">ement-room-write-reply</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"a"</span> <span style="color:#00f">#'</span><span style="color:#19177c">ement-room-send-message</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"i"</span> <span style="color:#00f">#'</span><span style="color:#19177c">ement-room-send-message</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"e"</span> <span style="color:#00f">#'</span><span style="color:#19177c">ement-room-edit-message</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"M-<RET>"</span> <span style="color:#00f">#'</span><span style="color:#19177c">ement-room-compose-message</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"<RET>"</span> <span style="color:#00f">#'</span><span style="color:#19177c">ement-room-send-message</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"K"</span> <span style="color:#00f">#'</span><span style="color:#19177c">ement-room-goto-prev</span>
|
||||
|
|
@ -7351,7 +7546,7 @@ Didn’t work out as I expected, so I’ve made <code>org-journal-tags</
|
|||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>tdlib-1.8.13</td>
|
||||
<td>tdlib-1.8.14</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>font-gnu-unifont</td>
|
||||
|
|
@ -7393,7 +7588,7 @@ 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">interactive</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">telega-server-libs-prefix</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">string-trim</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">shell-command-to-string</span> <span style="color:#ba2121">"guix build tdlib-1.8.13"</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">shell-command-to-string</span> <span style="color:#ba2121">"guix build tdlib-1.8.14"</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">telega-server-build</span> <span style="color:#ba2121">"CC=gcc"</span>))
|
||||
</span></span></code></pre></div><p>Setting up the modeline. The default mode string doesn’t look great with my other modeline modules, so I override 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:#19177c">add-hook</span> <span style="color:#19177c">'telega-load-hook</span> <span style="color:#00f">#'</span><span style="color:#19177c">telega-mode-line-mode</span>)
|
||||
|
|
@ -7426,10 +7621,6 @@ 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">'telega-image-mode</span> <span style="color:#19177c">'telega-webpage-mode</span>))
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>(<span style="color:#008000">setq</span> <span style="color:#19177c">telega-online-status-function</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/telega-online-status</span>)
|
||||
</span></span></code></pre></div><h4 id="reddit"><span class="org-todo done OFF">OFF</span> Reddit</h4>
|
||||
<p><a href="https://github.com/thanhvg/emacs-reddigg">reddigg</a> allows to view reddit in org-mode.</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">reddigg</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#800">t</span>)
|
||||
</span></span></code></pre></div><h4 id="google-translate">Google Translate</h4>
|
||||
<p>Emacs interface to Google Translate.</p>
|
||||
<p>Can’t make it load lazily for some strange reason.</p>
|
||||
|
|
@ -7468,6 +7659,18 @@ 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:#ba2121">"q"</span> <span style="color:#19177c">'google-translate-query-translate</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"Q"</span> <span style="color:#19177c">'google-translate-query-translate-reverse</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"t"</span> <span style="color:#19177c">'google-translate-smooth-translate</span>)
|
||||
</span></span></code></pre></div><h4 id="biome">biome</h4>
|
||||
<p><a href="https://github.com/SqrtMinusOne/biome">biome</a> is my <a href="https://open-meteo.com/">open-meteo</a> client.</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">biome</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">"SqrtMinusOne/biome"</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:commands</span> (<span style="color:#19177c">biome</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:init</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my-leader-def</span> <span style="color:#ba2121">"ab"</span> <span style="color:#00f">#'</span><span style="color:#19177c">biome</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-to-list</span> <span style="color:#19177c">'biome-query-coords</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>(<span style="color:#ba2121">"Saint-Petersburg, Russia"</span> <span style="color:#666">59.93863</span> <span style="color:#666">30.31413</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">add-to-list</span> <span style="color:#19177c">'biome-query-coords</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>(<span style="color:#ba2121">"Tyumen, Russia"</span> <span style="color:#666">57.15222</span> <span style="color:#666">65.52722</span>)))
|
||||
</span></span></code></pre></div><h3 id="reading-documentation">Reading documentation</h3>
|
||||
<h4 id="tldr">tldr</h4>
|
||||
<p><a href="https://tldr.sh/">tldr</a> is a collaborative project providing cheatsheets for various console commands. For some reason, the built-in download in the package is broken, so I use my own function.</p>
|
||||
|
|
@ -7598,52 +7801,6 @@ 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">:commands</span> (<span style="color:#19177c">docker</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:init</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my-leader-def</span> <span style="color:#ba2121">"ao"</span> <span style="color:#19177c">'docker</span>))
|
||||
</span></span></code></pre></div><h4 id="progidy">Progidy</h4>
|
||||
<p><a href="https://github.com/rejeep/prodigy.el">prodigy.el</a> is a package to manage services. I’ve been using <a href="https://github.com/tmux/tmux">tmux</a> + <a href="https://github.com/tmux-python/tmuxp">tmuxp</a> for quite a long time, but want to try this package as well.</p>
|
||||
<p>The actual service definitions are in my <code>~/.emacs.d/private.org</code>, which is encrypted by <code>yadm</code>.</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">prodigy</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">:commands</span> (<span style="color:#19177c">prodigy</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:init</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my-leader-def</span> <span style="color:#ba2121">"aP"</span> <span style="color:#00f">#'</span><span style="color:#19177c">prodigy</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">'prodigy-view-mode-map</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"C-h"</span> <span style="color:#19177c">'evil-window-left</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"C-l"</span> <span style="color:#19177c">'evil-window-right</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"C-k"</span> <span style="color:#19177c">'evil-window-up</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"C-j"</span> <span style="color:#19177c">'evil-window-down</span>))
|
||||
</span></span></code></pre></div><p>A few functions to work with apps on ports.</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/get-apps-on-ports</span> ()
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">mapcar</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">line</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let*</span> ((<span style="color:#19177c">split</span> (<span style="color:#19177c">split-string</span> <span style="color:#19177c">line</span> (<span style="color:#008000">rx</span> (<span style="color:#19177c">|</span> (<span style="color:#00f">+</span> <span style="color:#ba2121">" "</span>) (<span style="color:#00f">+</span> <span style="color:#ba2121">"\t"</span>)))))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">process</span> (<span style="color:#00f">elt</span> <span style="color:#19177c">split</span> <span style="color:#666">6</span>)))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#666">`</span>((<span style="color:#19177c">netid</span> <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#00f">elt</span> <span style="color:#19177c">split</span> <span style="color:#666">0</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">state</span> <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#00f">elt</span> <span style="color:#19177c">split</span> <span style="color:#666">1</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">recv-q</span> <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#00f">elt</span> <span style="color:#19177c">split</span> <span style="color:#666">2</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">send-q</span> <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#00f">elt</span> <span style="color:#19177c">split</span> <span style="color:#666">3</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#666">,@</span>(<span style="color:#008000">let</span> ((<span style="color:#19177c">data</span> (<span style="color:#00f">elt</span> <span style="color:#19177c">split</span> <span style="color:#666">4</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">save-match-data</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">string-match</span> (<span style="color:#008000">rx</span> (<span style="color:#19177c">group-n</span> <span style="color:#666">1</span> (<span style="color:#00f">*</span> <span style="color:#19177c">nonl</span>)) <span style="color:#ba2121">":"</span> (<span style="color:#19177c">group-n</span> <span style="color:#666">2</span> (<span style="color:#008000">or</span> (<span style="color:#00f">+</span> <span style="color:#19177c">num</span>) <span style="color:#ba2121">"*"</span>))) <span style="color:#19177c">data</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#666">`</span>((<span style="color:#19177c">local-address</span> <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#19177c">match-string</span> <span style="color:#666">1</span> <span style="color:#19177c">data</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">local-port</span> <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#19177c">match-string</span> <span style="color:#666">2</span> <span style="color:#19177c">data</span>)))))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#666">,@</span>(<span style="color:#008000">unless</span> (<span style="color:#19177c">string-empty-p</span> <span style="color:#19177c">process</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#666">`</span>((<span style="color:#19177c">pid</span> <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#008000">save-match-data</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">string-match</span> (<span style="color:#008000">rx</span> <span style="color:#ba2121">"pid="</span> (<span style="color:#00f">+</span> <span style="color:#19177c">num</span>)) <span style="color:#19177c">process</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">string-to-number</span> (<span style="color:#00f">substring</span> (<span style="color:#19177c">match-string</span> <span style="color:#666">0</span> <span style="color:#19177c">process</span>) <span style="color:#666">4</span>)))))))))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">seq-filter</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">s</span>) (<span style="color:#19177c">not</span> (<span style="color:#19177c">string-empty-p</span> <span style="color:#19177c">s</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">split-string</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">shell-command-to-string</span> <span style="color:#ba2121">"ss -tulpnH | grep LISTEN"</span>) <span style="color:#ba2121">"\n"</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/kill-app-on-port</span> (<span style="color:#19177c">port</span> <span style="color:#008000">&optional</span> <span style="color:#d2413a;font-weight:bold">signal</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">apps</span> (<span style="color:#19177c">my/get-apps-on-ports</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">dolist</span> (<span style="color:#19177c">app</span> <span style="color:#19177c">apps</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#00f">string-equal</span> (<span style="color:#00f">cdr</span> (<span style="color:#00f">assoc</span> <span style="color:#19177c">'local-port</span> <span style="color:#19177c">app</span>)) <span style="color:#19177c">port</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">signal-process</span> (<span style="color:#00f">cdr</span> (<span style="color:#00f">assoc</span> <span style="color:#19177c">'pid</span> <span style="color:#19177c">app</span>)) (<span style="color:#008000">or</span> <span style="color:#d2413a;font-weight:bold">signal</span> <span style="color:#666">15</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">message</span> <span style="color:#ba2121">"Sent %d to %d"</span> (<span style="color:#008000">or</span> <span style="color:#d2413a;font-weight:bold">signal</span> <span style="color:#666">15</span>) (<span style="color:#00f">cdr</span> (<span style="color:#00f">assoc</span> <span style="color:#19177c">'pid</span> <span style="color:#19177c">app</span>)))))))
|
||||
</span></span></code></pre></div><h4 id="screenshot-dot-el">screenshot.el</h4>
|
||||
<p>Tecosaur’s plugin to make beautiful code screenshots.</p>
|
||||
<table>
|
||||
|
|
@ -8129,7 +8286,7 @@ I’ve seen a couple of cases where people would swap their username and ema
|
|||
<li><a href="#measure-ram-usage">Measure RAM usage</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#anaconda">Anaconda</a></li>
|
||||
<li><a href="#micromamba">Micromamba</a></li>
|
||||
<li><a href="#config-files">Config files</a>
|
||||
<ul>
|
||||
<li><a href="#custom-file-location">Custom file location</a></li>
|
||||
|
|
@ -8354,6 +8511,7 @@ I’ve seen a couple of cases where people would swap their username and ema
|
|||
<li><a href="#ol-notmuch">ol-notmuch</a></li>
|
||||
<li><a href="#org-tempo">org-tempo</a></li>
|
||||
<li><a href="#evil-org">evil-org</a></li>
|
||||
<li><a href="#support-for-relative-urls">Support for relative URLs</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#literate-programing">Literate programing</a>
|
||||
|
|
@ -8363,7 +8521,7 @@ I’ve seen a couple of cases where people would swap their username and ema
|
|||
<li><a href="#view-html-in-browser">View HTML in browser</a></li>
|
||||
<li><a href="#plantuml-1">PlantUML</a></li>
|
||||
<li><a href="#restclient">Restclient</a></li>
|
||||
<li><a href="#setup-1">Setup</a></li>
|
||||
<li><a href="#org-babel-setup">Org Babel Setup</a></li>
|
||||
<li><a href="#managing-jupyter-kernels">Managing Jupyter kernels</a></li>
|
||||
<li><a href="#output-post-processing">Output post-processing</a></li>
|
||||
<li><a href="#executing-stuff">Executing stuff</a></li>
|
||||
|
|
@ -8391,9 +8549,8 @@ I’ve seen a couple of cases where people would swap their username and ema
|
|||
<li><a href="#calendar-view">Calendar view</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#ui">UI</a>
|
||||
<li><a href="#ui-1">UI</a>
|
||||
<ul>
|
||||
<li><a href="#off--instant-equations-preview"><span class="org-todo done OFF">OFF</span> (OFF) Instant equations preview</a></li>
|
||||
<li><a href="#latex-fragments">LaTeX fragments</a></li>
|
||||
<li><a href="#better-headers">Better headers</a></li>
|
||||
<li><a href="#override-colors">Override colors</a></li>
|
||||
|
|
@ -8404,6 +8561,7 @@ I’ve seen a couple of cases where people would swap their username and ema
|
|||
<li><a href="#hugo">Hugo</a></li>
|
||||
<li><a href="#jupyter-notebook">Jupyter Notebook</a></li>
|
||||
<li><a href="#html-export">Html export</a></li>
|
||||
<li><a href="#org-ref-1">org-ref</a></li>
|
||||
<li><a href="#latex-1">LaTeX</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
|
@ -8427,16 +8585,17 @@ I’ve seen a couple of cases where people would swap their username and ema
|
|||
</li>
|
||||
<li><a href="#applications">Applications</a>
|
||||
<ul>
|
||||
<li><a href="#dired-1">Dired</a>
|
||||
<li><a href="#dired">Dired</a>
|
||||
<ul>
|
||||
<li><a href="#basic-config-and-keybindings">Basic config & keybindings</a></li>
|
||||
<li><a href="#addons-1">Addons</a></li>
|
||||
<li><a href="#subdirectories">Subdirectories</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="#shells">Shells</a>
|
||||
<li><a href="#shells-terminals">Shells / Terminals</a>
|
||||
<ul>
|
||||
<li><a href="#vterm">vterm</a></li>
|
||||
<li><a href="#eshell">eshell</a></li>
|
||||
|
|
@ -8467,6 +8626,7 @@ I’ve seen a couple of cases where people would swap their username and ema
|
|||
<li><a href="#internet-and-multimedia">Internet & Multimedia</a>
|
||||
<ul>
|
||||
<li><a href="#notmuch">Notmuch</a></li>
|
||||
<li><a href="#gnus">Gnus</a></li>
|
||||
<li><a href="#emms">EMMS</a></li>
|
||||
<li><a href="#ytel">ytel</a></li>
|
||||
<li><a href="#eww">EWW</a></li>
|
||||
|
|
@ -8474,8 +8634,8 @@ I’ve seen a couple of cases where people would swap their username and ema
|
|||
<li><a href="#mastodon">Mastodon</a></li>
|
||||
<li><a href="#ement-dot-el">ement.el</a></li>
|
||||
<li><a href="#telega">Telega</a></li>
|
||||
<li><a href="#reddit"><span class="org-todo done OFF">OFF</span> Reddit</a></li>
|
||||
<li><a href="#google-translate">Google Translate</a></li>
|
||||
<li><a href="#biome">biome</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#reading-documentation">Reading documentation</a>
|
||||
|
|
@ -8490,7 +8650,6 @@ I’ve seen a couple of cases where people would swap their username and ema
|
|||
<ul>
|
||||
<li><a href="#pass">pass</a></li>
|
||||
<li><a href="#docker-1">Docker</a></li>
|
||||
<li><a href="#progidy">Progidy</a></li>
|
||||
<li><a href="#screenshot-dot-el">screenshot.el</a></li>
|
||||
<li><a href="#proced">proced</a></li>
|
||||
<li><a href="#guix">Guix</a></li>
|
||||
|
|
|
|||
|
|
@ -174,7 +174,7 @@
|
|||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#00f">cons*</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">channel</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">name</span> <span style="color:#19177c">'channel-q</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">url</span> <span style="color:#ba2121">"file:///home/pavel/Code/channel-q"</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">url</span> <span style="color:#ba2121">"file:///home/pavel/_channel-q"</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">channel</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">name</span> <span style="color:#19177c">'flat</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">url</span> <span style="color:#ba2121">"https://github.com/flatwhatson/guix-channel.git"</span>)
|
||||
|
|
@ -554,7 +554,7 @@
|
|||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="vpn">VPN</h3>
|
||||
<h3 id="openvpn">OpenVPN</h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
|
|
@ -581,6 +581,7 @@
|
|||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>Update <span class="timestamp-wrapper"><span class="timestamp">[2023-06-29 Thu]</span></span>: My censors seem to be putting sticks in the wheels of OpenVPN… Switched to Wireguard for now. It can be configured with Network Manager.</p>
|
||||
<p>I’m not sure how to properly spin up VPN on Guix, so here is what ended I’m doing after some trial and error.</p>
|
||||
<p>I’m using Mullvad VPN. The <code>~/.vpn</code> folder stores its OpenVPN config (<code>openvpn.ovpn</code>), modified as follows:</p>
|
||||
<ul>
|
||||
|
|
@ -667,21 +668,39 @@ Also not necessary now. Just <code>herd stop vpn</code> and <code>sudo pkill vpn
|
|||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>pkexec nmcli con modify <span style="color:#ba2121">"</span><span style="color:#19177c">$CONN</span><span style="color:#ba2121">"</span> ipv6.method auto
|
||||
</span></span><span style="display:flex;"><span>nmcli connection up <span style="color:#ba2121">"</span><span style="color:#19177c">$CONN</span><span style="color:#ba2121">"</span>
|
||||
</span></span></code></pre></div><h3 id="flatpak">flatpak</h3>
|
||||
</span></span></code></pre></div><h3 id="wireguard">Wireguard</h3>
|
||||
<p>So, yeah, wireguard can be configured with <code>NetworkManager</code> just fine.</p>
|
||||
<p>The issue with DNS leaks remains, but fortunately <code>NetworkManager</code> runs all scripts in <code>/etc/NetworkManager/dispatcher.d/</code> when a connection changes, provided that scripts are:</p>
|
||||
<ul>
|
||||
<li>owned by root</li>
|
||||
<li>exectuable</li>
|
||||
<li>not readable by other users</li>
|
||||
<li>not setuid.</li>
|
||||
</ul>
|
||||
<p>See <a href="https://askubuntu.com/questions/13963/call-script-after-connecting-to-a-wireless-network">this answer</a> on StackExchange, and <a href="https://networkmanager.dev/docs/api/latest/NetworkManager-dispatcher.html">NetworkManager-dispatcher man page</a>.</p>
|
||||
<p><a id="code-snippet--get-nmcli"></a></p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#008000">echo</span> <span style="color:#008000;font-weight:bold">$(</span>guix build network-manager | grep -ve <span style="color:#ba2121">'-doc$'</span><span style="color:#008000;font-weight:bold">)</span>/bin/nmcli
|
||||
</span></span></code></pre></div><p>So, here’s the script:</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#bc7a00">#!/bin/sh
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#bc7a00"></span><span style="color:#19177c">GREP</span><span style="color:#666">=</span>/run/current-system/profile/bin/grep
|
||||
</span></span><span style="display:flex;"><span><span style="color:#19177c">NMCLI</span><span style="color:#666">=</span><span style="color:#ba2121"><<get-nmcli()>>
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">
|
||||
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"># Run only if wireg</span>uard is active
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#19177c">$NMCLI</span> connection show --active | <span style="color:#19177c">$GREP</span> -q wireguard; <span style="color:#008000;font-weight:bold">then</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#ba2121">"nameserver 8.8.8.8"</span> > /etc/resolv.conf
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
||||
</span></span></code></pre></div><p>Expand the noweb with <code>C-c C-v v</code>, put it in <code>dispatcher.d</code> and run <code>chmod 700</code>.</p>
|
||||
<h3 id="flatpak">flatpak</h3>
|
||||
<p>As for now, the easiest way to install most of proprietary software is via flatpak. See the relevant section in <a href="/configs/desktop/">Desktop.org</a>.</p>
|
||||
<h3 id="conda">conda</h3>
|
||||
<p><a href="https://docs.conda.io/en/latest/">conda</a> is a package manager, which I use for managing various versions of Python & Node.js.</p>
|
||||
<p>It is packaged for GNU Guix, although the definition has its fair share of workarounds. It is almost surprising to see it work with all the C libraries and stuff. But there are still some problems.</p>
|
||||
<p>First, it’s impossible to perform <code>conda init</code> to patch files like <code>.bashrc</code>, because the command is hell-bent on modifying <code>/gnu/store/</code>. So I do this manually, look for the <code>init_conda</code> procedures in <a href="/configs/console/">Console.org</a>.</p>
|
||||
<p>Second, the base environment has <code>/gnu/store/...</code> as a root, so don’t install anything there (and don’t run <code>conda</code> with superuser rights!).</p>
|
||||
<p>Third, by default it tries to create envronments in <code>/gnu/store</code>. It’s enough to create one environment like this to fix it:</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>mkdir -p ~/.conda/envs
|
||||
</span></span><span style="display:flex;"><span>conda create -p ~/.conda/envs/test
|
||||
</span></span></code></pre></div><p>Fourth, you may need to unset <code>$PYTHONPATH</code> if you have any global packages installed, otherwise Python from anaconda will try to import them instead of the conda versions.</p>
|
||||
<p>Finally, I also want to have an ability to use global npm. Some settings for that are located in <a href="Console">Console.org</a>. Here we want to unset <code>NPM_CONFIG_USERCONFIG</code> if there is npm available in the environment.</p>
|
||||
<h3 id="micromamba">micromamba</h3>
|
||||
<p><del><a href="https://docs.conda.io/en/latest/">conda</a></del> <a href="https://github.com/mamba-org/mamba">mamba</a> is a package manager that I use for managing various versions of Python & Node.js.</p>
|
||||
<p><code>mamba</code> is a reimplementation of <code>conda</code> in C++. <code>mamba</code> is notably much faster and mostly compatible with <code>conda</code>, and <code>micromamba</code> is a tiny version of <code>mamba</code> that is contained in one statically linked exectuable. I’ve migrated to <code>micromamba</code> mostly because of speed.</p>
|
||||
<p><code>conda</code> is packaged for Guix with its fair share of quirks, mostly concerning the impossibility of changing the base environment in <code>/gnu/store/</code>. <code>micromamba</code> has none of that because it doesn’t ship with a base environment. It’s not packaged for Guix yet, so I’ve made a definition with <code>binary-build-system</code> in my channel.</p>
|
||||
<p>You may need to unset <code>$PYTHONPATH</code> if you have any global packages installed, otherwise Python from the environemnt will try to import them instead of the conda versions.</p>
|
||||
<p>I also want to have an ability to use global npm. Some settings for that are located in <a href="Console">Console.org</a>. Here we want to unset <code>NPM_CONFIG_USERCONFIG</code> if there is npm available in the environment.</p>
|
||||
<p>So here is a script to set up conda hooks:</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># Get writable conda envs with npm & without it</span>
|
||||
</span></span><span style="display:flex;"><span>readarray -t CONDA_ENVS_ALL <span style="color:#666"><<<</span> <span style="color:#008000;font-weight:bold">$(</span>conda env list --json | jq <span style="color:#ba2121">'.envs[]'</span><span style="color:#008000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span>readarray -t CONDA_ENVS_ALL <span style="color:#666"><<<</span> <span style="color:#008000;font-weight:bold">$(</span>micromamba env list --json | jq <span style="color:#ba2121">'.envs[]'</span><span style="color:#008000;font-weight:bold">)</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#19177c">CONDA_ENVS_NPM</span><span style="color:#666">=()</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#19177c">CONDA_ENVS_NO_NPM</span><span style="color:#666">=()</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">for</span> env in <span style="color:#ba2121">"</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">CONDA_ENVS_ALL</span>[@]<span style="color:#b68;font-weight:bold">}</span><span style="color:#ba2121">"</span>; <span style="color:#008000;font-weight:bold">do</span>
|
||||
|
|
@ -795,14 +814,15 @@ Also not necessary now. Just <code>herd stop vpn</code> and <code>sudo pkill vpn
|
|||
</li>
|
||||
<li><a href="#misc-software-and-notes">Misc software & notes</a>
|
||||
<ul>
|
||||
<li><a href="#vpn">VPN</a>
|
||||
<li><a href="#openvpn">OpenVPN</a>
|
||||
<ul>
|
||||
<li><a href="#vpn-start">vpn-start</a></li>
|
||||
<li><a href="#377cab">vpn-stop</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#wireguard">Wireguard</a></li>
|
||||
<li><a href="#flatpak">flatpak</a></li>
|
||||
<li><a href="#conda">conda</a></li>
|
||||
<li><a href="#micromamba">micromamba</a></li>
|
||||
<li><a href="#slack">Slack</a></li>
|
||||
<li><a href="#virt-manager">virt-manager</a></li>
|
||||
<li><a href="#wakatime-cli">wakatime-cli</a></li>
|
||||
|
|
|
|||
|
|
@ -15,10 +15,9 @@
|
|||
<description>No matter from which side you approach penguins, more of them always come from behind
|
||||
A friend of mine .profile Environment export QT_QPA_PLATFORMTHEME=&#34;qt5ct&#34; export QT_AUTO_SCREEN_SCALE_FACTOR=0 Set ripgrep config path
|
||||
export RIPGREP_CONFIG_PATH=$HOME/.config/ripgrep/ripgreprc hledger path
|
||||
export LEDGER_FILE=~/Documents/org-mode/ledger/ledger.journal Checking if running inside termux
|
||||
export LEDGER_FILE=&#34;$HOME/30-39 Life/32 org-mode/ledger/ledger.journal&#34; Checking if running inside termux
|
||||
if command -v termux-setup-storage &gt; /dev/null; then export IS_ANDROID=true [[ -f ~/.android_profile ]] &amp;&amp; . ~/.android_profile fi Timezone
|
||||
# TZ=&#39;Asia/Karachi&#39;; export TZ My paths My script folders
|
||||
if [ -d &#34;$HOME/bin&#34; ] ; then export PATH=&#34;$HOME/bin:$PATH&#34; export PATH=&#34;$HOME/bin/scripts:$PATH&#34; fi if [ -d &#34;$HOME/.</description>
|
||||
# TZ=&#39;Asia/Karachi&#39;; export TZ My paths My script folders</description>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
|
|
|
|||
|
|
@ -254,6 +254,10 @@
|
|||
<td>job.digital.applicants</td>
|
||||
<td>Job_Digital.Applicants</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>etu</td>
|
||||
<td>Etu</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>And below is a noweb function, which generates the following commands for notmuch to execute:</p>
|
||||
|
|
@ -477,13 +481,11 @@ Remove <code>TAG</code> from emails which are outside the matching <code>PATH</c
|
|||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">add-hook</span> <span style="color:#19177c">'notmuch-hello-mode-hook</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> () (<span style="color:#19177c">display-line-numbers-mode</span> <span style="color:#666">0</span>))))
|
||||
</span></span></code></pre></div><p>The file is read in <code>init.el</code>.</p>
|
||||
<h3 id="saved-filters-and-keybindings">Saved filters and keybindings</h3>
|
||||
<p>I want to have the saved filters available in both notmuch interface as as keybindings. So a bit more of abusing org tables.</p>
|
||||
<h3 id="keybindings">Keybindings</h3>
|
||||
<p>I used to have a more complicated keybinding system here, but that seemed to go against the Dao.</p>
|
||||
<p>Root keybindings:</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#19177c">my-leader-def</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:infix</span> <span style="color:#ba2121">"am"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">""</span> <span style="color:#666">'</span>(<span style="color:#008000">:which-key</span> <span style="color:#ba2121">"notmuch"</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"m"</span> (<span style="color:#19177c">my/command-in-persp</span> <span style="color:#ba2121">"notmuch"</span> <span style="color:#ba2121">"mail"</span> <span style="color:#666">0</span> (<span style="color:#19177c">notmuch</span>)))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"am"</span> (<span style="color:#19177c">my/command-in-persp</span> <span style="color:#ba2121">"notmuch"</span> <span style="color:#ba2121">"mail"</span> <span style="color:#666">0</span> (<span style="color:#19177c">notmuch</span>)))
|
||||
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#19177c">my/persp-add-rule</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">notmuch-hello-mode</span> <span style="color:#666">0</span> <span style="color:#ba2121">"mail"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">notmuch-search-mode</span> <span style="color:#666">0</span> <span style="color:#ba2121">"mail"</span>
|
||||
|
|
@ -564,34 +566,9 @@ Remove <code>TAG</code> from emails which are outside the matching <code>PATH</c
|
|||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">concat</span> <span style="color:#ba2121">" AND tag:"</span> (<span style="color:#00f">nth</span> <span style="color:#666">0</span> <span style="color:#19177c">tag</span>)))))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#800">t</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">string-join</span> <span style="color:#19177c">searches</span> <span style="color:#ba2121">"\n"</span>))
|
||||
</span></span></code></pre></div><p>And the following does the same for my general.el definer:</p>
|
||||
<p><a id="code-snippet--format-notmuch-keybindings"></a></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">let</span> ((<span style="color:#19177c">bindings</span> <span style="color:#666">'</span>()))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">dolist</span> (<span style="color:#19177c">root_tag</span> <span style="color:#19177c">root_tags</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">add-to-list</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">'bindings</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">format</span> <span style="color:#ba2121">"\"%s\" '(:which-key \"%s\")"</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">nth</span> <span style="color:#666">1</span> <span style="color:#19177c">root_tag</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">nth</span> <span style="color:#666">2</span> <span style="color:#19177c">root_tag</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#800">t</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">dolist</span> (<span style="color:#19177c">tag</span> <span style="color:#19177c">filter_tags</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">add-to-list</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">'bindings</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">format</span> <span style="color:#ba2121">"\"%s\" (my/command-in-persp \"%s\" \"mail\" 0 (notmuch-search \"%s\"))"</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">concat</span> (<span style="color:#00f">nth</span> <span style="color:#666">1</span> <span style="color:#19177c">root_tag</span>) (<span style="color:#00f">nth</span> <span style="color:#666">1</span> <span style="color:#19177c">tag</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">concat</span> <span style="color:#ba2121">"tag:"</span> (<span style="color:#00f">nth</span> <span style="color:#666">0</span> <span style="color:#19177c">root_tag</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> (<span style="color:#19177c">string-empty-p</span> (<span style="color:#00f">nth</span> <span style="color:#666">0</span> <span style="color:#19177c">tag</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">concat</span> <span style="color:#ba2121">" AND tag:"</span> (<span style="color:#00f">nth</span> <span style="color:#666">0</span> <span style="color:#19177c">tag</span>))))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">nth</span> <span style="color:#666">2</span> <span style="color:#19177c">tag</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#800">t</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">string-join</span> <span style="color:#19177c">bindings</span> <span style="color:#ba2121">"\n"</span>))
|
||||
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">setq</span> <span style="color:#19177c">notmuch-saved-searches</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>((<span style="color:#008000">:name</span> <span style="color:#ba2121">"drafts"</span> <span style="color:#008000">:query</span> <span style="color:#ba2121">"tag:draft"</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c"><<format-notmuch-saved-searches</span>()<span style="color:#19177c">>></span>))
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>(<span style="color:#19177c">my-leader-def</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:infix</span> <span style="color:#ba2121">"am"</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c"><<format-notmuch-keybindings</span>()<span style="color:#19177c">>></span>)
|
||||
</span></span></code></pre></div><h3 id="signing-messages">Signing messages</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">with-eval-after-load</span> <span style="color:#19177c">'notmuch</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">add-hook</span> <span style="color:#19177c">'message-setup-hook</span> <span style="color:#19177c">'mml-secure-sign-pgpmime</span>))
|
||||
|
|
@ -647,6 +624,13 @@ Remove <code>TAG</code> from emails which are outside the matching <code>PATH</c
|
|||
</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">'notmuch-mua</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#00f">#'</span><span style="color:#19177c">notmuch-mua-reply</span> <span style="color:#008000">:after</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/message-maybe-fix-signature</span>))
|
||||
</span></span></code></pre></div><h3 id="warn-if-no-subject">Warn if no subject</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">defun</span> <span style="color:#19177c">my/message-ensure-subject</span> ()
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> (<span style="color:#008000">or</span> (<span style="color:#19177c">message-field-value</span> <span style="color:#ba2121">"Subject"</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">y-or-n-p</span> <span style="color:#ba2121">"No subject. Send? "</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#d2413a;font-weight:bold">user-error</span> <span style="color:#ba2121">"Aborting."</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">'notmuch-mua-send-hook</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/message-ensure-subject</span>)
|
||||
</span></span></code></pre></div><h2 id="mailcap">mailcap</h2>
|
||||
<p>mailcap file is a file which defines how to read to different MIME types. Notmuch also uses it, so why not keep it here.</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>audio/*; mpc add %s
|
||||
|
|
@ -689,9 +673,10 @@ Remove <code>TAG</code> from emails which are outside the matching <code>PATH</c
|
|||
<li><a href="#msmtp">MSMTP</a></li>
|
||||
<li><a href="#emacs">Emacs</a>
|
||||
<ul>
|
||||
<li><a href="#saved-filters-and-keybindings">Saved filters and keybindings</a></li>
|
||||
<li><a href="#keybindings">Keybindings</a></li>
|
||||
<li><a href="#signing-messages">Signing messages</a></li>
|
||||
<li><a href="#tuning-signature">Tuning signature</a></li>
|
||||
<li><a href="#warn-if-no-subject">Warn if no subject</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#mailcap">mailcap</a></li>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang=""><head>
|
||||
<meta name="generator" content="Hugo 0.113.0">
|
||||
<meta name="generator" content="Hugo 0.115.4">
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
|
||||
|
|
|
|||
BIN
stats/all.png
BIN
stats/all.png
Binary file not shown.
|
Before Width: | Height: | Size: 118 KiB After Width: | Height: | Size: 118 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 61 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 64 KiB |
Loading…
Add table
Reference in a new issue