diff --git a/emacs.el b/emacs.el index 30c9838..26bcaca 100644 --- a/emacs.el +++ b/emacs.el @@ -1,6 +1,6 @@ ;;; emacs.el --- 10sr emacs initialization -;; Time-stamp: <2018-10-15 14:22:50 JST 10sr> +;; Time-stamp: <2018-10-15 14:44:57 JST 10sr> ;;; Code: @@ -2316,6 +2316,8 @@ use for the buffer. It defaults to \"*recetf-show*\"." '("commit" "tree"))) (with-current-buffer buf (buffer-disable-undo) + ;; For running git command go back to repository root + (cd git-walktree-repository-root) (save-excursion (let ((inhibit-read-only t)) (setq point (point)) @@ -2383,6 +2385,8 @@ Result will be inserted into current buffer." (buf (git-walktree--create-buffer commitish path))) (cl-assert (string= type "blob")) (with-current-buffer buf + ;; For running git command go back to repository root + (cd git-walktree-repository-root) (let ((inhibit-read-only t)) (setq point (point)) (with-temp-buffer @@ -2408,7 +2412,8 @@ Result will be inserted into current buffer." (setq git-walktree-current-commitish commitish) (setq git-walktree-current-path path) (setq git-walktree-object-id blob) - (let ((dir (expand-file-name (file-name-directory path) + (let ((dir (expand-file-name (or (file-name-directory path) + ".") git-walktree-repository-root))) (when (and git-walktree-try-cd (file-directory-p dir)) @@ -2461,7 +2466,6 @@ without checking it." (plist-get info :object))) (defun git-walktree-open (commitish &optional path object) - ;; TODO: What to do when currently in subdirectory? "Open git tree buffer of COMMITISH. When PATH was given and non-nil open that, otherwise open root tree. When OBJECT was given and non-nil, assume that is the object of COMMITISH:PATH without @@ -2469,7 +2473,7 @@ checking it." (interactive (list (magit-read-branch-or-commit "Revision: "))) ;; (setq path (or path ;; (git-walktree--path-in-repository (directory-file-name default-directory)))) - (pop-to-buffer (git-walktree--open-noselect commitish path object))) + (switch-to-buffer (git-walktree--open-noselect commitish path object))) (defalias 'git-walktree 'git-walktree-open) (defun git-walktree--path-in-repository (dir) @@ -2544,12 +2548,22 @@ Returns property list like (:mode MODE :type TYPE :object OBJECT :file FILE)." (let ((info (git-walktree--parse-lstree-line (buffer-substring-no-properties (point-at-bol) (point-at-eol))))) (if info - (switch-to-buffer (git-walktree--open-noselect - git-walktree-current-commitish - (git-walktree--join-path (plist-get info - :file)) - (plist-get info - :object))) + (switch-to-buffer + (if (string= (plist-get info + :type) + "commit") + (with-temp-buffer + (cd (plist-get info :file)) + (git-walktree--open-noselect git-walktree-current-commitish + (git-walktree--join-path (plist-get info + :file)) + (plist-get info + :object))) + (git-walktree--open-noselect git-walktree-current-commitish + (git-walktree--join-path (plist-get info + :file)) + (plist-get info + :object)))) (message "No object on current line.")))) (defun git-walktree--join-path (name &optional base)