疑惑🤔:Emacs为什么迷人?

感性评价:Emacs 比较黏我。

我这几星期刚刚从 VS Code 迁移过来(去年夏天初学 Common Lisp 时在 Emacs 中用过 SLY,对 Lisp 这种“活着的”开发体验印象极好),虽然 Code 和 Emacs 都强调类似于“可插拔”的概念,但我并没有觉得 Emacs 的包离我有多少距离,毕竟我的配置文件是 ELisp,(M)ELPA 包也是 ELisp 写成的,很容易接触到插件内部的原理。
回想用 Code 时的情境,我当时觉得插件就是插件,虽然许多插件源代码也是公开的,我却倾向于将它们看成黑盒,点点鼠标安装,and it just works. 要是不够满意,我懒得动,受着,等作者修。

接触到插件内部的原理有什么好处呢?请看例子: 我想要将平滑滚动适用于 C-vM-v参考文献),又觉得滚动一屏太长了,所以我就自己改成了75%(参考了原生的C-v/M-v实现,顺手把C-u也支持了):

;; Scroll
(pixel-scroll-precision-mode 1)
(setq pixel-scroll-precision-interpolate-page t)

(defun +pixel-scroll-interpolate-down (&optional arg)
  (interactive "P")
  (if pixel-scroll-precision-interpolate-page
      (pixel-scroll-precision-interpolate
       (if arg
           (* -1 (prefix-numeric-value arg) (pixel-line-height))
         (- (* 0.75 (window-text-height nil t)))) nil 1)
    (condition-case nil
	(scroll-up arg)
      (end-of-buffer (goto-char (point-max))))))

(defun +pixel-scroll-interpolate-up (&optional arg)
  (interactive "P")
  (if pixel-scroll-precision-interpolate-page
      (pixel-scroll-precision-interpolate
       (if arg
           (* (prefix-numeric-value arg) (pixel-line-height))
         (* 0.75 (window-text-height nil t))) nil 1)
    (condition-case nil
	(scroll-down)
      (beginning-of-buffer (goto-char (point-min))))))

(defalias 'scroll-up-command '+pixel-scroll-interpolate-down)
(defalias 'scroll-down-command '+pixel-scroll-interpolate-up)

再如,我在使用markdown-toc时发现锚点生成不支持中文,由于 MELPA 包安装好时,源代码就在我的手边,于是我顺手打开、搞明白了问题所在,接着拼尽全力向上游提交了补丁: https://emacs-china.org/t/markdown-toc/30904

对我来说,这种亲近的感觉,确实很妙

5 个赞