<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>&#x2F;home&#x2F;ksqsf</title>
      <link>https://ksqsf.moe</link>
      <description></description>
      <generator>Zola</generator>
      <language>zh</language>
      <atom:link href="https://ksqsf.moe/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Thu, 14 May 2026 00:00:00 +0000</lastBuildDate>
      <item>
          <title>AI 编码 24 小时</title>
          <pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate>
          <author>ksqsf</author>
          <link>https://ksqsf.moe/posts/2026-05-14-first-agentic-coding/</link>
          <guid>https://ksqsf.moe/posts/2026-05-14-first-agentic-coding/</guid>
          <description xml:base="https://ksqsf.moe/posts/2026-05-14-first-agentic-coding/">&lt;p&gt;不论是新闻炒作、AI 从业者朋友还是网上的讨论，无不反反复复地在宣告着 AI 时代的重要性，但我却迟迟没有严肃对待这件事。例如，Claude Code 发布已经一年有余，而我也偶尔会用自费的 API 来做一些小程序或分析不熟悉的代码仓库，但我从来没有使用过它做一个真正严肃的项目。是的，LLM 会写一些代码，但这不是我们一直以来都知道的吗？直到最近，看到一些熟识的朋友使用 coding agent 做出了一些相当有趣的东西之后，我才开始第一次严肃地尝试 AI coding。而这次经历对我来说似乎有点过于成功，以至于有些震撼了。这里我想趁着还有些记忆，记录一下我的首个 AI 编码项目的经历。&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Higher-order Data Types à la Carte</title>
          <pubDate>Sun, 12 Apr 2026 00:00:00 +0000</pubDate>
          <author>ksqsf</author>
          <link>https://ksqsf.moe/posts/2026-04-12-hodtalc/</link>
          <guid>https://ksqsf.moe/posts/2026-04-12-hodtalc/</guid>
          <description xml:base="https://ksqsf.moe/posts/2026-04-12-hodtalc/">&lt;p&gt;最近有个小项目需要表达一些 AST，而我期望这个 AST 本身是可扩展的：我可以定义一些语言碎片，然后再按需将它们组合起来。这听起来很适合 DTALC！但很快你就会发现——经典的 DTALC 写法是行不通的。这篇文章记录一下解法。&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>生活在 WSL 上</title>
          <pubDate>Tue, 29 Apr 2025 00:00:00 +0000</pubDate>
          <author>ksqsf</author>
          <link>https://ksqsf.moe/posts/2025-04-29-work-in-wsl/</link>
          <guid>https://ksqsf.moe/posts/2025-04-29-work-in-wsl/</guid>
          <description xml:base="https://ksqsf.moe/posts/2025-04-29-work-in-wsl/">&lt;p&gt;最近因为工作的原因不得不使用 Windows，用了一段时间 WSL2，发现其实相当可用！这篇文章介绍我如何配置 WSL 和 Emacs 作为自己的工作环境。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;ksqsf.moe&#x2F;posts&#x2F;2025-04-29-work-in-wsl&#x2F;.&#x2F;emacs-in-wsl.avif&quot; alt=&quot;Emacs in WSL&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;wei-shen-me-yao-yong-wsl&quot;&gt;为什么要用 WSL？&lt;&#x2F;h1&gt;
&lt;p&gt;第一个问题当然是： &lt;strong&gt;不能用原生 Windows 环境吗？&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;确实，现在 Windows 可以用 scoop 等工具快速安装命令行程序，或者也可以直接使用 MSYS2，就可以快速打造命令行工作环境让 Emacs 调用了。&lt;&#x2F;p&gt;
&lt;p&gt;我用 WSL 主要是两个原因：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;习惯了 Linux 环境。WSL 装上就跟回家一样，还是原来的配方，还是原来的味道。完全没有再次学习的成本。&lt;&#x2F;li&gt;
&lt;li&gt;开发的项目只能在 Linux 上跑，所以某种意义上来说是刚需。——说某种意义是因为 Emacs 也可以通过 TRAMP 远程开发。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;总之，我基本没怎么在原生 Windows 环境上花时间，但我相信只要下一点功夫，想必也是能用的。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;tui-huan-shi-gui&quot;&gt;TUI 还是 GUI？&lt;&#x2F;h1&gt;
&lt;p&gt;我刚装好 WSL 的时候简短尝试了一下 WSLg，碰到一些问题，所以完全只使用 TUI。虽然起初只是妥协，但后来发现 TUI 完全够用。当然，用 TUI 就与一些功能无缘了：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;TUI 里只能使用一种字体。&lt;&#x2F;li&gt;
&lt;li&gt;TUI 的 Emacs 里无法显示图片。&lt;&#x2F;li&gt;
&lt;li&gt;Emacs 30 以前没有 tty child frame。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;但除此之外，好像也没有什么短板。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;shi-yong-shen-me-zhong-duan&quot;&gt;使用什么终端？&lt;&#x2F;h1&gt;
&lt;p&gt;如上图所示，我使用 WezTerm。其实一开始我也是和所有人一样从 Windows Terminal 开始的，但很快就发现 Emacs 在 Windows Terminal 中会有「画面撕裂」的问题，而 WezTerm 没有。&lt;&#x2F;p&gt;
&lt;p&gt;我对 WezTerm 的配置比较简单，不过值得一提的是 Emacs 在终端下 &lt;strong&gt;无法接收到一些按键&lt;&#x2F;strong&gt; ，如 &lt;code&gt;C-TAB&lt;&#x2F;code&gt;，但我们可以在 WezTerm 里把这个键绑定为「发送字符串到终端程序」，从而曲线救国：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lua&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-lua &quot;&gt;&lt;code class=&quot;language-lua&quot; data-lang=&quot;lua&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;return &lt;&#x2F;span&gt;&lt;span&gt;{
&lt;&#x2F;span&gt;&lt;span&gt;   &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;keys &lt;&#x2F;span&gt;&lt;span&gt;= {
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#65737e;&quot;&gt;-- 按 C-TAB 发送 C-x t o 到终端程序里
&lt;&#x2F;span&gt;&lt;span&gt;      { &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;key &lt;&#x2F;span&gt;&lt;span&gt;= &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;Tab&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;mods &lt;&#x2F;span&gt;&lt;span&gt;= &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;CTRL&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;, &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;action &lt;&#x2F;span&gt;&lt;span&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;act&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;SendString&lt;&#x2F;span&gt;&lt;span&gt;(&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;\x18\x74\x6f&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;) },
&lt;&#x2F;span&gt;&lt;span&gt;   }
&lt;&#x2F;span&gt;&lt;span&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;至于这个字符串怎么获得，可以在 ielm 里调用 &lt;code&gt;kbd&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lisp&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-lisp &quot;&gt;&lt;code class=&quot;language-lisp&quot; data-lang=&quot;lisp&quot;&gt;&lt;span&gt;ELISP&amp;gt; (kbd &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;C-x t o&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;)
&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;^Xto&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;ELISP&amp;gt; ?^X
&lt;&#x2F;span&gt;&lt;span&gt;ELISP&amp;gt; ?^X
&lt;&#x2F;span&gt;&lt;span&gt;24
&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;#o30, #x18,&lt;&#x2F;span&gt;&lt;span&gt; ?\C-x)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这样你就知道了 &lt;code&gt;Ctrl-x&lt;&#x2F;code&gt; 其实对应于一个 ASCII 码为 0x18 的字符，从而构造出 &lt;code&gt;SendString&lt;&#x2F;code&gt; 的参数。&lt;&#x2F;p&gt;
&lt;aside&gt;
在 Emacs 中，这里的 &lt;code&gt;^X&lt;&#x2F;code&gt; 会带有颜色，与正常文本区分开来，表示它是一个完整的特殊字符。请不要尝试直接从网页上复制 &lt;code&gt;^X&lt;&#x2F;code&gt;，这里为了可以在浏览器里显示出来，将它拆为了两个字符 &lt;code&gt;^&lt;&#x2F;code&gt; 和 &lt;code&gt;X&lt;&#x2F;code&gt;。
&lt;&#x2F;aside&gt;
&lt;h1 id=&quot;wsl-pei-zhi&quot;&gt;WSL 配置&lt;&#x2F;h1&gt;
&lt;p&gt;WSL 有两层配置系统：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Windows 那边的 &lt;code&gt;C:\Users\USERNAME\.wslconfig&lt;&#x2F;code&gt; 用来配置虚拟机启动的选项。&lt;&#x2F;li&gt;
&lt;li&gt;Linux 里的 &lt;code&gt;&#x2F;etc&#x2F;wsl.conf&lt;&#x2F;code&gt; 用来配置系统启动和 Linux 服务等。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;下面我们会省略掉完整路径，只写文件名，如 &lt;code&gt;.wslconfig&lt;&#x2F;code&gt;。&lt;a href=&quot;https:&#x2F;&#x2F;learn.microsoft.com&#x2F;en-us&#x2F;windows&#x2F;wsl&#x2F;wsl-config&quot;&gt;官方文档&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;yong-shen-me-fa-xing-ban&quot;&gt;用什么发行版？&lt;&#x2F;h2&gt;
&lt;p&gt;出于习惯，我自己用的是 Debian。&lt;&#x2F;p&gt;
&lt;p&gt;但我碰到了一些 WSL Debian 带来的问题（如无法启动 .exe，具体怎么配置下面会提到）。这些问题 &lt;strong&gt;可能&lt;&#x2F;strong&gt; 在 Ubuntu 里不存在（因为微软主打的就是 Ubuntu，所以如此猜想）。&lt;&#x2F;p&gt;
&lt;p&gt;如果要选，我建议是选一个自己比较懂的。如果懒得折腾，直接用 Ubuntu 也无妨。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;fen-pei-geng-duo-ying-jian-zi-yuan&quot;&gt;分配更多硬件资源&lt;&#x2F;h2&gt;
&lt;p&gt;在 &lt;code&gt;.wslconfig&lt;&#x2F;code&gt; 里设置：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;conf&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-conf &quot;&gt;&lt;code class=&quot;language-conf&quot; data-lang=&quot;conf&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;processors&lt;&#x2F;span&gt;&lt;span&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;12
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;memory&lt;&#x2F;span&gt;&lt;span&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;12GB
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;kai-qi-systemd&quot;&gt;开启 systemd&lt;&#x2F;h2&gt;
&lt;p&gt;编辑 &lt;code&gt;&#x2F;etc&#x2F;wsl.conf&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;conf&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-conf &quot;&gt;&lt;code class=&quot;language-conf&quot; data-lang=&quot;conf&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;[boot]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;systemd &lt;&#x2F;span&gt;&lt;span&gt;= &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;true
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;zhi-jie-yun-xing-exe&quot;&gt;直接运行 .exe&lt;&#x2F;h2&gt;
&lt;p&gt;Debian 的 WSLInterop 似乎与 systemd 有点兼容性问题，需要手动修复：&lt;&#x2F;p&gt;
&lt;script src=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;ksqsf&#x2F;477ee4705e4e51f4bc2de01adb5f7c1d.js&quot;&gt;&lt;&#x2F;script&gt;
&lt;h2 id=&quot;pei-zhi-docker&quot;&gt;配置 Docker&lt;&#x2F;h2&gt;
&lt;p&gt;开启 systemd 后直接安装 Docker 包即可。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;pei-zhi-qemu&quot;&gt;配置 Qemu&lt;&#x2F;h2&gt;
&lt;p&gt;WSL2 支持运行 KVM 虚拟机。编辑 &lt;code&gt;.wslconfig&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;conf&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-conf &quot;&gt;&lt;code class=&quot;language-conf&quot; data-lang=&quot;conf&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;nestedVirtualization&lt;&#x2F;span&gt;&lt;span&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;true
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;编辑 &lt;code&gt;&#x2F;etc&#x2F;wsl.conf&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;conf&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-conf &quot;&gt;&lt;code class=&quot;language-conf&quot; data-lang=&quot;conf&quot;&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;[boot]
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;command &lt;&#x2F;span&gt;&lt;span&gt;= &#x2F;bin&#x2F;bash -c &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;&amp;#39;chown -v root:kvm &#x2F;dev&#x2F;kvm &amp;amp;&amp;amp; chmod 600 &#x2F;dev&#x2F;kvm&amp;#39;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;emacs-pei-zhi&quot;&gt;Emacs 配置&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;pan-duan-zi-ji-shi-bu-shi-zai-wsl-li&quot;&gt;判断自己是不是在 WSL 里&lt;&#x2F;h2&gt;
&lt;pre data-lang=&quot;lisp&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-lisp &quot;&gt;&lt;code class=&quot;language-lisp&quot; data-lang=&quot;lisp&quot;&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span&gt;-match &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;WSL2&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; operating-system-release)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这个表达式在 WSL 中求值为非 nil 值。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;shi-yong-shu-biao&quot;&gt;使用鼠标&lt;&#x2F;h2&gt;
&lt;p&gt;开启 &lt;code&gt;xterm-mouse-mode&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lisp&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-lisp &quot;&gt;&lt;code class=&quot;language-lisp&quot; data-lang=&quot;lisp&quot;&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;when &lt;&#x2F;span&gt;&lt;span&gt;(not (display-graphic-p))
&lt;&#x2F;span&gt;&lt;span&gt;  (xterm-mouse-mode +&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;TUI Emacs 支持用鼠标缩放界面、点击菜单、打开右键菜单（context menu）、选择文本等操作，基本上你在 GUI 里怎么用，在 TUI 里就能怎么用！&lt;&#x2F;p&gt;
&lt;h2 id=&quot;jian-qie-ban-ji-cheng&quot;&gt;剪切板集成&lt;&#x2F;h2&gt;
&lt;p&gt;剪切板集成可能是最重要的配置。首先我们引入一些命令：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lisp&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-lisp &quot;&gt;&lt;code class=&quot;language-lisp&quot; data-lang=&quot;lisp&quot;&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;defun &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;wsl-copy &lt;&#x2F;span&gt;&lt;span&gt;(beg end)
&lt;&#x2F;span&gt;&lt;span&gt;  &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;In a WSL2 environment, copy region to the system clipboard.&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;  (interactive &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;r&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;)
&lt;&#x2F;span&gt;&lt;span&gt;  (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span&gt;((default-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;directory &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;))
&lt;&#x2F;span&gt;&lt;span&gt;    (shell-command-on-region beg end &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;clip.exe&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt; *wsl-copy*&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;))
&lt;&#x2F;span&gt;&lt;span&gt;  (deactivate-mark))
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;defun &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;wsl-get-clipboard &lt;&#x2F;span&gt;&lt;span&gt;()
&lt;&#x2F;span&gt;&lt;span&gt;  &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;In a WSL2 environment, get the clipboard text.&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;  (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span&gt;((clipboard
&lt;&#x2F;span&gt;&lt;span&gt;         (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;let &lt;&#x2F;span&gt;&lt;span&gt;((default-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;directory &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;))
&lt;&#x2F;span&gt;&lt;span&gt;           (shell-command-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;string &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;powershell.exe -command &amp;#39;Get-Clipboard&amp;#39; 2&amp;gt;&#x2F;dev&#x2F;null&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;))))
&lt;&#x2F;span&gt;&lt;span&gt;    (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;setq&lt;&#x2F;span&gt;&lt;span&gt; clipboard (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;replace&lt;&#x2F;span&gt;&lt;span&gt;-regexp-in-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;string &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;\r&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &amp;quot;&amp;quot; clipboard))
&lt;&#x2F;span&gt;&lt;span&gt;    (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;setq&lt;&#x2F;span&gt;&lt;span&gt; clipboard (substring clipboard &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;0 &lt;&#x2F;span&gt;&lt;span&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;))
&lt;&#x2F;span&gt;&lt;span&gt;    clipboard))
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;defun &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;wsl-paste &lt;&#x2F;span&gt;&lt;span&gt;()
&lt;&#x2F;span&gt;&lt;span&gt;  &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;In a WSL2 environment, paste the text from the system clipboard.&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;  (interactive)
&lt;&#x2F;span&gt;&lt;span&gt;  (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;if &lt;&#x2F;span&gt;&lt;span&gt;(derived-mode-p &amp;#39;vterm-mode)
&lt;&#x2F;span&gt;&lt;span&gt;      (vterm-insert (wsl-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;-clipboard))
&lt;&#x2F;span&gt;&lt;span&gt;    (insert (wsl-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;-clipboard))))
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这里提供了两个命令，&lt;code&gt;wsl-copy&lt;&#x2F;code&gt; 和 &lt;code&gt;wsl-paste&lt;&#x2F;code&gt;，作用也顾名思义。还能不能进一步集成呢？可以：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lisp&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-lisp &quot;&gt;&lt;code class=&quot;language-lisp&quot; data-lang=&quot;lisp&quot;&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;when &lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span&gt;-match &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;WSL2&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; operating-system-release)
&lt;&#x2F;span&gt;&lt;span&gt;  (advice-add &amp;#39;gui-select-text :before
&lt;&#x2F;span&gt;&lt;span&gt;              (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;lambda &lt;&#x2F;span&gt;&lt;span&gt;(text)
&lt;&#x2F;span&gt;&lt;span&gt;                (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;when&lt;&#x2F;span&gt;&lt;span&gt; select-enable-clipboard
&lt;&#x2F;span&gt;&lt;span&gt;                  (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;with&lt;&#x2F;span&gt;&lt;span&gt;-temp-buffer
&lt;&#x2F;span&gt;&lt;span&gt;                    (insert text)
&lt;&#x2F;span&gt;&lt;span&gt;                    (wsl-copy (point-min) (point-max)))))))
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这样，在按 M-w 的时候，就会自动更新 Windows 的系统剪切板了。遗憾的是这只是单向同步，我暂时没有想到如何让 Emacs 与 Windows 双向同步。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;zhi-jie-cong-windows-da-kai-wen-jian&quot;&gt;直接从 Windows「打开文件」&lt;&#x2F;h2&gt;
&lt;p&gt;建议安装一个叫做 &lt;a href=&quot;https:&#x2F;&#x2F;wslu.wedotstud.io&#x2F;wslu&#x2F;&quot;&gt;&lt;code&gt;wslu&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; 的工具集。里面有一个叫 &lt;code&gt;wslview&lt;&#x2F;code&gt; 的命令，可以用 Windows 侧的默认程序打开路径&#x2F;URI。&lt;&#x2F;p&gt;
&lt;p&gt;有这个命令后，就可以用到各种地方了。如 dired 里：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lisp&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-lisp &quot;&gt;&lt;code class=&quot;language-lisp&quot; data-lang=&quot;lisp&quot;&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;setq&lt;&#x2F;span&gt;&lt;span&gt; dired-guess-shell-alist-user
&lt;&#x2F;span&gt;&lt;span&gt;        &amp;#39;((&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;\\&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;.pdf&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;\\&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;wslview&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;)
&lt;&#x2F;span&gt;&lt;span&gt;          (&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;\\&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;.png&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;\\&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;wslview&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;)
&lt;&#x2F;span&gt;&lt;span&gt;          (&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;\\&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;.jpg&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;\\&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;wslview&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;)))
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;（不过实际上 &lt;code&gt;xdg-open&lt;&#x2F;code&gt; 好像也能用……）&lt;&#x2F;p&gt;
&lt;p&gt;还有一个很实用的命令是直接打开当前目录：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lisp&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-lisp &quot;&gt;&lt;code class=&quot;language-lisp&quot; data-lang=&quot;lisp&quot;&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;defun &lt;&#x2F;span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;open-directory-here &lt;&#x2F;span&gt;&lt;span&gt;()
&lt;&#x2F;span&gt;&lt;span&gt;  &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;Open the current directory in the GUI file manager.
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;In most cases, this means the current directory of the current buffer.&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;span&gt;  (interactive)
&lt;&#x2F;span&gt;&lt;span&gt;  (shell-command (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;format &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;%s %s&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;wslview&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; (shell-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;quote&lt;&#x2F;span&gt;&lt;span&gt;-argument (&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;expand&lt;&#x2F;span&gt;&lt;span&gt;-file-name default-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;directory&lt;&#x2F;span&gt;&lt;span&gt;)))))
&lt;&#x2F;span&gt;&lt;span&gt;(global-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span&gt;-key (kbd &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;C-c d&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#d08770;&quot;&gt;#&amp;#39;open-directory-here&lt;&#x2F;span&gt;&lt;span&gt;)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;GUI 下 dired 是支持拖放文件的，但在 WSL 里就不行了。用这个命令可以稍微解决一下这个问题。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;browse-url&quot;&gt;browse-url&lt;&#x2F;h2&gt;
&lt;p&gt;Emacs 里 &lt;code&gt;browse-url&lt;&#x2F;code&gt; 可以用系统默认浏览器打开 URL。但默认情况下并不能支持直接打开 Windows 那边的默认浏览器。一番探查后发现，是因为 &lt;code&gt;browse-url&lt;&#x2F;code&gt; 会觉得当前系统是 Linux，但又没有 GUI，所以会罢工。这里直接强行设置一个 &lt;code&gt;DISPLAY&lt;&#x2F;code&gt; 环境变量就可以了：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lisp&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-lisp &quot;&gt;&lt;code class=&quot;language-lisp&quot; data-lang=&quot;lisp&quot;&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#b48ead;&quot;&gt;when&lt;&#x2F;span&gt;&lt;span&gt; is-wsl
&lt;&#x2F;span&gt;&lt;span&gt;  (setenv &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;DISPLAY&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;:0&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;))
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;zhong-wen-shu-ru-fa&quot;&gt;中文输入法&lt;&#x2F;h2&gt;
&lt;p&gt;理论上，Windows Terminal 和 WezTerm 都可以直接用 Windows 输入法打字。但实际上我碰到了一个奇怪的问题：如果打字速度比较快，汉字就容易丢失一个字节，导致 Emacs 无法识别。如下图所示：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;ksqsf.moe&#x2F;posts&#x2F;2025-04-29-work-in-wsl&#x2F;.&#x2F;emacs-garbled-input.avif&quot; alt=&quot;Emacs garbled input&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;这个问题在 Windows Terminal 上也可以复现。由于 WSL 架构复杂，暂时不清楚到底是谁的锅：Windows PTY 的？Emacs 的？WSL 的？还是终端模拟器的？&lt;&#x2F;p&gt;
&lt;p&gt;所以为了能舒舒服服地打字，建议配置使用 &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;DogLooksGood&#x2F;emacs-rime&quot;&gt;emacs-rime&lt;&#x2F;a&gt;。至于 Rime 怎么配置使用，这里就不赘述了。不过有一点需要注意，在 isearch 里是不能用 emacs-rime 的，因为 isearch 根本不使用 minibuffer。使用 &lt;a href=&quot;https:&#x2F;&#x2F;elpa.gnu.org&#x2F;packages&#x2F;isearch-mb.html&quot;&gt;isearch-mb&lt;&#x2F;a&gt; 可修复该问题。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;latex-synctex&quot;&gt;LaTeX &amp;amp; SyncTeX&lt;&#x2F;h2&gt;
&lt;p&gt;LaTeX 编译器可以直接在 Linux 里安装 texlive。阅读就直接用 Windows 那边的 PDF 阅读器：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lisp&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-lisp &quot;&gt;&lt;code class=&quot;language-lisp&quot; data-lang=&quot;lisp&quot;&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;setq&lt;&#x2F;span&gt;&lt;span&gt; TeX-view-program-selection &amp;#39;((output-pdf &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;wslview&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;)))
&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;setq&lt;&#x2F;span&gt;&lt;span&gt; TeX-view-program-&lt;&#x2F;span&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;list&lt;&#x2F;span&gt;&lt;span&gt; &amp;#39;((&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;wslview&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot; (&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;wslview &amp;#39;%o&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;))))
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;并且还可以直接让 PDF 阅读器根据 SyncTeX 信息跳转到源代码！以 SumatraPDF 为例，在 Settings -&amp;gt; Options -&amp;gt; Set inverse search command-line 中，输入如下命令：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;wsl&lt;&#x2F;span&gt;&lt;span&gt; emacsclient&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; -n&lt;&#x2F;span&gt;&lt;span&gt; +%&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;l&lt;&#x2F;span&gt;&lt;span&gt;:%&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;c &lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;$&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;wslpath &lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;%f&lt;&#x2F;span&gt;&lt;span&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;)&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这里 &lt;code&gt;l&lt;&#x2F;code&gt; &lt;code&gt;c&lt;&#x2F;code&gt; &lt;code&gt;f&lt;&#x2F;code&gt; 分别是行号、列号和文件路径。其中 &lt;code&gt;wslpath&lt;&#x2F;code&gt; 把 Windows 式的文件名转换为 WSL 里可直接用的文件名。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;boot-into-emacs&quot;&gt;Boot into Emacs&lt;&#x2F;h2&gt;
&lt;p&gt;我在 &lt;code&gt;~&#x2F;.profile&lt;&#x2F;code&gt; 末尾添加了：&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#2b303b;color:#c0c5ce;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span style=&quot;color:#96b5b4;&quot;&gt;exec&lt;&#x2F;span&gt;&lt;span&gt; emacs
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这样，只要一打开 WSL 就会自动启动到 Emacs 里。几乎很难发现它和独立的 Emacs 有什么区别。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;yong-wsl-emacs-de-ling-yi-ge-li-you&quot;&gt;用 WSL Emacs 的另一个理由&lt;&#x2F;h2&gt;
&lt;p&gt;我的确也安装了原生 Windows 版 Emacs，但离奇的是，我的配置启动居然要 18 秒之久！相比之下，WSL TUI Emacs 只需要 1.3 秒。&lt;&#x2F;p&gt;
&lt;h1 id=&quot;zhong&quot;&gt;终&lt;&#x2F;h1&gt;
&lt;p&gt;值得一提的暂时只能想起来这些。&lt;&#x2F;p&gt;
&lt;p&gt;总的来说 WSL 的体验不错。最近的工作一直在用 WSL，没碰到过什么难以克服的问题。&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Rime 双拼折腾记</title>
          <pubDate>Thu, 01 Jun 2023 17:07:59 +0800</pubDate>
          <author>ksqsf</author>
          <link>https://ksqsf.moe/posts/2023-06-01-rime-double-pinyin/</link>
          <guid>https://ksqsf.moe/posts/2023-06-01-rime-double-pinyin/</guid>
          <description xml:base="https://ksqsf.moe/posts/2023-06-01-rime-double-pinyin/">&lt;p&gt;从去年 6 月（重新）学习形码开始，我就误打误撞进入了深不可测的中文输入法世界。在我熟悉了各种输入法方案之后，也开始亲自折腾输入方案了。而这一过程中令我惊喜的是，Rime 不仅完全可以实现我的「智能双拼辅助码整句输入」的设想，而且成本相当之低。为了能进一步传 Rime 教，也为了宣传我的双拼辅助码整句设想，在这篇博客里我将比较具体地介绍我是如何用 Rime 实现我的输入法方案的，并介绍实现中的一些难题及其解决方法。&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Haskell as a non-toy</title>
          <pubDate>Thu, 03 Jun 2021 00:00:00 +0000</pubDate>
          <author>ksqsf</author>
          <link>https://ksqsf.moe/posts/2021-06-03-haskell-as-a-non-toy/</link>
          <guid>https://ksqsf.moe/posts/2021-06-03-haskell-as-a-non-toy/</guid>
          <description xml:base="https://ksqsf.moe/posts/2021-06-03-haskell-as-a-non-toy/">&lt;p&gt;最近拿 Haskell 亲身实践了一段时间，这篇文章总结了我的一些心得体会。&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>G.E.B. —— A Mental Space Odyssey</title>
          <pubDate>Tue, 25 Aug 2020 00:00:00 +0000</pubDate>
          <author>ksqsf</author>
          <link>https://ksqsf.moe/posts/2020-08-25-geb/</link>
          <guid>https://ksqsf.moe/posts/2020-08-25-geb/</guid>
          <description xml:base="https://ksqsf.moe/posts/2020-08-25-geb/">&lt;p&gt;《哥德尔、埃舍尔、巴赫——集异璧之大成》是一本能让人手不释卷的有趣的书。希望这篇简短的读后感能让更多人对这本书产生兴趣。&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>蕴涵词的解释</title>
          <pubDate>Sun, 23 Aug 2020 00:00:00 +0000</pubDate>
          <author>ksqsf</author>
          <link>https://ksqsf.moe/posts/2020-08-23-implication/</link>
          <guid>https://ksqsf.moe/posts/2020-08-23-implication/</guid>
          <description xml:base="https://ksqsf.moe/posts/2020-08-23-implication/">&lt;p&gt;命题逻辑的第一个难点就是蕴涵词的解释。尽管逻辑教材提供了大量解释，但是很少有人提供一个更直接的理解方式。这里，我尝试从单调推理的角度直接推理出蕴涵词的真值表。&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>线性代数中的量子力学</title>
          <pubDate>Tue, 26 Feb 2019 00:00:00 +0000</pubDate>
          <author>ksqsf</author>
          <link>https://ksqsf.moe/posts/2019-02-26-qm-in-la/</link>
          <guid>https://ksqsf.moe/posts/2019-02-26-qm-in-la/</guid>
          <description xml:base="https://ksqsf.moe/posts/2019-02-26-qm-in-la/">&lt;p&gt;不久前偶然翻出来去年写的纯粹数学前沿的课程作业，当时刚看完《Quantum Mechanics: The Theoretical Minimum》，所以写的是简单的量子力学。因为是赶制出来的，内容也不是很详细（比如甚至连密度矩阵都没提），主要是强调特征值。感觉作为简单的量子力学总结&#x2F;入门可能有点用？所以就把 LaTeX 改写成 Markdown 发到博客上了。&lt;del&gt;有点凑数之嫌&lt;&#x2F;del&gt;&lt;&#x2F;p&gt;
&lt;p&gt;标题是故意这么写的，强调我完全不懂量子力学。[滑稽.jpg]&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>有趣的依赖类型</title>
          <pubDate>Mon, 18 Feb 2019 00:00:00 +0000</pubDate>
          <author>ksqsf</author>
          <link>https://ksqsf.moe/posts/2019-02-18-dt-fun/</link>
          <guid>https://ksqsf.moe/posts/2019-02-18-dt-fun/</guid>
          <description xml:base="https://ksqsf.moe/posts/2019-02-18-dt-fun/">&lt;p&gt;这篇文章的话题是「依赖类型」。很多人，甚至是写过多年程序的人，可能都没有接触过这个概念。简单说，如果一个类型&lt;strong&gt;依赖于一个不是类型的东西&lt;&#x2F;strong&gt;，那它就是依赖类型。其实我本人是这个话题的门外汉，那我怎么想起来写这样的一篇文章了呢？因为我刚刚读完《The Little Typer》，感觉非常新奇有趣，所以想写一写。如果我能把这份乐趣分享给你，那我会很高兴的～ (^_^)&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Linux 发行版意味着什么？</title>
          <pubDate>Sat, 03 Mar 2018 00:00:00 +0000</pubDate>
          <author>ksqsf</author>
          <link>https://ksqsf.moe/posts/2018-03-03-what-is-a-linux-distro/</link>
          <guid>https://ksqsf.moe/posts/2018-03-03-what-is-a-linux-distro/</guid>
          <description xml:base="https://ksqsf.moe/posts/2018-03-03-what-is-a-linux-distro/">&lt;p&gt;近来 Flatpak 等项目风风火火，让我更深地思索了 Linux 各大发行版的「包管理」的理念。今天看到了 &lt;a href=&quot;https:&#x2F;&#x2F;tingping.github.io&#x2F;2018&#x2F;03&#x2F;02&#x2F;when-distros-get-it-wrong.html&quot;&gt;TingPing 关于 Debian XChat 的博客&lt;&#x2F;a&gt;，促使我写下了自己的思考。&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>从自输出程序到 Y 组合子</title>
          <pubDate>Wed, 16 Aug 2017 00:00:00 +0000</pubDate>
          <author>ksqsf</author>
          <link>https://ksqsf.moe/posts/2017-08-16-from-quine-to-y-combinator/</link>
          <guid>https://ksqsf.moe/posts/2017-08-16-from-quine-to-y-combinator/</guid>
          <description xml:base="https://ksqsf.moe/posts/2017-08-16-from-quine-to-y-combinator/">&lt;p&gt;有一类程序可以打印出自己的源代码，这种程序叫做自输出程序，也叫做 Quine。本文将向你展示 Quine 和 Y 组合子之间的关系。&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Btrfs 与 Linux 安装</title>
          <pubDate>Tue, 18 Jul 2017 00:00:00 +0000</pubDate>
          <author>ksqsf</author>
          <link>https://ksqsf.moe/posts/2017-07-18-btrfs/</link>
          <guid>https://ksqsf.moe/posts/2017-07-18-btrfs/</guid>
          <description xml:base="https://ksqsf.moe/posts/2017-07-18-btrfs/">&lt;p&gt;就我浅薄的使用经验来看，Btrfs 可以大大减轻 Linux 安装时分区的痛苦，此外切换 Linux 发行版更加容易！&lt;&#x2F;p&gt;</description>
      </item>
    </channel>
</rss>
