| @@ -1,6 +1,6 @@ | |||||
| ;;; emacs.el --- 10sr emacs initialization | ;;; emacs.el --- 10sr emacs initialization | ||||
| ;; Time-stamp: <2018-10-11 18:29:21 JST 10sr> | |||||
| ;; Time-stamp: <2018-10-11 19:24:33 JST 10sr> | |||||
| ;;; Code: | ;;; Code: | ||||
| @@ -2250,12 +2250,15 @@ use for the buffer. It defaults to \"*recetf-show*\"." | |||||
| "Create and return buffer for TREEISH." | "Create and return buffer for TREEISH." | ||||
| (get-buffer-create "*GitRevision<TMP>*")) | (get-buffer-create "*GitRevision<TMP>*")) | ||||
| (defun git-revision--open-tree (treeish) | |||||
| (defun git-revision--open-treeish (treeish &optional name) | |||||
| "Open git tree buffer of TREEISH." | "Open git tree buffer of TREEISH." | ||||
| (let ((buf (git-revision--create-buffer treeish)) | |||||
| (let (point | |||||
| (buf (git-revision--create-buffer (or name treeish))) | |||||
| (type (git-revision--git-plumbing "cat-file" | (type (git-revision--git-plumbing "cat-file" | ||||
| "-t" | "-t" | ||||
| treeish))) | treeish))) | ||||
| (cl-assert (member type | |||||
| '("commit" "tree"))) | |||||
| (with-current-buffer buf | (with-current-buffer buf | ||||
| (buffer-disable-undo) | (buffer-disable-undo) | ||||
| (erase-buffer) | (erase-buffer) | ||||
| @@ -2268,11 +2271,13 @@ use for the buffer. It defaults to \"*recetf-show*\"." | |||||
| "--pretty=short" | "--pretty=short" | ||||
| treeish) | treeish) | ||||
| (insert "\n")) | (insert "\n")) | ||||
| (setq point (point)) | |||||
| (git-revision--call-process nil | (git-revision--call-process nil | ||||
| "ls-tree" | "ls-tree" | ||||
| "-r" | "-r" | ||||
| "--abbrev" | "--abbrev" | ||||
| treeish) | treeish) | ||||
| (goto-char point) | |||||
| (git-revision-mode)) | (git-revision-mode)) | ||||
| buf)) | buf)) | ||||
| @@ -2291,10 +2296,38 @@ Result will be inserted into current buffer." | |||||
| infile | infile | ||||
| args)))) | args)))) | ||||
| (defun git-revision--open-blob (blob &optional name) | |||||
| "Open blob OBJECT which has NAME." | |||||
| (let ((type (git-revision--git-plumbing "cat-file" | |||||
| "-t" | |||||
| blob)) | |||||
| (buf (git-revision--create-buffer (or name blob)))) | |||||
| (cl-assert (string= type "blob")) | |||||
| (with-current-buffer buf | |||||
| (erase-buffer) | |||||
| (git-revision--call-process nil | |||||
| "cat-file" | |||||
| "-p" | |||||
| blob)) | |||||
| buf)) | |||||
| (defun git-revision--open (object &optional name) | |||||
| "Open object OBJECT which has NAME." | |||||
| (let ((type (git-revision--git-plumbing "cat-file" | |||||
| "-t" | |||||
| object))) | |||||
| (pcase type | |||||
| ((or "commit" "tree") | |||||
| (git-revision--open-treeish object name)) | |||||
| ("blob" | |||||
| (git-revision--open-blob object name)) | |||||
| (_ | |||||
| (error "Type cannot handle: %s" type))))) | |||||
| (defun git-revision-open (commitish) | (defun git-revision-open (commitish) | ||||
| "Open git tree buffer of COMMITISH." | "Open git tree buffer of COMMITISH." | ||||
| (interactive (list (magit-read-branch-or-commit "Revision: "))) | (interactive (list (magit-read-branch-or-commit "Revision: "))) | ||||
| (pop-to-buffer (git-revision--open-tree commitish))) | |||||
| (pop-to-buffer (git-revision--open commitish commitish))) | |||||
| (defcustom git-revision-git-executable "git" | (defcustom git-revision-git-executable "git" | ||||
| "Git executable." | "Git executable." | ||||
| @@ -2350,7 +2383,12 @@ Returns property list like (:mode MODE :type TYPE :object OBJECT :file FILE)." | |||||
| (interactive) | (interactive) | ||||
| (let ((info (git-revision--extract-object-info (buffer-substring-no-properties (point-at-bol) | (let ((info (git-revision--extract-object-info (buffer-substring-no-properties (point-at-bol) | ||||
| (point-at-eol))))) | (point-at-eol))))) | ||||
| (message "%S" info))) | |||||
| (if info | |||||
| (switch-to-buffer (git-revision--open (plist-get info | |||||
| :object) | |||||
| (plist-get info | |||||
| :file))) | |||||
| (message "No object on current line.")))) | |||||
| (defvar git-revision-mode-map | (defvar git-revision-mode-map | ||||
| (let ((map (make-sparse-keymap))) | (let ((map (make-sparse-keymap))) | ||||
| @@ -2363,7 +2401,7 @@ Returns property list like (:mode MODE :type TYPE :object OBJECT :file FILE)." | |||||
| "Major-mode for `git-revision-open'.") | "Major-mode for `git-revision-open'.") | ||||
| (require 'magit nil t) | (require 'magit nil t) | ||||
| (git-revision--git-plumbing "cat-file" "-t" "HEAD") | |||||
| ;; (git-revision--git-plumbing "cat-file" "-t" "HEAD") | |||||
| ;; Local Variables: | ;; Local Variables: | ||||