branch: elpa/sesman commit 163984c60e8b5abf41e8f90894af08187647663b Author: Vitalie Spinu <spinu...@gmail.com> Commit: Vitalie Spinu <spinu...@gmail.com>
Better handling of overlays and sensor --- sesman-browser.el | 52 +++++++++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/sesman-browser.el b/sesman-browser.el index d8b3f868c7..6c873eba02 100644 --- a/sesman-browser.el +++ b/sesman-browser.el @@ -299,6 +299,17 @@ If NO-SWITCH is non-nil, only display the buffer." (sesman-browser-revert)))) (buffer-list))) +(defun sesman-browser--goto-stop (stop-value) + (let ((search t)) + (goto-char (point-min)) + (while search + (goto-char (next-single-char-property-change (point) :sesman-stop)) + (if (eobp) + (progn (setq search nil) + (goto-char (next-single-char-property-change (point-min) :sesman-stop))) + (when (equal (get-text-property (point) :sesman-stop) stop-value) + (setq search nil)))))) + (defun sesman-browser-toggle-sort () "Toggle sorting of sessions. See `sesman-browser-sort-type' for the default sorting type." @@ -311,15 +322,8 @@ See `sesman-browser-sort-type' for the default sorting type." (setq sesman-browser-sort-type (pop sesman-browser--sort-types)) (let ((stop (sesman-browser-get :sesman-stop nil 'lax))) (sesman-browser) - (goto-char (point-min)) - (let ((search t)) - (while search - (goto-char (next-single-char-property-change (point) :sesman-stop)) - (if (eobp) - (progn (setq search nil) - (goto-char (next-single-char-property-change (point-min) :sesman-stop))) - (when (equal (get-text-property (point) :sesman-stop) stop) - (setq search nil)))))) + (sesman-browser--goto-stop stop) + (sesman-browser--sensor-function)) (message "Sorted by %s" (propertize (symbol-name sesman-browser-sort-type) 'face 'bold))) @@ -327,7 +331,16 @@ See `sesman-browser-sort-type' for the default sorting type." "Interactive view of Sesman sessions." ;; ensure there is a sesman-system here (sesman--system) + (delete-all-overlays) + (setq-local sesman-browser--stop-overlay (make-overlay (point) (point))) + (overlay-put sesman-browser--stop-overlay 'face 'sesman-browser-highligh) + (setq-local sesman-browser--section-overlay (make-overlay (point) (point))) + (when window-system + (let* ((fringe-spec '(left-fringe sesman-left-bar sesman-browser-highligh)) + (dummy-string (propertize "|" 'display fringe-spec))) + (overlay-put sesman-browser--section-overlay 'line-prefix dummy-string))) (add-hook 'sesman-post-command-hook 'sesman-browser-revert nil t) + (setq-local display-buffer-base-action '(nil . ((inhibit-same-window . t)))) (setq-local sesman-browser--sort-types (default-value 'sesman-browser--sort-types)) (setq-local revert-buffer-function #'sesman-browser-revert)) @@ -411,9 +424,11 @@ See `sesman-browser-sort-type' for the default sorting type." "Display an interactive session browser." (interactive) (let* ((system (sesman--system)) + (pop-to (called-interactively-p 'any)) (sessions (sesman-sessions system)) - (buff (get-buffer-create (format "*sesman %s browser*" system))) - (pop-to (called-interactively-p 'any))) + (cur-session (when pop-to + (sesman-current-session 'CIDER))) + (buff (get-buffer-create (format "*sesman %s browser*" system)))) (with-current-buffer buff (setq-local sesman-system system) (sesman-browser-mode) @@ -431,18 +446,9 @@ See `sesman-browser-sort-type' for the default sorting type." (setq i (1+ i)) (sesman-browser--insert-session system ses i)) (when pop-to - (pop-to-buffer buff)) - (let ((dummy-string (ess-tracebug--propertize "|" 'sesman-left-bar - 'font-lock-keyword-face))) - (goto-char (next-single-property-change (point-min) :sesman-stop)) - (setq-local sesman-browser--stop-overlay - (make-overlay (point) (next-single-property-change (point) :sesman-stop))) - (overlay-put sesman-browser--stop-overlay 'face 'sesman-browser-highligh) - (when window-system - (setq-local sesman-browser--section-overlay - (make-overlay (get-text-property (point) :sesman-fragment-beg) - (get-text-property (point) :sesman-fragment-end))) - (overlay-put sesman-browser--section-overlay 'line-prefix dummy-string))))))) + (pop-to-buffer buff) + (sesman-browser--goto-stop (car cur-session))) + (sesman-browser--sensor-function))))) (provide 'sesman-browser)