git-messenger 使用git-link 函数问题

我想在git-messenger下使用apply prefix arg的git-link的函数。

方案1

下面这样定义后,M-x git-link-commit--C-u是可以使用的,但是无法在git-messenger内使用 (复现 M-x git-messenger:popup-message -> o)。

(defmacro call-function--with-prefix-arg (func &rest arglist)
  "defmacro to create functions call with prefix arg"
  `(defun ,(intern (format "%S--C-u" func)) ,arglist
     (interactive)
     (let ((current-prefix-arg '(4)))
       (call-interactively ',func))))

;; git-link
(call-function--with-prefix-arg git-link-commit)
(define-key git-messenger-map (kbd "o") 'git-link-commit--C-u)
(setq git-messenger:func-prompt (cons '(git-link-commit--C-u . "Browse Remote") git-messenger:func-prompt ))

方案2

但是我这样定义git-link-commit的函数,在git-messenger下使用就行 https://github.com/ztlevi/spacemacs-config/blob/master/layers/ztlevi-misc/funcs.el#L601 。这种我是直接把C-u加在函数体里了。

(define-key git-messenger-map (kbd "o") 'my-git-link-commit)
(setq git-messenger:func-prompt (cons '(my-git-link-commit . "Browse Remote") git-messenger:func-prompt ))

求教如何解决这个问题,能够让第一种方式正常使用。

你的 my-git-link-commit 还改了 git-link-commit 中获得 commit 的获取方式,所以方案 1 无法工作(更准确地说,估计会提示 “Point is not on a commit hash”)可能是理所当然的。


1 个赞

对啊。。。我之前改的都忘记了。thx