This commit is contained in:
SqrtMinusOne 2022-05-29 20:03:53 +00:00
parent 3113b40e7a
commit efdd79219e
5 changed files with 76 additions and 4 deletions

View file

@ -275,6 +275,7 @@ One thing where Emacs is particularly good is writing Lisp code, e.g. Clojure, C
</ul>
</li>
<li><a href="#reformatter">Reformatter</a></li>
<li><a href="#copilot">copilot</a></li>
<li><a href="#general-additional-config">General additional config</a></li>
</ul>
</li>
@ -528,6 +529,7 @@ One thing where Emacs is particularly good is writing Lisp code, e.g. Clojure, C
<li><a href="#some-additions">Some additions</a></li>
<li><a href="#custom-faces">Custom faces</a></li>
<li><a href="#elfeed-summary">elfeed-summary</a></li>
<li><a href="#elfeed-sync">elfeed-sync</a></li>
<li><a href="#elfeed-score">elfeed-score</a></li>
<li><a href="#youtube-podcasts-and-emms">YouTube, podcasts &amp; EMMS</a></li>
<li><a href="#rdrview">rdrview</a>
@ -564,6 +566,7 @@ One thing where Emacs is particularly good is writing Lisp code, e.g. Clojure, C
</ul>
</li>
<li><a href="#ytel">ytel</a></li>
<li><a href="#wallabag">wallabag</a></li>
<li><a href="#eww">EWW</a></li>
<li><a href="#erc">ERC</a></li>
<li><a href="#ement-dot-el">ement.el</a></li>
@ -2160,6 +2163,7 @@ One thing where Emacs is particularly good is writing Lisp code, e.g. Clojure, C
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">dap-chrome-setup</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">require</span> <span style="color:#19177c">&#39;dap-python</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">require</span> <span style="color:#19177c">&#39;dap-php</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">dap-mode</span> <span style="color:#666">1</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">dap-ui-mode</span> <span style="color:#666">1</span>)
@ -2414,6 +2418,32 @@ One thing where Emacs is particularly good is writing Lisp code, e.g. Clojure, C
<p>A general-purpose package to run formatters on files. While the most popular formatters are already packaged for Emacs, those that aren&rsquo;t can be invoked with this package.</p>
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">use-package</span> <span style="color:#19177c">reformatter</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="copilot">copilot</h4>
<p><a href="https://copilot.github.com/">GitHub Copilot</a> is a project of GitHub and OpenAI that provides code completions. It&rsquo;s somewhat controversial in the Emacs community but I opt in using it for now.</p>
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/copilot-tab</span> ()
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">or</span> (<span style="color:#19177c">copilot-accept-completion</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">indent-for-tab-command</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/setup-copilot</span> ()
</span></span><span style="display:flex;"><span> (<span style="color:#00f">use-local-map</span> <span style="color:#19177c">my/copilot-mode-map</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/copilot-mode-map</span>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">map</span> (<span style="color:#00f">make-sparse-keymap</span>)))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">evil-define-key*</span> <span style="color:#19177c">&#39;insert</span> <span style="color:#19177c">map</span>
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">kbd</span> <span style="color:#ba2121">&#34;&lt;tab&gt;&#34;</span>) <span style="color:#00f">#&#39;</span><span style="color:#19177c">my/copilot-tab</span>)
</span></span><span style="display:flex;"><span> <span style="color:#19177c">map</span>))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(<span style="color:#008000">define-minor-mode</span> <span style="color:#19177c">my/copilot-mode</span>
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;My keybings for copilot.el&#34;</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">copilot</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">&#34;zerolfx/copilot.el&#34;</span> <span style="color:#008000">:files</span> (<span style="color:#ba2121">&#34;dist&#34;</span> <span style="color:#ba2121">&#34;*.el&#34;</span>))
</span></span><span style="display:flex;"><span> <span style="color:#008000">:commands</span> (<span style="color:#19177c">copilot-mode</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">add-hook</span> <span style="color:#19177c">&#39;prog-mode-hook</span> <span style="color:#00f">#&#39;</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:#19177c">add-hook</span> <span style="color:#19177c">&#39;copilot-mode-hook</span> <span style="color:#00f">#&#39;</span><span style="color:#19177c">my/copilot-mode</span>))
</span></span></code></pre></div><h4 id="general-additional-config">General additional config</h4>
<p>Make smartparens behave the way I like for C-like 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:#008000">defun</span> <span style="color:#19177c">my/set-smartparens-indent</span> (<span style="color:#19177c">mode</span>)
@ -5448,6 +5478,16 @@ One thing where Emacs is particularly good is writing Lisp code, e.g. Clojure, C
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#800">t</span>
</span></span><span style="display:flex;"><span> <span style="color:#008000">:config</span>
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">elfeed-summary-filter-by-title</span> <span style="color:#800">t</span>))
</span></span></code></pre></div><h5 id="elfeed-sync">elfeed-sync</h5>
<p><a href="https://github.com/SqrtMinusOne/elfeed-sync">elfeed-sync</a> is my package to sync elfeed with <a href="https://tt-rss.org/">tt-rss</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">use-package</span> <span style="color:#19177c">elfeed-sync</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">&#34;SqrtMinusOne/elfeed-sync&#34;</span>)
</span></span><span style="display:flex;"><span> <span style="color:#008000">:after</span> <span style="color:#19177c">elfeed</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">elfeed-sync-mode</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">elfeed-sync-tt-rss-instance</span> <span style="color:#ba2121">&#34;https://sqrtminusone.xyz/tt-rss&#34;</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">elfeed-sync-tt-rss-login</span> <span style="color:#ba2121">&#34;sqrtminusone&#34;</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">elfeed-sync-tt-rss-password</span> (<span style="color:#19177c">my/password-store-get</span> <span style="color:#ba2121">&#34;Selfhosted/tt-rss&#34;</span>)))
</span></span></code></pre></div><h5 id="elfeed-score">elfeed-score</h5>
<p><a href="https://github.com/sp1ff/elfeed-score">elfeed-score</a> is a package that implements scoring for the elfeed entries. Entries are scored by a set of rules for tags/title/content/etc and sorted by that score.</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/elfeed-toggle-score-sort</span> ()
@ -5642,7 +5682,12 @@ One thing where Emacs is particularly good is writing Lisp code, e.g. Clojure, C
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq-local</span> <span style="color:#19177c">my/elfeed-show-rdrview-html</span> <span style="color:#19177c">content</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#00f">goto-char</span> (<span style="color:#00f">point-min</span>))))))
</span></span></code></pre></div><p>That way, calling <code>M-x my/rdrview-elfeed-show</code> replaces the original content with one from <code>rdrview</code>.</p>
<h6 id="how-well-does-it-work">How well does it work?</h6>
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">with-eval-after-load</span> <span style="color:#19177c">&#39;elfeed</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">&#39;</span>(<span style="color:#19177c">normal</span>)
</span></span><span style="display:flex;"><span> <span style="color:#008000">:keymaps</span> <span style="color:#19177c">&#39;elfeed-show-mode-map</span>
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;gp&#34;</span> <span style="color:#00f">#&#39;</span><span style="color:#19177c">my/rdrview-elfeed-show</span>))
</span></span></code></pre></div><h6 id="how-well-does-it-work">How well does it work?</h6>
<p>Rather ironically, it works well with sites that already ship with proper RSS, like <a href="https://protesilaos.com/">Protesilaos Stavrou&rsquo;s</a> or <a href="https://karthinks.com/software/simple-folding-with-hideshow/">Karthik Chikmagalur&rsquo;s</a> blogs or <a href="https://www.theatlantic.com/world/">The Atlantic</a> magazine.</p>
<p>Of my other subscriptions, it does a pretty good job with <a href="https://www.theverge.com/">The Verge</a>, which by default sends entries truncated by the words &ldquo;Read the full article&rdquo;. For <a href="https://arstechnica.com/">Ars Technica</a>, it works only if the story is not large enough, otherwise the site returns its HTML-based pagination interface.</p>
<p>For paywalled sites such as <a href="https://www.nytimes.com/">New York Times</a> or <a href="https://www.economist.com/">The Economist</a>, this usually doesn&rsquo;t work (by the way, what&rsquo;s the problem with providing individual RSS feeds for subscribers?). If you need this kind of thing, I&rsquo;d suggest using the <a href="https://github.com/RSS-Bridge/rss-bridge">RSS-Bridge</a> project. And if something is not available, contributing business logic there definitely makes more sense than implementing workarounds in Emacs Lisp.</p>
@ -5717,7 +5762,7 @@ One thing where Emacs is particularly good is writing Lisp code, e.g. Clojure, C
</span></span><span style="display:flex;"><span> (<span style="color:#00f">funcall</span> <span style="color:#19177c">callback</span> <span style="color:#19177c">file-name</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">&#39;exit</span>) (<span style="color:#00f">&gt;</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">&#39;signal</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#d2413a;font-weight:bold">user-error</span> <span style="color:#ba2121">&#34;Error in pandoc. Check the *Pandoc* buffer&#34;</span>)))))))))
</span></span><span style="display:flex;"><span> (<span style="color:#d2413a;font-weight:bold">user-error</span> <span style="color:#ba2121">&#34;Error in pandoc. Check the *Pandoc* buffer&#34;</span>))))))))))
</span></span></code></pre></div><h6 id="opening-elfeed-entries">Opening elfeed entries</h6>
<p>Now we have everything required to open elfeed entries.</p>
<p>Also, in my case elfeed entries come in two languages, so I have to set <code>main-lang</code> and <code>other-lang</code> variables accordingly. Here&rsquo;s the main function:</p>
@ -5767,7 +5812,12 @@ One thing where Emacs is particularly good is writing Lisp code, e.g. Clojure, C
</span></span><span style="display:flex;"><span> <span style="color:#008000">:file-name</span> <span style="color:#19177c">file-name</span>
</span></span><span style="display:flex;"><span> <span style="color:#008000">:overwrite</span> <span style="color:#19177c">current-prefix-arg</span>)))
</span></span></code></pre></div><p>If the <code>my/elfeed-show-rdrview-html</code> variable is bound and true, then the content in this buffer was retrieved via <code>rdrview</code>, so we&rsquo;ll use that instead of the output of <code>elfeed-deref</code>.</p>
<p>Now we can open elfeed entries in a PDF viewer, which I find much nicer to read. Given that RSS feeds generally ship with simpler HTML than the regular websites, results usually look awesome.</p>
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">with-eval-after-load</span> <span style="color:#19177c">&#39;elfeed</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:#666">&#39;</span>(<span style="color:#19177c">elfeed-show-mode-map</span>)
</span></span><span style="display:flex;"><span> <span style="color:#008000">:states</span> <span style="color:#666">&#39;</span>(<span style="color:#19177c">normal</span>)
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;gv&#34;</span> <span style="color:#00f">#&#39;</span><span style="color:#19177c">my/elfeed-open-pdf</span>))
</span></span></code></pre></div><p>Now we can open elfeed entries in a PDF viewer, which I find much nicer to read. Given that RSS feeds generally ship with simpler HTML than the regular websites, results usually look awesome.</p>
<h6 id="opening-arbitrary-sites">Opening arbitrary sites</h6>
<p>As you may have noticed, we also can display arbitrary web pages with this setup, so let&rsquo;s go ahead and implement that:</p>
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/get-languages</span> (<span style="color:#19177c">url</span>)
@ -6164,6 +6214,28 @@ One thing where Emacs is particularly good is writing Lisp code, e.g. Clojure, C
</span></span><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/ytel-add-emms</span> ()
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">emms-add-ytel</span> (<span style="color:#19177c">ytel-get-current-video</span>)))
</span></span></code></pre></div><h4 id="wallabag">wallabag</h4>
<p><a href="https://github.com/wallabag/wallabag">Wallabag</a> is a self-hosted read-it-later project. I&rsquo;m not yet sold on integrating it in my workflow, but let&rsquo;s keep it here for now.</p>
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">use-package</span> <span style="color:#19177c">wallabag</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">&#34;chenyanming/wallabag.el&#34;</span> <span style="color:#008000">:files</span> (<span style="color:#008000">:defaults</span> <span style="color:#ba2121">&#34;default.css&#34;</span> <span style="color:#ba2121">&#34;emojis.alist&#34;</span>))
</span></span><span style="display:flex;"><span> <span style="color:#008000">:commands</span> (<span style="color:#19177c">wallabag</span> <span style="color:#19177c">wallabag-add-entry</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">wallabag-host</span> <span style="color:#ba2121">&#34;https://wallabag.sqrtminusone.xyz&#34;</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">wallabag-username</span> <span style="color:#ba2121">&#34;sqrtminusone&#34;</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">wallabag-password</span> (<span style="color:#19177c">my/password-store-get</span> <span style="color:#ba2121">&#34;Selfhosted/wallabag&#34;</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">wallabag-clientid</span> (<span style="color:#19177c">password-store-get-field</span> <span style="color:#ba2121">&#34;Selfhosted/wallabag&#34;</span> <span style="color:#ba2121">&#34;client_id&#34;</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">wallabag-secret</span> (<span style="color:#19177c">password-store-get-field</span> <span style="color:#ba2121">&#34;Selfhosted/wallabag&#34;</span> <span style="color:#ba2121">&#34;client_secret&#34;</span>)))
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/elfeed-wallabag</span> (<span style="color:#19177c">entry</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span> (<span style="color:#00f">list</span> <span style="color:#19177c">elfeed-show-entry</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">wallabag-add-entry</span> (<span style="color:#19177c">elfeed-entry-link</span> <span style="color:#19177c">entry</span>)
</span></span><span style="display:flex;"><span> (<span style="color:#00f">mapconcat</span> <span style="color:#00f">#&#39;symbol-name</span> (<span style="color:#19177c">elfeed-entry-tags</span> <span style="color:#19177c">entry</span>) <span style="color:#ba2121">&#34;,&#34;</span>))
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">elfeed-recommender--rate-current</span> <span style="color:#666">2</span>))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(<span style="color:#008000">with-eval-after-load</span> <span style="color:#19177c">&#39;elfeed</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">&#39;</span>(<span style="color:#19177c">normal</span>)
</span></span><span style="display:flex;"><span> <span style="color:#008000">:keymaps</span> <span style="color:#666">&#39;</span>(<span style="color:#19177c">elfeed-show-mode-map</span>)
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">&#34;gw&#34;</span> <span style="color:#00f">#&#39;</span><span style="color:#19177c">my/elfeed-wallabag</span>))
</span></span></code></pre></div><h4 id="eww">EWW</h4>
<p>Emacs built-in web browser. <del>I wonder if anyone actually uses it.</del></p>
<p>I use it occasionally to open links in elfeed.</p>

View file

@ -1,6 +1,6 @@
<!DOCTYPE html>
<html lang=""><head>
<meta name="generator" content="Hugo 0.98.0" />
<meta name="generator" content="Hugo 0.99.1" />
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 68 KiB