| @@ -1,6 +1,6 @@ | |||||
| ;;; emacs.el --- 10sr emacs initialization | ;;; emacs.el --- 10sr emacs initialization | ||||
| ;; Time-stamp: <2018-10-16 13:22:43 JST 10sr> | |||||
| ;; Time-stamp: <2018-10-16 14:45:32 JST 10sr> | |||||
| ;;; Code: | ;;; Code: | ||||
| @@ -2552,11 +2552,14 @@ Returns property list like (:mode MODE :type TYPE :object OBJECT :file FILE)." | |||||
| (interactive) | (interactive) | ||||
| (let ((info (git-walktree--parse-lstree-line (buffer-substring-no-properties (point-at-bol) | (let ((info (git-walktree--parse-lstree-line (buffer-substring-no-properties (point-at-bol) | ||||
| (point-at-eol))))) | (point-at-eol))))) | ||||
| ;; TODO: Open commitish when currently on commitish like symbol | |||||
| (if info | (if info | ||||
| (switch-to-buffer | (switch-to-buffer | ||||
| (if (string= (plist-get info | (if (string= (plist-get info | ||||
| :type) | :type) | ||||
| "commit") | "commit") | ||||
| ;; For submodule cd to that directory and intialize | |||||
| ;; TODO: Provide way to go back to known "parent" repository | |||||
| (with-temp-buffer | (with-temp-buffer | ||||
| (cd (plist-get info :file)) | (cd (plist-get info :file)) | ||||
| (git-walktree--open-noselect (plist-get info | (git-walktree--open-noselect (plist-get info | ||||
| @@ -2646,13 +2649,49 @@ This function do nothing when current line is not ls-tree output." | |||||
| (defvar git-walktree-tree-face 'git-walktree-tree-face | (defvar git-walktree-tree-face 'git-walktree-tree-face | ||||
| "Face used for tree objects.") | "Face used for tree objects.") | ||||
| (defvar git-walktree-known-child-revisions '() | |||||
| "List of already known child reivions of currnet buffer in string format.") | |||||
| (make-variable-buffer-local 'git-walktree-known-child-revisions) | |||||
| (defun git-walktree-parent-revision () | |||||
| "Open parent revision of current path. | |||||
| If given path is not found in the parent revision try to go up path." | |||||
| (interactive)) | |||||
| (defun git-walktree--is-a-merge-commit (commitish) | |||||
| "Return non-nil if COMMITISH is a merge commit." | |||||
| (let ((type (git-walktree--git-plumbing "cat-file" | |||||
| "-t" | |||||
| commitish))) | |||||
| (cl-assert (string= type "commit"))) | |||||
| (with-temp-buffer | |||||
| (let ((status (call-process git-walktree-git-executable | |||||
| nil | |||||
| t | |||||
| nil | |||||
| "cat-file" | |||||
| "-p" | |||||
| commitish))) | |||||
| (unless (eq 0 | |||||
| status) | |||||
| (error "Faild to run git %S:\n%s" | |||||
| (list "cat-file" "-p" commitish) | |||||
| (buffer-substring-no-properties (point-min) | |||||
| (point-max)))) | |||||
| (goto-char (point-min)) | |||||
| (save-match-data | |||||
| (> (count-matches "^parent") 1))))) | |||||
| ;; (git-walktree--is-a-merge-commit "ae4b80f") | |||||
| (defvar git-walktree-mode-map | (defvar git-walktree-mode-map | ||||
| (let ((map (make-sparse-keymap))) | (let ((map (make-sparse-keymap))) | ||||
| ;; TODO: Add git-walktree-parent-revision | |||||
| (define-key map "n" 'git-walktree-mode-next-line) | (define-key map "n" 'git-walktree-mode-next-line) | ||||
| (define-key map "p" 'git-walktree-mode-previous-line) | (define-key map "p" 'git-walktree-mode-previous-line) | ||||
| (define-key map (kbd "C-n") 'git-walktree-mode-next-line) | (define-key map (kbd "C-n") 'git-walktree-mode-next-line) | ||||
| (define-key map (kbd "C-p") 'git-walktree-mode-previous-line) | (define-key map (kbd "C-p") 'git-walktree-mode-previous-line) | ||||
| ;; TODO: Review keybind | |||||
| (define-key map "N" 'git-walktree-parent-revision) | |||||
| (define-key map "P" 'git-walktree-known-child-revision) | |||||
| (define-key map "^" 'git-walktree-up) | (define-key map "^" 'git-walktree-up) | ||||
| (define-key map (kbd "C-m") 'git-walktree-mode-open-this) | (define-key map (kbd "C-m") 'git-walktree-mode-open-this) | ||||
| map)) | map)) | ||||