暗无天日

=============>DarkSun的个人博客

TIL: 从直播对谈中学到的三个 Emacs 技巧

来源:YE16: Sacha and Prot talk Emacs

qrencode:在 Emacs 里生成 QR 码

qrencode 包能把任意字符串渲染成字符画 QR 码,直接显示在 Emacs buffer 里。Sacha 用它在直播时显示 URL,观众用手机扫码就能打开链接,不用暂停视频手打地址。

;; 安装
(use-package qrencode
  :ensure t)

;; 生成 QR 码并插入当前 buffer
(qrencode-region (point-min) (point-max))
;; 或者指定字符串
(insert (qrencode-string "https://sachachua.com"))

生成的 QR 码是用字符方块拼成的,不是图片。可以直接在终端里使用。

helpful + elisp-demos:增强 Emacs Lisp 文档体验

helpfuldescribe-functiondescribe-variable 的增强替代品,显示更多信息(源码、调用位置、引用)。 elisp-demos 则在帮助 buffer 中注入函数用法示例。

;; 安装
(use-package helpful
  :ensure t
  :bind
  (("C-h f" . helpful-callable)
   ("C-h v" . helpful-variable)
   ("C-h k" . helpful-key)))

(use-package elisp-demos
  :ensure t
  :after helpful
  :config
  (advice-add 'helpful-update :after #'elisp-demos-advice-helpful-update))

装完之后 C-h f mapcar 就能看到 mapcar 的实际用法示例,而不是只有干巴巴的函数签名。

keyd + emacsclient:系统级快捷键

keyd 是 Linux 下的键盘重映射守护进程,配置文件放在 ~/.config/keyd/default.conf 。它能把按键的长按变成修饰键——比如长按空格变成 Super 键,短按还是空格。配合 emacsclient 可以实现系统级的快捷键触发 Emacs 命令。

整体思路分三步:

  1. Emacs 中定义命令
  2. keyd 中定义按键映射,用 command() 直接调用 emacsclient
  3. 长按空格 + 按对应键即可触发
;; Step 1: 在 Emacs 中定义一个通过 emacsclient 调用的命令
(defun my-toggle-dark-mode ()
  "切换深色/浅色主题。"
  (interactive)
  (if (eq (car custom-enabled-themes) 'modus-operandi)
      (load-theme 'modus-vivendi t)
    (load-theme 'modus-operandi t)))
# ~/.config/keyd/default.conf

[ids]
*

[main]
# 短按空格 = 空格,长按空格 = 激活 layer 层
space = overload(space, layer)

[layer]
# 长按空格 + c → 直接运行 emacsclient 命令
c = command(emacsclient -e '(my-toggle-dark-mode)')

这样长按空格再按 c ,即使焦点不在 Emacs 窗口上,也能切换主题。keyd 的 command() 直接调用系统命令,不需要额外的快捷键管理工具。

Emacs : TIL : qrencode : helpful : keyd