diff --git a/lisp/tab-line.el b/lisp/tab-line.el index af0647acf7..5eae2eb7c4 100644 --- a/lisp/tab-line.el +++ b/lisp/tab-line.el @@ -636,7 +638,10 @@ tab-line-auto-hscroll (not (integerp hscroll))) (let ((selected (seq-position strings 'selected (lambda (str prop) - (get-pos-property 1 prop str))))) + (or (get-pos-property 0 prop str) + (and (next-single-property-change 0 prop str) + (get-pos-property (next-single-property-change 0 prop str) + prop str))))))) (cond ((null selected) ;; Do nothing if no tab is selected @@ -656,7 +661,11 @@ tab-line-auto-hscroll (new-hscroll (when tab-prop (seq-position strings tab-prop (lambda (str tab) - (eq (get-pos-property 1 'tab str) tab)))))) + (eq (or (get-pos-property 0 'tab str) + (and (next-single-property-change 0 'tab str) + (get-pos-property (next-single-property-change 0 'tab str) + 'tab str))) + tab)))))) (when new-hscroll (setq hscroll (float new-hscroll)) (set-window-parameter nil 'tab-line-hscroll hscroll))) @@ -683,7 +692,11 @@ tab-line-auto-hscroll (new-hscroll (when tab-prop (seq-position strings tab-prop (lambda (str tab) - (eq (get-pos-property 1 'tab str) tab)))))) + (eq (or (get-pos-property 0 'tab str) + (and (next-single-property-change 0 'tab str) + (get-pos-property (next-single-property-change 0 'tab str) + 'tab str))) + tab)))))) (when new-hscroll (setq hscroll (float new-hscroll)) (set-window-parameter nil 'tab-line-hscroll hscroll))))))))) @@ -742,7 +755,10 @@ tab-line-select-tab using the `previous-buffer' command." (interactive "e") (let* ((posnp (event-start event)) - (tab (get-pos-property 1 'tab (car (posn-string posnp)))) + (tab (or (get-pos-property 0 'tab (car (posn-string posnp))) + (and (next-single-property-change 0 'tab (car (posn-string posnp))) + (get-pos-property (next-single-property-change 0 'tab (car (posn-string posnp))) + 'tab (car (posn-string posnp)))))) (buffer (if (bufferp tab) tab (cdr (assq 'buffer tab))))) (if buffer (tab-line-select-tab-buffer buffer (posn-window posnp)) @@ -858,7 +874,10 @@ tab-line-close-tab (interactive (list last-nonmenu-event)) (let* ((posnp (and (listp event) (event-start event))) (window (and posnp (posn-window posnp))) - (tab (get-pos-property 1 'tab (car (posn-string posnp)))) + (tab (or (get-pos-property 0 'tab (car (posn-string posnp))) + (and (next-single-property-change 0 'tab (car (posn-string posnp))) + (get-pos-property (next-single-property-change 0 'tab (car (posn-string posnp))) + 'tab (car (posn-string posnp)))))) (buffer (if (bufferp tab) tab (cdr (assq 'buffer tab)))) (close-function (unless (bufferp tab) (cdr (assq 'close tab))))) (with-selected-window (or window (selected-window))