各位 Emacs 道友,大家好,想大家咨询一下,安装了dashboard 面板后我想当点击了Projects中的项目的时候自动打开 treemacs 并打开该项目在 recent file 中的文件,实现这个功能要怎么做?

各位 Emacs 道友,大家好,想大家咨询一下,安装了dashboard 面板后我想当点击了Projects中的项目的时候自动打开 treemacs 并打开该项目在 recent file 中的文件,实现这个功能要怎么做?

简单看了一下,应该自定义这个就好:dashboard-projects-switch-function

你好!根据你说的dashboard-projects-switch-function 使用它来进行性设置,但是接收到的项目路径不对一直是根路径/。

之前没用过dashboard,根据chatgpt生成的代码略微调整了下,大体可用,细节可能需要你自己调整。

主要代码步骤为三步:
1、找到项目根路径
2、treemacs打开项目。根据项目根路径
3、打开项目相关文件。匹配包含项目根路径的recentf文件

具体代码如下:

(use-package projectile
  :ensure t
  :config
  (projectile-mode +1))

(defun my/dashboard-open-project-and-treemacs (project-root)
  "Open treemacs for the given PROJECT-ROOT and open recent files."
  (interactive)
  ;; 打开 treemacs 并跳转到项目根目录
  (treemacs-add-and-display-current-project)
  ;; 尝试从 recentf 列表中找到与该项目相关的文件并打开
  (let ((recent-files (seq-filter
                       (lambda (file)
                         (string-prefix-p project-root file))
                       recentf-list)))
    (if recent-files
        ;; 遍历并打开与项目相关的所有文件
        (dolist (file recent-files)
          (find-file file))
      (message "No recent files found for project %s" project-root))))

(use-package dashboard
  :ensure t
  :after projectile
  :config
  (setq dashboard-items '((recents   . 5)
                        (projects  . 5)))
  (dashboard-setup-startup-hook)
  (setq dashboard-item-shortcuts '((recents   . "r")
                                 (projects  . "p")))
  (setq dashboard-projects-backend 'projectile) ;; 确保 dashboard 使用 projectile 获取项目
  (setq dashboard-projects-switch-function 'my/dashboard-open-project-and-treemacs))

好的,谢谢啦!我试试行不行。

你好!你能再帮我一下吗?我想当跳转到treemacs 中的时候,treemacs workspace 只留当前项目在工作空间中,其他的删除。并且只显示的recentf文件和treemacs 窗口其他窗口和buffer关闭。

您好,就是稍微提个建议哈,不要多次只提需求伸手询问。这些小功能都不难,学习一下 emacs lisp 自己动手才有乐趣。