Subject: bug#37667: 27.0.50; Tab Bar display problems with more than 5 tabs

From: Juri Linkov <[email-masked]>
Date: Mon, 21 Oct 2019 01:28:52 +0300

>> It seems before implementing this, first we need to decide
>> what UI we could provide.  This decision affects a set of commands
>> that needs to be implemented for tab-line hscrolling.
>>
>> One variant is to allow dragging the tab-line by mouse where
>> dragging to the left will scroll the tab-line to the left.
>> But actually no web browser implements this behavior, they use
>> dragging to move a tab to other place.
>>
>> So maybe better to have two arrow buttons: clicking on the left arrow
>> will hscroll to the left.
>
> Agreed.  As we already have fringe bitmaps to show truncation both on
> the left and on the right, arranging for them to be displayed for
> tab-lines will allow us to bind clicking on these to scrolling
> commands.

Trying to click on truncation arrows in fringe bitmaps of buffers signals:

  <right-fringe> <mouse-1> is undefined

So we need to bind <mouse-1> to a tab-line scrolling command
for [tab-line right-fringe] keymap?

Or maybe the tab-line could be dragged like dragging the
horizontal scroll bar in horizontal-scroll-bar-mode?

Or mouse-wheel could scroll the whole tab-line horizontally
instead of switching tabs like it does now?

>> Then we need two commands implemented in C: 'tab-line-scroll-left'
>> and 'tab-line-scroll-right'.  And later to add some keys like
>> 'C-x >' bound to 'scroll-left'.
>>
>> These commands could work for the tab-line like hscrolling
>> in the buffer works when 'auto-hscroll-mode' is 'current-line'.
>
> There's an important difference, I think: you want to scroll the
> tab-line in tab-button granularity, not one character at a time.  But
> the principle and the main idea is the same, yes.

I thought that granularity should be wider: scrolling by the window width,
like 'C-x >' ('scroll-right') does, where default is window width minus 2.
But maybe tab-button granularity is fine.  The only problem is that
I still studying the code to understand where to begin.  Could you suggest
in what function to implement all this scrolling?