Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Emacs 脚本magit计时问题_Emacs_Elisp_Magit - Fatal编程技术网

Emacs 脚本magit计时问题

Emacs 脚本magit计时问题,emacs,elisp,magit,Emacs,Elisp,Magit,C-x v=vc差异很好。但是,我可以使用diff 如果差异显示在magit状态缓冲区中,则直接显示 我试着在这里做到这一点: (defvar le::vc-diff-data nil) (defun le::magit-go-to-change-once () (destructuring-bind (filename orig-buff relative-name) le::vc-diff-data (pop-to-buffer "*magit: magit*") (go

C-x v=
vc差异
很好。但是,我可以使用diff 如果差异显示在
magit状态
缓冲区中,则直接显示

我试着在这里做到这一点:

(defvar le::vc-diff-data nil)
(defun le::magit-go-to-change-once ()
  (destructuring-bind (filename orig-buff relative-name) le::vc-diff-data
    (pop-to-buffer "*magit: magit*")
    (goto-char (point-min))
    (if (and (search-forward-regexp "^Changes:$" nil t)
             ;; WIP fix
             (progn (magit-show-level-2) t)
             (search-forward relative-name nil t))
        (progn (recenter-top-bottom 0)
               ;; WIP fix me here
               (magit-show-level-4)
               )
      ;; no diff
      (pop-to-buffer orig-buf)
      (message "no diff found.")))
  (remove-hook 'magit-refresh-status-hook #'le::magit-go-to-change-once))

(defadvice vc-diff (around magit-redirect activate compile)
  "redirect to magit"
  (let* ((vc-info (vc-deduce-fileset t))
         (filename (buffer-file-name))
         (orig-buf (current-buffer))
         (relative-name (replace-regexp-in-string
                         (concat "\\`"
                                 (regexp-quote (expand-file-name (locate-dominating-file filename ".git"))))
                         "" filename)))
    (if (string-equal "Git" (car vc-info))
        (progn
          (setq le::vc-diff-data (list filename orig-buf relative-name))
          (add-hook 'magit-refresh-status-hook #'le::magit-go-to-change-once)
          (call-interactively 'magit-status))
      ad-do-it)))
但是,“magit show level*”功能失败。当我使用
eval表达式
在magit缓冲区中。所以这可能是个时间问题
我必须在其他地方挂接。

正如我在评论中所说,挂接是在与节相关的函数无法工作时调用的。您可以从那里尝试magit:,您的代码应该可以使用它


再见,你的提议很有趣,把它整合到magit contrib的提议中可能会很棒。

不太了解magit,我不知道你的意思。但从长远来看,也许
M-x report emacs bug
请求diff mode合并Magit的一些功能(并描述这些功能是什么)可能是比累积解决方案更好的选择。我已经提交了一份bug report,以便在diff refine中更好地突出显示空间更改。但在这种情况下,我真的想调用magit来处理git。问题是magit在部分完成之前调用钩子中的函数,因此与部分相关的函数在那里不起作用……非常好。这就解决了问题。在master中完成此修复后,我将在contrib中为我的功能打开PR。