branch: master commit 32911dbc7ba8ec6e1e343f06663150d4e96f6114 Author: Oleh Krehel <ohwoeo...@gmail.com> Commit: Oleh Krehel <ohwoeo...@gmail.com>
Start transition to `read-char' * ace-window.el (aw--callback-body): Move most of `aw-callback' here. (aw--doit): Only pass the char to `aw--callback-body'. (aw--done): Repurpose from `ace-jump-done'. (ace-select-window): Use `read-char' instead of `set-transient-map'. --- ace-window.el | 63 +++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 46 insertions(+), 17 deletions(-) diff --git a/ace-window.el b/ace-window.el index 08ae5dd..9a86b76 100644 --- a/ace-window.el +++ b/ace-window.el @@ -116,16 +116,14 @@ This hook is set to nil with each call to `ace-window'.") (defvar aw--current-op nil "A function of one argument to call.") -(defun aw--callback () - "Call `aw--current-op' for the window selected by ace-jump." - (interactive) - (let* ((index (or (cl-position (aref (this-command-keys) 0) - aw-keys) +(defun aw--callback-body (char) + (let* ((index (or (cl-position char aw-keys) (length aw-keys))) (node (nth index (cdr ace-jump-search-tree)))) (cond ((null node) (message "No such position candidate.") - (ace-jump-done)) + ;; (ace-jump-done) + ) ((eq (car node) 'branch) (let ((old-tree ace-jump-search-tree)) @@ -150,6 +148,29 @@ This hook is set to nil with each call to `ace-window'.") (ace-jump-done) (error "[AceJump] Internal error: tree node type is invalid"))))) +(defun aw--callback () + "Call `aw--current-op' for the window selected by ace-jump." + (interactive) + (aw--callback-body (aref (this-command-keys) 0))) + +(defun aw--done () + (setq ace-jump-query-char nil) + (setq ace-jump-current-mode nil) + + ;; clean the status line + (setq ace-jump-mode nil) + (force-mode-line-update) + + ;; delete background overlay + (loop for ol in ace-jump-background-overlay-list + do (delete-overlay ol)) + (setq ace-jump-background-overlay-list nil) + + ;; delete overlays in search tree + (when ace-jump-search-tree + (ace-jump-delete-overlay-in-search-tree ace-jump-search-tree) + (setq ace-jump-search-tree nil))) + (defun aw--doit (mode-line) "Select a window and eventually call `aw--current-op' for it. Set mode line to MODE-LINE during the selection process." @@ -172,7 +193,8 @@ Set mode line to MODE-LINE during the selection process." (= 0 (buffer-size b)))))) visual-area-list)))) (cl-case (length visual-area-list) - (0) + (0 + (error "Nowhere to switch to")) (1 (if (aw-ignored-p (selected-window)) (other-window 1) @@ -231,17 +253,24 @@ Set mode line to MODE-LINE during the selection process." (force-mode-line-update) ;; turn off helm transient map (remove-hook 'post-command-hook 'helm--maybe-update-keymap) + (unwind-protect + (let ((char (read-char mode-line))) + (aw--callback-body char)) + (aw--done)) + + ;; override the local key map - (let ((map (make-keymap))) - (dolist (key-code aw-keys) - (define-key map (make-string 1 key-code) 'aw--callback)) - (define-key map [t] 'ace-jump-done) - (if (fboundp 'set-transient-map) - (set-transient-map map) - (set-temporary-overlay-map map))) - - (add-hook 'mouse-leave-buffer-hook 'ace-jump-done) - (add-hook 'kbd-macro-termination-hook 'ace-jump-done)))))) + ;; (let ((map (make-keymap))) + ;; (dolist (key-code aw-keys) + ;; (define-key map (make-string 1 key-code) 'aw--callback)) + ;; (define-key map [t] 'ace-jump-done) + ;; (if (fboundp 'set-transient-map) + ;; (set-transient-map map) + ;; (set-temporary-overlay-map map))) + + ;; (add-hook 'mouse-leave-buffer-hook 'ace-jump-done) + ;; (add-hook 'kbd-macro-termination-hook 'ace-jump-done) + ))))) ;; ——— Interactive ————————————————————————————————————————————————————————————— ;;;###autoload