首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Emacs lisp按钮操作不能正常工作

Emacs lisp按钮操作不能正常工作
EN

Stack Overflow用户
提问于 2014-11-20 20:34:43
回答 1查看 110关注 0票数 0

我正在写一个使用git-emacs包函数的小自定义。这个想法是,只要按下一个键,就会弹出一个包含当前可用的git-repositories的缓冲区,让我选择一个并自动导航到repo的git-status buffer。

我现在被这个代码卡住了:

代码语言:javascript
复制
(require 'popwin)
(require 'button)
(popwin-mode 1)
(setq git-repositories (list "~/testgit/repo1/" "~/repo2/" "~/gitlab/repo3"))

(defun select-git-repository-from-list()
  (interactive)
  ;; fill buffer with data from git-repositories
  (with-output-to-temp-buffer "*git-repositories*"
    (with-current-buffer "*git-repositories*"
      (dolist (repo git-repositories)
        ;; we use 'local' variable because if insert-text-button value
        ;; is set like (car blah), call to `car` is issued when button is pressed,
        ;; so the it does return first element in the list
        (setq pos (position repo git-repositories))
        (insert-text-button repo 'action (lambda (x) (delete-window) (git-status (nth pos git-repositories))))
        (newline)
        )
      (push '("*git-repositories*" :height 10) popwin:special-display-config)))
  )
(global-set-key (kbd "C-c \\") 'select-git-repository-from-list)

这并不像预期的那样工作:它创建了一个小缓冲区,用文本按钮填充它,这些按钮将触发(git-status dir)。问题是,当我按下第一个按钮时,git-status被成功调用。另外两个给出了error if: fatal: Not a git repository (or any of the parent directories): .git。我猜路径为空或已损坏,这就是找不到.git的原因。

因此,问题是:这段代码应该如何重写?

问候你,迈克。

EN

回答 1

Stack Overflow用户

发布于 2014-11-21 17:44:15

您在函数中的长注释提供了问题的线索:代码和变量被计算的时刻并不是您所期望的。你可以这样做来解决你的问题:

代码语言:javascript
复制
(defun select-git-repository-from-list()
  (interactive)
  ;; fill buffer with data from git-repositories
  (with-output-to-temp-buffer "*git-repositories*"
    (with-current-buffer "*git-repositories*"
      (dolist (repo git-repositories)
        (insert-text-button repo 'action `(lambda (x) (delete-window) (git-status ,repo)))
        (newline))
      (push '("*git-repositories*" :height 10) popwin:special-display-config))))

注意反引号:我引用了一个列表(代码,如果是事实,因为它是一个lambda),但我有选择地计算其中的一个变量(这就是逗号的用途)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27039763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档