Emacs快速创建侧边栏——maple-explorer

闲着没事又造了一个轮子,:smile: maple-explorer是一个用于快速创建类似neotree文件浏览,或者类似maple-imenu的变量函数浏览的侧边栏的插件,让每个人都能写一个属于自己的侧边栏

快速创建一个侧边栏

只需要定义一个maple-explorer-NAME-list的函数,并且返回一个列表

(list
 :name name
 :value value
 :face face
 :click click
 :status 'close ;; or 'open
 :children '((child1 child2 ...))

其中child1,child2格式与父列表格式一致,child1中也可以嵌套下一组children,比如我定义一个名为aaa的list的函数

(defun maple-explorer-aaa-list(&optional isroot)
  "Get recentf file list ISROOT mean first call."
  (list
   :name "aaa"
   :value "aaa"
   :face 'font-lock-constant-face
   :click 'maple-explorer-fold
   :status 'open
   :children
   (list
    (list :name "aaa_child1"
          :face 'font-lock-keyword-face
          :click (lambda() (interactive) (message "bbb")))
    (list :name "aaa_child2"
          :face 'font-lock-comment-face
          :click (lambda() (interactive) (message "aaaa"))))))

定义好后只要使用

(maple-explorer-define aaa)

就能快速创建一个maple-explorer-aaa的函数,使用它就能打开一个侧边栏,效果是这样的

自定义内容显示

maple-explorer提供了一个maple-explorer-NAME-name-function的变量,可用于自定义内容的显示,比如对于一个文件列表,我可以增加自定义图标

(defun maple-explorer-icon (str icon)
  "The ICON of maple-explorer STR."
  (format "%s %s" (propertize "\t" 'display icon) str))

(defun maple-explorer-icon-file-name(info)
  "Custom maple-explorer-file INFO icon name."
  (let ((name  (plist-get info :name))
        (value (plist-get info :value)))
    (plist-put info :indent 5)
    (cond ((or (string= name ".") (string= name ".."))
           (maple-explorer-icon name (all-the-icons-faicon "folder")))
          ((file-directory-p value)
           (maple-explorer-icon
            name
            (if (maple-explorer--is-open info)
                (all-the-icons-faicon "folder-open")
              (all-the-icons-faicon "folder"))))
          (t (maple-explorer-icon name (all-the-icons-icon-for-file value))))))

(setq maple-explorer-file-name-function 'maple-explorer-icon-file-name)

自定义之前是这样的

自定义之后是这样的

更多信息

maple-explorer目前已实现了

maple-explorer-file      ;; 文件浏览
maple-explorer-imenu     ;; 函数变量名浏览
maple-explorer-buffer    ;; 已打开buffer浏览
maple-explorer-recentf   ;; 最近文件浏览 
maple-explorer-project   ;; 已打开的项目浏览

欢迎各位emacs同道测试

15 个赞

有机会试试。GitHub 上图片有些大(接近 1MB),可以考虑压缩下(比如用 tinypng),我这边有时网络不太好,会觉得卡。

1 个赞

正需要这么一个框架 收了 谢谢啦

看图片效果很好很强大啊,也许可以替代treenacs和imenu list,我明儿试试看

怎么显示隐藏文件呀,还要怎么把窗口弄到左边

treemacs 什么都好,就是有点重了。试试这个效果如何

窗口显示在左边需要设置display-alist

(setq maple-explorer-Name-display-alist '((side . left) (slot . -1)))

显示隐藏文件可以使用 H,或者调用命令 maple-explorer-file-omit

好的,谢谢,挺好用的