Commit Graph

171 Commits

Author SHA1 Message Date
Juri Linkov
7385a7667f * lisp/tab-bar.el (tab-bar-move-repeat-map): Fix alias binding of tab-move.
(tab-bar-move-tab-backward): Put 'repeat-map' symbol property.
2021-10-24 22:22:16 +03:00
Eli Zaretskii
2b7655ca0e ; More accurate doc string for 'tab-bar-format'
* lisp/tab-bar.el (tab-bar-format): Make the doc string more
accurate.  (Bug#51247)
2021-10-21 21:09:03 +03:00
Juri Linkov
06fe499614 * lisp/tab-bar.el (tab-bar-menu-bar): New command (bug#51247).
(tab-bar-format): Rename option 'tab-bar-format-menu-global' to
'tab-bar-format-menu-bar'.
(tab-bar-format-menu-bar): Rename from 'tab-bar-format-menu-global'.
2021-10-20 19:50:29 +03:00
Juri Linkov
5a3242301d Rename tab-bar-drag-maybe to tab-bar--dragging-in-progress
* lisp/tab-bar.el (tab-bar--event-to-item, tab-bar-mouse-down-1)
(tab-bar-mouse-move-tab): Rename tab-bar-drag-maybe to
tab-bar--dragging-in-progress.

* src/xdisp.c (note_mouse_highlight): Rename tab_bar_drag_maybe to
tab_bar__dragging_in_progress.
2021-10-18 19:52:29 +03:00
Eli Zaretskii
c163fd9260 Minor fixes for recent changes in ELisp manual
* doc/lispref/windows.texi (Basic Windows, Windows and Frames)
(Selecting Windows):
* doc/lispref/objects.texi (Window Type):
* doc/lispref/frames.texi (Input Focus, Frame Layout): Fix
wording, punctuation, and indexing.
2021-10-18 17:13:18 +03:00
Juri Linkov
ce71446585 * lisp/tab-bar.el: Improve docstrings (bug#51247)
* lisp/tab-bar.el (tab-bar--key-to-number)
(tab-bar--event-to-item, tab-bar--format-tab-group)
(tab-bar--current-tab-make): Improve docstrings.
(switch-to-buffer-other-tab): Obsolete the arg NORECORD.
2021-10-17 21:28:54 +03:00
Juri Linkov
ace4ce16a3 * lisp/tab-bar.el (tab-bar-mouse-move-tab): Don't drag tab to itself. 2021-10-17 21:03:27 +03:00
Martin Rudalics
04716ca48f Add tab-bar-drag-maybe for indication of tab dragging (bug#50993)
* lisp/tab-bar.el (tab-bar--event-to-item)
(tab-bar-mouse-move-tab): Set tab-bar-drag-maybe to nil.
(tab-bar-mouse-down-1): Set tab-bar-drag-maybe to t.

* src/xdisp.c (note_mouse_highlight): Set cursor to 'hand_cursor'
when tab_bar_drag_maybe is true.
(syms_of_xdisp): New variable tab-bar-drag-maybe.
2021-10-17 20:48:45 +03:00
Juri Linkov
81e3697600 * lisp/tab-bar.el: Add a new tab on [mouse-1] instead of [down-mouse-1]
* lisp/tab-bar.el (tab-bar-mouse-down-1): Rename from
tab-bar-mouse-select-tab.  Ignore 'add-tab'.
(tab-bar-mouse-1): Rename from tab-bar-mouse-close-tab-from-button.
Use binding of 'add-tab'.
(tab-bar-map): Rebind [down-mouse-1] from tab-bar-mouse-select-tab to
tab-bar-mouse-down-1, and [mouse-1] from tab-bar-mouse-close-tab-from-button
to tab-bar-mouse-1 (bug#51246).
2021-10-17 20:27:16 +03:00
Juri Linkov
a191d3c725 Add new and fix existing docstrings in tab-bar.el and tab-line.el (bug#51247)
* lisp/tab-bar.el (tab-bar--key-to-number)
(tab-bar--event-to-item, tab-bar--format-tab)
(tab-bar--format-tab-group, tab-bar--tab, tab-bar--current-tab)
(tab-bar--current-tab-make): Add/fix docstrings.
2021-10-17 20:09:29 +03:00
Eli Zaretskii
686a03ee22 More documentation fixes in tab-bar.el
* lisp/tab-bar.el (tab-bar-detach-tab, tab-bar-move-window-to-tab)
(tab-bar-new-tab-to, tab-bar-new-tab, tab-bar-close-tab-select)
(tab-bar-close-last-tab-choice, tab-bar-tab-pre-close-functions)
(tab-bar-close-tab, tab-bar-close-tab-by-name)
(tab-bar-close-other-tabs, tab-bar-rename-tab)
(tab-bar-rename-tab-by-name, tab-bar-move-tab-to-group)
(tab-bar-change-tab-group, tab-bar-close-group-tabs)
(tab-switcher-next-line, tab-switcher-prev-line)
(tab-switcher-unmark, tab-switcher-delete, tab-switcher-select)
(tab-bar-get-buffer-tab, display-buffer-in-tab)
(display-buffer-in-new-tab, switch-to-buffer-other-tab)
(find-file-other-tab, find-file-read-only-other-tab): Doc fixes.
2021-10-17 11:42:23 +03:00
Eli Zaretskii
35920791df Improve doc strings of tab-bar commands
* lisp/tab-bar.el (tab-bar-mouse-select-tab)
(tab-bar-mouse-move-tab, tab-bar-mouse-close-tab-from-button)
(tab-bar-mouse-close-tab, tab-bar-mouse-context-menu)
(tab-bar-switch-to-next-tab, tab-bar-switch-to-prev-tab)
(tab-bar-switch-to-last-tab, tab-bar-switch-to-recent-tab)
(tab-bar-move-tab-backward, tab-bar-move-tab)
(tab-bar-move-tab-to-frame): Add/fix doc strings.
2021-10-17 10:33:34 +03:00
Juri Linkov
bb8ef1aa30 * lisp/tab-bar.el (tab-detach, tab-window-detach): New aliases.
(tab-bar-mouse-context-menu, tab-bar-duplicate-tab):
Use word "clone" in help/doc string.
2021-10-07 21:01:04 +03:00
Juri Linkov
f7e6c199bf Clone the frame window configuration in 'clone-frame'
* doc/emacs/frames.texi (Creating Frames): Mention the cloned
window configuration for clone-frame.

* lisp/frame.el (clone-frame): Change second arg to 'no-windows'
and clone window configuration when it's nil.

* lisp/tab-bar.el (tab-bar-mouse-context-menu)
(tab-bar-detach-tab): Replace "Detach" with "Move" in help/doc strings.

https://lists.gnu.org/archive/html/emacs-devel/2021-10/msg00408.html
2021-10-06 19:38:09 +03:00
Juri Linkov
0c341e6e84 * lisp/tab-bar.el (tab-bar-detach-tab): Handle frame selected by make-frame.
(tab-bar-move-window-to-tab): New command.
(tab-bar-new-tab-to): Handle the value 'window' of tab-bar-new-tab-choice.
https://lists.gnu.org/archive/html/emacs-devel/2021-09/msg02197.html
2021-10-03 20:16:32 +03:00
Juri Linkov
fd244c9e46 * lisp/tab-bar.el (tab-bar-move-tab-to-frame): Delete frame with last tab. 2021-09-29 22:40:20 +03:00
Adam Porter
ab1e11fe79 * lisp/tab-bar.el: (tab-bar-detach-tab) New command
(tab-bar-detach-tab): New command.
(tab-bar-mouse-context-menu): Add menu entry.

With thanks to Matt Beshara <m@mfa.pw> for his feedback.
https://lists.gnu.org/archive/html/emacs-devel/2021-09/msg02141.html
2021-09-29 22:37:38 +03:00
Stefan Kangas
c78e16962e ; Adjust overly long docstrings to fit 80 characters 2021-09-26 13:23:57 +02:00
Juri Linkov
a1a63bb794 * lisp/tab-bar.el (tab-bar-new-tab-to): Use ignore-window-parameters.
Suggested by Adam Porter <adam@alphapapa.net> in
https://lists.gnu.org/archive/html/emacs-devel/2021-09/msg01758.html
2021-09-25 22:24:48 +03:00
Juri Linkov
b539512762 * lisp/tab-bar.el: Preserve all existing tab parameters when switching tabs.
* lisp/tab-bar.el (tab-bar--tab, tab-bar--current-tab-make):
Copy other possible tab parameters.
https://lists.gnu.org/archive/html/emacs-devel/2021-09/msg01544.html
2021-09-21 20:46:14 +03:00
Juri Linkov
9e9db94423 * lisp/tab-bar.el (tab-bar-new-tab): Add optional arg 'from-number'.
(tab-bar-mouse-context-menu): Use tab-number as an arg for
'tab-bar-duplicate-tab'.
(tab-bar-duplicate-tab): Add optional arg 'from-number'.
2021-09-20 10:20:32 +03:00
Stefan Kangas
63f419f133 ; Minor stylistic fixes found by checkdoc 2021-09-16 19:37:07 +02:00
Juri Linkov
6d65d50f71 * lisp/tab-bar.el (tab-bar-format): Add new option tab-bar-format-menu-global
(tab-bar-format-menu-global): New function.
2021-09-15 19:03:13 +03:00
Juri Linkov
b172049717 * lisp/tab-bar.el (tab-bar-close-other-tabs): Add arg ‘tab-number’.
(tab-bar-mouse-context-menu): Bind menu-item "Close other tabs" to
tab-bar-close-other-tabs with arg ‘tab-number’.
2021-09-15 09:30:11 +03:00
Juri Linkov
cc52f6d995 * lisp/tab-bar.el: Rename args to consistent naming convention.
Use the same naming scheme for function arguments.  Use the term "index" when
arguments count from 0, and the term "number" when arguments count from 1.

* lisp/tab-bar.el (tab-bar-select-tab): Rename ‘arg’ to ‘tab-number’.
(tab-bar-move-tab-to): Rename ‘from-index’ to ‘from-number’
and ‘to-index’ to ‘to-number’.
(tab-bar-move-tab-to-frame): Rename ‘from-index’ to ‘from-number’
and ‘to-index’ to ‘to-number’.
(tab-bar-new-tab-to): Rename ‘to-index’ to ‘tab-number’.
(tab-bar-close-tab): Rename ‘arg’ to ‘tab-number’
and ‘to-index’ to ‘to-number’.
(tab-bar-rename-tab): Rename ‘arg’ to ‘tab-number’.
(tab-bar-change-tab-group): Rename ‘arg’ to ‘tab-number’.
2021-09-15 09:27:57 +03:00
Juri Linkov
3f835ad580 * lisp/tab-bar.el: Close tab only on mouse-1, not down-mouse-1 (bug#41343)
* lisp/tab-bar.el (tab-bar-mouse-select-tab): Don't close the tab
when clicked on the close button.
(tab-bar-mouse-close-tab-from-button): New function.
(tab-bar-map): Bind [mouse-1] to 'tab-bar-mouse-close-tab-from-button'.
(tab-bar-mouse-move-tab): Do nothing on non-tab events.
2021-09-14 09:42:11 +03:00
Juri Linkov
fd1379a85a Support mouse events clicked on the tab bar but outside of any tab (bug#41343)
* lisp/tab-bar.el (tab-bar--key-to-number): Return non-nil non-numeric t
when no tab is used.  Return nil for current-tab.
(tab-bar-mouse-select-tab, tab-bar-mouse-close-tab): Do nothing
when tab-bar--key-to-number returns non-nil non-numeric t
for click events outside of any tab.
(tab-bar-mouse-context-menu): Add context menu when mouse is clicked
outside of tabs.  Add "Duplicate" alongside with "Close" to the menu
used when mouse is clicked on a tab.
(toggle-tab-bar-mode-from-frame, toggle-frame-tab-bar): Move code
closer to 'tab-bar-show'.

* src/xdisp.c (handle_tab_bar_click): Return Qtab_bar with empty list
when mouse is clicked on the tab bar but outside of any tab.
2021-09-13 11:15:10 +03:00
Juri Linkov
911043845d * lisp/tab-bar.el (tab-bar-get-buffer-tab): Use 'remq' instead of 'seq-remove' 2021-09-12 21:30:06 +03:00
Juri Linkov
64c5cd5a8c * lisp/tab-bar.el: Improve logic of 'ignore-current-tab'.
* lisp/tab-bar.el (tab-bar-get-buffer-tab): Prefer the current tab
when 'ignore-current-tab' is nil.
(display-buffer-in-tab): Use alist entry 'ignore-current-tab'
as the third arg of 'tab-bar-get-buffer-tab'.  Improve docstring.

Suggested by Feng Shu <tumashu@163.com>
https://lists.gnu.org/archive/html/emacs-devel/2021-09/msg00955.html
2021-09-12 19:10:02 +03:00
Eli Zaretskii
ae6af0ba33 Improve documentation of some tab-bar features
* lisp/tab-bar.el (tab-bar-show, toggle-frame-tab-bar): Doc
fixes.

* etc/NEWS: Update the corresponding entries.
2021-09-12 10:01:38 +03:00
Eli Zaretskii
d92db04a9d Improve documentation of tab-bar functions and variables
* etc/NEWS: Improve wording of tab-bar related entries.

* lisp/tab-bar.el (tab-bar-show, tab-bar-select-tab-modifiers):
Improve and clarify the doc strings.
2021-09-09 21:01:53 +03:00
Juri Linkov
14d5145441 Merge branch 'feature/tab-bar-events' 2021-09-09 10:52:41 +03:00
Eli Zaretskii
db74a93659 Fix display of tab-bar buttons
* src/xterm.c (x_draw_image_relief):
* src/w32term.c (w32_draw_image_relief): Fix calculation of relief
thickness for tab-bar buttons.

* lisp/tab-bar.el (tab-bar--load-buttons)
(tab-bar-history-mode): Fix the :margin specification for tab-bar
buttons.  (Bug#50424)
2021-09-07 13:24:01 +03:00
Eli Zaretskii
61562c78dd ; * lisp/tab-bar.el (toggle-frame-tab-bar, tab-bar-new-tab-to): Doc fix. 2021-09-06 13:13:22 +03:00
Juri Linkov
794fdce55d Improve tab-bar event handling (bug#41343)
* lisp/tab-bar.el (tab-bar--key-to-number): Rename from tab--key-to-number.
(tab-bar--event-to-item): New function from tab-bar-handle-mouse.
(tab-bar-mouse-select-tab, tab-bar-mouse-close-tab)
(tab-bar-mouse-context-menu, tab-bar-mouse-move-tab):
Use tab-bar--event-to-item.

* src/menu.c (x_popup_menu_1): Handle Qtab_bar in the second list element.

* src/xdisp.c (tty_get_tab_bar_item): Change arg 'end' to bool 'close_p'.
(tty_get_tab_bar_item): Detect if the close button was clicked.
(tty_handle_tab_bar_click): Return a list with caption that has
text properties.
2021-09-05 20:16:33 +03:00
Juri Linkov
ad9c57f54a Mouse wheel scrolling on the tab bar
* lisp/tab-bar.el (tab-bar-map): Bind mouse-4/wheel-up/wheel-left
to tab-previous and mouse-5/wheel-down/wheel-right to tab-next.
Bind S-mouse-4/wheel-up/wheel-left to tab-bar-move-tab-backward
and S-mouse-5/wheel-down/wheel-right to tab-bar-move-tab.
(tab-bar-move-tab-backward): New command.
(tab-bar-move-repeat-map): Use tab-bar-move-tab-backward
instead of lambda.

* src/xterm.c (handle_one_xevent): Remove restriction
to allow clicking mouse-4 and mouse-5.
2021-08-18 20:52:32 +03:00
Juri Linkov
56d567acb6 Bind [drag-mouse-1] to tab-bar-mouse-move-tab on tab-bar-map
* lisp/tab-bar.el (tab-bar-mouse-move-tab): New command.
(tab-bar-map): Bind [drag-mouse-1] to tab-bar-mouse-move-tab.
(tab-bar-select-tab): Zero or nil arg means the current tab.

* src/xdisp.c (handle_tab_bar_click): Remove restriction
to allow dragging the tab to another tab.
2021-08-18 20:44:14 +03:00
Juri Linkov
e6bea0cbc7 Redesign tab-bar event processing (bug#41342, bug#41343)
Instead of emitting menu-item keys like [tab-1],
emit normal mouse events like [mouse-1] and [down-mouse-3]
for all mouse clicks issued on the tab-bar.

* lisp/mouse.el (mouse-posn-property): Handle 'tab-bar' posn-area.

* lisp/tab-bar.el (tab--key-to-number): New internal function.
(tab-bar-handle-mouse): Use tab key to select/close tab.
(tab-bar-mouse-select-tab, tab-bar-mouse-close-tab)
(tab-bar-mouse-context-menu): New commands.
(tab-bar-map): Bind [down-mouse-1] to tab-bar-mouse-select-tab,
[down-mouse-2] to tab-bar-mouse-close-tab,
[down-mouse-3] to tab-bar-mouse-context-menu.
(tab-bar-keymap-cache): Remove.
(tab-bar-make-keymap): Don't use cache.
(tab-bar--format-tab): Remove default bindings from menu items.
(tab-bar-make-keymap-1): Prepend tab-bar-map.

* src/keyboard.c (make_lispy_event): Append event->arg to position
for Qtab_bar.

* src/term.c (handle_one_term_event): Simplify to set event arg.

* src/w32inevt.c (do_mouse_event): Set emacs_ev->arg to the value
returned from tty_handle_tab_bar_click.

* src/w32term.c (w32_handle_tab_bar_click): Return value from
handle_tab_bar_click.
(w32_read_socket): Set tab_bar_key to value returned from
w32_handle_tab_bar_click, and set event arg from it.

* src/xdisp.c (handle_tab_bar_click): Instead of emitting event,
return a list with Qtab_bar and tab caption with text properties
that contain Qmenu_item with key and binding.
(tty_handle_tab_bar_click): Simplify to return a list of Qtab_bar,
key and close_p, instead of emitting event.

* src/xterm.c (handle_one_xevent): Set tab_bar_key to value
returned from handle_tab_bar_click, and set event arg from it.
2021-08-18 20:32:32 +03:00
Juri Linkov
0da97a4ed9 * lisp/tab-bar.el (tab-bar-new-button-show): Make variable obsolete. 2021-08-15 19:15:42 +03:00
Juri Linkov
a93d164ff3 * lisp/tab-bar.el (tab-bar-history-buttons-show): Remove defcustom.
(tab-bar-format-history): Don't use this recently added variable
because now it's possible to customize the option 'tab-bar-format'
to remove 'tab-bar-format-history' from it that gives the same result.
2021-08-13 10:30:20 +03:00
Juri Linkov
09c3620253 Adjust tab-bar to the new mode-line-misc-info value (bug#49806)
* lisp/tab-bar.el (tab-bar--define-keys): Adjust to the new
default value for `mode-line-misc-info'.
2021-08-03 01:08:23 +03:00
Juri Linkov
30bd6a50aa * lisp/tab-bar.el (tab-bar-format-global): Use string-trim-right (bug#30056). 2021-07-27 23:55:32 +03:00
Lars Ingebrigtsen
8b808be2fb Adjust tab-bar to the new mode-line-misc-info value
* lisp/tab-bar.el (tab-bar--define-keys): Adjust to the new
default value for `mode-line-misc-info'.
2021-07-24 13:53:46 +02:00
Juri Linkov
8b49e99504 * lisp/tab-bar.el (tab-bar--define-keys): Fix global-mode-string (bug#49215) 2021-06-25 12:38:27 +03:00
Juri Linkov
c049c8da58 * lisp/tab-bar.el: Add repeat-map keymaps.
* lisp/tab-bar.el (tab-bar-switch-repeat-map): New keymap used for
'tab-next' and 'tab-previous'.
(tab-bar-move-repeat-map): New keymap used for 'tab-move'.
https://lists.gnu.org/archive/html/emacs-devel/2021-03/msg01103.html
2021-04-06 00:18:59 +03:00
Juri Linkov
3bacf74adb * lisp/tab-bar.el (tab-bar-tab-post-change-group-functions): New hook.
(tab-bar-change-tab-group): Run it.
(tab-bar-move-tab-to-group): New command for new hook.
2021-03-24 22:14:52 +02:00
Juri Linkov
8c589c2583 * lisp/tab-bar.el (tab-bar-new-tab-group): Set default to t.
(tab-bar-tabs, tab-bar-select-tab, tab-bar-new-tab-to):
Use tab-bar--current-tab-make instead of tab-bar--current-tab.
(tab-bar--tab): Add arg 'frame' to tab-bar--current-tab-find.
(tab-bar--current-tab, tab-bar--current-tab-make): Move most of body
from the former to the latter, thus reverting tab-bar--current-tab
to its previous behavior.
https://lists.gnu.org/archive/html/emacs-devel/2021-03/msg00959.html
2021-03-22 20:55:49 +02:00
Juri Linkov
0441e605a1 * lisp/tab-bar.el: New faces and face options.
* lisp/tab-bar.el (tab-bar-tab-group-current)
(tab-bar-tab-group-inactive, tab-bar-tab-ungrouped): New deffaces.
(tab-bar-tab-face-function): New defcustom.
(tab-bar-tab-face-default): New function.
(tab-bar-tab-name-format-default): Use it.
(tab-bar-tab-group-format-default): Use tab-bar-tab-group-inactive face.
(tab-bar-tab-group-face-function): New defcustom.
(tab-bar-tab-group-face-default): New function.
(tab-bar--format-tab-group): Add new arg 'current-p'.
(tab-bar-format-tabs-groups): Prepend current group name before first tab.
Override tab-bar-tab-face-function with tab-bar-tab-group-face-function.
2021-03-17 19:42:27 +02:00
Juri Linkov
6199cdc78b * lisp/tab-bar.el (tab-bar-select-tab): Support negative arg. 2021-03-16 19:54:54 +02:00
Juri Linkov
126ea102a5 * lisp/tab-bar.el: Simplify internal functions.
* lisp/tab-bar.el (tab-bar-tabs-set): New function.
(tab-bar-tabs): Use tab-bar--current-tab-find and tab-bar-tabs-set.
(tab-bar--tab): Use tab-bar--current-tab-find.
(tab-bar--current-tab): Remove unused line (assq 'current-tab ...)
because there is no current-tab when it's called.  Remove unused arg 'frame'.
(tab-bar--current-tab-find): Simplify.
(tab-bar-move-tab-to, tab-bar-move-tab-to-frame)
(tab-bar-new-tab-to, tab-bar-close-tab)
(tab-bar-close-other-tabs, tab-bar-undo-close-tab)
(tab-switcher-delete-from-list): Use tab-bar-tabs-set
instead of set-frame-parameter.
(tab-bar-close-group-tabs): Simplify using tab-bar--current-tab-find
without arg.
2021-03-16 19:53:27 +02:00