branch: master
commit 12a34dfc3e47894679265b64a507ae18140df72c
Author: Oleh Krehel <[email protected]>
Commit: Oleh Krehel <[email protected]>
ace-window.el (aw-generic): improve for hscroll
This is a minor fix to #11.
The issue is fixed for when the first visible character in window
is actually a character and not empty space.
The other situation still needs to be solved.
---
ace-window.el | 117 +++++++++++++++++++++++++++++----------------------------
1 files changed, 59 insertions(+), 58 deletions(-)
diff --git a/ace-window.el b/ace-window.el
index 1fac65c..26f7d51 100644
--- a/ace-window.el
+++ b/ace-window.el
@@ -93,7 +93,7 @@ HANDLER is a function that takes a window argument."
(if w
(,handler w)
(let* ((index (let ((ret (cl-position (aref (this-command-keys) 0)
- aw-keys)))
+ aw-keys)))
(if ret ret (length aw-keys))))
(node (nth index (cdr ace-jump-search-tree))))
(cond
@@ -129,63 +129,64 @@ HANDLER is a function that takes a window argument."
(ace-jump-done)
(error "[AceJump] Internal error: tree node type is
invalid"))))))
(lambda ()
- (interactive)
- (let* ((ace-jump-mode-scope aw-scope)
- (next-window-scope
- (cl-case aw-scope
- ('global 'visible)
- ('frame 'frame)))
- (visual-area-list
- (sort (aw-list-visual-area)
- 'aw-visual-area<)))
- (cl-case (length visual-area-list)
- (0)
- (1)
- (2
- (,handler (next-window nil nil next-window-scope)))
- (t
- (let ((candidate-list
- (mapcar (lambda (va)
- (let ((b (aj-visual-area-buffer va)))
- ;; ace-jump-mode can't jump if the buffer is
empty
- (when (= 0 (buffer-size b))
- (with-current-buffer b
- (insert " "))))
- (make-aj-position
- :offset (window-start (aj-visual-area-window va))
- :visual-area va))
- visual-area-list)))
- ;; create background for each visual area
- (if ace-jump-mode-gray-background
- (setq ace-jump-background-overlay-list
- (loop for va in visual-area-list
- collect (let* ((w (aj-visual-area-window va))
- (b (aj-visual-area-buffer va))
- (ol (make-overlay (window-start w)
- (window-end w)
- b)))
- (overlay-put ol 'face
'ace-jump-face-background)
- ol))))
- ;; construct search tree and populate overlay into tree
- (setq ace-jump-search-tree
- (ace-jump-tree-breadth-first-construct
- (length candidate-list)
- (length aw-keys)))
- (ace-jump-populate-overlay-to-search-tree
- ace-jump-search-tree candidate-list)
- (ace-jump-update-overlay-in-search-tree
- ace-jump-search-tree aw-keys)
- (setq ace-jump-mode ,mode-line)
- (force-mode-line-update)
- ;; override the local key map
- (setq overriding-local-map
- (let ((map (make-keymap)))
- (dolist (key-code aw-keys)
- (define-key map (make-string 1 key-code) ',wrapper))
- (define-key map [t] 'ace-jump-done)
- map))
- (add-hook 'mouse-leave-buffer-hook 'ace-jump-done)
- (add-hook 'kbd-macro-termination-hook 'ace-jump-done)))))))))
+ (interactive)
+ (let* ((ace-jump-mode-scope aw-scope)
+ (next-window-scope
+ (cl-case aw-scope
+ ('global 'visible)
+ ('frame 'frame)))
+ (visual-area-list
+ (sort (aw-list-visual-area)
+ 'aw-visual-area<)))
+ (cl-case (length visual-area-list)
+ (0)
+ (1)
+ (2
+ (,handler (next-window nil nil next-window-scope)))
+ (t
+ (let ((candidate-list
+ (mapcar (lambda (va)
+ (let ((b (aj-visual-area-buffer va)))
+ ;; ace-jump-mode can't jump if the buffer is
empty
+ (when (= 0 (buffer-size b))
+ (with-current-buffer b
+ (insert " "))))
+ (make-aj-position
+ :offset (+ (window-start
(aj-visual-area-window va))
+ (window-hscroll
(aj-visual-area-window va)))
+ :visual-area va))
+ visual-area-list)))
+ ;; create background for each visual area
+ (if ace-jump-mode-gray-background
+ (setq ace-jump-background-overlay-list
+ (loop for va in visual-area-list
+ collect (let* ((w (aj-visual-area-window va))
+ (b (aj-visual-area-buffer va))
+ (ol (make-overlay (window-start w)
+ (window-end w)
+ b)))
+ (overlay-put ol 'face
'ace-jump-face-background)
+ ol))))
+ ;; construct search tree and populate overlay into tree
+ (setq ace-jump-search-tree
+ (ace-jump-tree-breadth-first-construct
+ (length candidate-list)
+ (length aw-keys)))
+ (ace-jump-populate-overlay-to-search-tree
+ ace-jump-search-tree candidate-list)
+ (ace-jump-update-overlay-in-search-tree
+ ace-jump-search-tree aw-keys)
+ (setq ace-jump-mode ,mode-line)
+ (force-mode-line-update)
+ ;; override the local key map
+ (setq overriding-local-map
+ (let ((map (make-keymap)))
+ (dolist (key-code aw-keys)
+ (define-key map (make-string 1 key-code) ',wrapper))
+ (define-key map [t] 'ace-jump-done)
+ map))
+ (add-hook 'mouse-leave-buffer-hook 'ace-jump-done)
+ (add-hook 'kbd-macro-termination-hook 'ace-jump-done)))))))))
;; ——— Interactive
—————————————————————————————————————————————————————————————
;;;###autoload