Browse Source

Do not re-initialize buffers

master
10sr 5 years ago
parent
commit
2a47ad90ed
Signed by: 10sr GPG Key ID: 7BEC428194130EB2
1 changed files with 94 additions and 85 deletions
  1. +94
    -85
      emacs.el

+ 94
- 85
emacs.el View File

@@ -1,6 +1,6 @@
;;; emacs.el --- 10sr emacs initialization

;; Time-stamp: <2018-10-17 18:45:09 JST 10sr>
;; Time-stamp: <2018-10-18 14:20:26 JST 10sr>

;;; Code:

@@ -2329,6 +2329,7 @@ TYPE is target object type."
(defun git-walktree--open-treeish (commitish path treeish)
"Open git tree buffer of TREEISH."
(cl-assert path)
(cl-assert treeish)
(let* (point-tree-start
(type (git-walktree--git-plumbing "cat-file"
"-t"
@@ -2338,55 +2339,57 @@ TYPE is target object type."
(cl-assert (member type
'("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))
(with-temp-buffer
(if commitish
;; TODO: Somehow color will be diasbled
;; TODO: branch info after commit sha1 (like (HEAD -> master))
;; not appear
(progn (git-walktree--call-process nil
"-c"
"color.ui=always"
"show"
"--no-patch"
"--color=always"
"--pretty=short"
commitish)
(ansi-color-apply-on-region (point-min)
(point))
(insert "\n")
(insert (format "Contents of '%s:%s':\n"
(git-walktree--commitish-fordisplay commitish)
path)))
(unless (string= treeish
git-walktree-object-id)
(buffer-disable-undo)
;; For running git command go back to repository root
(cd git-walktree-repository-root)
(save-excursion
(let ((inhibit-read-only t))
(with-temp-buffer
(if commitish
;; TODO: Somehow color will be diasbled
;; TODO: branch info after commit sha1 (like (HEAD -> master))
;; not appear
(progn (git-walktree--call-process nil
"-c"
"color.ui=always"
"show"
"--no-patch"
"--color=always"
"--pretty=short"
commitish)
(ansi-color-apply-on-region (point-min)
(point))
(insert "\n")
(insert (format "Contents of '%s:%s':\n"
(git-walktree--commitish-fordisplay commitish)
path)))
(insert (format "Contents of treeish object '%s:\n"
treeish)))
(setq point-tree-start (point))
(git-walktree--call-process nil
"ls-tree"
;; "-r"
"--abbrev"
treeish)
(git-walktree--replace-into buf))))
(git-walktree-mode)
(set-buffer-modified-p nil)
(setq git-walktree-current-commitish commitish)
(setq git-walktree-current-path path)
(setq git-walktree-object-id treeish)
(let ((dir (expand-file-name path git-walktree-repository-root)))
(when (and git-walktree-try-cd
(file-directory-p dir))
(cd dir)))
(when (= (point) (point-min))
(goto-char point-tree-start)
(git-walktree-mode--goto-file)
)
)
(setq point-tree-start (point))
(git-walktree--call-process nil
"ls-tree"
;; "-r"
"--abbrev"
treeish)
(git-walktree--replace-into buf))))
(git-walktree-mode)
(set-buffer-modified-p nil)
(setq git-walktree-current-commitish commitish)
(setq git-walktree-current-path path)
(setq git-walktree-object-id treeish)
(let ((dir (expand-file-name path git-walktree-repository-root)))
(when (and git-walktree-try-cd
(file-directory-p dir))
(cd dir)))
(when (= (point) (point-min))
(goto-char point-tree-start)
(git-walktree-mode--goto-file)
)
))
buf))

(defun git-walktree--call-process (&optional infile &rest args)
@@ -2406,48 +2409,52 @@ Result will be inserted into current buffer."
?w
(defun git-walktree--open-blob (commitish path blob)
"Open BLOB object."
(cl-assert commitish)
(cl-assert path)
(cl-assert blob)
(let* ((type (git-walktree--git-plumbing "cat-file"
"-t"
blob))
(buf (git-walktree--create-buffer commitish path type)))
(cl-assert (string= type "blob"))
(with-current-buffer buf
;; TODO: Do nothing when blob already loaded
;; For running git command go back to repository root
(cd git-walktree-repository-root)
(let ((inhibit-read-only t))
(with-temp-buffer
(git-walktree--call-process nil
"cat-file"
"-p"
blob)
(git-walktree--replace-into buf)))
(setq git-walktree-buffer-file-name
(concat (git-walktree--git-plumbing "rev-parse"
"--show-toplevel")
"/git@"
commitish
":"
path))
(setq buffer-file-name
git-walktree-buffer-file-name)
(normal-mode t)
;; For asking filename when C-xC-s
(setq buffer-file-name nil)
(set-buffer-modified-p t)

(setq git-walktree-current-commitish commitish)
(setq git-walktree-current-path path)
(setq git-walktree-object-id blob)
(let ((dir (expand-file-name (or (file-name-directory path)
".")
git-walktree-repository-root)))
(when (and git-walktree-try-cd
(file-directory-p dir))
(cd dir)))

(view-mode 1)
)
(unless (string= blob
git-walktree-object-id)
;; For running git command go back to repository root
(cd git-walktree-repository-root)
(let ((inhibit-read-only t))
(with-temp-buffer
(git-walktree--call-process nil
"cat-file"
"-p"
blob)
(git-walktree--replace-into buf)))
(setq git-walktree-buffer-file-name
(concat (git-walktree--git-plumbing "rev-parse"
"--show-toplevel")
"/git@"
commitish
":"
path))
(setq buffer-file-name
git-walktree-buffer-file-name)
(normal-mode t)
;; For asking filename when C-xC-s
(setq buffer-file-name nil)
(set-buffer-modified-p t)

(setq git-walktree-current-commitish commitish)
(setq git-walktree-current-path path)
(setq git-walktree-object-id blob)
(let ((dir (expand-file-name (or (file-name-directory path)
".")
git-walktree-repository-root)))
(when (and git-walktree-try-cd
(file-directory-p dir))
(cd dir)))

(view-mode 1)
))
buf))

;; TODO: Store view history
@@ -2457,6 +2464,7 @@ Result will be inserted into current buffer."
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 checking it."
(cl-assert commitish)
(let ((type (git-walktree--git-plumbing "cat-file"
"-t"
commitish)))
@@ -2485,7 +2493,8 @@ without checking it."

(defun git-walktree--resolve-object (commitish path)
"Return object id of COMMITISIH:PATH.
If path is equal to \".\" return COMMITISH's tree object"
If path is equal to \".\" return COMMITISH's tree object
PATH will be always treated as relative to repository root."
;; TODO: use --full-tree
(cl-assert commitish)
(cl-assert path)


Loading…
Cancel
Save