| @@ -1,6 +1,6 @@ | |||
| ;;; emacs.el --- 10sr emacs initialization | |||
| ;; Time-stamp: <2018-10-16 22:45:19 JST 10sr> | |||
| ;; Time-stamp: <2018-10-16 23:14:49 JST 10sr> | |||
| ;;; Code: | |||
| @@ -2653,7 +2653,11 @@ This function do nothing when current line is not ls-tree output." | |||
| (defvar git-walktree-known-child-revisions '() | |||
| "List of already known child reivions of currnet buffer in sha1 string.") | |||
| (make-variable-buffer-local 'git-walktree-known-child-revisions) | |||
| (put 'git-walktree-known-child-revisions | |||
| 'permanent-local | |||
| t) | |||
| ;; Delete this function | |||
| (defun git-walktree--parent-revision-1 (revision) | |||
| "Open parent revision REVISION. | |||
| @@ -2681,14 +2685,19 @@ This function does the following things: | |||
| child-revision)))) | |||
| (defun git-walktree--completing-read-commitish (prompt-format collection) | |||
| "Emit PROMPT and get commitish from COLLECTION from user input." | |||
| (completing-read (format prompt-format | |||
| (mapconcat 'git-walktree--commitish-fordisplay | |||
| collection | |||
| " ")) | |||
| collection | |||
| nil | |||
| t)) | |||
| "Emit PROMPT-FORMAT and ask user to which commitish of COLLECTION to use. | |||
| When collection has just one element, return without asking." | |||
| (cl-assert collection) | |||
| (if (< (length collection) 2) | |||
| (car collection) | |||
| ;; TODO: empty to use car collection | |||
| (completing-read (format prompt-format | |||
| (mapconcat 'git-walktree--commitish-fordisplay | |||
| collection | |||
| " ")) | |||
| collection | |||
| nil | |||
| t))) | |||
| (defun git-walktree-parent-revision () | |||
| "Open parent revision of current path. | |||
| @@ -2696,11 +2705,10 @@ If current path was not found in the parent revision try to go up path." | |||
| (interactive) | |||
| (if git-walktree-current-commitish | |||
| (let ((parents (git-walktree--parent-sha1 git-walktree-current-commitish))) | |||
| ;; TODO: Use if | |||
| (cl-case (length parents) | |||
| (0 | |||
| (message "This revision has no parent revision")) | |||
| (1 | |||
| (git-walktree--parent-revision-1 (car parents))) | |||
| (t | |||
| (let ((parent (git-walktree--completing-read-commitish "This revision has multiple parents. Which to open? (%s) " | |||
| parents))) | |||
| @@ -2729,7 +2737,23 @@ If current path was not found in the parent revision try to go up path." | |||
| (defun git-walktree-known-child-revision () | |||
| "Open known revision of current path." | |||
| (interactive) | |||
| (message "%S" git-walktree-known-child-revisions)) | |||
| (message "%S" git-walktree-known-child-revisions) | |||
| (if (< (length git-walktree-known-child-revisions) | |||
| 1) | |||
| (message "There are no known child revision") | |||
| (let* ((child (git-walktree--completing-read-commitish "There are multiple known childrens. Which to open? (%s)" | |||
| git-walktree-known-child-revisions)) | |||
| (path git-walktree-current-path) | |||
| (obj (git-walktree--resolve-object child path))) | |||
| (cl-assert path) | |||
| (while (not obj) | |||
| (setq path | |||
| (git-walktree--parent-directory path)) | |||
| (setq obj | |||
| (git-walktree--resolve-object child path))) | |||
| (switch-to-buffer (git-walktree--open-noselect child | |||
| path | |||
| obj))))) | |||
| (defvar git-walktree-mode-map | |||
| (let ((map (make-sparse-keymap))) | |||