如何优雅地给spacemacs打补丁

Spacemacs的架构设计精妙绝伦,通过层的封装将各个功能模块化,使得配置井然有序,更赋予了系统无穷的扩展潜力。作为日常文件管理的利器,我习惯于使用ranger。 而在Emacs中集成ranger.el后,路径的获取更显得直观而便利,仿佛指尖轻点间,万物皆在掌握。

然而,近来在使用ranger.el时,我却遭遇了一个小小的烦恼:每当我试图通过快捷键yn来复制第一行文件的文件名时,系统总是顽固地返回文件夹的绝对路径。起初我并未在意,以为只是偶然的失误,但反复出现的bug让我终于忍无可忍。

经过一番细致的调查,真相浮出水面:原来,ranger.el覆盖了dired的用户界面,其函数ranger-copy-filename在幕后调用了dired的函数dired-copy-filename-as-kill。而后者作用于原始的dired UI,其中第一行恰恰是文件夹的路径——正是这一细微的差异,导致了文件名获取的南辕北辙。

那么,如何优雅地修复这个bug,让流畅的体验重回指尖呢?

一个简洁而有效的方案就此诞生:在Spacemacs中创建一个私有层my-bug-fix-layer。首先,在layers.el中添加必要的声明:

(configuration-layer/declare-layer 'ranger)

随后,在config.el中植入修复的代码,轻巧地绕过这个陷阱。

(with-eval-after-load 'ranger
  (when ranger-override-dired
    (defun my-ranger-copy-fix-advice (orig-fun &rest args)
      (cl-letf (((symbol-function 'dired-get-subdir) (lambda (&optional arg) nil)))
        (apply orig-fun args)))
    (advice-add 'dired-copy-filename-as-kill :around #'my-ranger-copy-fix-advice)
    (advice-add 'ranger-copy-filename :around #'my-ranger-copy-fix-advice)))

如此,困扰多时的问题便如晨雾般消散,一切恢复宁静与高效。

石见 石页 /
在共享协议(CC)下发布于
类别: technology 
标签: 打补丁  spacemacs  中