* Tabs @ 2019-08-31 20:45 Juri Linkov 2019-09-01 8:12 ` Tabs martin rudalics ` (6 more replies) 0 siblings, 7 replies; 181+ messages in thread From: Juri Linkov @ 2019-08-31 20:45 UTC (permalink / raw) To: emacs-devel [-- Attachment #1: Type: text/plain, Size: 3975 bytes --] There is a long story of several attempts to implement tabs in Emacs. Finally now a complete implementation is available for these etc/TODO tasks: ** "Perspectives" are named persistent window configurations. We have had the window configuration mechanism in GNU Emacs since the beginning but we have never developed a good user interface to take advantage of them. Eclipse's user interface seems to be good. Perspectives also need to interact with the tabs. ** Having tabs above a window to switch buffers in it. Frame-local tabs represent window configurations. Window-local tabs represent window buffers. Using such data structures means there is no need in special handling of saving tabs in the desktop file - both persistence of frame tabs and persistence of window tabs is already supported by the existing code in master, because frame tabs are implemented as presentation of window configurations in the frame parameter saved by frameset as window states, and window tabs are implemented as presentation of window buffers already saved by frameset. Also both implementation of frame tabs and implementation of window tabs doesn't require using hooks - frame-local tabs for window-configuration switching doesn't rely on hooks and window-local tabs for switching window-buffers doesn't use hooks: window-configuration-change-hook is not used, no hook window-size-change-functions, no buffer-list-update-hook, no post-command-hook is used, none of the hooks. All this makes the implementation as simple as possible, providing only code for displaying and manipulating the already existing data structures of window configurations and window buffers represented in the new display elements tab-bar and tab-line based on the existing elements tool-bar and header-line. The prefix '-bar' in tab-bar is by analogy with frame tool-bar, menu-bar. The prefix '-line' in tab-line is by analogy with window header-line, mode-line. The tab-bar is located above the tool-bar like in web browsers. The tab-line is located above the header-line that is more related to the current buffer. Frame-local horizontal interface elements are in this order: --- menu-bar --- --- tab-bar --- --- tool-bar --- Window-local horizontal interface elements are in this order: --- tab-line --- --- header-line --- --- mode-line --- The implementation of the tab-bar replicates the existing tool-bar. The implementation of the tab-line replicates the existing header-line. Tabs on the frame tab-bar represent window configurations. Tabs on the window tab-line represent window buffers: previous on the left side from the current tab (current-buffer) and next on the right. Clicking on the tab in the tab-bar selects its window configuration. Clicking on the tab in the tab-line selects its window buffer. Clicking on the close button closes the clicked tab. Keybindings for the tab-bar: C-TAB - switches to the next frame tab; S-C-TAB - switches to the previous frame tab. Clicking on the plus sign adds a new window configuration tab to the tab-bar. Keybindings for the tab-line: C-x <left> - switches to the previous window tab; C-x <right> - switches to the next window tab. Clicking on the plus sign adds a new buffer tab to the tab-line. 'C-x 6 2' creates a new frame-local tab; 'C-x 6 b' switches to buffer in another frame-local tab; 'C-x 6 f' and 'C-x 6 C-f' edit file in another frame-local tab. I invite everyone to try the new branch named 'feature/tabs' and to report all found problems. Authors of all packages that currently had no choice other than to misuse the header-line for displaying window tabs are welcome now to adapt their packages for displaying window tabs on the new dedicated tab-line that doesn't conflict with the header-line anymore. For example, I tried just to replace header-line-format with tab-line-format in the package awesome-tabs and the result shows two separate rows - tab-line and header-line of Info buffer: [-- Attachment #2: tabs.png --] [-- Type: image/png, Size: 41241 bytes --] ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-08-31 20:45 Tabs Juri Linkov @ 2019-09-01 8:12 ` martin rudalics 2019-09-01 14:40 ` Tabs Eli Zaretskii 2019-09-01 19:57 ` Tabs Juri Linkov 2019-09-01 8:59 ` Tabs (on macos) Jean-Christophe Helary ` (5 subsequent siblings) 6 siblings, 2 replies; 181+ messages in thread From: martin rudalics @ 2019-09-01 8:12 UTC (permalink / raw) To: Juri Linkov, emacs-devel [-- Attachment #1: Type: text/plain, Size: 931 bytes --] > Finally ... some ten years after you started ... > now a complete implementation is available for these > etc/TODO tasks: To make your branch build on Windows you need to install the attached patch at least (blindly copied from its X counterparts). Therafter, Emacs builds and comes up normally. After clicking on the Show/Hide Tab Bar menu entry, I see Debugger entered--Lisp error: (wrong-type-argument number-or-marker-p nil) toggle-tab-bar-mode-from-frame(toggle) funcall-interactively(toggle-tab-bar-mode-from-frame toggle) call-interactively(toggle-tab-bar-mode-from-frame nil nil) command-execute(toggle-tab-bar-mode-from-frame) When clicking on a tab in a tab lines entry I get <nil> <down-mouse-1> is undefined <nil> <mouse-1> is undefined I didn't look into the details of how these are implemented. Please also provide a simple recipe for testing your branch. Thanks for all the work, martin [-- Attachment #2: tabs.diff --] [-- Type: text/plain, Size: 4596 bytes --] diff --git a/src/w32fns.c b/src/w32fns.c index 4b95b255f1..0d6369461c 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -1773,6 +1773,94 @@ w32_set_menu_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) } +/* Set the number of lines used for the tab bar of frame F to VALUE. + VALUE not an integer, or < 0 means set the lines to zero. OLDVAL + is the old number of tab bar lines. This function changes the + height of all windows on frame F to match the new tab bar height. + The frame's height doesn't change. */ + +static void +w32_set_tab_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) +{ + int nlines; + + /* Treat tab bars like menu bars. */ + if (FRAME_MINIBUF_ONLY_P (f)) + return; + + /* Use VALUE only if an int >= 0. */ + if (RANGED_FIXNUMP (0, value, INT_MAX)) + nlines = XFIXNAT (value); + else + nlines = 0; + + w32_change_tab_bar_height (f, nlines * FRAME_LINE_HEIGHT (f)); +} + + +/* Set the pixel height of the tab bar of frame F to HEIGHT. */ +void +w32_change_tab_bar_height (struct frame *f, int height) +{ + int unit = FRAME_LINE_HEIGHT (f); + int old_height = FRAME_TAB_BAR_HEIGHT (f); + int lines = (height + unit - 1) / unit; + Lisp_Object fullscreen; + + /* Make sure we redisplay all windows in this frame. */ + fset_redisplay (f); + + /* Recalculate tab bar and frame text sizes. */ + FRAME_TAB_BAR_HEIGHT (f) = height; + FRAME_TAB_BAR_LINES (f) = lines; + /* Store the `tab-bar-lines' and `height' frame parameters. */ + store_frame_param (f, Qtab_bar_lines, make_fixnum (lines)); + store_frame_param (f, Qheight, make_fixnum (FRAME_LINES (f))); + + /* We also have to make sure that the internal border at the top of + the frame, below the menu bar or tab bar, is redrawn when the + tab bar disappears. This is so because the internal border is + below the tab bar if one is displayed, but is below the menu bar + if there isn't a tab bar. The tab bar draws into the area + below the menu bar. */ + if (FRAME_W32_WINDOW (f) && FRAME_TAB_BAR_HEIGHT (f) == 0) + { + clear_frame (f); + clear_current_matrices (f); + } + + if ((height < old_height) && WINDOWP (f->tab_bar_window)) + clear_glyph_matrix (XWINDOW (f->tab_bar_window)->current_matrix); + + /* Recalculate tabbar height. */ + f->n_tab_bar_rows = 0; + if (old_height == 0 + && (!f->after_make_frame + || NILP (frame_inhibit_implied_resize) + || (CONSP (frame_inhibit_implied_resize) + && NILP (Fmemq (Qtab_bar_lines, frame_inhibit_implied_resize))))) + f->tab_bar_redisplayed = f->tab_bar_resized = false; + + adjust_frame_size (f, -1, -1, + ((!f->tab_bar_resized + && (NILP (fullscreen = + get_frame_param (f, Qfullscreen)) + || EQ (fullscreen, Qfullwidth))) ? 1 + : (old_height == 0 || height == 0) ? 2 + : 4), + false, Qtab_bar_lines); + + f->tab_bar_resized = f->tab_bar_redisplayed; + + /* adjust_frame_size might not have done anything, garbage frame + here. */ + adjust_frame_glyphs (f); + SET_FRAME_GARBAGED (f); + if (FRAME_W32_WINDOW (f)) + w32_clear_under_internal_border (f); +} + + /* Set the number of lines used for the tool bar of frame F to VALUE. VALUE not an integer, or < 0 means set the lines to zero. OLDVAL is the old number of tool bar lines (and is unused). This function may diff --git a/src/w32term.c b/src/w32term.c index 82c7e211bf..1f57635f6d 100644 --- a/src/w32term.c +++ b/src/w32term.c @@ -7192,6 +7192,7 @@ w32_create_terminal (struct w32_display_info *dpyinfo) terminal->menu_show_hook = w32_menu_show; terminal->activate_menubar_hook = w32_activate_menubar; terminal->popup_dialog_hook = w32_popup_dialog; + terminal->change_tab_bar_height_hook = w32_change_tab_bar_height; terminal->change_tool_bar_height_hook = w32_change_tool_bar_height; terminal->set_vertical_scroll_bar_hook = w32_set_vertical_scroll_bar; terminal->set_horizontal_scroll_bar_hook = w32_set_horizontal_scroll_bar; diff --git a/src/w32term.h b/src/w32term.h index 6133e100c1..378f274d7e 100644 --- a/src/w32term.h +++ b/src/w32term.h @@ -233,6 +233,7 @@ extern void w32_real_positions (struct frame *f, int *xptr, int *yptr); extern void w32_clear_under_internal_border (struct frame *); +extern void w32_change_tab_bar_height (struct frame *, int); extern void w32_change_tool_bar_height (struct frame *, int); extern void w32_implicitly_set_name (struct frame *, Lisp_Object, Lisp_Object); extern void w32_set_scroll_bar_default_width (struct frame *); ^ permalink raw reply related [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-01 8:12 ` Tabs martin rudalics @ 2019-09-01 14:40 ` Eli Zaretskii 2019-09-01 19:57 ` Tabs Juri Linkov 1 sibling, 0 replies; 181+ messages in thread From: Eli Zaretskii @ 2019-09-01 14:40 UTC (permalink / raw) To: martin rudalics; +Cc: emacs-devel, juri > From: martin rudalics <rudalics@gmx.at> > Date: Sun, 1 Sep 2019 10:12:41 +0200 > > > now a complete implementation is available for these > > etc/TODO tasks: > > To make your branch build on Windows you need to install the attached > patch at least (blindly copied from its X counterparts). Therafter, > Emacs builds and comes up normally. Thanks, but I think we should avoid duplicating GUI code like that. The code should refactored to keep the frame-type specific code separate, called via hooks by generic code, and generic code should not be in xfns.c, w32fns.c etc., but in general platform-independent source file, such as window.c. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-01 8:12 ` Tabs martin rudalics 2019-09-01 14:40 ` Tabs Eli Zaretskii @ 2019-09-01 19:57 ` Juri Linkov 2019-09-02 0:40 ` Tabs Stefan Kangas 2019-09-02 2:29 ` Tabs Eli Zaretskii 1 sibling, 2 replies; 181+ messages in thread From: Juri Linkov @ 2019-09-01 19:57 UTC (permalink / raw) To: martin rudalics; +Cc: emacs-devel >> Finally > > ... some ten years after you started ... Thanks to your help, 3 months ago I have been able finally to understand how persistence of window configurations/states should be implemented. Also such implementation would not be possible earlier before other improvements including window states and framesets were implemented. So it seems now is the right time :) >> now a complete implementation is available for these >> etc/TODO tasks: > > To make your branch build on Windows you need to install the attached > patch at least (blindly copied from its X counterparts). Therafter, > Emacs builds and comes up normally. Thanks, I pushed your patch to the branch. I hope it would be possible to do refactoring on top of your patch to avoid duplicating GUI code like Eli asked. > After clicking on the Show/Hide Tab Bar menu entry, I see > > Debugger entered--Lisp error: (wrong-type-argument number-or-marker-p nil) > toggle-tab-bar-mode-from-frame(toggle) > funcall-interactively(toggle-tab-bar-mode-from-frame toggle) > call-interactively(toggle-tab-bar-mode-from-frame nil nil) > command-execute(toggle-tab-bar-mode-from-frame) There is no such problem on X, so I guess it's Windows-specific? > When clicking on a tab in a tab lines entry I get > > <nil> <down-mouse-1> is undefined > <nil> <mouse-1> is undefined This looks like Windows-specific too. > I didn't look into the details of how these are implemented. > > Please also provide a simple recipe for testing your branch. The simplest recipe is this: 0. emacs -Q 1. M-x tab-bar-mode RET 2. Click on the plus sign to create a new tab 3. Click on the previous tab 4. Click on the close icon 0. emacs -Q 1. M-x global-tab-line-mode 2. Click on the plus sign and select a buffer to create a new tab 3. Click on the previous tab 4. Click on the close icon This covers the basic parts of the user interface. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-01 19:57 ` Tabs Juri Linkov @ 2019-09-02 0:40 ` Stefan Kangas 2019-09-02 10:11 ` Tabs Elias Mårtenson 2019-09-02 19:17 ` Tabs Juri Linkov 2019-09-02 2:29 ` Tabs Eli Zaretskii 1 sibling, 2 replies; 181+ messages in thread From: Stefan Kangas @ 2019-09-02 0:40 UTC (permalink / raw) To: Juri Linkov; +Cc: martin rudalics, emacs-devel [-- Attachment #1: Type: text/plain, Size: 2610 bytes --] Hi Juri, Juri Linkov <juri@linkov.net> writes: >>> Finally >> >> ... some ten years after you started ... Thanks for working on this. I think this feature would be an important step forward for Emacs. I've now checked out and built the branch and report my findings below. (FWIW, I find the names tab-bar-mode and global-tab-line-mode confusingly similar. Could we find better and more descriptive names? For example, global-tab-line-mode could be global-buffer-tab-mode.) Are you also looking for input regarding potential improvements the user interface at this stage? For example, would feedback similar to "I think the width of the tabs under tab-bar-mode should be fixed" be helpful? > 0. emacs -Q > 1. M-x tab-bar-mode RET > 2. Click on the plus sign to create a new tab > 3. Click on the previous tab > 4. Click on the close icon When saying M-x tab-bar-mode here, the window flickers as if redrawing but no tabs show up. The tabs do show up as soon as I resize the window, or move it to a different workspace. (My window manager is XMonad, a tiling window manager, and the Emacs frame is automatically set to full screen and moved to a particular workspace after launch. Not sure if that helps.) I installed a tool that was available in Debian to capture my screen while reproducing this bug. I've uploaded the resulting video here: https://drive.google.com/file/d/10-9DpKEseOUtYjrHUJ2bEMifvSOf98Ri/view > 0. emacs -Q > 1. M-x global-tab-line-mode > 2. Click on the plus sign and select a buffer to create a new tab > 3. Click on the previous tab > 4. Click on the close icon This basic use case seems to work for me. My tabs don't look as sleek as yours; not sure why. Please see the attached screenshot. These are my build details: In GNU Emacs 27.0.50 (build 11, x86_64-pc-linux-gnu, GTK+ Version 3.24.5) of 2019-09-02 built on joffe Repository revision: 5bf45ec48b781a1165e882e7216892bf201d15f4 Repository branch: feature/tabs Windowing system distributor 'The X.Org Foundation', version 11.0.12004000 System Description: Debian GNU/Linux 10 (buster) Configured using: 'configure --with-imagemagick PKG_CONFIG_PATH=/home/skangas/usr/lib/pkgconfig:' Configured features: XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND GPM DBUS GSETTINGS GLIB NOTIFY INOTIFY ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE HARFBUZZ M17N_FLT LIBOTF XFT ZLIB TOOLKIT_SCROLL_BARS GTK3 X11 XDBE XIM THREADS LIBSYSTEMD PDUMPER LCMS2 GMP Important settings: value of $LC_COLLATE: C value of $LC_CTYPE: sv_SE.UTF-8 value of $LC_TIME: C locale-coding-system: utf-8-unix Best regards, Stefan Kangas [-- Attachment #2: tabs-screenshot.png --] [-- Type: image/png, Size: 17325 bytes --] ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-02 0:40 ` Tabs Stefan Kangas @ 2019-09-02 10:11 ` Elias Mårtenson 2019-09-02 11:16 ` Tabs Dmitry Gutov 2019-09-02 19:27 ` Tabs Juri Linkov 2019-09-02 19:17 ` Tabs Juri Linkov 1 sibling, 2 replies; 181+ messages in thread From: Elias Mårtenson @ 2019-09-02 10:11 UTC (permalink / raw) To: Stefan Kangas; +Cc: martin rudalics, emacs-devel, Juri Linkov [-- Attachment #1: Type: text/plain, Size: 1136 bytes --] On Mon, 2 Sep 2019 at 08:41, Stefan Kangas <stefan@marxist.se> wrote: (FWIW, I find the names tab-bar-mode and global-tab-line-mode > confusingly similar. Could we find better and more descriptive names? > For example, global-tab-line-mode could be global-buffer-tab-mode.) > This may be the very definition of a bikeshedding comment, but I do feel the need ask the question: Is it truly wise to have the word “tab” as part of the name of this feature? The word “tab” (when not referring to codepoint U+0009 CHARACTER TABULATION) usually refers to the specific visual indication that resembles a row of tabs in old filing cabinets. The feature itself doesn't really have that much to do with tabs of either kind. I'm raising this because I initially had no idea what this was about (thinking it referred to U+0009) and even after figuring it out, I'm still confused by the names of the functions and modes. A term that uniquely describes the actual feature would be very helpful in reducing confusion. Especially among people who have never heard about the functionality before. Regards, Elias [-- Attachment #2: Type: text/html, Size: 1546 bytes --] ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-02 10:11 ` Tabs Elias Mårtenson @ 2019-09-02 11:16 ` Dmitry Gutov 2019-09-02 19:27 ` Tabs Juri Linkov 1 sibling, 0 replies; 181+ messages in thread From: Dmitry Gutov @ 2019-09-02 11:16 UTC (permalink / raw) To: Elias Mårtenson, Stefan Kangas Cc: martin rudalics, Juri Linkov, emacs-devel On 02.09.2019 13:11, Elias Mårtenson wrote: > Is it truly wise to have the word “tab” as part of the name of this > feature? The word “tab” (when not referring to codepoint U+0009 > CHARACTER TABULATION) usually refers to the specific visual indication > that resembles a row of tabs in old filing cabinets. The feature itself > doesn't really have that much to do with tabs of either kind. If you look at common software outside of Emacs, "tab" is very often used for this kind of feature. E.g. browser tabs. Or similar tabs in other text editors. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-02 10:11 ` Tabs Elias Mårtenson 2019-09-02 11:16 ` Tabs Dmitry Gutov @ 2019-09-02 19:27 ` Juri Linkov 2019-09-03 5:21 ` Tabs Jean Louis 1 sibling, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-09-02 19:27 UTC (permalink / raw) To: Elias Mårtenson; +Cc: martin rudalics, Stefan Kangas, emacs-devel > Is it truly wise to have the word “tab” as part of the name of this > feature? The word “tab” (when not referring to codepoint U+0009 CHARACTER > TABULATION) usually refers to the specific visual indication that resembles > a row of tabs in old filing cabinets. The feature itself doesn't really > have that much to do with tabs of either kind. A row of tabs in filing cabinets and notebooks is a good analogy to what these visual elements are intended for. > I'm raising this because I initially had no idea what this was about > (thinking it referred to U+0009) and even after figuring it out, I'm still > confused by the names of the functions and modes. > > A term that uniquely describes the actual feature would be very helpful in > reducing confusion. Especially among people who have never heard about the > functionality before. Actually there is not much confusion between two terms - on the Wikipedia disambiguation page there are two separate definitions: Computing and technology Tab (interface), a visual marker in a computer application Tab key, on a keyboard Even the Emacs Glossary at (info "(emacs) Glossary") defines the TAB using a special syntax where all letters are in upper case: <TAB> <TAB> is the tab character. In Emacs it is typically used for indentation or completion. So in the documentation when mentioned as a key, the term is usually in upper-case as TAB, or more disambiguation is added such as in “tab key” or “tab character” - these are different things too: the former is a key on the keyboard, the latter is a character usually displayed as 8 spaces, but there is not much confusion between them too. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-02 19:27 ` Tabs Juri Linkov @ 2019-09-03 5:21 ` Jean Louis 2019-09-03 19:40 ` Tabs Juri Linkov 0 siblings, 1 reply; 181+ messages in thread From: Jean Louis @ 2019-09-03 5:21 UTC (permalink / raw) To: Juri Linkov; +Cc: stefan, emacs-devel, lokedhs, rudalics From Wordnet, see definition 4. * Overview of noun tab The noun tab has 5 senses (no senses from tagged texts) 1. check, chit, tab -- (the bill in a restaurant; "he asked the waiter for the check") 2. yellow journalism, tabloid, tab -- (sensationalist journalism) 3. tab key, tab -- (the key on a typewriter or a word processor that causes a tabulation) 4. tab -- (a short strip of material attached to or projecting from something in order to facilitate opening or identifying or handling it; "pull the tab to open the can"; "files with a red tab will be stored separately"; "the collar has a tab with a button hole"; "the filing cards were organized by cards having indexed tabs") 5. pill, lozenge, tablet, tab -- (a dose of medicine in the form of a small pellet) ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-03 5:21 ` Tabs Jean Louis @ 2019-09-03 19:40 ` Juri Linkov 2019-09-03 20:14 ` Tabs Jean Louis 0 siblings, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-09-03 19:40 UTC (permalink / raw) To: Jean Louis; +Cc: stefan, emacs-devel, lokedhs, rudalics > From Wordnet, see definition 4. > > * Overview of noun tab > > The noun tab has 5 senses (no senses from tagged texts) > 1. check, chit, tab -- (the bill in a restaurant; "he asked the waiter for the check") > 2. yellow journalism, tabloid, tab -- (sensationalist journalism) > 3. tab key, tab -- (the key on a typewriter or a word processor that causes a tabulation) > 4. tab -- (a short strip of material attached to or projecting from > something in order to facilitate opening or identifying or handling it; > "pull the tab to open the can"; "files with a red tab will be stored > separately"; "the collar has a tab with a button hole"; "the filing cards > were organized by cards having indexed tabs") > 5. pill, lozenge, tablet, tab -- (a dose of medicine in the form of a small pellet) Wordnet is the most complete indeed and contains definition 4 that describes this feature, as well as definition 3 of the tab key, but it still lacks a third computer-related definition, namely the same definition that exists in The Free On-line Dictionary of Computing (FOLDOC): TAB <character> (tab, Control-I, HT, ASCII 9) A character which when displayed or printed causes the following character to be placed at the next "tabstop" - the column whose number is a multiple of the current tab width. Commonly (especially in Unix(?)) the tab width is eight, so, counting from the left margin (column zero), the tab stops are at columns 8, 16, 24, up to the width of the screen or page. A tab width of four or two is often preferred when indenting program source code to conserve indentation. Represented as "\t" in C, Unix, and derivatives. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-03 19:40 ` Tabs Juri Linkov @ 2019-09-03 20:14 ` Jean Louis 0 siblings, 0 replies; 181+ messages in thread From: Jean Louis @ 2019-09-03 20:14 UTC (permalink / raw) To: Juri Linkov; +Cc: stefan, emacs-devel, lokedhs, rudalics Hello Juri, Yes, sure it can lack special definitions, but we speak in a context of definition 4. Isn't it? We speak of tabs in Emacs as in the definition 4. as virtualized into some 4-x definition where similar concept is applied virtually for computing. Just like a "folder" is not a folder, so "tab" is not a real world tab, but concept is known from real world and people use it in many software programs. The problem that lies in the user who does not know the definition is solved by looking up the definition. Authors shall not accommodate the user, but just make sure that the word is used in the context which indicates the right definition. Jean * Juri Linkov <juri@linkov.net> [2019-09-03 21:59]: > > From Wordnet, see definition 4. > > > > * Overview of noun tab > > > > The noun tab has 5 senses (no senses from tagged texts) > > 1. check, chit, tab -- (the bill in a restaurant; he asked the waiter for the check) > > 2. yellow journalism, tabloid, tab -- (sensationalist journalism) > > 3. tab key, tab -- (the key on a typewriter or a word processor that causes a tabulation) > > 4. tab -- (a short strip of material attached to or projecting from > > something in order to facilitate opening or identifying or handling it; > > pull the tab to open the can; files with a red tab will be stored > > separately; the collar has a tab with a button hole; the filing cards > > were organized by cards having indexed tabs) > > 5. pill, lozenge, tablet, tab -- (a dose of medicine in the form of a small pellet) > > Wordnet is the most complete indeed and contains definition 4 > that describes this feature, as well as definition 3 of the tab key, > but it still lacks a third computer-related definition, namely the > same definition that exists in The Free On-line Dictionary of Computing > (FOLDOC): > > TAB > <character> (tab, Control-I, HT, ASCII 9) A character which > when displayed or printed causes the following character to be > placed at the next tabstop - the column whose number is a > multiple of the current tab width. Commonly (especially in > Unix(?)) the tab width is eight, so, counting from the left > margin (column zero), the tab stops are at columns 8, 16, 24, > up to the width of the screen or page. > A tab width of four or two is often preferred when indenting > program source code to conserve indentation. > Represented as \t in C, Unix, and derivatives. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-02 0:40 ` Tabs Stefan Kangas 2019-09-02 10:11 ` Tabs Elias Mårtenson @ 2019-09-02 19:17 ` Juri Linkov 2019-09-03 5:45 ` Tabs Yuri Khan 2019-09-15 16:44 ` Tabs Stefan Kangas 1 sibling, 2 replies; 181+ messages in thread From: Juri Linkov @ 2019-09-02 19:17 UTC (permalink / raw) To: Stefan Kangas; +Cc: martin rudalics, emacs-devel > Thanks for working on this. I think this feature would be an > important step forward for Emacs. I've now checked out and built the > branch and report my findings below. > > (FWIW, I find the names tab-bar-mode and global-tab-line-mode > confusingly similar. Could we find better and more descriptive names? > For example, global-tab-line-mode could be global-buffer-tab-mode.) Actually it's more related to window than to buffer. But global-window-tab-line-mode would be too long and not easy to type in e.g. M-x prompt. > Are you also looking for input regarding potential improvements the > user interface at this stage? Yes, please, now is the right time. > For example, would feedback similar to "I think the width of the tabs > under tab-bar-mode should be fixed" be helpful? In browsers the width of each tab depends on the number of tabs to share tab-bar space proportionally between all tabs. But we could add a numeric option for the fixed width. >> 0. emacs -Q >> 1. M-x tab-bar-mode RET >> 2. Click on the plus sign to create a new tab >> 3. Click on the previous tab >> 4. Click on the close icon > > When saying M-x tab-bar-mode here, the window flickers as if redrawing > but no tabs show up. The tabs do show up as soon as I resize the > window, or move it to a different workspace. (My window manager is > XMonad, a tiling window manager, and the Emacs frame is automatically > set to full screen and moved to a particular workspace after launch. > Not sure if that helps.) Thanks, it seems this is an essential detail that might be specific to your window manager. Do you see the same problem when saying M-x tool-bar-mode several times to turn the tool-bar on/off? ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-02 19:17 ` Tabs Juri Linkov @ 2019-09-03 5:45 ` Yuri Khan 2019-09-03 19:45 ` Tabs Juri Linkov 2019-09-15 16:44 ` Tabs Stefan Kangas 1 sibling, 1 reply; 181+ messages in thread From: Yuri Khan @ 2019-09-03 5:45 UTC (permalink / raw) To: Juri Linkov; +Cc: martin rudalics, Stefan Kangas, Emacs developers On Tue, Sep 3, 2019 at 2:48 AM Juri Linkov <juri@linkov.net> wrote: > In browsers the width of each tab depends on the number of tabs > to share tab-bar space proportionally between all tabs. That is not entirely accurate. * Tabs start out at some pre-set maximum width (~200–300px?). * As new tabs are added, after they start pushing against the window edge, they shrink proportionally to fit, down to some pre-set minimum width. * When tabs don’t fit even at their minimum width: * Chrome shows the N leftmost tabs that fit, and does not bother with the rest. * Firefox adds scroll arrows at the ends of its tab bar. * A somewhat popular mod for Firefox enables multi-row tab bar; the tab bar grows vertically to accommodate all tabs, until some pre-set maximum row count. After that, it adds a vertical scroll bar. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-03 5:45 ` Tabs Yuri Khan @ 2019-09-03 19:45 ` Juri Linkov 0 siblings, 0 replies; 181+ messages in thread From: Juri Linkov @ 2019-09-03 19:45 UTC (permalink / raw) To: Yuri Khan; +Cc: martin rudalics, Stefan Kangas, Emacs developers >> In browsers the width of each tab depends on the number of tabs >> to share tab-bar space proportionally between all tabs. > > That is not entirely accurate. > > * Tabs start out at some pre-set maximum width (~200–300px?). > * As new tabs are added, after they start pushing against the window > edge, they shrink proportionally to fit, down to some pre-set minimum > width. > * When tabs don’t fit even at their minimum width: > * Chrome shows the N leftmost tabs that fit, and does not bother > with the rest. This is what surprised me that Chrome does not bother to cope with the large number of tabs, this looks unprofessional. > * Firefox adds scroll arrows at the ends of its tab bar. Scroll arrows are really more helpful in Firefox. > * A somewhat popular mod for Firefox enables multi-row tab bar; > the tab bar grows vertically to accommodate all tabs, until some > pre-set maximum row count. After that, it adds a vertical scroll bar. Perhaps you meant Tab Mix Plus - it can't use Firefox without this highly useful addon. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-02 19:17 ` Tabs Juri Linkov 2019-09-03 5:45 ` Tabs Yuri Khan @ 2019-09-15 16:44 ` Stefan Kangas 2019-09-15 21:17 ` Tabs Juri Linkov 1 sibling, 1 reply; 181+ messages in thread From: Stefan Kangas @ 2019-09-15 16:44 UTC (permalink / raw) To: Juri Linkov; +Cc: martin rudalics, emacs-devel [-- Attachment #1: Type: text/plain, Size: 3412 bytes --] Juri Linkov <juri@linkov.net> writes: > > (FWIW, I find the names tab-bar-mode and global-tab-line-mode > > confusingly similar. Could we find better and more descriptive names? > > For example, global-tab-line-mode could be global-buffer-tab-mode.) > > Actually it's more related to window than to buffer. But > global-window-tab-line-mode would be too long and not easy > to type in e.g. M-x prompt. What I'm trying to say is that I find the distinction between "tab bar" and "tab line" confusing. Of course, one could learn the difference, but I think this will be somewhat frustrating for new users. Perhaps naming them something like "window tabs" and "buffer tabs" would be more intuitive to also better explain what they are used for. > > For example, would feedback similar to "I think the width of the tabs > > under tab-bar-mode should be fixed" be helpful? > > In browsers the width of each tab depends on the number of tabs > to share tab-bar space proportionally between all tabs. But we could > add a numeric option for the fixed width. In Firefox, the tab is set to a fixed maximum width when there is only one tab. When there are too many tabs, it shrinks them to fit them. There is a minimum width, and once that is reached, Firefox adds arrows to scroll left or right in the tab bar. Perhaps we could do something similar. > >> 0. emacs -Q > >> 1. M-x tab-bar-mode RET > >> 2. Click on the plus sign to create a new tab > >> 3. Click on the previous tab > >> 4. Click on the close icon > > > > When saying M-x tab-bar-mode here, the window flickers as if redrawing > > but no tabs show up. The tabs do show up as soon as I resize the > > window, or move it to a different workspace. (My window manager is > > XMonad, a tiling window manager, and the Emacs frame is automatically > > set to full screen and moved to a particular workspace after launch. > > Not sure if that helps.) I've tested it a bit more, and in addition to the above, I've found the following cases after running tab-bar-mode: 1. As described above: If I move it to another workspace where it is the only full screen window, the tab bar will immediately show up. 2. However, I also have workspaces with window manager tabs. If I move it to one of these windows after saying M-x tab-bar-mode, I see the tab bar painted *over* the buffer text. I can move the point to the line where the tab bar is painted, and moving the point around will erase the tab bar and show the buffer text instead. I've attached two screenshots to demonstrate (1) before and (2) after moving the point. In 2, I moved to the top line in *scratch* and then moved point to the right a bit. (In this case too, if I resize the window, the buffer text will "pop down" (below the tab bar) and the tab bar works as expected -- I can no longer move point above the tab bar.) 3. I also get the same result (the tab bar painted over the buffer text) if I put it as the sole window on a full screen workspace, say M-x tab-bar-mode, and then switch to another workspace and back. > Thanks, it seems this is an essential detail that might be specific > to your window manager. Do you see the same problem when saying > M-x tool-bar-mode several times to turn the tool-bar on/off? If I run tool-bar-mode after tab-bar-mode, the tab bar pops up. If I run tool-bar-mode to turn it on again, it stays visible. Best regards, Stefan Kangas [-- Attachment #2: tab-bar1.png --] [-- Type: image/png, Size: 19401 bytes --] [-- Attachment #3: tab-bar2.png --] [-- Type: image/png, Size: 20758 bytes --] ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-15 16:44 ` Tabs Stefan Kangas @ 2019-09-15 21:17 ` Juri Linkov 0 siblings, 0 replies; 181+ messages in thread From: Juri Linkov @ 2019-09-15 21:17 UTC (permalink / raw) To: Stefan Kangas; +Cc: martin rudalics, emacs-devel >> > (FWIW, I find the names tab-bar-mode and global-tab-line-mode >> > confusingly similar. Could we find better and more descriptive names? >> > For example, global-tab-line-mode could be global-buffer-tab-mode.) >> >> Actually it's more related to window than to buffer. But >> global-window-tab-line-mode would be too long and not easy >> to type in e.g. M-x prompt. > > What I'm trying to say is that I find the distinction between "tab > bar" and "tab line" confusing. The name "tab bar" resembles frame-local "tool bar" and "menu bar", whereas "tab line" evokes associations with window-local "header line" and "mode line". > Of course, one could learn the > difference, but I think this will be somewhat frustrating for new > users. Perhaps naming them something like "window tabs" and "buffer > tabs" would be more intuitive to also better explain what they are > used for. "buffer tabs" is a wrong name. Actually there are "frame tab bar" and "window tab line". But adding more prefixes "frame-tab-bar-" and "window-tab-line-" would add more inconvenience, especially in completion. Currently it's easy to complete "tab-" <TAB> then continue either with "bar-" or "line-". Using "frame-" and "window-" prefixes for tabs would add more confusion with frame and window commands. >> > For example, would feedback similar to "I think the width of the tabs >> > under tab-bar-mode should be fixed" be helpful? >> >> In browsers the width of each tab depends on the number of tabs >> to share tab-bar space proportionally between all tabs. But we could >> add a numeric option for the fixed width. > > In Firefox, the tab is set to a fixed maximum width when there is only > one tab. When there are too many tabs, it shrinks them to fit them. > There is a minimum width, and once that is reached, Firefox adds > arrows to scroll left or right in the tab bar. Perhaps we could do > something similar. I agree. Is the maximum width measured in pixels or characters? >> >> 0. emacs -Q >> >> 1. M-x tab-bar-mode RET >> >> 2. Click on the plus sign to create a new tab >> >> 3. Click on the previous tab >> >> 4. Click on the close icon >> > >> > When saying M-x tab-bar-mode here, the window flickers as if redrawing >> > but no tabs show up. The tabs do show up as soon as I resize the >> > window, or move it to a different workspace. (My window manager is >> > XMonad, a tiling window manager, and the Emacs frame is automatically >> > set to full screen and moved to a particular workspace after launch. >> > Not sure if that helps.) > > I've tested it a bit more, and in addition to the above, I've found > the following cases after running tab-bar-mode: > > 1. As described above: If I move it to another workspace where it is > the only full screen window, the tab bar will immediately show up. > > 2. However, I also have workspaces with window manager tabs. If I > move it to one of these windows after saying M-x tab-bar-mode, I see > the tab bar painted *over* the buffer text. I can move the point to > the line where the tab bar is painted, and moving the point around > will erase the tab bar and show the buffer text instead. I've > attached two screenshots to demonstrate (1) before and (2) after > moving the point. In 2, I moved to the top line in *scratch* and then > moved point to the right a bit. > > (In this case too, if I resize the window, the buffer text will "pop > down" (below the tab bar) and the tab bar works as expected -- I can > no longer move point above the tab bar.) > > 3. I also get the same result (the tab bar painted over the buffer > text) if I put it as the sole window on a full screen workspace, say > M-x tab-bar-mode, and then switch to another workspace and back. Have you had similar problems in the past with this window manager and other Emacs components like menus, tool bars, scroll bars? This might help to debug peculiarities of your window manager. >> Thanks, it seems this is an essential detail that might be specific >> to your window manager. Do you see the same problem when saying >> M-x tool-bar-mode several times to turn the tool-bar on/off? > > If I run tool-bar-mode after tab-bar-mode, the tab bar pops up. If I > run tool-bar-mode to turn it on again, it stays visible. You mean first running of tool-bar-mode disables it? So the tab bar pops up and takes place previously used by tool-bar? This means there is no such problem with tool-bar? ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-01 19:57 ` Tabs Juri Linkov 2019-09-02 0:40 ` Tabs Stefan Kangas @ 2019-09-02 2:29 ` Eli Zaretskii 2019-09-02 19:29 ` Tabs Juri Linkov 1 sibling, 1 reply; 181+ messages in thread From: Eli Zaretskii @ 2019-09-02 2:29 UTC (permalink / raw) To: Juri Linkov; +Cc: rudalics, emacs-devel > From: Juri Linkov <juri@linkov.net> > Date: Sun, 01 Sep 2019 22:57:24 +0300 > Cc: emacs-devel@gnu.org > > > To make your branch build on Windows you need to install the attached > > patch at least (blindly copied from its X counterparts). Therafter, > > Emacs builds and comes up normally. > > Thanks, I pushed your patch to the branch. I hope it would be possible > to do refactoring on top of your patch to avoid duplicating GUI code > like Eli asked. I think such refactoring should be done before the branch is merged. Thanks. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-02 2:29 ` Tabs Eli Zaretskii @ 2019-09-02 19:29 ` Juri Linkov 2019-09-03 2:27 ` Tabs Eli Zaretskii 0 siblings, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-09-02 19:29 UTC (permalink / raw) To: Eli Zaretskii; +Cc: rudalics, emacs-devel >> > To make your branch build on Windows you need to install the attached >> > patch at least (blindly copied from its X counterparts). Therafter, >> > Emacs builds and comes up normally. >> >> Thanks, I pushed your patch to the branch. I hope it would be possible >> to do refactoring on top of your patch to avoid duplicating GUI code >> like Eli asked. > > I think such refactoring should be done before the branch is merged. I gather this is opportunity for refactoring of tool-bar code as well. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-02 19:29 ` Tabs Juri Linkov @ 2019-09-03 2:27 ` Eli Zaretskii 0 siblings, 0 replies; 181+ messages in thread From: Eli Zaretskii @ 2019-09-03 2:27 UTC (permalink / raw) To: Juri Linkov; +Cc: rudalics, emacs-devel > From: Juri Linkov <juri@linkov.net> > Cc: rudalics@gmx.at, emacs-devel@gnu.org > Date: Mon, 02 Sep 2019 22:29:55 +0300 > > >> > To make your branch build on Windows you need to install the attached > >> > patch at least (blindly copied from its X counterparts). Therafter, > >> > Emacs builds and comes up normally. > >> > >> Thanks, I pushed your patch to the branch. I hope it would be possible > >> to do refactoring on top of your patch to avoid duplicating GUI code > >> like Eli asked. > > > > I think such refactoring should be done before the branch is merged. > > I gather this is opportunity for refactoring of tool-bar code as well. Could be, yes. Although the tool bar is already implemented via frame-type specific hooks, so some of that work has been done already. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs (on macos) 2019-08-31 20:45 Tabs Juri Linkov 2019-09-01 8:12 ` Tabs martin rudalics @ 2019-09-01 8:59 ` Jean-Christophe Helary 2019-09-01 20:11 ` Juri Linkov 2019-09-01 9:28 ` Tabs Alan Mackenzie ` (4 subsequent siblings) 6 siblings, 1 reply; 181+ messages in thread From: Jean-Christophe Helary @ 2019-09-01 8:59 UTC (permalink / raw) To: Emacs developers When building on macos 10.14: cc nsterm.o outputs these error messages and the build fails: nsterm.m:2771:26: warning: 'scrollRect:by:' is deprecated: first deprecated in macOS 10.14 - Use NSScrollView to achieve scrolling views. [-Wdeprecated-declarations] [FRAME_NS_VIEW (f) scrollRect: src by: delta]; ^ /System/Library/Frameworks/AppKit.framework/Headers/NSView.h:260:1: note: 'scrollRect:by:' has been explicitly marked deprecated here - (void)scrollRect:(NSRect)rect by:(NSSize)delta NS_DEPRECATED_MAC(10_0, 10_14, "Use NSScrollView to achieve scrolling views."); ^ nsterm.m:5442:29: warning: 'NSFilenamesPboardType' is deprecated: first deprecated in macOS 10.14 - Create multiple pasteboard items with NSPasteboardTypeFileURL or kUTTypeFileURL instead [-Wdeprecated-declarations] NSFilenamesPboardType, ^ /System/Library/Frameworks/AppKit.framework/Headers/NSPasteboard.h:323:32: note: 'NSFilenamesPboardType' has been explicitly marked deprecated here APPKIT_EXTERN NSPasteboardType NSFilenamesPboardType NS_DEPRECATED_MAC(10_0, 10_14, "Create multiple pasteboard items with NSPasteboardTypeFileURL or ... ^ nsterm.m:6862:57: error: too few arguments to function call, expected 6, have 5 = window_from_coordinates (emacsframe, pt.x, pt.y, 0, 0); ~~~~~~~~~~~~~~~~~~~~~~~ ^ ./window.h:1091:1: note: 'window_from_coordinates' declared here extern Lisp_Object window_from_coordinates (struct frame *, int, int, ^ nsterm.m:8256:35: warning: 'NSFilenamesPboardType' is deprecated: first deprecated in macOS 10.14 - Create multiple pasteboard items with NSPasteboardTypeFileURL or kUTTypeFileURL instead [-Wdeprecated-declarations] else if ([type isEqualToString: NSFilenamesPboardType]) ^ /System/Library/Frameworks/AppKit.framework/Headers/NSPasteboard.h:323:32: note: 'NSFilenamesPboardType' has been explicitly marked deprecated here APPKIT_EXTERN NSPasteboardType NSFilenamesPboardType NS_DEPRECATED_MAC(10_0, 10_14, "Create multiple pasteboard items with NSPasteboardTypeFileURL or ... ^ nsterm.m:8271:35: warning: 'NSURLPboardType' is deprecated: first deprecated in macOS 10.14 [-Wdeprecated-declarations] else if ([type isEqualToString: NSURLPboardType]) ^~~~~~~~~~~~~~~ NSPasteboardTypeURL /System/Library/Frameworks/AppKit.framework/Headers/NSPasteboard.h:332:32: note: 'NSURLPboardType' has been explicitly marked deprecated here APPKIT_EXTERN NSPasteboardType NSURLPboardType NS_DEPRECATED_WITH_REPLACEMENT_MAC("NSPasteboardTypeURL", 10_0, 10_14); ^ nsterm.m:8280:35: warning: 'NSStringPboardType' is deprecated: first deprecated in macOS 10.14 [-Wdeprecated-declarations] else if ([type isEqualToString: NSStringPboardType] ^~~~~~~~~~~~~~~~~~ NSPasteboardTypeString /System/Library/Frameworks/AppKit.framework/Headers/NSPasteboard.h:322:32: note: 'NSStringPboardType' has been explicitly marked deprecated here APPKIT_EXTERN NSPasteboardType NSStringPboardType NS_DEPRECATED_WITH_REPLACEMENT_MAC("NSPasteboardTypeString", 10_0, 10_14); ^ nsterm.m:8281:38: warning: 'NSTabularTextPboardType' is deprecated: first deprecated in macOS 10.14 [-Wdeprecated-declarations] || [type isEqualToString: NSTabularTextPboardType]) ^~~~~~~~~~~~~~~~~~~~~~~ NSPasteboardTypeTabularText /System/Library/Frameworks/AppKit.framework/Headers/NSPasteboard.h:326:32: note: 'NSTabularTextPboardType' has been explicitly marked deprecated here APPKIT_EXTERN NSPasteboardType NSTabularTextPboardType NS_DEPRECATED_WITH_REPLACEMENT_MAC("NSPasteboardTypeTabularText", 10_0, 10_14); ^ 6 warnings and 1 error generated. make[1]: *** [nsterm.o] Error 1 make: *** [src] Error 2 Jean-Christophe Helary ----------------------------------------------- http://mac4translators.blogspot.com @brandelune > On Sep 1, 2019, at 5:45, Juri Linkov <juri@linkov.net> wrote: > > There is a long story of several attempts to implement tabs in Emacs. > Finally now a complete implementation is available for these > etc/TODO tasks: > > ** "Perspectives" are named persistent window configurations. We have > had the window configuration mechanism in GNU Emacs since the > beginning but we have never developed a good user interface to take > advantage of them. Eclipse's user interface seems to be good. > Perspectives also need to interact with the tabs. > > ** Having tabs above a window to switch buffers in it. > > Frame-local tabs represent window configurations. > Window-local tabs represent window buffers. > > Using such data structures means there is no need in special handling > of saving tabs in the desktop file - both persistence of frame tabs > and persistence of window tabs is already supported by the existing > code in master, because frame tabs are implemented as presentation of > window configurations in the frame parameter saved by frameset as > window states, and window tabs are implemented as presentation of > window buffers already saved by frameset. > > Also both implementation of frame tabs and implementation of > window tabs doesn't require using hooks - frame-local tabs for > window-configuration switching doesn't rely on hooks and > window-local tabs for switching window-buffers doesn't use hooks: > window-configuration-change-hook is not used, no hook > window-size-change-functions, no buffer-list-update-hook, no > post-command-hook is used, none of the hooks. > > All this makes the implementation as simple as possible, > providing only code for displaying and manipulating the already > existing data structures of window configurations and window buffers > represented in the new display elements tab-bar and tab-line > based on the existing elements tool-bar and header-line. > > The prefix '-bar' in tab-bar is by analogy with frame tool-bar, menu-bar. > The prefix '-line' in tab-line is by analogy with window header-line, mode-line. > > The tab-bar is located above the tool-bar like in web browsers. > The tab-line is located above the header-line > that is more related to the current buffer. > > Frame-local horizontal interface elements are in this order: > --- menu-bar --- > --- tab-bar --- > --- tool-bar --- > > Window-local horizontal interface elements are in this order: > --- tab-line --- > --- header-line --- > --- mode-line --- > > The implementation of the tab-bar replicates the existing tool-bar. > The implementation of the tab-line replicates the existing header-line. > > Tabs on the frame tab-bar represent window configurations. > Tabs on the window tab-line represent window buffers: previous on the > left side from the current tab (current-buffer) and next on the right. > > Clicking on the tab in the tab-bar selects its window configuration. > Clicking on the tab in the tab-line selects its window buffer. > Clicking on the close button closes the clicked tab. > > Keybindings for the tab-bar: > C-TAB - switches to the next frame tab; > S-C-TAB - switches to the previous frame tab. > Clicking on the plus sign adds a new window configuration tab to the tab-bar. > > Keybindings for the tab-line: > C-x <left> - switches to the previous window tab; > C-x <right> - switches to the next window tab. > Clicking on the plus sign adds a new buffer tab to the tab-line. > > 'C-x 6 2' creates a new frame-local tab; > 'C-x 6 b' switches to buffer in another frame-local tab; > 'C-x 6 f' and 'C-x 6 C-f' edit file in another frame-local tab. > > I invite everyone to try the new branch named 'feature/tabs' > and to report all found problems. > > Authors of all packages that currently had no choice other than to > misuse the header-line for displaying window tabs are welcome now to > adapt their packages for displaying window tabs on the new dedicated > tab-line that doesn't conflict with the header-line anymore. > For example, I tried just to replace header-line-format with > tab-line-format in the package awesome-tabs and the result > shows two separate rows - tab-line and header-line of Info buffer: > > <tabs.png> ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs (on macos) 2019-09-01 8:59 ` Tabs (on macos) Jean-Christophe Helary @ 2019-09-01 20:11 ` Juri Linkov 2019-09-16 13:41 ` Stefan Kangas 0 siblings, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-09-01 20:11 UTC (permalink / raw) To: Jean-Christophe Helary; +Cc: Emacs developers > When building on macos 10.14: > > cc nsterm.o outputs these error messages and the build fails: Thanks for the compilation output. It shows that the error is in nsterm.m. I missed this file because to find all files where changes are needed I used M-x rgrep RET and the alias 'ch' with the assumption that it searches in all C-related files. But this alias ignores C files with the .m file extension. In grep-files-aliases, "ch" is expanded to "*.[ch]". Should it be "*.[chm]"? Now I fixed the error in nsterm.m. This fix doesn't guarantee everything would work on macos. Maybe more refactoring is needed for macos code as well. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs (on macos) 2019-09-01 20:11 ` Juri Linkov @ 2019-09-16 13:41 ` Stefan Kangas 2019-09-16 20:33 ` Juri Linkov 0 siblings, 1 reply; 181+ messages in thread From: Stefan Kangas @ 2019-09-16 13:41 UTC (permalink / raw) To: Juri Linkov; +Cc: Jean-Christophe Helary, Emacs developers [-- Attachment #1: Type: text/plain, Size: 342 bytes --] Juri Linkov <juri@linkov.net> writes: > Now I fixed the error in nsterm.m. This fix doesn't guarantee > everything would work on macos. Maybe more refactoring > is needed for macos code as well. I've tried to build commit a7289c0488fd on macOS 10.12 but it fails with errors. I've attached the build output. Best regards, Stefan Kangas [-- Attachment #2: build.log --] [-- Type: application/octet-stream, Size: 17149 bytes --] /Library/Developer/CommandLineTools/usr/bin/make -C lib all /Library/Developer/CommandLineTools/usr/bin/make info-real info-dir CC acl_entries.o CC fingerprint.o /Library/Developer/CommandLineTools/usr/bin/make -C doc/lispref info make[2]: Nothing to be done for `info'. /Library/Developer/CommandLineTools/usr/bin/make -C doc/lispintro info make[2]: Nothing to be done for `info'. /Library/Developer/CommandLineTools/usr/bin/make -C doc/emacs info make[2]: Nothing to be done for `info'. /Library/Developer/CommandLineTools/usr/bin/make -C doc/misc info make[1]: Nothing to be done for `info-dir'. make[2]: Nothing to be done for `info'. CC canonicalize-lgpl.o CC copy-file-range.o CC euidaccess.o CC explicit_bzero.o CC faccessat.o CC fpending.o CC fstatat.o CC fsusage.o CC getgroups.o CC getopt.o CC getopt1.o CC group-member.o CC lstat.o CC memmem.o CC memrchr.o CC mktime.o CC open.o CC openat-proc.o CC readlink.o CC readlinkat.o CC regex.o CC sig2str.o CC symlink.o CC time_rz.o CC timegm.o CC acl-errno-valid.o CC acl-internal.o CC get-permissions.o CC set-permissions.o CC allocator.o CC binary-io.o CC c-ctype.o CC c-strcasecmp.o CC c-strncasecmp.o CC careadlinkat.o CC cloexec.o CC close-stream.o CC count-leading-zeros.o CC count-one-bits.o CC count-trailing-zeros.o CC md5.o CC sha1.o CC sha256.o CC sha512.o CC dtoastr.o CC dtotimespec.o CC filemode.o CC filevercmp.o CC gettime.o CC malloca.o CC nstrftime.o CC pipe2.o CC qcopy-acl.o CC stat-time.o CC tempname.o CC timespec.o CC timespec-add.o CC timespec-sub.o CC u64.o CC unistd.o CC utimens.o CC openat-die.o CC save-cwd.o AR libgnu.a /Library/Developer/CommandLineTools/usr/bin/ranlib: file: libgnu.a(u64.o) has no symbols /Library/Developer/CommandLineTools/usr/bin/ranlib: file: libgnu.a(unistd.o) has no symbols /Library/Developer/CommandLineTools/usr/bin/ranlib: file: libgnu.a(u64.o) has no symbols /Library/Developer/CommandLineTools/usr/bin/ranlib: file: libgnu.a(unistd.o) has no symbols /Library/Developer/CommandLineTools/usr/bin/make -C lib-src all CCLD ctags CCLD etags CCLD emacsclient CCLD ebrowse CCLD hexl CC pop.o CCLD make-docfile CCLD make-fingerprint CCLD movemail /Library/Developer/CommandLineTools/usr/bin/make -C src VCSWITNESS='$(srcdir)/../.git/logs/HEAD' all /Library/Developer/CommandLineTools/usr/bin/make -C ../admin/charsets all GEN globals.h GEN buildobj.h make[2]: Nothing to be done for `all'. /Library/Developer/CommandLineTools/usr/bin/make -C ../admin/unidata charscript.el make[2]: Nothing to be done for `charscript.el'. /Library/Developer/CommandLineTools/usr/bin/make -C ../admin/charsets cp51932.el /Library/Developer/CommandLineTools/usr/bin/make -C ../admin/charsets eucjp-ms.el make[2]: Nothing to be done for `cp51932.el'. make[2]: Nothing to be done for `eucjp-ms.el'. CC dispnew.o CC frame.o CC scroll.o CC xdisp.o xdisp.c:13345:19: warning: implicit declaration of function 'gui_mouse_grabbed' is invalid in C99 [-Wimplicit-function-declaration] mouse_down_p = (gui_mouse_grabbed (dpyinfo) ^ CC menu.o CC window.o CC charset.o CC coding.o CC category.o CC ccl.o CC character.o CC chartab.o CC bidi.o CC cm.o CC term.o CC terminal.o CC xfaces.o CC emacs.o CC keyboard.o CC macros.o CC keymap.o 1 warning generated. CC sysdep.o CC bignum.o CC buffer.o CC filelock.o CC insdel.o CC marker.o CC minibuf.o CC fileio.o CC dired.o CC cmds.o CC casetab.o CC casefiddle.o CC indent.o CC search.o CC regex-emacs.o CC undo.o CC alloc.o CC pdumper.o CC data.o CC doc.o CC editfns.o CC callint.o CC eval.o CC floatfns.o CC fns.o CC font.o CC print.o CC lread.o CC syntax.o CC bytecode.o CC process.o CC gnutls.o CC callproc.o CC region-cache.o CC sound.o CC timefns.o CC atimer.o CC doprnt.o CC intervals.o CC textprop.o CC composite.o CC xml.o CC lcms.o CC kqueue.o CC profiler.o CC decompress.o CC thread.o CC systhread.o CC fontset.o CC fringe.o CC image.o CC nsterm.o CC nsfns.o CC nsmenu.o nsfns.m:636:7: warning: implicit declaration of function 'FRAME_EXTERNAL_TAB_BAR' is invalid in C99 [-Wimplicit-function-declaration] FRAME_EXTERNAL_TAB_BAR (f) = 1; ^ nsfns.m:636:34: error: expression is not assignable FRAME_EXTERNAL_TAB_BAR (f) = 1; ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsfns.m:644:38: error: expression is not assignable FRAME_EXTERNAL_TAB_BAR (f) = 0; ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsfns.m:1375:65: error: too few arguments to function call, expected 6, have 5 &x_width, &x_height); ^ ./frame.h:1635:1: note: 'gui_figure_window_size' declared here extern long gui_figure_window_size (struct frame *, Lisp_Object, bool, bool, int *, int *); ^ nsfns.m:2867:24: warning: 'NSWindow' may not respond to 'tabbar' int tab_bar_height = FRAME_TABBAR_HEIGHT (f); ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsfns.m:2867:24: warning: 'NSWindow' may not respond to 'tabbar' int tab_bar_height = FRAME_TABBAR_HEIGHT (f); ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ 3 warnings and 3 errors generated. make[1]: *** [nsfns.o] Error 1 make[1]: *** Waiting for unfinished jobs.... nsterm.m:1092:27: warning: implicit declaration of function 'FRAME_EXTERNAL_TAB_BAR' is invalid in C99 [-Wimplicit-function-declaration] BOOL tarbar_visible = FRAME_EXTERNAL_TAB_BAR (f) ? YES : NO; ^ nsterm.m:1690:18: warning: 'NSWindow' may not respond to 'tabbar' - FRAME_TABBAR_HEIGHT (f) - FRAME_TOOLBAR_HEIGHT (f)) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1690:18: warning: 'NSWindow' may not respond to 'tabbar' - FRAME_TABBAR_HEIGHT (f) - FRAME_TOOLBAR_HEIGHT (f)) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1708:56: warning: 'NSWindow' may not respond to 'tabbar' f->top_pos = FRAME_PIXEL_HEIGHT (parent) + FRAME_TABBAR_HEIGHT (parent) + FRAME_TOOLBAR_HEIGHT (parent) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1708:56: warning: 'NSWindow' may not respond to 'tabbar' f->top_pos = FRAME_PIXEL_HEIGHT (parent) + FRAME_TABBAR_HEIGHT (parent) + FRAME_TOOLBAR_HEIGHT (parent) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1771:9: warning: 'NSWindow' may not respond to 'tabbar' + FRAME_TABBAR_HEIGHT (f) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1771:9: warning: 'NSWindow' may not respond to 'tabbar' + FRAME_TABBAR_HEIGHT (f) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1788:18: warning: 'NSWindow' may not respond to 'tabbar' make_fixnum (FRAME_TABBAR_HEIGHT (f) + FRAME_TOOLBAR_HEIGHT (f)))); ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1788:18: warning: 'NSWindow' may not respond to 'tabbar' make_fixnum (FRAME_TABBAR_HEIGHT (f) + FRAME_TOOLBAR_HEIGHT (f)))); ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1830:19: warning: instance method '-setTabbar:' not found (return type defaults to 'id') [-Wobjc-method-access] [window setTabbar: nil]; ^~~~~~~~~ /System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h:193:12: note: receiver is instance of class declared here @interface NSWindow : NSResponder <NSAnimatablePropertyContainer, NSUserInterfaceValidations, NSUserInterfaceItemIdentification, NSAppearanceCustomization, NSAccessibilityElement, NSAccessibility> ^ nsterm.m:2415:47: warning: 'NSWindow' may not respond to 'tabbar' FRAME_NS_TITLEBAR_HEIGHT(f) + FRAME_TABBAR_HEIGHT(f) + FRAME_TOOLBAR_HEIGHT(f)); ^~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:2415:47: warning: 'NSWindow' may not respond to 'tabbar' FRAME_NS_TITLEBAR_HEIGHT(f) + FRAME_TABBAR_HEIGHT(f) + FRAME_TOOLBAR_HEIGHT(f)); ^~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:6972:23: warning: 'NSWindow' may not respond to 'tabbar' tabbar_height = FRAME_TABBAR_HEIGHT (emacsframe); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:6972:23: warning: 'NSWindow' may not respond to 'tabbar' tabbar_height = FRAME_TABBAR_HEIGHT (emacsframe); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:6988:11: warning: 'NSWindow' may not respond to 'tabbar' if (FRAME_TABBAR_HEIGHT (emacsframe) == 0 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:6988:11: warning: 'NSWindow' may not respond to 'tabbar' if (FRAME_TABBAR_HEIGHT (emacsframe) == 0 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:7091:11: warning: 'NSWindow' may not respond to 'tabbar' + FRAME_TABBAR_HEIGHT (emacsframe) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:7091:11: warning: 'NSWindow' may not respond to 'tabbar' + FRAME_TABBAR_HEIGHT (emacsframe) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:7327:11: warning: instance method '-setTabbar:' not found (return type defaults to 'id') [-Wobjc-method-access] [window setTabbar: tabbar]; ^~~~~~~~~ /System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h:193:12: note: receiver is instance of class declared here @interface NSWindow : NSResponder <NSAnimatablePropertyContainer, NSUserInterfaceValidations, NSUserInterfaceItemIdentification, NSAppearanceCustomization, NSAccessibilityElement, NSAccessibility> ^ nsterm.m:7759:26: error: use of undeclared identifier 'NSApplicationPresentationAutoHideTabbar'; did you mean 'NSApplicationPresentationAutoHideToolbar'? return proposedOptions|NSApplicationPresentationAutoHideTabbar|NSApplicationPresentationAutoHideToolbar; ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ NSApplicationPresentationAutoHideToolbar /System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h:104:5: note: 'NSApplicationPresentationAutoHideToolbar' declared here NSApplicationPresentationAutoHideToolbar NS_ENUM_AVAILABLE_MAC(10_7) = (1 << 11), // Fullscreen window toolbar is detached from window and hides/shows with autoHidden menuBar. May be used only when both NSApplicationPresentationFullScreen and NSApplicationPresentationAutoHideMenuBar are also set ^ 19 warnings and 1 error generated. make[1]: *** [nsterm.o] Error 1 nsmenu.m:1038:10: warning: 'NSWindow' may not respond to 'tabbar' oldh = FRAME_TABBAR_HEIGHT (f); ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsmenu.m:1038:10: warning: 'NSWindow' may not respond to 'tabbar' oldh = FRAME_TABBAR_HEIGHT (f); ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsmenu.m:1144:15: warning: 'NSWindow' may not respond to 'tabbar' if (oldh != FRAME_TABBAR_HEIGHT (f)) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsmenu.m:1144:15: warning: 'NSWindow' may not respond to 'tabbar' if (oldh != FRAME_TABBAR_HEIGHT (f)) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsmenu.m:1146:33: warning: 'NSWindow' may not respond to 'tabbar' if (view->wait_for_tab_bar && FRAME_TABBAR_HEIGHT (f) > 0) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsmenu.m:1146:33: warning: 'NSWindow' may not respond to 'tabbar' if (view->wait_for_tab_bar && FRAME_TABBAR_HEIGHT (f) > 0) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsmenu.m:1238:13: warning: instance method '-setTabTip:' not found (return type defaults to 'id') [-Wobjc-method-access] [item setTabTip: [NSString stringWithUTF8String: help]]; ^~~~~~~~~ /System/Library/Frameworks/AppKit.framework/Headers/NSToolbarItem.h:17:12: note: receiver is instance of class declared here @interface NSToolbarItem : NSObject <NSCopying, NSValidatedUserInterfaceItem> { ^ 7 warnings generated. make: *** [src] Error 2 ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs (on macos) 2019-09-16 13:41 ` Stefan Kangas @ 2019-09-16 20:33 ` Juri Linkov 2019-09-17 9:11 ` Stefan Kangas 0 siblings, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-09-16 20:33 UTC (permalink / raw) To: Stefan Kangas; +Cc: Jean-Christophe Helary, Emacs developers >> Now I fixed the error in nsterm.m. This fix doesn't guarantee >> everything would work on macos. Maybe more refactoring >> is needed for macos code as well. > > I've tried to build commit a7289c0488fd on macOS 10.12 but it fails > with errors. I've attached the build output. Thanks for the build output, I rely on your help because I have no macOS, I can even acquire a Windows box when necessary, but no one is using macOS in vicinity. Please try again to recompile. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs (on macos) 2019-09-16 20:33 ` Juri Linkov @ 2019-09-17 9:11 ` Stefan Kangas 2019-09-17 9:29 ` Stefan Kangas 0 siblings, 1 reply; 181+ messages in thread From: Stefan Kangas @ 2019-09-17 9:11 UTC (permalink / raw) To: Juri Linkov; +Cc: Jean-Christophe Helary, Emacs developers [-- Attachment #1: Type: text/plain, Size: 347 bytes --] Juri Linkov <juri@linkov.net> writes: > Thanks for the build output, I rely on your help because I have > no macOS, I can even acquire a Windows box when necessary, but > no one is using macOS in vicinity. Please try again to recompile. I'm happy to help. See the attached failing build log for commit 4260b29478. Best regards, Stefan Kangas [-- Attachment #2: build.log --] [-- Type: application/octet-stream, Size: 42309 bytes --] cd . && ./autogen.sh autoconf Checking whether you have the necessary tools... (Read INSTALL.REPO for more details on building Emacs) Checking for autoconf (need at least version 2.65) ... ok Your system has the required tools. Running 'autoreconf -fi -I m4' ... You can now run './configure'. if [ -x ./config.status ]; then \ ./config.status --recheck; \ else \ ./configure --cache-file=/dev/null; \ fi running CONFIG_SHELL=/bin/sh /bin/sh ./configure --no-create --no-recursion checking for xcrun... xcrun checking for make... yes checking for GNU Make... make checking build system type... x86_64-apple-darwin16.7.0 checking host system type... x86_64-apple-darwin16.7.0 checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to enable C11 features... none needed checking for ar... ar checking whether gcc and cc understand -c and -o together... yes checking for putenv... yes checking for sbrk... yes checking for fchmod... yes checking for canonicalize_file_name... no checking for getcwd... yes checking for readlink... yes checking for realpath... yes checking for readlinkat... yes checking for explicit_bzero... no checking for faccessat... yes checking for fcntl... yes checking for fdopendir... yes checking for fstatat... yes checking for fsync... yes checking for gettimeofday... yes checking for lstat... yes checking for mkostemp... yes checking for tzset... yes checking for pipe2... no checking for pselect... yes checking for isblank... yes checking for iswctype... yes checking for strtoimax... yes checking for symlink... yes checking for localtime_r... yes checking for timegm... yes checking for futimes... yes checking for futimesat... no checking for futimens... no checking for utimensat... no checking for lutimes... yes checking for getdtablesize... yes checking how to run the C preprocessor... gcc -E checking for grep that handles long lines and -e... /usr/bin/grep checking for egrep... /usr/bin/grep -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking minix/config.h usability... no checking minix/config.h presence... no checking for minix/config.h... no checking whether it is safe to define __EXTENSIONS__... yes checking whether _XOPEN_SOURCE should be defined... no checking for Minix Amsterdam compiler... no checking for ranlib... ranlib checking for special C compiler options needed for large files... no checking for _FILE_OFFSET_BITS value needed for large files... no checking whether gcc accepts -g3 -O2... yes checking whether the compiler is clang... yes checking whether C compiler handles -Werror -Wunknown-warning-option... yes checking whether C compiler handles -Wno-switch... yes checking whether C compiler handles -Wno-pointer-sign... yes checking whether C compiler handles -Wno-string-plus-int... yes checking whether C compiler handles -Wno-unknown-attributes... yes checking whether C compiler handles -Wno-initializer-overrides... yes checking whether C compiler handles -Wno-tautological-compare... yes checking whether C compiler handles -Wno-tautological-constant-out-of-range-compare... yes checking for a BSD-compatible install... /usr/local/bin/ginstall -c checking command to symlink files in the same directory... ln -s checking for install-info... /usr/bin/install-info checking for gzip... /usr/bin/gzip checking for 'find' args to delete a file... -delete checking for brew... brew checking for makeinfo... /usr/local/opt/texinfo/bin/makeinfo checking for -znocombreloc... not needed checking whether addresses are sanitized... no checking for library containing sqrt... none required checking for pkg-config... /usr/local/bin/pkg-config checking pkg-config is at least version 0.9.0... yes checking for machine/soundcard.h... no checking for sys/soundcard.h... no checking for soundcard.h... no checking for mmsystem.h... no checking for _oss_ioctl in -lossaudio... no checking for alsa >= 1.0.0... no checking for linux/fs.h... no checking for malloc.h... no checking for sys/systeminfo.h... no checking for sys/sysinfo.h... no checking for coff.h... no checking for pty.h... no checking for sys/resource.h... yes checking for sys/utsname.h... yes checking for pwd.h... yes checking for utmp.h... yes checking for util.h... yes checking for sys/prctl.h... no checking for sys/socket.h... yes checking for stdlib.h... (cached) yes checking for unistd.h... (cached) yes checking for sys/param.h... yes checking for pthread.h... yes checking for malloc/malloc.h... yes checking for sys/un.h... yes checking for dirent.h... yes checking for execinfo.h... yes checking for stdio_ext.h... no checking for sys/vfs.h... no checking for sys/fs_types.h... no checking for getopt.h... yes checking for sys/cdefs.h... yes checking for sys/time.h... yes checking for ieee754.h... no checking for limits.h... yes checking for wchar.h... yes checking for stdint.h... (cached) yes checking for inttypes.h... (cached) yes checking for sys/select.h... yes checking for sys/stat.h... (cached) yes checking for ADDR_NO_RANDOMIZE... no checking for term.h... yes checking whether time.h and sys/time.h may both be included... yes checking whether sys_siglist is declared... yes checking for sys/wait.h that is POSIX.1 compatible... yes checking for net/if.h... yes checking for ifaddrs.h... yes checking for net/if_dl.h... yes checking for struct ifreq.ifr_flags... yes checking for struct ifreq.ifr_hwaddr... no checking for struct ifreq.ifr_netmask... no checking for struct ifreq.ifr_broadaddr... yes checking for struct ifreq.ifr_addr... yes checking for struct ifreq.ifr_addr.sa_len... yes checking whether gcc understands -MMD -MF... yes checking for X... libraries /usr/X11/lib, headers /usr/X11/include checking AppKit/AppKit.h usability... yes checking AppKit/AppKit.h presence... yes checking for AppKit/AppKit.h... yes checking for Mac OS X 10.6 or newer... yes checking for gcc... gcc checking whether we are using the GNU Objective C compiler... yes checking whether gcc accepts -g... yes checking if the Objective C compiler supports instancetype... yes checking whether malloc is Doug Lea style... no checking for getpagesize... yes checking for working mmap... yes checking for main in -lXbsd... no checking for pthread library... none needed checking for thread support... yes checking for librsvg-2.0 >= 2.14.0... no checking for getaddrinfo_a in -lanl... no checking for dbus-1 >= 1.0... no checking for lgetfilecon in -lselinux... no checking for gnutls >= 2.12.2... yes checking for libsystemd >= 222... no checking for jansson >= 2.7... no checking sys/inotify.h usability... no checking sys/inotify.h presence... no checking for sys/inotify.h... no checking for libkqueue... no checking for library containing kqueue... none required checking for lcms2... yes checking for library containing inflateEnd... -lz checking gpm.h usability... no checking gpm.h presence... no checking for gpm.h... no checking for libxml-2.0 > 2.6.17... yes checking for htmlReadMemory in -lxml2... yes checking for maillock in -lmail... no checking for maillock in -llockfile... no checking for liblockfile.so... no checking maillock.h usability... no checking maillock.h presence... no checking for maillock.h... no checking for accept4... no checking for fchdir... yes checking for gethostname... yes checking for getrusage... yes checking for get_current_dir_name... no checking for lrand48... yes checking for random... yes checking for rint... yes checking for trunc... yes checking for select... yes checking for getpagesize... (cached) yes checking for setlocale... yes checking for newlocale... yes checking for getrlimit... yes checking for setrlimit... yes checking for shutdown... yes checking for pthread_sigmask... (cached) yes checking for strsignal... yes checking for setitimer... yes checking for timer_getoverrun... no checking for sendto... yes checking for recvfrom... yes checking for getsockname... yes checking for getifaddrs... yes checking for freeifaddrs... yes checking for gai_strerror... yes checking for sync... yes checking for getpwent... yes checking for endpwent... yes checking for getgrent... yes checking for endgrent... yes checking for cfmakeraw... yes checking for cfsetspeed... yes checking for __executable_start... no checking for log2... yes checking for prctl... no checking for aligned_alloc... no checking for posix_memalign... yes checking whether aligned_alloc is declared... no checking for posix_madvise... yes checking for __builtin_frame_address... yes checking for __builtin_unwind_init... yes checking for _LARGEFILE_SOURCE value needed for large files... no checking for grantpt... yes checking for getpt... no checking for posix_openpt... yes checking for library containing tputs... -lncurses checking for timerfd interface... no checking whether signals can be handled on alternate stack... yes checking gmp.h usability... yes checking gmp.h presence... yes checking for gmp.h... yes checking for library containing __gmpz_roinit_n... -lgmp checking valgrind/valgrind.h usability... no checking valgrind/valgrind.h presence... no checking for valgrind/valgrind.h... no checking for struct unipair.unicode... no checking for pid_t... yes checking vfork.h usability... no checking vfork.h presence... no checking for vfork.h... no checking for fork... yes checking for vfork... yes checking for working fork... yes checking for working vfork... (cached) yes checking for snprintf... yes checking whether GLib is linked in... no checking for nl_langinfo and CODESET... yes checking for nl_langinfo and _NL_PAPER_WIDTH... no checking for mbstate_t... yes checking for _setjmp... yes checking for sigsetjmp... yes checking for usable FIONREAD... yes checking for usable SIGIO... yes checking for struct alignment... yes checking for typeof syntax and keyword spelling... typeof checking for statement expressions... yes checking for working alloca.h... yes checking for alloca... yes checking whether // is distinct from /... no checking whether realpath works... no checking for unsigned long long int... yes checking whether byte ordering is bigendian... no checking whether the preprocessor supports include_next... yes checking whether system header files limit the line length... no checking if environ is properly declared... no checking for complete errno.h... yes checking whether lstat correctly handles trailing slash... no checking for mode_t... yes checking for st_dm_mode in struct stat... no checking whether strmode is declared... yes checking for gawk... gawk checking for getopt.h... (cached) yes checking for getopt_long_only... yes checking whether getopt is POSIX compatible... no checking for C/C++ restrict keyword... __restrict checking for struct timeval... yes checking for wide-enough struct timeval.tv_sec member... yes checking whether limits.h has LLONG_MAX, WORD_BIT, ULLONG_WIDTH etc.... no checking for long long int... yes checking whether stdint.h conforms to C99... no checking sys/inttypes.h usability... no checking sys/inttypes.h presence... no checking for sys/inttypes.h... no checking sys/bitypes.h usability... no checking sys/bitypes.h presence... no checking for sys/bitypes.h... no checking for bit size of ptrdiff_t... 64 checking for bit size of size_t... 64 checking for bit size of sig_atomic_t... 32 checking for bit size of wchar_t... 32 checking for bit size of wint_t... 32 checking whether sig_atomic_t is signed... yes checking whether wchar_t is signed... yes checking whether wint_t is signed... yes checking for ptrdiff_t integer literal suffix... l checking for size_t integer literal suffix... ul checking for sig_atomic_t integer literal suffix... checking for wchar_t integer literal suffix... checking for wint_t integer literal suffix... checking whether memmem is declared... yes checking whether memrchr is declared... no checking whether <limits.h> defines MIN and MAX... no checking whether <sys/param.h> defines MIN and MAX... yes checking whether time_t is signed... yes checking whether alarm is declared... yes checking for working mktime... no checking whether struct tm is in sys/time.h or time.h... time.h checking for struct tm.tm_zone... yes checking for struct tm.tm_gmtoff... yes checking whether <sys/select.h> is self-contained... yes checking for inline... inline checking for stdlib.h... (cached) yes checking for GNU libc compatible malloc... yes checking whether we are using the GNU C Library >= 2.1 or uClibc... no checking for sigset_t... yes checking for wchar_t... yes checking whether strnlen is declared... yes checking whether strtoimax is declared... yes checking for a thread-safe mkdir -p... /usr/local/bin/gmkdir -p checking whether stat file-mode macros are broken... no checking for struct timespec in <time.h>... yes checking whether clearerr_unlocked is declared... yes checking whether feof_unlocked is declared... yes checking whether ferror_unlocked is declared... yes checking whether fflush_unlocked is declared... no checking whether fgets_unlocked is declared... no checking whether fputc_unlocked is declared... no checking whether fputs_unlocked is declared... no checking whether fread_unlocked is declared... no checking whether fwrite_unlocked is declared... no checking whether getc_unlocked is declared... yes checking whether getchar_unlocked is declared... yes checking whether putc_unlocked is declared... yes checking whether putchar_unlocked is declared... yes checking whether the utimes function works... yes checking type of array argument to getgroups... gid_t checking whether getdtablesize is declared... yes checking for O_CLOEXEC... yes checking for promoted mode_t type... int checking sys/acl.h usability... yes checking sys/acl.h presence... yes checking for sys/acl.h... yes checking for library containing acl_get_file... none required checking for acl_get_file... yes checking for acl_get_fd... yes checking for acl_set_file... yes checking for acl_set_fd... yes checking for acl_free... yes checking for acl_from_mode... no checking for acl_from_text... yes checking for acl_delete_def_file... yes checking for acl_extended_file... no checking for acl_delete_fd_np... yes checking for acl_delete_file_np... yes checking for acl_copy_ext_native... yes checking for acl_create_entry_np... yes checking for acl_to_short_text... no checking for acl_free_text... no checking for working acl_get_file... yes checking acl/libacl.h usability... no checking acl/libacl.h presence... no checking for acl/libacl.h... no checking for acl_entries... no checking for ACL_FIRST_ENTRY... yes checking for ACL_TYPE_EXTENDED... yes checking for alloca as a compiler built-in... yes checking for __builtin_expect... yes checking byteswap.h usability... no checking byteswap.h presence... no checking for byteswap.h... no checking for library containing clock_gettime... none required checking for clock_gettime... yes checking for clock_settime... yes checking for copy_file_range... no checking for d_type member in directory struct... yes checking whether // is distinct from /... (cached) no checking whether dup2 works... yes checking for library containing backtrace_symbols_fd... none required checking for explicit_memset... no checking for access... yes checking whether fcntl handles F_DUPFD correctly... yes checking whether fcntl understands F_DUPFD_CLOEXEC... yes checking whether fdopendir is declared... yes checking whether fdopendir works... yes checking for flexible array member... yes checking for __fpending... no checking whether fstatat (..., 0) works... yes checking for sys/mount.h... yes checking how to get file system space usage... checking for statvfs function (SVR4)... no checking for two-argument statfs with statfs.f_frsize member... no checking for 3-argument statfs function (DEC OSF/1)... no checking for two-argument statfs with statfs.f_bsize member (AIX, 4.3BSD)... yes checking sys/fs/s5param.h usability... no checking sys/fs/s5param.h presence... no checking for sys/fs/s5param.h... no checking sys/statfs.h usability... no checking sys/statfs.h presence... no checking for sys/statfs.h... no checking for statfs that truncates block counts... no checking for getloadavg... yes checking sys/loadavg.h usability... no checking sys/loadavg.h presence... no checking for sys/loadavg.h... no checking whether getloadavg is declared... yes checking whether gettimeofday clobbers localtime buffer... no checking for gettimeofday with POSIX signature... yes checking for memmem... yes checking whether memmem works... no checking for memrchr... no checking whether signature of pselect conforms to POSIX... yes checking whether pselect detects invalid fds... yes checking whether pthread_sigmask is a macro... no checking whether pthread_sigmask works without -lpthread... yes checking whether pthread_sigmask returns error numbers... yes checking whether pthread_sigmask unblocks signals correctly... guessing yes checking whether readlink signature is correct... yes checking whether readlink handles trailing slash correctly... no checking whether readlinkat signature is correct... yes checking for working re_compile_pattern... no checking libintl.h usability... no checking libintl.h presence... no checking for libintl.h... no checking whether isblank is declared... yes checking for sig2str... no checking for volatile sig_atomic_t... yes checking for sighandler_t... no checking for socklen_t... yes checking for ssize_t... yes checking for struct stat.st_atim.tv_nsec... no checking for struct stat.st_atimespec.tv_nsec... yes checking for struct stat.st_birthtimespec.tv_nsec... yes checking for working stdalign.h... yes checking for good max_align_t... yes checking whether NULL can be used in arbitrary expressions... yes checking which flavor of printf attribute matches inttypes macros... system checking for stpcpy... yes checking for working strnlen... yes checking whether strtoimax works... yes checking whether symlink handles trailing slash correctly... no checking for nlink_t... yes checking whether localtime_r is declared... yes checking whether localtime_r is compatible with its POSIX signature... yes checking whether localtime loops forever near extrema... no checking for timezone_t... no checking for library containing timer_settime... no checking for timer_settime... no checking for variable-length arrays... yes checking whether open recognizes a trailing slash... no checking for euidaccess... no checking libgen.h usability... yes checking libgen.h presence... yes checking for libgen.h... yes checking for getgroups... yes checking for working getgroups... yes checking for library containing eaccess... no checking for eaccess... no checking for group_member... no checking for getgroups... (cached) yes checking for working getgroups... (cached) yes checking whether getgroups handles negative values... no checking whether the compiler supports the __inline keyword... yes checking for __mktime_internal... no checking for gcc option to disable position independent executables... not needed Configured for 'x86_64-apple-darwin16.7.0'. Where should the build process find the source code? . What compiler should emacs be built with? gcc -g3 -O2 Should Emacs use the GNU version of malloc? no (The GNU allocators don't work with this system configuration.) Should Emacs use a relocating allocator for buffers? no Should Emacs use mmap(2) for buffer allocation? no What window system should Emacs use? nextstep What toolkit should Emacs use? none Where do we find X Windows header files? /usr/X11/include Where do we find X Windows libraries? /usr/X11/lib Does Emacs use -lXaw3d? no Does Emacs use -lXpm? no Does Emacs use -ljpeg? no Does Emacs use -ltiff? no Does Emacs use a gif library? no Does Emacs use a png library? no Does Emacs use -lrsvg-2? no Does Emacs use cairo? no Does Emacs use -llcms2? yes Does Emacs use imagemagick? no Does Emacs support sound? no Does Emacs use -lgpm? no Does Emacs use -ldbus? no Does Emacs use -lgconf? no Does Emacs use GSettings? no Does Emacs use a file notification library? yes (kqueue) Does Emacs use access control lists? yes Does Emacs use -lselinux? no Does Emacs use -lgnutls? yes Does Emacs use -lxml2? yes Does Emacs use -lfreetype? no Does Emacs use HarfBuzz? no Does Emacs use -lm17n-flt? no Does Emacs use -lotf? no Does Emacs use -lxft? no Does Emacs use -lsystemd? no Does Emacs use -ljansson? no Does Emacs use -lgmp? yes Does Emacs directly use zlib? yes Does Emacs have dynamic modules support? no Does Emacs use toolkit scroll bars? yes Does Emacs support Xwidgets (requires gtk3)? no Does Emacs have threading support in lisp? yes Does Emacs support the portable dumper? yes Does Emacs support legacy unexec dumping? no Which dumping strategy does Emacs use? pdumper Run 'make' to build Emacs, then run 'src/emacs' to test it. Run 'make install' in order to build an application bundle. The application will go to nextstep/Emacs.app and can be run or moved from there. The application will be fully self-contained. configure: creating ./config.status configure: WARNING: This configuration installs a 'movemail' program that does not retrieve POP3 email. By default, Emacs 25 and earlier installed a 'movemail' program that retrieved POP3 email via only insecure channels, a practice that is no longer recommended but that you can continue to support by using './configure --with-pop'. configure: You might want to install GNU Mailutils <https://mailutils.org> and use './configure --with-mailutils'. MAKE='/Library/Developer/CommandLineTools/usr/bin/make' ./config.status config.status: creating src/emacs-module.h config.status: creating nextstep/Cocoa/Emacs.base/Contents/Info.plist config.status: creating nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj/InfoPlist.strings config.status: creating Makefile config.status: creating lib/gnulib.mk config.status: creating ./doc/man/emacs.1 config.status: creating lib/Makefile config.status: creating lib-src/Makefile config.status: creating oldXMenu/Makefile config.status: creating doc/emacs/Makefile config.status: creating doc/misc/Makefile config.status: creating doc/lispintro/Makefile config.status: creating doc/lispref/Makefile config.status: creating src/Makefile config.status: creating lwlib/Makefile config.status: creating lisp/Makefile config.status: creating leim/Makefile config.status: creating nextstep/Makefile config.status: creating nt/Makefile config.status: creating test/Makefile config.status: creating admin/charsets/Makefile config.status: creating admin/unidata/Makefile config.status: creating admin/grammars/Makefile config.status: creating src/config.h config.status: src/config.h is unchanged config.status: executing src/epaths.h commands config.status: executing src/.gdbinit commands config.status: executing doc/emacs/emacsver.texi commands config.status: executing etc-refcards-emacsver.tex commands /Library/Developer/CommandLineTools/usr/bin/make -C lib all /Library/Developer/CommandLineTools/usr/bin/make info-real info-dir GEN alloca.h GEN byteswap.h /Library/Developer/CommandLineTools/usr/bin/make -C doc/lispref info /Library/Developer/CommandLineTools/usr/bin/make -C doc/lispintro info GEN ../../info/elisp.info GEN dirent.h make[2]: Nothing to be done for `info'. /Library/Developer/CommandLineTools/usr/bin/make -C doc/emacs info GEN ../../info/emacs.info GEN fcntl.h GEN getopt.h GEN getopt-cdefs.h GEN ieee754.h GEN inttypes.h GEN limits.h GEN signal.h GEN stdint.h GEN stdio.h GEN stdlib.h GEN string.h GEN sys/select.h GEN sys/stat.h GEN sys/time.h GEN sys/types.h GEN time.h GEN unistd.h CC fingerprint.o CC acl_entries.o CC canonicalize-lgpl.o CC copy-file-range.o CC euidaccess.o CC explicit_bzero.o CC faccessat.o CC fpending.o CC fstatat.o CC fsusage.o CC getgroups.o CC getopt.o CC getopt1.o CC group-member.o CC lstat.o CC memmem.o CC memrchr.o CC mktime.o CC open.o CC openat-proc.o CC readlink.o CC readlinkat.o CC regex.o CC sig2str.o CC symlink.o CC time_rz.o CC timegm.o CC acl-errno-valid.o CC acl-internal.o CC get-permissions.o CC set-permissions.o CC allocator.o CC binary-io.o CC c-ctype.o CC c-strcasecmp.o CC c-strncasecmp.o CC careadlinkat.o CC cloexec.o CC close-stream.o CC count-leading-zeros.o CC count-one-bits.o CC count-trailing-zeros.o CC md5.o CC sha1.o CC sha256.o CC sha512.o CC dtoastr.o CC dtotimespec.o CC filemode.o CC filevercmp.o CC gettime.o CC malloca.o CC nstrftime.o CC pipe2.o CC qcopy-acl.o CC stat-time.o CC tempname.o CC timespec.o CC timespec-add.o CC timespec-sub.o CC u64.o CC unistd.o CC utimens.o CC openat-die.o CC save-cwd.o AR libgnu.a /Library/Developer/CommandLineTools/usr/bin/ranlib: file: libgnu.a(u64.o) has no symbols /Library/Developer/CommandLineTools/usr/bin/ranlib: file: libgnu.a(unistd.o) has no symbols /Library/Developer/CommandLineTools/usr/bin/ranlib: file: libgnu.a(u64.o) has no symbols /Library/Developer/CommandLineTools/usr/bin/ranlib: file: libgnu.a(unistd.o) has no symbols /Library/Developer/CommandLineTools/usr/bin/make -C doc/misc info GEN ../../info/emacs-mime.info GEN ../../info/efaq.info GEN ../../info/gnus.info /Library/Developer/CommandLineTools/usr/bin/make -C lib-src all CCLD etags CCLD ctags GEN ../../info/smtpmail.info CCLD emacsclient CCLD ebrowse GEN info/dir CCLD hexl CC pop.o CCLD make-docfile CCLD make-fingerprint CCLD movemail /Library/Developer/CommandLineTools/usr/bin/make -C src VCSWITNESS='$(srcdir)/../.git/logs/HEAD' all GEN lisp.mk GEN globals.h GEN buildobj.h /Library/Developer/CommandLineTools/usr/bin/make -C ../admin/charsets all make[2]: Nothing to be done for `all'. /Library/Developer/CommandLineTools/usr/bin/make -C ../admin/unidata charscript.el make[2]: Nothing to be done for `charscript.el'. /Library/Developer/CommandLineTools/usr/bin/make -C ../admin/charsets cp51932.el make[2]: Nothing to be done for `cp51932.el'. /Library/Developer/CommandLineTools/usr/bin/make -C ../admin/charsets eucjp-ms.el make[2]: Nothing to be done for `eucjp-ms.el'. CC dispnew.o CC frame.o CC scroll.o CC xdisp.o CC menu.o xdisp.c:13345:19: warning: implicit declaration of function 'gui_mouse_grabbed' is invalid in C99 [-Wimplicit-function-declaration] mouse_down_p = (gui_mouse_grabbed (dpyinfo) ^ CC window.o CC charset.o CC coding.o CC category.o CC ccl.o CC character.o 1 warning generated. CC chartab.o CC bidi.o CC cm.o CC term.o CC terminal.o CC xfaces.o CC emacs.o CC keyboard.o CC macros.o CC keymap.o CC sysdep.o CC bignum.o CC buffer.o CC filelock.o CC insdel.o CC marker.o CC minibuf.o CC fileio.o CC dired.o CC cmds.o CC casetab.o CC casefiddle.o CC indent.o CC search.o CC regex-emacs.o CC undo.o CC alloc.o CC pdumper.o CC data.o CC doc.o CC editfns.o CC callint.o CC eval.o CC floatfns.o CC fns.o CC font.o CC print.o CC lread.o CC syntax.o CC bytecode.o CC process.o CC gnutls.o CC callproc.o CC region-cache.o CC sound.o CC timefns.o CC atimer.o CC doprnt.o CC intervals.o CC textprop.o CC composite.o CC xml.o CC lcms.o CC kqueue.o CC profiler.o CC decompress.o CC thread.o CC systhread.o CC fontset.o CC fringe.o CC image.o CC nsterm.o CC nsfns.o nsfns.m:636:7: warning: implicit declaration of function 'FRAME_EXTERNAL_TAB_BAR' is invalid in C99 [-Wimplicit-function-declaration] FRAME_EXTERNAL_TAB_BAR (f) = 1; ^ nsfns.m:636:34: error: expression is not assignable FRAME_EXTERNAL_TAB_BAR (f) = 1; ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsfns.m:644:38: error: expression is not assignable FRAME_EXTERNAL_TAB_BAR (f) = 0; ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ CC nsmenu.o nsfns.m:1375:65: error: too few arguments to function call, expected 6, have 5 &x_width, &x_height); ^ ./frame.h:1635:1: note: 'gui_figure_window_size' declared here extern long gui_figure_window_size (struct frame *, Lisp_Object, bool, bool, int *, int *); ^ nsfns.m:2867:24: warning: 'NSWindow' may not respond to 'tabbar' int tab_bar_height = FRAME_TABBAR_HEIGHT (f); ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsfns.m:2867:24: warning: 'NSWindow' may not respond to 'tabbar' int tab_bar_height = FRAME_TABBAR_HEIGHT (f); ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ 3 warnings and 3 errors generated. make[1]: *** [nsfns.o] Error 1 make[1]: *** Waiting for unfinished jobs.... nsterm.m:1092:27: warning: implicit declaration of function 'FRAME_EXTERNAL_TAB_BAR' is invalid in C99 [-Wimplicit-function-declaration] BOOL tarbar_visible = FRAME_EXTERNAL_TAB_BAR (f) ? YES : NO; ^ nsterm.m:1690:18: warning: 'NSWindow' may not respond to 'tabbar' - FRAME_TABBAR_HEIGHT (f) - FRAME_TOOLBAR_HEIGHT (f)) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1690:18: warning: 'NSWindow' may not respond to 'tabbar' - FRAME_TABBAR_HEIGHT (f) - FRAME_TOOLBAR_HEIGHT (f)) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1708:56: warning: 'NSWindow' may not respond to 'tabbar' f->top_pos = FRAME_PIXEL_HEIGHT (parent) + FRAME_TABBAR_HEIGHT (parent) + FRAME_TOOLBAR_HEIGHT (parent) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1708:56: warning: 'NSWindow' may not respond to 'tabbar' f->top_pos = FRAME_PIXEL_HEIGHT (parent) + FRAME_TABBAR_HEIGHT (parent) + FRAME_TOOLBAR_HEIGHT (parent) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1771:9: warning: 'NSWindow' may not respond to 'tabbar' + FRAME_TABBAR_HEIGHT (f) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1771:9: warning: 'NSWindow' may not respond to 'tabbar' + FRAME_TABBAR_HEIGHT (f) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1788:18: warning: 'NSWindow' may not respond to 'tabbar' make_fixnum (FRAME_TABBAR_HEIGHT (f) + FRAME_TOOLBAR_HEIGHT (f)))); ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1788:18: warning: 'NSWindow' may not respond to 'tabbar' make_fixnum (FRAME_TABBAR_HEIGHT (f) + FRAME_TOOLBAR_HEIGHT (f)))); ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1830:19: warning: instance method '-setTabbar:' not found (return type defaults to 'id') [-Wobjc-method-access] [window setTabbar: nil]; ^~~~~~~~~ /System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h:193:12: note: receiver is instance of class declared here @interface NSWindow : NSResponder <NSAnimatablePropertyContainer, NSUserInterfaceValidations, NSUserInterfaceItemIdentification, NSAppearanceCustomization, NSAccessibilityElement, NSAccessibility> ^ nsterm.m:2415:47: warning: 'NSWindow' may not respond to 'tabbar' FRAME_NS_TITLEBAR_HEIGHT(f) + FRAME_TABBAR_HEIGHT(f) + FRAME_TOOLBAR_HEIGHT(f)); ^~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:2415:47: warning: 'NSWindow' may not respond to 'tabbar' FRAME_NS_TITLEBAR_HEIGHT(f) + FRAME_TABBAR_HEIGHT(f) + FRAME_TOOLBAR_HEIGHT(f)); ^~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:6972:23: warning: 'NSWindow' may not respond to 'tabbar' tabbar_height = FRAME_TABBAR_HEIGHT (emacsframe); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:6972:23: warning: 'NSWindow' may not respond to 'tabbar' tabbar_height = FRAME_TABBAR_HEIGHT (emacsframe); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:6988:11: warning: 'NSWindow' may not respond to 'tabbar' if (FRAME_TABBAR_HEIGHT (emacsframe) == 0 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:6988:11: warning: 'NSWindow' may not respond to 'tabbar' if (FRAME_TABBAR_HEIGHT (emacsframe) == 0 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:7091:11: warning: 'NSWindow' may not respond to 'tabbar' + FRAME_TABBAR_HEIGHT (emacsframe) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:7091:11: warning: 'NSWindow' may not respond to 'tabbar' + FRAME_TABBAR_HEIGHT (emacsframe) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:7327:11: warning: instance method '-setTabbar:' not found (return type defaults to 'id') [-Wobjc-method-access] [window setTabbar: tabbar]; ^~~~~~~~~ /System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h:193:12: note: receiver is instance of class declared here @interface NSWindow : NSResponder <NSAnimatablePropertyContainer, NSUserInterfaceValidations, NSUserInterfaceItemIdentification, NSAppearanceCustomization, NSAccessibilityElement, NSAccessibility> ^ nsterm.m:7759:26: error: use of undeclared identifier 'NSApplicationPresentationAutoHideTabbar'; did you mean 'NSApplicationPresentationAutoHideToolbar'? return proposedOptions|NSApplicationPresentationAutoHideTabbar|NSApplicationPresentationAutoHideToolbar; ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ NSApplicationPresentationAutoHideToolbar /System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h:104:5: note: 'NSApplicationPresentationAutoHideToolbar' declared here NSApplicationPresentationAutoHideToolbar NS_ENUM_AVAILABLE_MAC(10_7) = (1 << 11), // Fullscreen window toolbar is detached from window and hides/shows with autoHidden menuBar. May be used only when both NSApplicationPresentationFullScreen and NSApplicationPresentationAutoHideMenuBar are also set ^ 19 warnings and 1 error generated. make[1]: *** [nsterm.o] Error 1 nsmenu.m:1038:10: warning: 'NSWindow' may not respond to 'tabbar' oldh = FRAME_TABBAR_HEIGHT (f); ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsmenu.m:1038:10: warning: 'NSWindow' may not respond to 'tabbar' oldh = FRAME_TABBAR_HEIGHT (f); ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsmenu.m:1144:15: warning: 'NSWindow' may not respond to 'tabbar' if (oldh != FRAME_TABBAR_HEIGHT (f)) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsmenu.m:1144:15: warning: 'NSWindow' may not respond to 'tabbar' if (oldh != FRAME_TABBAR_HEIGHT (f)) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsmenu.m:1146:33: warning: 'NSWindow' may not respond to 'tabbar' if (view->wait_for_tab_bar && FRAME_TABBAR_HEIGHT (f) > 0) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsmenu.m:1146:33: warning: 'NSWindow' may not respond to 'tabbar' if (view->wait_for_tab_bar && FRAME_TABBAR_HEIGHT (f) > 0) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsmenu.m:1238:13: warning: instance method '-setTabTip:' not found (return type defaults to 'id') [-Wobjc-method-access] [item setTabTip: [NSString stringWithUTF8String: help]]; ^~~~~~~~~ /System/Library/Frameworks/AppKit.framework/Headers/NSToolbarItem.h:17:12: note: receiver is instance of class declared here @interface NSToolbarItem : NSObject <NSCopying, NSValidatedUserInterfaceItem> { ^ 7 warnings generated. make: *** [src] Error 2 ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs (on macos) 2019-09-17 9:11 ` Stefan Kangas @ 2019-09-17 9:29 ` Stefan Kangas 2019-09-17 20:28 ` Juri Linkov 2019-09-17 23:29 ` Stefan Kangas 0 siblings, 2 replies; 181+ messages in thread From: Stefan Kangas @ 2019-09-17 9:29 UTC (permalink / raw) To: Juri Linkov; +Cc: Jean-Christophe Helary, Emacs developers [-- Attachment #1: Type: text/plain, Size: 3942 bytes --] Stefan Kangas <stefan@marxist.se> writes: > I'm happy to help. See the attached failing build log for commit 4260b29478. Please disregard that, I fooled up. Correct build log attached for commit e3e0920b9f3. It now builds but emacs crashes on start. I don't have time to debug it in gdb right now, but I'll look into it and send a proper backtrace. For now, here's the crash output: $ ./src/emacs -Q 2019-09-17 11:25:22.701 emacs[85246:9193823] -[EmacsWindow setTabbar:]: unrecognized selector sent to instance 0x7fef9ad9e1a0 2019-09-17 11:25:22.706 emacs[85246:9193823] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[EmacsWindow setTabbar:]: unrecognized selector sent to instance 0x7fef9ad9e1a0' *** First throw call stack: ( 0 CoreFoundation 0x00007fff94faf46b __exceptionPreprocess + 171 1 libobjc.A.dylib 0x00007fffa9def48d objc_exception_throw + 48 2 CoreFoundation 0x00007fff950310e4 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132 3 CoreFoundation 0x00007fff94f20b05 ___forwarding___ + 1061 4 CoreFoundation 0x00007fff94f20658 _CF_forwarding_prep_0 + 120 5 emacs 0x0000000105582cb1 -[EmacsView createTabbar:] + 161 6 emacs 0x00000001055831a1 -[EmacsView initFrameFromEmacs:] + 897 7 emacs 0x0000000105592ea1 Fx_create_frame + 3457 8 emacs 0x00000001054fd4bf funcall_subr + 239 9 emacs 0x00000001054fca9b Ffuncall + 827 10 emacs 0x000000010553a3fc exec_byte_code + 1932 11 emacs 0x00000001054fca39 Ffuncall + 729 12 emacs 0x000000010553a3fc exec_byte_code + 1932 13 emacs 0x00000001054fca39 Ffuncall + 729 14 emacs 0x00000001054fca9b Ffuncall + 827 15 emacs 0x000000010553a3fc exec_byte_code + 1932 16 emacs 0x00000001054fca39 Ffuncall + 729 17 emacs 0x000000010553a3fc exec_byte_code + 1932 18 emacs 0x00000001054fca39 Ffuncall + 729 19 emacs 0x000000010553a3fc exec_byte_code + 1932 20 emacs 0x00000001054fca39 Ffuncall + 729 21 emacs 0x000000010553a3fc exec_byte_code + 1932 22 emacs 0x00000001054fca39 Ffuncall + 729 23 emacs 0x000000010553a3fc exec_byte_code + 1932 24 emacs 0x00000001054fc2b2 apply_lambda + 386 25 emacs 0x00000001054f8d23 eval_sub + 915 26 emacs 0x00000001054fbfea Feval + 106 27 emacs 0x00000001054fb222 internal_condition_case + 82 28 emacs 0x0000000105482c3d top_level_1 + 45 29 emacs 0x00000001054fab79 internal_catch + 73 30 emacs 0x000000010547202f command_loop + 143 31 emacs 0x0000000105471f53 recursive_edit_1 + 115 32 emacs 0x0000000105472182 Frecursive_edit + 226 33 emacs 0x0000000105470a54 main + 6260 34 libdyld.dylib 0x00007fffaa729235 start + 1 35 ??? 0x0000000000000002 0x0 + 2 ) libc++abi.dylib: terminating with uncaught exception of type NSException Fatal error 6: Abort trap Abort trap: 6 Best regards, Stefan Kangas [-- Attachment #2: build.log --] [-- Type: application/octet-stream, Size: 51742 bytes --] cd . && ./autogen.sh autoconf Checking whether you have the necessary tools... (Read INSTALL.REPO for more details on building Emacs) Checking for autoconf (need at least version 2.65) ... ok Your system has the required tools. Running 'autoreconf -fi -I m4' ... You can now run './configure'. if [ -x ./config.status ]; then \ ./config.status --recheck; \ else \ ./configure --cache-file=/dev/null; \ fi running CONFIG_SHELL=/bin/sh /bin/sh ./configure --no-create --no-recursion checking for xcrun... xcrun checking for make... yes checking for GNU Make... make checking build system type... x86_64-apple-darwin16.7.0 checking host system type... x86_64-apple-darwin16.7.0 checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to enable C11 features... none needed checking for ar... ar checking whether gcc and cc understand -c and -o together... yes checking for putenv... yes checking for sbrk... yes checking for fchmod... yes checking for canonicalize_file_name... no checking for getcwd... yes checking for readlink... yes checking for realpath... yes checking for readlinkat... yes checking for explicit_bzero... no checking for faccessat... yes checking for fcntl... yes checking for fdopendir... yes checking for fstatat... yes checking for fsync... yes checking for gettimeofday... yes checking for lstat... yes checking for mkostemp... yes checking for tzset... yes checking for pipe2... no checking for pselect... yes checking for isblank... yes checking for iswctype... yes checking for strtoimax... yes checking for symlink... yes checking for localtime_r... yes checking for timegm... yes checking for futimes... yes checking for futimesat... no checking for futimens... no checking for utimensat... no checking for lutimes... yes checking for getdtablesize... yes checking how to run the C preprocessor... gcc -E checking for grep that handles long lines and -e... /usr/bin/grep checking for egrep... /usr/bin/grep -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking minix/config.h usability... no checking minix/config.h presence... no checking for minix/config.h... no checking whether it is safe to define __EXTENSIONS__... yes checking whether _XOPEN_SOURCE should be defined... no checking for Minix Amsterdam compiler... no checking for ranlib... ranlib checking for special C compiler options needed for large files... no checking for _FILE_OFFSET_BITS value needed for large files... no checking whether gcc accepts -g3 -O2... yes checking whether the compiler is clang... yes checking whether C compiler handles -Werror -Wunknown-warning-option... yes checking whether C compiler handles -Wno-switch... yes checking whether C compiler handles -Wno-pointer-sign... yes checking whether C compiler handles -Wno-string-plus-int... yes checking whether C compiler handles -Wno-unknown-attributes... yes checking whether C compiler handles -Wno-initializer-overrides... yes checking whether C compiler handles -Wno-tautological-compare... yes checking whether C compiler handles -Wno-tautological-constant-out-of-range-compare... yes checking for a BSD-compatible install... /usr/local/bin/ginstall -c checking command to symlink files in the same directory... ln -s checking for install-info... /usr/bin/install-info checking for gzip... /usr/bin/gzip checking for 'find' args to delete a file... -delete checking for brew... brew checking for makeinfo... /usr/local/opt/texinfo/bin/makeinfo checking for -znocombreloc... not needed checking whether addresses are sanitized... no checking for library containing sqrt... none required checking for pkg-config... /usr/local/bin/pkg-config checking pkg-config is at least version 0.9.0... yes checking for machine/soundcard.h... no checking for sys/soundcard.h... no checking for soundcard.h... no checking for mmsystem.h... no checking for _oss_ioctl in -lossaudio... no checking for alsa >= 1.0.0... no checking for linux/fs.h... no checking for malloc.h... no checking for sys/systeminfo.h... no checking for sys/sysinfo.h... no checking for coff.h... no checking for pty.h... no checking for sys/resource.h... yes checking for sys/utsname.h... yes checking for pwd.h... yes checking for utmp.h... yes checking for util.h... yes checking for sys/prctl.h... no checking for sys/socket.h... yes checking for stdlib.h... (cached) yes checking for unistd.h... (cached) yes checking for sys/param.h... yes checking for pthread.h... yes checking for malloc/malloc.h... yes checking for sys/un.h... yes checking for dirent.h... yes checking for execinfo.h... yes checking for stdio_ext.h... no checking for sys/vfs.h... no checking for sys/fs_types.h... no checking for getopt.h... yes checking for sys/cdefs.h... yes checking for sys/time.h... yes checking for ieee754.h... no checking for limits.h... yes checking for wchar.h... yes checking for stdint.h... (cached) yes checking for inttypes.h... (cached) yes checking for sys/select.h... yes checking for sys/stat.h... (cached) yes checking for ADDR_NO_RANDOMIZE... no checking for term.h... yes checking whether time.h and sys/time.h may both be included... yes checking whether sys_siglist is declared... yes checking for sys/wait.h that is POSIX.1 compatible... yes checking for net/if.h... yes checking for ifaddrs.h... yes checking for net/if_dl.h... yes checking for struct ifreq.ifr_flags... yes checking for struct ifreq.ifr_hwaddr... no checking for struct ifreq.ifr_netmask... no checking for struct ifreq.ifr_broadaddr... yes checking for struct ifreq.ifr_addr... yes checking for struct ifreq.ifr_addr.sa_len... yes checking whether gcc understands -MMD -MF... yes checking for X... libraries /usr/X11/lib, headers /usr/X11/include checking AppKit/AppKit.h usability... yes checking AppKit/AppKit.h presence... yes checking for AppKit/AppKit.h... yes checking for Mac OS X 10.6 or newer... yes checking for gcc... gcc checking whether we are using the GNU Objective C compiler... yes checking whether gcc accepts -g... yes checking if the Objective C compiler supports instancetype... yes checking whether malloc is Doug Lea style... no checking for getpagesize... yes checking for working mmap... yes checking for main in -lXbsd... no checking for pthread library... none needed checking for thread support... yes checking for librsvg-2.0 >= 2.14.0... no checking for getaddrinfo_a in -lanl... no checking for dbus-1 >= 1.0... no checking for lgetfilecon in -lselinux... no checking for gnutls >= 2.12.2... yes checking for libsystemd >= 222... no checking for jansson >= 2.7... no checking sys/inotify.h usability... no checking sys/inotify.h presence... no checking for sys/inotify.h... no checking for libkqueue... no checking for library containing kqueue... none required checking for lcms2... yes checking for library containing inflateEnd... -lz checking gpm.h usability... no checking gpm.h presence... no checking for gpm.h... no checking for libxml-2.0 > 2.6.17... yes checking for htmlReadMemory in -lxml2... yes checking for maillock in -lmail... no checking for maillock in -llockfile... no checking for liblockfile.so... no checking maillock.h usability... no checking maillock.h presence... no checking for maillock.h... no checking for accept4... no checking for fchdir... yes checking for gethostname... yes checking for getrusage... yes checking for get_current_dir_name... no checking for lrand48... yes checking for random... yes checking for rint... yes checking for trunc... yes checking for select... yes checking for getpagesize... (cached) yes checking for setlocale... yes checking for newlocale... yes checking for getrlimit... yes checking for setrlimit... yes checking for shutdown... yes checking for pthread_sigmask... (cached) yes checking for strsignal... yes checking for setitimer... yes checking for timer_getoverrun... no checking for sendto... yes checking for recvfrom... yes checking for getsockname... yes checking for getifaddrs... yes checking for freeifaddrs... yes checking for gai_strerror... yes checking for sync... yes checking for getpwent... yes checking for endpwent... yes checking for getgrent... yes checking for endgrent... yes checking for cfmakeraw... yes checking for cfsetspeed... yes checking for __executable_start... no checking for log2... yes checking for prctl... no checking for aligned_alloc... no checking for posix_memalign... yes checking whether aligned_alloc is declared... no checking for posix_madvise... yes checking for __builtin_frame_address... yes checking for __builtin_unwind_init... yes checking for _LARGEFILE_SOURCE value needed for large files... no checking for grantpt... yes checking for getpt... no checking for posix_openpt... yes checking for library containing tputs... -lncurses checking for timerfd interface... no checking whether signals can be handled on alternate stack... yes checking gmp.h usability... yes checking gmp.h presence... yes checking for gmp.h... yes checking for library containing __gmpz_roinit_n... -lgmp checking valgrind/valgrind.h usability... no checking valgrind/valgrind.h presence... no checking for valgrind/valgrind.h... no checking for struct unipair.unicode... no checking for pid_t... yes checking vfork.h usability... no checking vfork.h presence... no checking for vfork.h... no checking for fork... yes checking for vfork... yes checking for working fork... yes checking for working vfork... (cached) yes checking for snprintf... yes checking whether GLib is linked in... no checking for nl_langinfo and CODESET... yes checking for nl_langinfo and _NL_PAPER_WIDTH... no checking for mbstate_t... yes checking for _setjmp... yes checking for sigsetjmp... yes checking for usable FIONREAD... yes checking for usable SIGIO... yes checking for struct alignment... yes checking for typeof syntax and keyword spelling... typeof checking for statement expressions... yes checking for working alloca.h... yes checking for alloca... yes checking whether // is distinct from /... no checking whether realpath works... no checking for unsigned long long int... yes checking whether byte ordering is bigendian... no checking whether the preprocessor supports include_next... yes checking whether system header files limit the line length... no checking if environ is properly declared... no checking for complete errno.h... yes checking whether lstat correctly handles trailing slash... no checking for mode_t... yes checking for st_dm_mode in struct stat... no checking whether strmode is declared... yes checking for gawk... gawk checking for getopt.h... (cached) yes checking for getopt_long_only... yes checking whether getopt is POSIX compatible... no checking for C/C++ restrict keyword... __restrict checking for struct timeval... yes checking for wide-enough struct timeval.tv_sec member... yes checking whether limits.h has LLONG_MAX, WORD_BIT, ULLONG_WIDTH etc.... no checking for long long int... yes checking whether stdint.h conforms to C99... no checking sys/inttypes.h usability... no checking sys/inttypes.h presence... no checking for sys/inttypes.h... no checking sys/bitypes.h usability... no checking sys/bitypes.h presence... no checking for sys/bitypes.h... no checking for bit size of ptrdiff_t... 64 checking for bit size of size_t... 64 checking for bit size of sig_atomic_t... 32 checking for bit size of wchar_t... 32 checking for bit size of wint_t... 32 checking whether sig_atomic_t is signed... yes checking whether wchar_t is signed... yes checking whether wint_t is signed... yes checking for ptrdiff_t integer literal suffix... l checking for size_t integer literal suffix... ul checking for sig_atomic_t integer literal suffix... checking for wchar_t integer literal suffix... checking for wint_t integer literal suffix... checking whether memmem is declared... yes checking whether memrchr is declared... no checking whether <limits.h> defines MIN and MAX... no checking whether <sys/param.h> defines MIN and MAX... yes checking whether time_t is signed... yes checking whether alarm is declared... yes checking for working mktime... no checking whether struct tm is in sys/time.h or time.h... time.h checking for struct tm.tm_zone... yes checking for struct tm.tm_gmtoff... yes checking whether <sys/select.h> is self-contained... yes checking for inline... inline checking for stdlib.h... (cached) yes checking for GNU libc compatible malloc... yes checking whether we are using the GNU C Library >= 2.1 or uClibc... no checking for sigset_t... yes checking for wchar_t... yes checking whether strnlen is declared... yes checking whether strtoimax is declared... yes checking for a thread-safe mkdir -p... /usr/local/bin/gmkdir -p checking whether stat file-mode macros are broken... no checking for struct timespec in <time.h>... yes checking whether clearerr_unlocked is declared... yes checking whether feof_unlocked is declared... yes checking whether ferror_unlocked is declared... yes checking whether fflush_unlocked is declared... no checking whether fgets_unlocked is declared... no checking whether fputc_unlocked is declared... no checking whether fputs_unlocked is declared... no checking whether fread_unlocked is declared... no checking whether fwrite_unlocked is declared... no checking whether getc_unlocked is declared... yes checking whether getchar_unlocked is declared... yes checking whether putc_unlocked is declared... yes checking whether putchar_unlocked is declared... yes checking whether the utimes function works... yes checking type of array argument to getgroups... gid_t checking whether getdtablesize is declared... yes checking for O_CLOEXEC... yes checking for promoted mode_t type... int checking sys/acl.h usability... yes checking sys/acl.h presence... yes checking for sys/acl.h... yes checking for library containing acl_get_file... none required checking for acl_get_file... yes checking for acl_get_fd... yes checking for acl_set_file... yes checking for acl_set_fd... yes checking for acl_free... yes checking for acl_from_mode... no checking for acl_from_text... yes checking for acl_delete_def_file... yes checking for acl_extended_file... no checking for acl_delete_fd_np... yes checking for acl_delete_file_np... yes checking for acl_copy_ext_native... yes checking for acl_create_entry_np... yes checking for acl_to_short_text... no checking for acl_free_text... no checking for working acl_get_file... yes checking acl/libacl.h usability... no checking acl/libacl.h presence... no checking for acl/libacl.h... no checking for acl_entries... no checking for ACL_FIRST_ENTRY... yes checking for ACL_TYPE_EXTENDED... yes checking for alloca as a compiler built-in... yes checking for __builtin_expect... yes checking byteswap.h usability... no checking byteswap.h presence... no checking for byteswap.h... no checking for library containing clock_gettime... none required checking for clock_gettime... yes checking for clock_settime... yes checking for copy_file_range... no checking for d_type member in directory struct... yes checking whether // is distinct from /... (cached) no checking whether dup2 works... yes checking for library containing backtrace_symbols_fd... none required checking for explicit_memset... no checking for access... yes checking whether fcntl handles F_DUPFD correctly... yes checking whether fcntl understands F_DUPFD_CLOEXEC... yes checking whether fdopendir is declared... yes checking whether fdopendir works... yes checking for flexible array member... yes checking for __fpending... no checking whether fstatat (..., 0) works... yes checking for sys/mount.h... yes checking how to get file system space usage... checking for statvfs function (SVR4)... no checking for two-argument statfs with statfs.f_frsize member... no checking for 3-argument statfs function (DEC OSF/1)... no checking for two-argument statfs with statfs.f_bsize member (AIX, 4.3BSD)... yes checking sys/fs/s5param.h usability... no checking sys/fs/s5param.h presence... no checking for sys/fs/s5param.h... no checking sys/statfs.h usability... no checking sys/statfs.h presence... no checking for sys/statfs.h... no checking for statfs that truncates block counts... no checking for getloadavg... yes checking sys/loadavg.h usability... no checking sys/loadavg.h presence... no checking for sys/loadavg.h... no checking whether getloadavg is declared... yes checking whether gettimeofday clobbers localtime buffer... no checking for gettimeofday with POSIX signature... yes checking for memmem... yes checking whether memmem works... no checking for memrchr... no checking whether signature of pselect conforms to POSIX... yes checking whether pselect detects invalid fds... yes checking whether pthread_sigmask is a macro... no checking whether pthread_sigmask works without -lpthread... yes checking whether pthread_sigmask returns error numbers... yes checking whether pthread_sigmask unblocks signals correctly... guessing yes checking whether readlink signature is correct... yes checking whether readlink handles trailing slash correctly... no checking whether readlinkat signature is correct... yes checking for working re_compile_pattern... no checking libintl.h usability... no checking libintl.h presence... no checking for libintl.h... no checking whether isblank is declared... yes checking for sig2str... no checking for volatile sig_atomic_t... yes checking for sighandler_t... no checking for socklen_t... yes checking for ssize_t... yes checking for struct stat.st_atim.tv_nsec... no checking for struct stat.st_atimespec.tv_nsec... yes checking for struct stat.st_birthtimespec.tv_nsec... yes checking for working stdalign.h... yes checking for good max_align_t... yes checking whether NULL can be used in arbitrary expressions... yes checking which flavor of printf attribute matches inttypes macros... system checking for stpcpy... yes checking for working strnlen... yes checking whether strtoimax works... yes checking whether symlink handles trailing slash correctly... no checking for nlink_t... yes checking whether localtime_r is declared... yes checking whether localtime_r is compatible with its POSIX signature... yes checking whether localtime loops forever near extrema... no checking for timezone_t... no checking for library containing timer_settime... no checking for timer_settime... no checking for variable-length arrays... yes checking whether open recognizes a trailing slash... no checking for euidaccess... no checking libgen.h usability... yes checking libgen.h presence... yes checking for libgen.h... yes checking for getgroups... yes checking for working getgroups... yes checking for library containing eaccess... no checking for eaccess... no checking for group_member... no checking for getgroups... (cached) yes checking for working getgroups... (cached) yes checking whether getgroups handles negative values... no checking whether the compiler supports the __inline keyword... yes checking for __mktime_internal... no checking for gcc option to disable position independent executables... not needed Configured for 'x86_64-apple-darwin16.7.0'. Where should the build process find the source code? . What compiler should emacs be built with? gcc -g3 -O2 Should Emacs use the GNU version of malloc? no (The GNU allocators don't work with this system configuration.) Should Emacs use a relocating allocator for buffers? no Should Emacs use mmap(2) for buffer allocation? no What window system should Emacs use? nextstep What toolkit should Emacs use? none Where do we find X Windows header files? /usr/X11/include Where do we find X Windows libraries? /usr/X11/lib Does Emacs use -lXaw3d? no Does Emacs use -lXpm? no Does Emacs use -ljpeg? no Does Emacs use -ltiff? no Does Emacs use a gif library? no Does Emacs use a png library? no Does Emacs use -lrsvg-2? no Does Emacs use cairo? no Does Emacs use -llcms2? yes Does Emacs use imagemagick? no Does Emacs support sound? no Does Emacs use -lgpm? no Does Emacs use -ldbus? no Does Emacs use -lgconf? no Does Emacs use GSettings? no Does Emacs use a file notification library? yes (kqueue) Does Emacs use access control lists? yes Does Emacs use -lselinux? no Does Emacs use -lgnutls? yes Does Emacs use -lxml2? yes Does Emacs use -lfreetype? no Does Emacs use HarfBuzz? no Does Emacs use -lm17n-flt? no Does Emacs use -lotf? no Does Emacs use -lxft? no Does Emacs use -lsystemd? no Does Emacs use -ljansson? no Does Emacs use -lgmp? yes Does Emacs directly use zlib? yes Does Emacs have dynamic modules support? no Does Emacs use toolkit scroll bars? yes Does Emacs support Xwidgets (requires gtk3)? no Does Emacs have threading support in lisp? yes Does Emacs support the portable dumper? yes Does Emacs support legacy unexec dumping? no Which dumping strategy does Emacs use? pdumper Run 'make' to build Emacs, then run 'src/emacs' to test it. Run 'make install' in order to build an application bundle. The application will go to nextstep/Emacs.app and can be run or moved from there. The application will be fully self-contained. configure: creating ./config.status configure: WARNING: This configuration installs a 'movemail' program that does not retrieve POP3 email. By default, Emacs 25 and earlier installed a 'movemail' program that retrieved POP3 email via only insecure channels, a practice that is no longer recommended but that you can continue to support by using './configure --with-pop'. configure: You might want to install GNU Mailutils <https://mailutils.org> and use './configure --with-mailutils'. MAKE='/Library/Developer/CommandLineTools/usr/bin/make' ./config.status config.status: creating src/emacs-module.h config.status: creating nextstep/Cocoa/Emacs.base/Contents/Info.plist config.status: creating nextstep/Cocoa/Emacs.base/Contents/Resources/English.lproj/InfoPlist.strings config.status: creating Makefile config.status: creating lib/gnulib.mk config.status: creating ./doc/man/emacs.1 config.status: creating lib/Makefile config.status: creating lib-src/Makefile config.status: creating oldXMenu/Makefile config.status: creating doc/emacs/Makefile config.status: creating doc/misc/Makefile config.status: creating doc/lispintro/Makefile config.status: creating doc/lispref/Makefile config.status: creating src/Makefile config.status: creating lwlib/Makefile config.status: creating lisp/Makefile config.status: creating leim/Makefile config.status: creating nextstep/Makefile config.status: creating nt/Makefile config.status: creating test/Makefile config.status: creating admin/charsets/Makefile config.status: creating admin/unidata/Makefile config.status: creating admin/grammars/Makefile config.status: creating src/config.h config.status: src/config.h is unchanged config.status: executing src/epaths.h commands config.status: executing src/.gdbinit commands config.status: executing doc/emacs/emacsver.texi commands config.status: executing etc-refcards-emacsver.tex commands /Library/Developer/CommandLineTools/usr/bin/make -C lib all /Library/Developer/CommandLineTools/usr/bin/make info-real info-dir GEN alloca.h GEN byteswap.h /Library/Developer/CommandLineTools/usr/bin/make -C doc/lispref info GEN ../../info/elisp.info /Library/Developer/CommandLineTools/usr/bin/make -C doc/lispintro info GEN dirent.h make[2]: Nothing to be done for `info'. /Library/Developer/CommandLineTools/usr/bin/make -C doc/emacs info GEN ../../info/emacs.info GEN fcntl.h GEN getopt.h GEN getopt-cdefs.h GEN ieee754.h GEN inttypes.h GEN limits.h GEN signal.h GEN stdint.h GEN stdio.h GEN stdlib.h GEN string.h GEN sys/select.h GEN sys/stat.h GEN sys/time.h GEN sys/types.h GEN time.h GEN unistd.h CC fingerprint.o CC acl_entries.o CC canonicalize-lgpl.o CC copy-file-range.o CC euidaccess.o CC explicit_bzero.o CC faccessat.o CC fpending.o CC fstatat.o CC fsusage.o CC getgroups.o CC getopt.o CC getopt1.o CC group-member.o CC lstat.o CC memmem.o CC memrchr.o CC mktime.o CC open.o CC openat-proc.o CC readlink.o CC readlinkat.o CC regex.o CC sig2str.o CC symlink.o CC time_rz.o CC timegm.o CC acl-errno-valid.o CC acl-internal.o CC get-permissions.o CC set-permissions.o CC allocator.o CC binary-io.o CC c-ctype.o CC c-strcasecmp.o CC c-strncasecmp.o CC careadlinkat.o CC cloexec.o CC close-stream.o CC count-leading-zeros.o CC count-one-bits.o CC count-trailing-zeros.o CC md5.o CC sha1.o CC sha256.o CC sha512.o CC dtoastr.o CC dtotimespec.o CC filemode.o CC filevercmp.o CC gettime.o CC malloca.o CC nstrftime.o CC pipe2.o CC qcopy-acl.o CC stat-time.o CC tempname.o CC timespec.o CC timespec-add.o CC timespec-sub.o CC u64.o CC unistd.o CC utimens.o CC openat-die.o CC save-cwd.o AR libgnu.a /Library/Developer/CommandLineTools/usr/bin/ranlib: file: libgnu.a(u64.o) has no symbols /Library/Developer/CommandLineTools/usr/bin/ranlib: file: libgnu.a(unistd.o) has no symbols /Library/Developer/CommandLineTools/usr/bin/ranlib: file: libgnu.a(u64.o) has no symbols /Library/Developer/CommandLineTools/usr/bin/ranlib: file: libgnu.a(unistd.o) has no symbols /Library/Developer/CommandLineTools/usr/bin/make -C doc/misc info GEN ../../info/emacs-mime.info GEN ../../info/efaq.info GEN ../../info/gnus.info /Library/Developer/CommandLineTools/usr/bin/make -C lib-src all CCLD etags GEN ../../info/smtpmail.info CCLD ctags CCLD emacsclient GEN info/dir CCLD ebrowse CCLD hexl CC pop.o CCLD make-docfile CCLD make-fingerprint CCLD movemail /Library/Developer/CommandLineTools/usr/bin/make -C src VCSWITNESS='$(srcdir)/../.git/logs/HEAD' all GEN globals.h GEN buildobj.h /Library/Developer/CommandLineTools/usr/bin/make -C ../admin/charsets all make[2]: Nothing to be done for `all'. /Library/Developer/CommandLineTools/usr/bin/make -C ../admin/unidata charscript.el make[2]: Nothing to be done for `charscript.el'. /Library/Developer/CommandLineTools/usr/bin/make -C ../admin/charsets cp51932.el make[2]: Nothing to be done for `cp51932.el'. /Library/Developer/CommandLineTools/usr/bin/make -C ../admin/charsets eucjp-ms.el make[2]: Nothing to be done for `eucjp-ms.el'. CC dispnew.o CC frame.o CC scroll.o CC xdisp.o CC menu.o CC window.o CC charset.o CC coding.o CC category.o CC ccl.o CC character.o CC chartab.o CC bidi.o CC cm.o CC term.o CC terminal.o CC xfaces.o CC emacs.o CC keyboard.o CC macros.o CC keymap.o CC sysdep.o CC bignum.o CC buffer.o CC filelock.o CC insdel.o CC marker.o CC minibuf.o CC fileio.o CC dired.o CC cmds.o CC casetab.o CC casefiddle.o CC indent.o CC search.o CC regex-emacs.o CC undo.o CC alloc.o CC pdumper.o CC data.o CC doc.o CC editfns.o CC callint.o CC eval.o CC floatfns.o CC fns.o CC font.o CC print.o CC lread.o CC syntax.o CC bytecode.o CC process.o CC gnutls.o CC callproc.o CC region-cache.o CC sound.o CC timefns.o CC atimer.o CC doprnt.o CC intervals.o CC textprop.o CC composite.o CC xml.o CC lcms.o CC kqueue.o CC profiler.o CC decompress.o CC thread.o CC systhread.o CC fontset.o CC fringe.o CC image.o CC nsterm.o CC nsfns.o CC nsmenu.o nsfns.m:2842:24: warning: 'NSWindow' may not respond to 'tabbar' int tab_bar_height = FRAME_TABBAR_HEIGHT (f); ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsfns.m:2842:24: warning: 'NSWindow' may not respond to 'tabbar' int tab_bar_height = FRAME_TABBAR_HEIGHT (f); ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1690:18: warning: 'NSWindow' may not respond to 'tabbar' - FRAME_TABBAR_HEIGHT (f) - FRAME_TOOLBAR_HEIGHT (f)) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1690:18: warning: 'NSWindow' may not respond to 'tabbar' - FRAME_TABBAR_HEIGHT (f) - FRAME_TOOLBAR_HEIGHT (f)) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1708:56: warning: 'NSWindow' may not respond to 'tabbar' f->top_pos = FRAME_PIXEL_HEIGHT (parent) + FRAME_TABBAR_HEIGHT (parent) + FRAME_TOOLBAR_HEIGHT (parent) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1708:56: warning: 'NSWindow' may not respond to 'tabbar' f->top_pos = FRAME_PIXEL_HEIGHT (parent) + FRAME_TABBAR_HEIGHT (parent) + FRAME_TOOLBAR_HEIGHT (parent) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1771:9: warning: 'NSWindow' may not respond to 'tabbar' + FRAME_TABBAR_HEIGHT (f) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1771:9: warning: 'NSWindow' may not respond to 'tabbar' + FRAME_TABBAR_HEIGHT (f) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1788:18: warning: 'NSWindow' may not respond to 'tabbar' make_fixnum (FRAME_TABBAR_HEIGHT (f) + FRAME_TOOLBAR_HEIGHT (f)))); ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1788:18: warning: 'NSWindow' may not respond to 'tabbar' make_fixnum (FRAME_TABBAR_HEIGHT (f) + FRAME_TOOLBAR_HEIGHT (f)))); ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1830:19: warning: instance method '-setTabbar:' not found (return type defaults to 'id') [-Wobjc-method-access] [window setTabbar: nil]; ^~~~~~~~~ /System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h:193:12: note: receiver is instance of class declared here @interface NSWindow : NSResponder <NSAnimatablePropertyContainer, NSUserInterfaceValidations, NSUserInterfaceItemIdentification, NSAppearanceCustomization, NSAccessibilityElement, NSAccessibility> ^ nsterm.m:2415:47: warning: 'NSWindow' may not respond to 'tabbar' FRAME_NS_TITLEBAR_HEIGHT(f) + FRAME_TABBAR_HEIGHT(f) + FRAME_TOOLBAR_HEIGHT(f)); ^~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:2415:47: warning: 'NSWindow' may not respond to 'tabbar' FRAME_NS_TITLEBAR_HEIGHT(f) + FRAME_TABBAR_HEIGHT(f) + FRAME_TOOLBAR_HEIGHT(f)); ^~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:6972:23: warning: 'NSWindow' may not respond to 'tabbar' tabbar_height = FRAME_TABBAR_HEIGHT (emacsframe); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:6972:23: warning: 'NSWindow' may not respond to 'tabbar' tabbar_height = FRAME_TABBAR_HEIGHT (emacsframe); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:6988:11: warning: 'NSWindow' may not respond to 'tabbar' if (FRAME_TABBAR_HEIGHT (emacsframe) == 0 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:6988:11: warning: 'NSWindow' may not respond to 'tabbar' if (FRAME_TABBAR_HEIGHT (emacsframe) == 0 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:7091:11: warning: 'NSWindow' may not respond to 'tabbar' + FRAME_TABBAR_HEIGHT (emacsframe) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:7091:11: warning: 'NSWindow' may not respond to 'tabbar' + FRAME_TABBAR_HEIGHT (emacsframe) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:7327:11: warning: instance method '-setTabbar:' not found (return type defaults to 'id') [-Wobjc-method-access] [window setTabbar: tabbar]; ^~~~~~~~~ /System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h:193:12: note: receiver is instance of class declared here @interface NSWindow : NSResponder <NSAnimatablePropertyContainer, NSUserInterfaceValidations, NSUserInterfaceItemIdentification, NSAppearanceCustomization, NSAccessibilityElement, NSAccessibility> ^ nsmenu.m:1038:10: warning: 'NSWindow' may not respond to 'tabbar' oldh = FRAME_TABBAR_HEIGHT (f); ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsmenu.m:1038:10: warning: 'NSWindow' may not respond to 'tabbar' oldh = FRAME_TABBAR_HEIGHT (f); ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsmenu.m:1144:15: warning: 'NSWindow' may not respond to 'tabbar' if (oldh != FRAME_TABBAR_HEIGHT (f)) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsmenu.m:1144:15: warning: 'NSWindow' may not respond to 'tabbar' if (oldh != FRAME_TABBAR_HEIGHT (f)) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsmenu.m:1146:33: warning: 'NSWindow' may not respond to 'tabbar' if (view->wait_for_tab_bar && FRAME_TABBAR_HEIGHT (f) > 0) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsmenu.m:1146:33: warning: 'NSWindow' may not respond to 'tabbar' if (view->wait_for_tab_bar && FRAME_TABBAR_HEIGHT (f) > 0) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsmenu.m:1238:13: warning: instance method '-setTabTip:' not found (return type defaults to 'id') [-Wobjc-method-access] [item setTabTip: [NSString stringWithUTF8String: help]]; ^~~~~~~~~ /System/Library/Frameworks/AppKit.framework/Headers/NSToolbarItem.h:17:12: note: receiver is instance of class declared here @interface NSToolbarItem : NSObject <NSCopying, NSValidatedUserInterfaceItem> { ^ 2 warnings generated. CC nsselect.o 7 warnings generated. CC nsimage.o CC macfont.o CC terminfo.o CC lastfile.o 18 warnings generated. CCLD temacs /usr/local/bin/gmkdir -p ../etc /Library/Developer/CommandLineTools/usr/bin/make -C ../lisp update-subdirs cp -f temacs bootstrap-emacs rm -f bootstrap-emacs.pdmp ./temacs --batch -l loadup --temacs=pbootstrap Loading loadup.el (source)... dump mode: pbootstrap Using load-path (/Users/skangas/wip/emacs/lisp /Users/skangas/wip/emacs/lisp/emacs-lisp /Users/skangas/wip/emacs/lisp/progmodes /Users/skangas/wip/emacs/lisp/language /Users/skangas/wip/emacs/lisp/international /Users/skangas/wip/emacs/lisp/textmodes /Users/skangas/wip/emacs/lisp/vc) Loading emacs-lisp/byte-run... Loading emacs-lisp/backquote... Loading subr (source)... Loading version... Loading widget... Loading custom (source)... Loading emacs-lisp/map-ynp... Loading international/mule... Loading international/mule-conf... Loading env... Loading format... Loading bindings... Loading window (source)... Loading /Users/skangas/wip/emacs/lisp/files.el (source)... Loading emacs-lisp/macroexp... Loading cus-face... Loading faces... Loading button... Loading /Users/skangas/wip/emacs/lisp/loaddefs.el (source)... Loading emacs-lisp/nadvice... Loading emacs-lisp/cl-preloaded... Loading minibuffer... Loading obarray... Loading abbrev... Loading simple... Loading help... Loading jka-cmpr-hook... Loading epa-hook... Loading international/mule-cmds... Loading case-table... Loading /Users/skangas/wip/emacs/lisp/international/charprop.el (source)... Loading international/characters... Loading international/charscript... Loading /Users/skangas/wip/emacs/lisp/composite.el (source)... Loading language/chinese... Loading language/cyrillic... Loading language/indian... Loading language/sinhala... Loading language/english... Loading language/ethiopic... Loading language/european... Loading language/czech... Loading language/slovak... Loading language/romanian... Loading language/greek... Loading language/hebrew... Loading international/cp51932... Loading international/eucjp-ms... Loading language/japanese... Loading language/korean... Loading language/lao... Loading language/tai-viet... Loading language/thai... Loading language/tibetan... Loading language/vietnamese... Loading language/misc-lang... Loading language/utf-8-lang... Loading language/georgian... Loading language/khmer... Loading language/burmese... Loading language/cham... Loading indent... Loading emacs-lisp/cl-generic... Loading /Users/skangas/wip/emacs/lisp/frame.el (source)... Loading /Users/skangas/wip/emacs/lisp/startup.el (source)... Loading term/tty-colors... Loading font-core... Loading facemenu... Loading emacs-lisp/syntax... Loading font-lock... Loading jit-lock... Loading mouse... Loading scroll-bar... Loading /Users/skangas/wip/emacs/lisp/select.el (source)... Loading emacs-lisp/timer... Loading /Users/skangas/wip/emacs/lisp/isearch.el (source)... Loading rfn-eshadow... Loading /Users/skangas/wip/emacs/lisp/menu-bar.el (source)... Loading /Users/skangas/wip/emacs/lisp/tab-bar.el (source)... Loading emacs-lisp/lisp... Loading textmodes/page... Loading register... Loading textmodes/paragraphs... Loading progmodes/prog-mode... Loading emacs-lisp/lisp-mode... Loading progmodes/elisp-mode... Loading textmodes/text-mode... Loading textmodes/fill... Loading newcomment... Loading /Users/skangas/wip/emacs/lisp/replace.el (source)... Loading emacs-lisp/tabulated-list... Loading buff-menu... Loading fringe... Loading emacs-lisp/regexp-opt... Loading image... Loading international/fontset... Loading dnd... Loading tool-bar... Loading term/common-win... Loading international/mule-util... Loading international/ucs-normalize... Loading term/ns-win... Loading mwheel... Loading emacs-lisp/float-sup... Loading vc/vc-hooks... Loading vc/ediff-hook... Loading uniquify... Loading electric... Loading emacs-lisp/eldoc... Loading /Users/skangas/wip/emacs/lisp/cus-start.el (source)... Loading /Users/skangas/wip/emacs/lisp/tooltip.el (source)... Loading /Users/skangas/wip/emacs/lisp/leim/leim-list.el (source)... Finding pointers to doc strings... Finding pointers to doc strings...done Dumping under the name bootstrap-emacs.pdmp dumping fingerprint: 27d336e615f925f56b7bd68723e6010aa6d4692896a420de40673c741bf0bccc Dump complete Byte counts: header=80 hot=13310232 discardable=119040 cold=7424472 Reloc counts: hot=797203 discardable=4566 /Library/Developer/CommandLineTools/usr/bin/make -C ../lisp compile-first EMACS="../src/bootstrap-emacs" ELC emacs-lisp/bytecomp.elc ELC emacs-lisp/autoload.elc /Library/Developer/CommandLineTools/usr/bin/make -C ../lisp autoloads EMACS="../src/bootstrap-emacs" /Library/Developer/CommandLineTools/usr/bin/make -C ../leim all EMACS="../src/bootstrap-emacs" ELC ../lisp/cus-start.elc ELC ../lisp/composite.elc make[3]: Nothing to be done for `all'. /Library/Developer/CommandLineTools/usr/bin/make -C ../admin/grammars all EMACS="../../src/bootstrap-emacs" make[3]: Nothing to be done for `all'. GEN net/tramp-loaddefs.el ELC ../lisp/custom.elc ELC ../lisp/files.elc INFO Scraping files for tramp-loaddefs.el... INFO Scraping files for tramp-loaddefs.el...done Directories for loaddefs: . ./calc ./calendar ./cedet ./cedet/ede ./cedet/semantic ./cedet/semantic/analyze ./cedet/semantic/bovine ./cedet/semantic/decorate ./cedet/semantic/symref ./cedet/semantic/wisent ./cedet/srecode ./emacs-lisp ./emulation ./erc ./eshell ./gnus ./image ./international ./language ./leim ./leim/ja-dic ./leim/quail ./mail ./mh-e ./net ./nxml ./org ./play ./progmodes ./textmodes ./url ./vc GEN loaddefs.el ELC ../lisp/frame.elc /Library/Developer/CommandLineTools/usr/bin/make -C ../admin/unidata all EMACS="../../src/bootstrap-emacs" make[2]: Nothing to be done for `all'. ELC ../lisp/isearch.elc ELC ../lisp/menu-bar.elc ELC ../lisp/replace.elc ELC ../lisp/select.elc ELC ../lisp/startup.elc ELC ../lisp/subr.elc ELC ../lisp/tab-bar.elc INFO Scraping files for loaddefs.el... ELC ../lisp/tooltip.elc ELC ../lisp/window.elc INFO Scraping files for loaddefs.el...72% INFO Scraping files for loaddefs.el...100% INFO Scraping files for loaddefs.el...done GEN ../etc/DOC rm -f emacs && cp -f temacs emacs LC_ALL=C ./temacs -batch -l loadup --temacs=pdump Loading loadup.el (source)... dump mode: pdump Using load-path (/Users/skangas/wip/emacs/lisp) Loading emacs-lisp/byte-run... Loading emacs-lisp/backquote... Loading subr... Loading version... Loading widget... Loading custom... Loading emacs-lisp/map-ynp... Loading international/mule... Loading international/mule-conf... Loading env... Loading format... Loading bindings... Loading window... Loading files... Loading emacs-lisp/macroexp... Loading cus-face... Loading faces... Loading button... Loading loaddefs.el (source)... Loading emacs-lisp/nadvice... Loading emacs-lisp/cl-preloaded... Loading minibuffer... Loading obarray... Loading abbrev... Loading simple... Loading help... Loading jka-cmpr-hook... Loading epa-hook... Loading international/mule-cmds... Loading case-table... Loading international/charprop.el (source)... Loading international/characters... Loading international/charscript... Loading composite... Loading language/chinese... Loading language/cyrillic... Loading language/indian... Loading language/sinhala... Loading language/english... Loading language/ethiopic... Loading language/european... Loading language/czech... Loading language/slovak... Loading language/romanian... Loading language/greek... Loading language/hebrew... Loading international/cp51932... Loading international/eucjp-ms... Loading language/japanese... Loading language/korean... Loading language/lao... Loading language/tai-viet... Loading language/thai... Loading language/tibetan... Loading language/vietnamese... Loading language/misc-lang... Loading language/utf-8-lang... Loading language/georgian... Loading language/khmer... Loading language/burmese... Loading language/cham... Loading indent... Loading emacs-lisp/cl-generic... Loading frame... Loading startup... Loading term/tty-colors... Loading font-core... Loading facemenu... Loading emacs-lisp/syntax... Loading font-lock... Loading jit-lock... Loading mouse... Loading scroll-bar... Loading select... Loading emacs-lisp/timer... Loading isearch... Loading rfn-eshadow... Loading menu-bar... Loading tab-bar... Loading emacs-lisp/lisp... Loading textmodes/page... Loading register... Loading textmodes/paragraphs... Loading progmodes/prog-mode... Loading emacs-lisp/lisp-mode... Loading progmodes/elisp-mode... Loading textmodes/text-mode... Loading textmodes/fill... Loading newcomment... Loading replace... Loading emacs-lisp/tabulated-list... Loading buff-menu... Loading fringe... Loading emacs-lisp/regexp-opt... Loading image... Loading international/fontset... Loading dnd... Loading tool-bar... Loading term/common-win... Loading international/mule-util... Loading international/ucs-normalize... Loading term/ns-win... Loading mwheel... Loading emacs-lisp/float-sup... Loading vc/vc-hooks... Loading vc/ediff-hook... Loading uniquify... Loading electric... Loading emacs-lisp/eldoc... Loading cus-start... Loading tooltip... Loading leim/leim-list.el (source)... Waiting for git... Waiting for git... Finding pointers to doc strings... Finding pointers to doc strings...done Pure-hashed: 15462 strings, 4521 vectors, 39800 conses, 4161 bytecodes, 242 others Dumping under the name emacs.pdmp dumping fingerprint: 27d336e615f925f56b7bd68723e6010aa6d4692896a420de40673c741bf0bccc Dump complete Byte counts: header=80 hot=10615248 discardable=119040 cold=4521816 Reloc counts: hot=592723 discardable=4622 Adding name emacs-27.0.50.1 Adding name emacs-27.0.50.1.pdmp cp -f emacs.pdmp bootstrap-emacs.pdmp /Library/Developer/CommandLineTools/usr/bin/make -C ../nextstep all rm -rf /Users/skangas/wip/emacs/nextstep/Emacs.app rm -rf /Users/skangas/wip/emacs/nextstep/Emacs.app /usr/local/bin/gmkdir -p /Users/skangas/wip/emacs/nextstep/Emacs.app /Library/Developer/CommandLineTools/usr/bin/make -C ../src emacs /usr/local/bin/gmkdir -p /Users/skangas/wip/emacs/nextstep/Emacs.app ( cd ./Cocoa/Emacs.base ; tar cfh - . ) | \ ( cd /Users/skangas/wip/emacs/nextstep/Emacs.app ; umask 022; tar xf - ) ( cd ./Cocoa/Emacs.base ; tar cfh - . ) | \ ( cd /Users/skangas/wip/emacs/nextstep/Emacs.app ; umask 022; tar xf - ) ./Contents/Resources/Emacs.icns: Can't create 'Contents/Resources/Emacs.icns' tar: Error exit delayed from previous errors. make[2]: *** [/Users/skangas/wip/emacs/nextstep/Emacs.app/Contents/Info.plist] Error 1 make[2]: *** Waiting for unfinished jobs.... [ "`cd . && /bin/pwd`" = "`/bin/pwd`" ] || \ ( cd Cocoa/Emacs.base ; tar cfh - . ) | \ ( cd /Users/skangas/wip/emacs/nextstep/Emacs.app ; umask 022; tar xf - ) touch /Users/skangas/wip/emacs/nextstep/Emacs.app /Library/Developer/CommandLineTools/usr/bin/make -C ../admin/charsets all /Library/Developer/CommandLineTools/usr/bin/make -C ../admin/unidata charscript.el /Library/Developer/CommandLineTools/usr/bin/make -C ../admin/charsets cp51932.el make[4]: Nothing to be done for `cp51932.el'. /Library/Developer/CommandLineTools/usr/bin/make -C ../admin/charsets eucjp-ms.el make[4]: Nothing to be done for `eucjp-ms.el'. make[4]: Nothing to be done for `charscript.el'. make[4]: Nothing to be done for `all'. /Library/Developer/CommandLineTools/usr/bin/make -C ../admin/unidata all EMACS="../../src/bootstrap-emacs" make[4]: Nothing to be done for `all'. make[1]: *** [ns-app] Error 2 make: *** [src] Error 2 ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs (on macos) 2019-09-17 9:29 ` Stefan Kangas @ 2019-09-17 20:28 ` Juri Linkov 2019-09-17 22:38 ` Stefan Kangas 2019-09-20 18:26 ` Alan Third 2019-09-17 23:29 ` Stefan Kangas 1 sibling, 2 replies; 181+ messages in thread From: Juri Linkov @ 2019-09-17 20:28 UTC (permalink / raw) To: Stefan Kangas; +Cc: Jean-Christophe Helary, Emacs developers > It now builds but emacs crashes on start. I don't have time to debug > it in gdb right now, but I'll look into it and send a proper > backtrace. For now, here's the crash output: Meanwhile, could you please answer a quick question: Does macOS builds support non-native tool-bar? (info "(emacs) Tool Bars") contains this explanation: NS builds consider the tool bar to be a window decoration, and therefore do not display it when a window is undecorated. *Note (elisp)Frame Parameters::. On macOS the tool bar is hidden when the frame is put into fullscreen, but can be displayed by moving the mouse pointer to the top of the screen. Does this mean that NS builds implement only external tool-bar? This might imply the need to use an external tab-bar as well. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs (on macos) 2019-09-17 20:28 ` Juri Linkov @ 2019-09-17 22:38 ` Stefan Kangas 2019-09-20 18:26 ` Alan Third 1 sibling, 0 replies; 181+ messages in thread From: Stefan Kangas @ 2019-09-17 22:38 UTC (permalink / raw) To: Juri Linkov; +Cc: Jean-Christophe Helary, Emacs developers Juri Linkov <juri@linkov.net> writes: > Meanwhile, could you please answer a quick question: Sorry, I don't know the answer to these questions. I'm not a macOS developer, I just use it because I have to at work. Best regards, Stefan Kangas ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs (on macos) 2019-09-17 20:28 ` Juri Linkov 2019-09-17 22:38 ` Stefan Kangas @ 2019-09-20 18:26 ` Alan Third 1 sibling, 0 replies; 181+ messages in thread From: Alan Third @ 2019-09-20 18:26 UTC (permalink / raw) To: Juri Linkov; +Cc: Jean-Christophe Helary, Stefan Kangas, Emacs developers On Tue, Sep 17, 2019 at 11:28:14PM +0300, Juri Linkov wrote: > > It now builds but emacs crashes on start. I don't have time to debug > > it in gdb right now, but I'll look into it and send a proper > > backtrace. For now, here's the crash output: > > Meanwhile, could you please answer a quick question: > Does macOS builds support non-native tool-bar? > > (info "(emacs) Tool Bars") contains this explanation: > > NS builds consider the tool bar to be a window decoration, and > therefore do not display it when a window is undecorated. *Note > (elisp)Frame Parameters::. On macOS the tool bar is hidden when the > frame is put into fullscreen, but can be displayed by moving the mouse > pointer to the top of the screen. > > Does this mean that NS builds implement only external tool-bar? > This might imply the need to use an external tab-bar as well. NS doesn’t support a non‐native toolbar. I don’t see any reason why a non‐native tab bar couldn’t be written, although I suppose it may have to be a completely new implementation. Cocoa provides a native tab bar, but it’s not programmable, it simply merges (OS) windows together in one. -- Alan Third ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs (on macos) 2019-09-17 9:29 ` Stefan Kangas 2019-09-17 20:28 ` Juri Linkov @ 2019-09-17 23:29 ` Stefan Kangas 1 sibling, 0 replies; 181+ messages in thread From: Stefan Kangas @ 2019-09-17 23:29 UTC (permalink / raw) To: Juri Linkov; +Cc: Jean-Christophe Helary, Emacs developers [-- Attachment #1: Type: text/plain, Size: 2243 bytes --] > It now builds but emacs crashes on start. I don't have time to debug > it in gdb right now, but I'll look into it and send a proper > backtrace. Here's the backtrace, quoted so gmail doesn't foul up the line breaks: > (gdb) bt full > #0 0x00007fffaa857d42 in ?? () from /usr/lib/system/libsystem_kernel.dylib > No symbol table info available. > #1 0x00007fffaa945457 in pthread_kill () from /usr/lib/system/libsystem_pthread.dylib > No symbol table info available. > #2 0x00007fffaa7bd420 in abort () from /usr/lib/system/libsystem_c.dylib > No symbol table info available. > #3 0xffffffff5fbf44b0 in ?? () > No symbol table info available. > #4 0x0000000000000030 in ?? () > No symbol table info available. > #5 0x00007fffffffffdf in ?? () > No symbol table info available. > #6 0x00007fffb363ea20 in ?? () > No symbol table info available. > #7 0x00007fff5fbf44a0 in ?? () > No symbol table info available. > #8 0x00007fffa92bd94a in vtable for std::__1::codecvt<wchar_t, char, __mbstate_t> () from /usr/lib/libc++.1.dylib > No symbol table info available. > #9 0x0000000000000e5b in ?? () > No symbol table info available. > #10 0x00007fffa92e3ce2 in __cxxabiv1::(anonymous namespace)::parse_block_invoke<__cxxabiv1::(anonymous namespace)::Db>(char const*, char const*, __cxxabiv1::(anonymous namespace)::Db&)::test () from /usr/lib/libc++abi.dylib > No symbol table info available. > #11 0x00007fff95322bd0 in ?? () from /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation > No symbol table info available. > #12 0x00007fffa9dfd553 in ?? () from /usr/lib/libobjc.A.dylib > No symbol table info available. > #13 0x9ac464e898fa0089 in ?? () > No symbol table info available. > #14 0x00007fff95322bd0 in ?? () from /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation > No symbol table info available. > #15 0x0000000000000000 in ?? () > No symbol table info available. > > Lisp Backtrace: > Cannot access memory at address 0x20ecf40 Not sure why I'm getting "No symbol table info available". I've configured using CFLAGS='-O0 -g3' after running make maintainer-clean. There is also the apple backtrace. Please see the attached file for that. Best regards, Stefan Kangas [-- Attachment #2: apple-backtrace.txt --] [-- Type: text/plain, Size: 54452 bytes --] Process: emacs [79936] Path: /Users/USER/*/emacs Identifier: emacs Version: 0 Code Type: X86-64 (Native) Parent Process: bash [73574] Responsible: emacs [79936] User ID: 501 Date/Time: 2019-09-18 01:24:29.411 +0200 OS Version: Mac OS X 10.12.6 (16G2128) Report Version: 12 Anonymous UUID: 7494B2A9-35AD-169B-5A72-B76AC2BB0CA9 Sleep/Wake UUID: D9A0776A-E9B1-4FCF-9530-8C8EFCD8C453 Time Awake Since Boot: 720000 seconds Time Since Wake: 18000 seconds System Integrity Protection: enabled Crashed Thread: 0 Dispatch queue: com.apple.main-thread Exception Type: EXC_CRASH (SIGABRT) Exception Codes: 0x0000000000000000, 0x0000000000000000 Exception Note: EXC_CORPSE_NOTIFY Application Specific Information: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[EmacsWindow setTabbar:]: unrecognized selector sent to instance 0x7fe4cae809f0' terminating with uncaught exception of type NSException abort() called Application Specific Backtrace 1: 0 CoreFoundation 0x00007fff94faf46b __exceptionPreprocess + 171 1 libobjc.A.dylib 0x00007fffa9def48d objc_exception_throw + 48 2 CoreFoundation 0x00007fff950310e4 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132 3 CoreFoundation 0x00007fff94f20b05 ___forwarding___ + 1061 4 CoreFoundation 0x00007fff94f20658 _CF_forwarding_prep_0 + 120 5 emacs 0x0000000109b64a2f -[EmacsView createTabbar:] + 239 6 emacs 0x0000000109b6547d -[EmacsView initFrameFromEmacs:] + 2125 7 emacs 0x0000000109b85361 Fx_create_frame + 9921 8 emacs 0x0000000109a17884 funcall_subr + 884 9 emacs 0x0000000109a15eee Ffuncall + 494 10 emacs 0x0000000109aa5fff exec_byte_code + 14415 11 emacs 0x0000000109a17f75 funcall_lambda + 965 12 emacs 0x0000000109a15f3e Ffuncall + 574 13 emacs 0x0000000109aa5fff exec_byte_code + 14415 14 emacs 0x0000000109a17f75 funcall_lambda + 965 15 emacs 0x0000000109a15f3e Ffuncall + 574 16 emacs 0x0000000109a107c8 Fapply + 280 17 emacs 0x0000000109a17766 funcall_subr + 598 18 emacs 0x0000000109a15eee Ffuncall + 494 19 emacs 0x0000000109aa5fff exec_byte_code + 14415 20 emacs 0x0000000109a17f75 funcall_lambda + 965 21 emacs 0x0000000109a15f3e Ffuncall + 574 22 emacs 0x0000000109aa5fff exec_byte_code + 14415 23 emacs 0x0000000109a17f75 funcall_lambda + 965 24 emacs 0x0000000109a15f3e Ffuncall + 574 25 emacs 0x0000000109aa5fff exec_byte_code + 14415 26 emacs 0x0000000109a17f75 funcall_lambda + 965 27 emacs 0x0000000109a15f3e Ffuncall + 574 28 emacs 0x0000000109aa5fff exec_byte_code + 14415 29 emacs 0x0000000109a17f75 funcall_lambda + 965 30 emacs 0x0000000109a15f3e Ffuncall + 574 31 emacs 0x0000000109aa5fff exec_byte_code + 14415 32 emacs 0x0000000109a17f75 funcall_lambda + 965 33 emacs 0x0000000109a105ae apply_lambda + 9198 34 emacs 0x0000000109a04bf7 eval_sub + 12935 35 emacs 0x0000000109a0df6d Feval + 173 36 emacs 0x00000001098e77ca top_level_2 + 42 37 emacs 0x0000000109a0c3ff internal_condition_case + 127 38 emacs 0x00000001098e73e1 top_level_1 + 97 39 emacs 0x0000000109a0b558 internal_catch + 72 40 emacs 0x00000001098c4604 command_loop + 276 41 emacs 0x00000001098c4437 recursive_edit_1 + 215 42 emacs 0x00000001098c4886 Frecursive_edit + 470 43 emacs 0x00000001098c194a main + 7162 44 libdyld.dylib 0x00007fffaa729235 start + 1 45 ??? 0x0000000000000002 0x0 + 2 Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 0 libsystem_kernel.dylib 0x00007fffaa857d42 __pthread_kill + 10 1 libsystem_pthread.dylib 0x00007fffaa945457 pthread_kill + 90 2 libsystem_c.dylib 0x00007fffaa76e497 raise + 26 3 emacs 0x00000001098bf887 terminate_due_to_signal + 380 (emacs.c:405) 4 emacs 0x0000000109907a3a emacs_abort + 19 5 emacs 0x0000000109b5a648 ns_term_shutdown + 168 (nsterm.m:5492) 6 emacs 0x00000001098bfcc5 shut_down_emacs + 661 (emacs.c:2513) 7 emacs 0x00000001098bf823 terminate_due_to_signal + 280 (emacs.c:389) 8 emacs 0x000000010990cd88 handle_fatal_signal + 24 9 emacs 0x000000010990ce22 deliver_thread_signal + 146 (sysdep.c:1765) 10 emacs 0x000000010990a0da deliver_fatal_thread_signal + 26 (sysdep.c:1803) 11 libsystem_platform.dylib 0x00007fffaa938b3a _sigtramp + 26 12 ??? 0x00000003b363e240 0 + 15894569536 13 libsystem_c.dylib 0x00007fffaa7bd420 abort + 129 14 libc++abi.dylib 0x00007fffa92bd94a abort_message + 266 15 libc++abi.dylib 0x00007fffa92e2c2f default_terminate_handler() + 267 16 libobjc.A.dylib 0x00007fffa9df16fe _objc_terminate() + 103 17 libc++abi.dylib 0x00007fffa92dfd49 std::__terminate(void (*)()) + 8 18 libc++abi.dylib 0x00007fffa92df7be __cxa_throw + 121 19 libobjc.A.dylib 0x00007fffa9def5b6 objc_exception_throw + 345 20 com.apple.CoreFoundation 0x00007fff950310e4 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132 21 com.apple.CoreFoundation 0x00007fff94f20b05 ___forwarding___ + 1061 22 com.apple.CoreFoundation 0x00007fff94f20658 _CF_forwarding_prep_0 + 120 23 emacs 0x0000000109b64a2f -[EmacsView createTabbar:] + 239 (nsterm.m:7327) 24 emacs 0x0000000109b6547d -[EmacsView initFrameFromEmacs:] + 2125 (nsterm.m:7456) 25 emacs 0x0000000109b85361 Fx_create_frame + 9921 (nsfns.m:1384) 26 emacs 0x0000000109a17884 funcall_subr + 884 (eval.c:2876) 27 emacs 0x0000000109a15eee Ffuncall + 494 (eval.c:2803) 28 emacs 0x0000000109aa5fff exec_byte_code + 14415 (bytecode.c:633) 29 emacs 0x0000000109a17f75 funcall_lambda + 965 (eval.c:2998) 30 emacs 0x0000000109a15f3e Ffuncall + 574 (eval.c:2805) 31 emacs 0x0000000109aa5fff exec_byte_code + 14415 (bytecode.c:633) 32 emacs 0x0000000109a17f75 funcall_lambda + 965 (eval.c:2998) 33 emacs 0x0000000109a15f3e Ffuncall + 574 (eval.c:2805) 34 emacs 0x0000000109a107c8 Fapply + 280 (eval.c:2382) 35 emacs 0x0000000109a17766 funcall_subr + 598 (eval.c:2856) 36 emacs 0x0000000109a15eee Ffuncall + 494 (eval.c:2803) 37 emacs 0x0000000109aa5fff exec_byte_code + 14415 (bytecode.c:633) 38 emacs 0x0000000109a17f75 funcall_lambda + 965 (eval.c:2998) 39 emacs 0x0000000109a15f3e Ffuncall + 574 (eval.c:2805) 40 emacs 0x0000000109aa5fff exec_byte_code + 14415 (bytecode.c:633) 41 emacs 0x0000000109a17f75 funcall_lambda + 965 (eval.c:2998) 42 emacs 0x0000000109a15f3e Ffuncall + 574 (eval.c:2805) 43 emacs 0x0000000109aa5fff exec_byte_code + 14415 (bytecode.c:633) 44 emacs 0x0000000109a17f75 funcall_lambda + 965 (eval.c:2998) 45 emacs 0x0000000109a15f3e Ffuncall + 574 (eval.c:2805) 46 emacs 0x0000000109aa5fff exec_byte_code + 14415 (bytecode.c:633) 47 emacs 0x0000000109a17f75 funcall_lambda + 965 (eval.c:2998) 48 emacs 0x0000000109a15f3e Ffuncall + 574 (eval.c:2805) 49 emacs 0x0000000109aa5fff exec_byte_code + 14415 (bytecode.c:633) 50 emacs 0x0000000109a17f75 funcall_lambda + 965 (eval.c:2998) 51 emacs 0x0000000109a105ae apply_lambda + 9198 (eval.c:2935) 52 emacs 0x0000000109a04bf7 eval_sub + 12935 (eval.c:2319) 53 emacs 0x0000000109a0df6d Feval + 173 (eval.c:2103) 54 emacs 0x00000001098e77ca top_level_2 + 42 (keyboard.c:1100) 55 emacs 0x0000000109a0c3ff internal_condition_case + 127 (eval.c:1355) 56 emacs 0x00000001098e73e1 top_level_1 + 97 (keyboard.c:1108) 57 emacs 0x0000000109a0b558 internal_catch + 72 (eval.c:1116) 58 emacs 0x00000001098c4604 command_loop + 276 (keyboard.c:1069) 59 emacs 0x00000001098c4437 recursive_edit_1 + 215 (keyboard.c:714) 60 emacs 0x00000001098c4886 Frecursive_edit + 470 (keyboard.c:786) 61 emacs 0x00000001098c194a main + 7162 (emacs.c:2086) 62 libdyld.dylib 0x00007fffaa729235 start + 1 Thread 1: 0 libsystem_kernel.dylib 0x00007fffaa85844e __workq_kernreturn + 10 1 libsystem_pthread.dylib 0x00007fffaa942621 _pthread_wqthread + 1426 2 libsystem_pthread.dylib 0x00007fffaa94207d start_wqthread + 13 Thread 2: 0 libsystem_kernel.dylib 0x00007fffaa85844e __workq_kernreturn + 10 1 libsystem_pthread.dylib 0x00007fffaa942621 _pthread_wqthread + 1426 2 libsystem_pthread.dylib 0x00007fffaa94207d start_wqthread + 13 Thread 3: 0 libsystem_kernel.dylib 0x00007fffaa85844e __workq_kernreturn + 10 1 libsystem_pthread.dylib 0x00007fffaa94248e _pthread_wqthread + 1023 2 libsystem_pthread.dylib 0x00007fffaa94207d start_wqthread + 13 Thread 4: 0 libsystem_kernel.dylib 0x00007fffaa857eb6 __select + 10 1 emacs 0x0000000109b5c3ba -[EmacsApp fd_handler:] + 202 (nsterm.m:5981) 2 com.apple.Foundation 0x00007fff969497dd __NSThread__start__ + 1243 3 libsystem_pthread.dylib 0x00007fffaa94293b _pthread_body + 180 4 libsystem_pthread.dylib 0x00007fffaa942887 _pthread_start + 286 5 libsystem_pthread.dylib 0x00007fffaa94208d thread_start + 13 Thread 5:: com.apple.NSEventThread 0 libsystem_kernel.dylib 0x00007fffaa85034a mach_msg_trap + 10 1 libsystem_kernel.dylib 0x00007fffaa84f797 mach_msg + 55 2 com.apple.CoreFoundation 0x00007fff94f257e4 __CFRunLoopServiceMachPort + 212 3 com.apple.CoreFoundation 0x00007fff94f24c71 __CFRunLoopRun + 1361 4 com.apple.CoreFoundation 0x00007fff94f244c4 CFRunLoopRunSpecific + 420 5 com.apple.AppKit 0x00007fff92b66f02 _NSEventThread + 205 6 libsystem_pthread.dylib 0x00007fffaa94293b _pthread_body + 180 7 libsystem_pthread.dylib 0x00007fffaa942887 _pthread_start + 286 8 libsystem_pthread.dylib 0x00007fffaa94208d thread_start + 13 Thread 0 crashed with X86 Thread State (64-bit): rax: 0x0000000000000000 rbx: 0x0000000000000006 rcx: 0x00007fff56504868 rdx: 0x0000000000000000 rdi: 0x0000000000000307 rsi: 0x0000000000000006 rbp: 0x00007fff56504890 rsp: 0x00007fff56504868 r8: 0x0000000000000002 r9: 0x00007fe4cad1d710 r10: 0x0000000008000000 r11: 0x0000000000000206 r12: 0x00007fff565053e0 r13: 0x0000000000000030 r14: 0x00007fffb365a3c0 r15: 0x0000000000000008 rip: 0x00007fffaa857d42 rfl: 0x0000000000000206 cr2: 0x00007fff95072420 Logical CPU: 0 Error Code: 0x02000148 Trap Number: 133 Binary Images: 0x1096ef000 - 0x109c32ff3 +emacs (0) <84204CBE-7A29-30D5-AE5D-6EFC6C4B724F> /Users/USER/*/emacs 0x10a25a000 - 0x10a3a4fcb +libgnutls.30.dylib (0) <5B80947A-73B0-3451-80EA-B211D8046100> /usr/local/opt/gnutls/lib/libgnutls.30.dylib 0x10a3ee000 - 0x10a426ffb +liblcms2.2.dylib (0) <16969B00-10FD-31FC-BB14-DE1C056658A5> /usr/local/opt/little-cms2/lib/liblcms2.2.dylib 0x10a43d000 - 0x10a49cfc7 +libgmp.10.dylib (0) <795EB8F9-E194-3677-B253-2EDB84AB55FB> /usr/local/opt/gmp/lib/libgmp.10.dylib 0x10a4a9000 - 0x10a551fff +libp11-kit.0.dylib (0) <998DC264-D10E-3F55-B61C-7C66FDC359B4> /usr/local/opt/p11-kit/lib/libp11-kit.0.dylib 0x10a59f000 - 0x10a5bbffb +libidn2.0.dylib (0) <42960C9F-F71B-3F82-AD8C-A08E30AF5048> /usr/local/opt/libidn2/lib/libidn2.0.dylib 0x10a5c0000 - 0x10a726ff7 +libunistring.2.dylib (0) <FD8AE4C2-FA79-3935-AAA7-146844F92462> /usr/local/opt/libunistring/lib/libunistring.2.dylib 0x10a73e000 - 0x10a749ffb +libtasn1.6.dylib (0) <6202466B-49DD-3E60-A8FB-E93FA215C2E8> /usr/local/opt/libtasn1/lib/libtasn1.6.dylib 0x10a74f000 - 0x10a775ffb +libnettle.6.dylib (0) <D9206C76-D0A1-3C45-AC35-CA19A5056F08> /usr/local/opt/nettle/lib/libnettle.6.dylib 0x10a782000 - 0x10a7abff7 +libhogweed.4.dylib (0) <F51E95CD-688C-3A95-BE32-F7FEC1B5C6C0> /usr/local/opt/nettle/lib/libhogweed.4.dylib 0x10a7bb000 - 0x10a7c3ffb +libintl.8.dylib (0) <663DB8F0-422F-3181-8788-FE5DE974B7FA> /usr/local/opt/gettext/lib/libintl.8.dylib 0x10a7cd000 - 0x10a7d1ff7 +libffi.6.dylib (0) <45DBAA49-5541-3015-9C4B-BF0E7C813B35> /usr/local/opt/libffi/lib/libffi.6.dylib 0x10dcf5000 - 0x10dd0cffb libCGInterfaces.dylib (331.5) <17109679-A284-3C72-AA60-DBA815D3062B> /System/Library/Frameworks/Accelerate.framework/Frameworks/vImage.framework/Versions/A/Libraries/libCGInterfaces.dylib 0x1198a1000 - 0x1198dedc7 dyld (434) <33DB4E37-BC29-37A4-92AB-30328E66A8FA> /usr/lib/dyld 0x7fff8fb4c000 - 0x7fff8fe91ff7 com.apple.RawCamera.bundle (7.04 - 914) <86A67D11-9791-3CE6-9FF5-3387C0AB925B> /System/Library/CoreServices/RawCamera.bundle/Contents/MacOS/RawCamera 0x7fff919f5000 - 0x7fff919f5fff com.apple.Accelerate (1.11 - Accelerate 1.11) <916E360F-323C-3AE1-AB3D-D1F3B284AEE9> /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate 0x7fff91a0e000 - 0x7fff91f27feb com.apple.vImage (8.1 - ???) <B58A7937-BEE2-38FE-87F4-5D5F40D31DC9> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage 0x7fff91f28000 - 0x7fff92099ff3 libBLAS.dylib (1185.50.4) <4087FFE0-627E-3623-96B4-F0A9A1991E09> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib 0x7fff9209a000 - 0x7fff920aeffb libBNNS.dylib (15) <254698C7-7D36-3FFF-864E-ADEEEE543076> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBNNS.dylib 0x7fff920af000 - 0x7fff924a5fef libLAPACK.dylib (1185.50.4) <C35FFB2F-A0E6-3903-8A3C-113A74BCBCA2> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib 0x7fff924a6000 - 0x7fff924bcfff libLinearAlgebra.dylib (1185.50.4) <345CAACF-7263-36EF-B69B-793EA8B390AF> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLinearAlgebra.dylib 0x7fff924bd000 - 0x7fff924c3fff libQuadrature.dylib (3) <EF56C8E6-DE22-3C69-B543-A8648F335FDD> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libQuadrature.dylib 0x7fff924c4000 - 0x7fff924d8ff7 libSparseBLAS.dylib (1185.50.4) <67BA432E-FB59-3C78-A8BE-ED4274CBC359> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparseBLAS.dylib 0x7fff924d9000 - 0x7fff92660fe7 libvDSP.dylib (600.60.1) <4155F45B-41CD-3782-AE8F-7AE740FD83C3> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib 0x7fff92661000 - 0x7fff92713fff libvMisc.dylib (600.60.1) <E18365D7-DCC4-3304-A8D1-395E656D7B99> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib 0x7fff92714000 - 0x7fff92714fff com.apple.Accelerate.vecLib (3.11 - vecLib 3.11) <7C5733E7-0568-3E7D-AF61-160F19FED544> /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib 0x7fff929d3000 - 0x7fff937acff3 com.apple.AppKit (6.9 - 1504.83.101) <C7A0F7F4-F4F5-3735-8A6B-EE01CF527E80> /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit 0x7fff937be000 - 0x7fff937befff com.apple.ApplicationServices (48 - 48) <36EB2785-BBD2-33F0-BB13-8C804D47110A> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices 0x7fff937bf000 - 0x7fff9382dff7 com.apple.ApplicationServices.ATS (377 - 422.4) <78B556FF-28E6-3147-AE0D-8E0EC45EEE77> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS 0x7fff938c7000 - 0x7fff939f6fff libFontParser.dylib (194.15) <FF329191-6339-363E-9D95-FFE9D55E7F60> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontParser.dylib 0x7fff939f7000 - 0x7fff93a41ff7 libFontRegistry.dylib (196.8) <5E5F95FD-F69B-3F1A-9592-C0AB8F5FF57C> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontRegistry.dylib 0x7fff93a9f000 - 0x7fff93ad2fff libTrueTypeScaler.dylib (194.15) <513743F9-500B-37C5-A925-A82E7182F3E9> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libTrueTypeScaler.dylib 0x7fff93b3f000 - 0x7fff93be9ff7 com.apple.ColorSync (4.12.0 - 502.2) <ACA4001E-A0E3-33F6-9CD6-EEC2AA15E322> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSync.framework/Versions/A/ColorSync 0x7fff93bea000 - 0x7fff93c3bfff com.apple.HIServices (1.22 - 594) <EF8432A1-15C5-360C-9D14-19ADA43FCFDC> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices 0x7fff93c3c000 - 0x7fff93c4bff3 com.apple.LangAnalysis (1.7.0 - 1.7.0) <2CBE7F61-2056-3F96-99A1-0D527796AFA6> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis 0x7fff93c4c000 - 0x7fff93c99fff com.apple.print.framework.PrintCore (12 - 491) <5027FD58-F0EE-33E4-8577-934CA06CD2AF> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore 0x7fff93c9a000 - 0x7fff93cd5fff com.apple.QD (3.12 - 313) <B339C41D-8CDF-3342-8414-F9717DCCADD4> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD 0x7fff93cd6000 - 0x7fff93ce1fff com.apple.speech.synthesis.framework (6.6.2 - 6.6.2) <7853EFF4-62B9-394E-B7B8-41A645656820> /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis 0x7fff93ce2000 - 0x7fff93eeeff7 com.apple.audio.toolbox.AudioToolbox (1.14 - 1.14) <1F4026C6-23C1-39E8-823D-72298FECF75C> /System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox 0x7fff93eef000 - 0x7fff93eeffff com.apple.audio.units.AudioUnit (1.14 - 1.14) <2CEE36AF-79E6-3B3E-B369-285E6C1886F7> /System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit 0x7fff94058000 - 0x7fff94435fff com.apple.CFNetwork (811.11 - 811.11) <5E5A7D4D-BCBA-3995-8C13-4D01DE1FAB33> /System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork 0x7fff9444f000 - 0x7fff9444ffff com.apple.Carbon (154 - 157) <69F403C7-F0CB-34E6-89B0-235CF4978C17> /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon 0x7fff94450000 - 0x7fff94453fff com.apple.CommonPanels (1.2.6 - 98) <BF04BB22-D54C-309E-9F5C-897D969CAF70> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/CommonPanels.framework/Versions/A/CommonPanels 0x7fff94454000 - 0x7fff9475dfff com.apple.HIToolbox (2.1.1 - 857.8) <25E0AC26-27FE-32E5-9226-F4D42B25ED30> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox 0x7fff9475e000 - 0x7fff94761ff7 com.apple.help (1.3.5 - 49) <B1A930E3-5907-3677-BACD-858EF68B172D> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Help.framework/Versions/A/Help 0x7fff94762000 - 0x7fff94767fff com.apple.ImageCapture (9.0 - 9.0) <341252B4-E082-361A-B756-6A330259C741> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/ImageCapture.framework/Versions/A/ImageCapture 0x7fff94768000 - 0x7fff947ffff3 com.apple.ink.framework (10.9 - 219) <1BD40B45-FD33-3177-A935-565EE5FC79D7> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Ink.framework/Versions/A/Ink 0x7fff94800000 - 0x7fff9481afff com.apple.openscripting (1.7 - 172.1) <78F3256B-AF4C-324A-A591-ECA4443A469F> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/OpenScripting.framework/Versions/A/OpenScripting 0x7fff9481b000 - 0x7fff9481cff3 com.apple.print.framework.Print (12 - 267) <E2F82F1F-DC27-3EF0-9F75-B354F701450A> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Print.framework/Versions/A/Print 0x7fff9481d000 - 0x7fff9481fff7 com.apple.securityhi (9.0 - 55006) <0DA7BABC-CE24-35FC-BF23-8EDF72D8C237> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SecurityHI.framework/Versions/A/SecurityHI 0x7fff94820000 - 0x7fff94826ff7 com.apple.speech.recognition.framework (6.0.1 - 6.0.1) <082895DC-3AC7-3DEF-ADCA-5B018C19C9D3> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition 0x7fff94a51000 - 0x7fff94adefff com.apple.audio.CoreAudio (4.3.0 - 4.3.0) <78767F88-91D4-31CE-AAC6-1F9407F479BB> /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio 0x7fff94adf000 - 0x7fff94af2fff com.apple.CoreBluetooth (1.0 - 1) <BCB78777-76F0-3CC1-8443-9E61AEF7EF63> /System/Library/Frameworks/CoreBluetooth.framework/Versions/A/CoreBluetooth 0x7fff94af3000 - 0x7fff94deefff com.apple.CoreData (120 - 754.2) <4C9CAB2C-60D4-3694-A0A0-5B04B14BD14E> /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData 0x7fff94def000 - 0x7fff94e9cff7 com.apple.CoreDisplay (1.0 - 1) <53D1EAFE-23A4-398D-BF52-E4299E670DB6> /System/Library/Frameworks/CoreDisplay.framework/Versions/A/CoreDisplay 0x7fff94e9d000 - 0x7fff95338fe7 com.apple.CoreFoundation (6.9 - 1349.98) <78CE7738-61B5-3997-902E-053426B3C2A9> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation 0x7fff95339000 - 0x7fff959bbfff com.apple.CoreGraphics (2.0 - 1070.22.1) <8A053296-AA99-371C-B9C5-FCBF87C6CEFE> /System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics 0x7fff959bc000 - 0x7fff95bffffb com.apple.CoreImage (12.4.0 - 451.4.9) <BE4303C9-C9D9-361D-AC94-DBE40EB6700E> /System/Library/Frameworks/CoreImage.framework/Versions/A/CoreImage 0x7fff95d64000 - 0x7fff95d64fff com.apple.CoreServices (775.20 - 775.20) <6DE824F2-B5FF-3EDA-8618-AED3C8020024> /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices 0x7fff95d65000 - 0x7fff95db6fff com.apple.AE (712.6 - 712.6) <9E9B4EC3-564D-3BA9-A9A4-1603E1F97F40> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE 0x7fff95db7000 - 0x7fff96092ff7 com.apple.CoreServices.CarbonCore (1159.8 - 1159.8) <2B661676-E4F2-3E6F-BD25-DB685FCCA06A> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore 0x7fff96093000 - 0x7fff960c6fff com.apple.DictionaryServices (1.2 - 274) <D23866E2-F7C8-3984-A9D4-96552CCDE573> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices 0x7fff960c7000 - 0x7fff960cfff3 com.apple.CoreServices.FSEvents (1230.50.1 - 1230.50.1) <2AD1B0E5-7214-37C4-8D11-A27C9CAC0F74> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/FSEvents 0x7fff960d0000 - 0x7fff9623cffb com.apple.LaunchServices (775.20 - 775.20) <9106FF16-9587-313F-822C-2CD56204903E> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices 0x7fff9623d000 - 0x7fff962edffb com.apple.Metadata (10.7.0 - 1075.41) <FE2BC948-5014-3C50-9ED7-F9544B611363> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata 0x7fff962ee000 - 0x7fff9634dfff com.apple.CoreServices.OSServices (775.20 - 775.20) <82D7E763-999D-31A0-AAE7-4F7A40105739> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices 0x7fff9634e000 - 0x7fff963befff com.apple.SearchKit (1.4.0 - 1.4.0) <7A6DDA2B-03F1-3137-BA9E-1CC211973E26> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit 0x7fff963bf000 - 0x7fff96404ff7 com.apple.coreservices.SharedFileList (38 - 38) <DA096678-93AB-3291-BDE2-482F1D544589> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SharedFileList.framework/Versions/A/SharedFileList 0x7fff9648d000 - 0x7fff965daffb com.apple.CoreText (352.0 - 544.18) <B883809B-561B-31C5-949E-D2564B6F808A> /System/Library/Frameworks/CoreText.framework/Versions/A/CoreText 0x7fff965db000 - 0x7fff96610ff3 com.apple.CoreVideo (1.8 - 235.3) <AC11D5FB-C77B-34F5-B942-F698E84C229F> /System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo 0x7fff96611000 - 0x7fff96682ffb com.apple.framework.CoreWLAN (11.0 - 1200.31) <7300F2B4-0976-37F3-95E9-4B3BC102ED01> /System/Library/Frameworks/CoreWLAN.framework/Versions/A/CoreWLAN 0x7fff96780000 - 0x7fff96785fff com.apple.DiskArbitration (2.7 - 2.7) <F47E07A4-D69D-312A-82C8-A1EE3C7C0EAC> /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration 0x7fff96917000 - 0x7fff96cbdff3 com.apple.Foundation (6.9 - 1349.92) <CF64A84C-CBBD-3B6B-BC49-CF05398F2280> /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation 0x7fff96ce9000 - 0x7fff96d1afff com.apple.GSS (4.0 - 2.0) <453B5C6D-08B0-3199-AFC8-C71BABD6B704> /System/Library/Frameworks/GSS.framework/Versions/A/GSS 0x7fff96dda000 - 0x7fff96e7dff7 com.apple.Bluetooth (5.0.5 - 5.0.5f7) <DC83B429-A8C1-34F1-9FD9-C9BB99156DBE> /System/Library/Frameworks/IOBluetooth.framework/Versions/A/IOBluetooth 0x7fff96e7e000 - 0x7fff96f14fff com.apple.framework.IOKit (2.0.2 - 1324.60.8) <46DA8966-AC27-3F51-BBB2-359A229BB0F7> /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit 0x7fff96f15000 - 0x7fff96f1bffb com.apple.IOSurface (159.12 - 159.12) <E3D6FCED-F938-30A3-AD08-0998B674A492> /System/Library/Frameworks/IOSurface.framework/Versions/A/IOSurface 0x7fff96f6e000 - 0x7fff970cefef com.apple.ImageIO.framework (3.3.0 - 1599.13.1) <B48585FF-3B2D-32F6-85A6-07ECDDB2A6E9> /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO 0x7fff970cf000 - 0x7fff970d3fff libGIF.dylib (1599.13.1) <79C31DCF-3D95-32DE-9869-C1FA91F7C572> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libGIF.dylib 0x7fff970d4000 - 0x7fff971c4ff7 libJP2.dylib (1599.13.1) <5E34964D-36BC-3DDD-936B-D859B39117BB> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJP2.dylib 0x7fff971c5000 - 0x7fff971e8ffb libJPEG.dylib (1599.13.1) <863E6D9C-E45A-33F7-8C52-2D2B81FCAE63> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib 0x7fff971e9000 - 0x7fff97210ff7 libPng.dylib (1599.13.1) <06282D7B-70EC-34A5-9240-A80FD18DC2D0> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib 0x7fff97211000 - 0x7fff97213ff3 libRadiance.dylib (1599.13.1) <823DDB0C-6BD0-3073-ABE4-313FDA38E3B4> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libRadiance.dylib 0x7fff97214000 - 0x7fff97262fff libTIFF.dylib (1599.13.1) <B48CCFEF-BD6E-37EA-8F1C-CC2CF6775A0E> /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib 0x7fff97fcb000 - 0x7fff97fe4ff7 com.apple.Kerberos (3.0 - 1) <B9D242EB-E325-3A21-9812-C77CBBFB0D51> /System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos 0x7fff987c4000 - 0x7fff9881ffff com.apple.Metal (87.18 - 87.18) <E3618B54-C728-34CA-9E8A-9BD33A295D31> /System/Library/Frameworks/Metal.framework/Versions/A/Metal 0x7fff99108000 - 0x7fff99110fff com.apple.NetFS (6.0 - 4.0) <14A24D00-5673-330A-959D-87F72040DEFF> /System/Library/Frameworks/NetFS.framework/Versions/A/NetFS 0x7fff992f0000 - 0x7fff9933eff3 com.apple.opencl (2.8.6 - 2.8.6) <E7958F3E-F56C-35EC-87CD-6ADFC25D4512> /System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL 0x7fff9933f000 - 0x7fff99358ffb com.apple.CFOpenDirectory (10.12 - 194) <A64E9A01-3F6E-36EA-9C10-88C564A68C9D> /System/Library/Frameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory 0x7fff99359000 - 0x7fff99364ff7 com.apple.OpenDirectory (10.12 - 194) <4298FFD0-B1A7-3064-AF5B-708B3FA38671> /System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory 0x7fff99365000 - 0x7fff99367fff libCVMSPluginSupport.dylib (14.0.16) <25655EB3-7BF6-36EC-BD17-47F4DF499D7F> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCVMSPluginSupport.dylib 0x7fff99368000 - 0x7fff9936bff7 libCoreFSCache.dylib (156.3) <687C4CC3-6537-344B-8BE1-5234C8CB2864> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreFSCache.dylib 0x7fff9936c000 - 0x7fff99370fff libCoreVMClient.dylib (156.3) <E7AEFCBE-B6BF-3C7C-9A4E-E78CB04DB794> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreVMClient.dylib 0x7fff99371000 - 0x7fff9937aff7 libGFXShared.dylib (14.0.16) <679D8495-1C5F-3932-A452-050A21E0EEBB> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGFXShared.dylib 0x7fff9937b000 - 0x7fff99386fff libGL.dylib (14.0.16) <0801F3B9-A525-32BB-9BC0-478947CE21D9> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib 0x7fff99387000 - 0x7fff993c3ff7 libGLImage.dylib (14.0.16) <FE39C57B-056C-3CBF-B653-A8F2005631C1> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib 0x7fff9953b000 - 0x7fff9957cff7 libGLU.dylib (14.0.16) <B285EAD6-B3AA-3753-BB85-75864BD6E76C> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib 0x7fff99ee4000 - 0x7fff99ef2fff com.apple.opengl (14.0.16 - 14.0.16) <8D4CC067-4A70-34AE-945D-29407D780452> /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL 0x7fff9aa44000 - 0x7fff9ac44fff com.apple.QuartzCore (1.11 - 453.41.2) <564FBF07-0072-3587-91BE-7B0EFD6FBC1D> /System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore 0x7fff9b1af000 - 0x7fff9b4b1fff com.apple.security (7.0 - 57740.60.30) <2DD7275B-40E5-3F8C-8258-8C73DD3EE438> /System/Library/Frameworks/Security.framework/Versions/A/Security 0x7fff9b4b2000 - 0x7fff9b527fff com.apple.securityfoundation (6.0 - 55132.50.7) <2AF6A217-45D3-30C2-86B6-F35AF827E698> /System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation 0x7fff9b552000 - 0x7fff9b555ff3 com.apple.xpc.ServiceManagement (1.0 - 1) <F2AACDEF-7DCC-35B9-A6B6-119FF8D83DBB> /System/Library/Frameworks/ServiceManagement.framework/Versions/A/ServiceManagement 0x7fff9b8dc000 - 0x7fff9b94bff7 com.apple.SystemConfiguration (1.14 - 1.14) <98E76341-BB2F-3DF4-9DD4-F4AC7648EF0F> /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration 0x7fff9e1ce000 - 0x7fff9e1f0ffb com.apple.framework.Apple80211 (12.0 - 1200.47.1) <F362FADE-B6F5-32B5-84E8-C3CE7FE5F851> /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Apple80211 0x7fff9e1f1000 - 0x7fff9e200feb com.apple.AppleFSCompression (88.50.3 - 1.0) <478E8BFF-8BA2-375E-BE02-BA27F115C15A> /System/Library/PrivateFrameworks/AppleFSCompression.framework/Versions/A/AppleFSCompression 0x7fff9e2f4000 - 0x7fff9e37f97f com.apple.AppleJPEG (1.0 - 1) <B9E9570D-04A4-34E4-B756-D200043B25B8> /System/Library/PrivateFrameworks/AppleJPEG.framework/Versions/A/AppleJPEG 0x7fff9e7b2000 - 0x7fff9e830ff7 com.apple.backup.framework (1.8.6 - 1.8.6) <2D75451A-8818-3D72-8480-489DF77D708B> /System/Library/PrivateFrameworks/Backup.framework/Versions/A/Backup 0x7fff9f4bb000 - 0x7fff9f4e2ff3 com.apple.ChunkingLibrary (173 - 173) <FC2165F9-FC93-39C0-8323-C2F43A5E00A3> /System/Library/PrivateFrameworks/ChunkingLibrary.framework/Versions/A/ChunkingLibrary 0x7fff9fe07000 - 0x7fff9fe10ffb com.apple.CommonAuth (4.0 - 2.0) <A71AD8F9-5CC8-3072-8A0B-F5427D3E8163> /System/Library/PrivateFrameworks/CommonAuth.framework/Versions/A/CommonAuth 0x7fffa0559000 - 0x7fffa0569fff com.apple.CoreEmoji (1.0 - 40.3.3) <E9A28301-2D79-3A97-A046-028258A6ABE5> /System/Library/PrivateFrameworks/CoreEmoji.framework/Versions/A/CoreEmoji 0x7fffa08a4000 - 0x7fffa08d4ff3 com.apple.CoreServicesInternal (276.2 - 276.2) <05EB7D45-DD4C-3A0F-AC63-A0C2A68E6481> /System/Library/PrivateFrameworks/CoreServicesInternal.framework/Versions/A/CoreServicesInternal 0x7fffa0b65000 - 0x7fffa0bf4ff7 com.apple.CoreSymbolication (62046) <2D4C3324-B647-3696-B92E-AAB1053EEB54> /System/Library/PrivateFrameworks/CoreSymbolication.framework/Versions/A/CoreSymbolication 0x7fffa0bf5000 - 0x7fffa0d34fe7 com.apple.coreui (2.1 - 431.3) <8D0FA478-9B6C-3D6D-8ADF-8677BA0BF134> /System/Library/PrivateFrameworks/CoreUI.framework/Versions/A/CoreUI 0x7fffa0d35000 - 0x7fffa0e05ff3 com.apple.CoreUtils (5.1 - 510.31) <B6636BBF-D37E-360E-A3EE-61BDC1736EEA> /System/Library/PrivateFrameworks/CoreUtils.framework/Versions/A/CoreUtils 0x7fffa0e55000 - 0x7fffa0ebaff3 com.apple.framework.CoreWiFi (12.0 - 1200.31) <1B3FE242-8AEB-38BD-84A4-65DBC476FEEA> /System/Library/PrivateFrameworks/CoreWiFi.framework/Versions/A/CoreWiFi 0x7fffa0ebb000 - 0x7fffa0ec9ff7 com.apple.CrashReporterSupport (10.12 - 827) <802A9B81-E349-348B-90AB-10E40B654250> /System/Library/PrivateFrameworks/CrashReporterSupport.framework/Versions/A/CrashReporterSupport 0x7fffa0f3b000 - 0x7fffa0f45ffb com.apple.framework.DFRFoundation (1.0 - 104.25) <7CFF896C-EF22-3941-BB3D-F3615CE4C908> /System/Library/PrivateFrameworks/DFRFoundation.framework/Versions/A/DFRFoundation 0x7fffa0f46000 - 0x7fffa0f4aff3 com.apple.DSExternalDisplay (3.1 - 380) <4B5E3FF0-E8C3-38CC-BF72-418C928956AB> /System/Library/PrivateFrameworks/DSExternalDisplay.framework/Versions/A/DSExternalDisplay 0x7fffa0f80000 - 0x7fffa0ff5ffb com.apple.datadetectorscore (7.0 - 539.1) <D84B64BA-CD56-368E-A31A-AC47C3780D0B> /System/Library/PrivateFrameworks/DataDetectorsCore.framework/Versions/A/DataDetectorsCore 0x7fffa1031000 - 0x7fffa1070fff com.apple.DebugSymbols (137 - 137) <58A70B66-2628-3CFE-B103-2200D95FC5F7> /System/Library/PrivateFrameworks/DebugSymbols.framework/Versions/A/DebugSymbols 0x7fffa1071000 - 0x7fffa1182fff com.apple.desktopservices (1.11.6 - 1.11.6) <225B3746-8626-34CD-8FA9-48A7C04ACCCF> /System/Library/PrivateFrameworks/DesktopServicesPriv.framework/Versions/A/DesktopServicesPriv 0x7fffa146a000 - 0x7fffa189bff7 com.apple.vision.FaceCore (3.3.2 - 3.3.2) <9391D5A3-738C-3136-9D07-518CB43DBADA> /System/Library/PrivateFrameworks/FaceCore.framework/Versions/A/FaceCore 0x7fffa2bf2000 - 0x7fffa2bf2fff libmetal_timestamp.dylib (600.0.49.9) <E5EED927-1671-3390-BCBB-D76201D63C73> /System/Library/PrivateFrameworks/GPUCompiler.framework/libmetal_timestamp.dylib 0x7fffa2ec3000 - 0x7fffa2edffff com.apple.GenerationalStorage (2.0 - 267.2) <22381303-B9A8-32D8-BDBF-871F0CDD81A5> /System/Library/PrivateFrameworks/GenerationalStorage.framework/Versions/A/GenerationalStorage 0x7fffa35f0000 - 0x7fffa3666ff3 com.apple.Heimdal (4.0 - 2.0) <9E554667-2A6D-3A86-883A-50C8AF98D0C0> /System/Library/PrivateFrameworks/Heimdal.framework/Versions/A/Heimdal 0x7fffa3c81000 - 0x7fffa3c88ffb com.apple.IOAccelerator (311.16.4 - 311.16.4) <F41EB563-1439-3745-BE98-4A4B6F45A7DF> /System/Library/PrivateFrameworks/IOAccelerator.framework/Versions/A/IOAccelerator 0x7fffa3c8a000 - 0x7fffa3c9eff7 com.apple.IOPresentment (1.0 - 29.10) <30DF04EE-10E2-353F-845F-A97B87DF3207> /System/Library/PrivateFrameworks/IOPresentment.framework/Versions/A/IOPresentment 0x7fffa3c9f000 - 0x7fffa3cc1fff com.apple.IconServices (74.4 - 74.4) <218DDD05-35F4-3833-B98D-471ED0EBC031> /System/Library/PrivateFrameworks/IconServices.framework/Versions/A/IconServices 0x7fffa3da8000 - 0x7fffa3f5ffff com.apple.LanguageModeling (1.0 - 123.2.5) <A8CA965F-0399-310D-91C3-B93DDDE9A442> /System/Library/PrivateFrameworks/LanguageModeling.framework/Versions/A/LanguageModeling 0x7fffa4880000 - 0x7fffa48f9ff7 com.apple.MetalPerformanceShaders.MetalPerformanceShaders (1.0 - 1) <C323FC94-FFA5-3EE6-B2AC-7E61EA92F304> /System/Library/PrivateFrameworks/MetalPerformanceShaders.framework/Versions/A/MetalPerformanceShaders 0x7fffa4a96000 - 0x7fffa4abeff7 com.apple.MultitouchSupport.framework (368.16 - 368.16) <F6EFB289-F4B1-36E7-88D4-D1C7B1630A23> /System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/A/MultitouchSupport 0x7fffa4b70000 - 0x7fffa4b7bfff com.apple.NetAuth (6.2 - 6.2) <E1D6BFF0-7F37-3866-9925-5DF40EB3A1F4> /System/Library/PrivateFrameworks/NetAuth.framework/Versions/A/NetAuth 0x7fffa5454000 - 0x7fffa5495ff3 com.apple.PerformanceAnalysis (1.148.3 - 148.3) <DE16079A-5267-372A-9435-E993EB41252A> /System/Library/PrivateFrameworks/PerformanceAnalysis.framework/Versions/A/PerformanceAnalysis 0x7fffa5b7d000 - 0x7fffa5b97fff com.apple.ProtocolBuffer (1 - 249.1) <A1F1B0F3-078F-378F-A9A9-0DEEA70E816A> /System/Library/PrivateFrameworks/ProtocolBuffer.framework/Versions/A/ProtocolBuffer 0x7fffa5bb0000 - 0x7fffa5bd3ff3 com.apple.RemoteViewServices (2.0 - 124) <6B967FDA-6591-302C-BA0A-76C4856E584E> /System/Library/PrivateFrameworks/RemoteViewServices.framework/Versions/A/RemoteViewServices 0x7fffa692f000 - 0x7fffa69bcfff com.apple.Sharing (696.2.67.1 - 696.2.67.1) <267A3C7C-BB70-3E92-B773-A3F9EDD12E84> /System/Library/PrivateFrameworks/Sharing.framework/Versions/A/Sharing 0x7fffa69dd000 - 0x7fffa6c43ff3 com.apple.SkyLight (1.600.0 - 170.3.11.11) <0F7F9F9B-90E2-3FE4-9A39-DE7EC10DAF79> /System/Library/PrivateFrameworks/SkyLight.framework/Versions/A/SkyLight 0x7fffa6e22000 - 0x7fffa6e2eff7 com.apple.SpeechRecognitionCore (3.3.2 - 3.3.2) <684BD1EA-8268-331C-A5A9-080EB375C658> /System/Library/PrivateFrameworks/SpeechRecognitionCore.framework/Versions/A/SpeechRecognitionCore 0x7fffa751a000 - 0x7fffa758efdf com.apple.Symbolication (62048.1) <1A30ED19-7532-3F46-9DD3-9879A973D0CF> /System/Library/PrivateFrameworks/Symbolication.framework/Versions/A/Symbolication 0x7fffa79cd000 - 0x7fffa79d3ff7 com.apple.TCC (1.0 - 1) <911B534B-4AC7-34E4-935E-E42ECD008CBC> /System/Library/PrivateFrameworks/TCC.framework/Versions/A/TCC 0x7fffa7a5f000 - 0x7fffa7b25ff7 com.apple.TextureIO (2.8 - 2.8) <3D61E533-4156-3B21-B7ED-CB823E680DFC> /System/Library/PrivateFrameworks/TextureIO.framework/Versions/A/TextureIO 0x7fffa7b9b000 - 0x7fffa7d2cff3 com.apple.UIFoundation (1.0 - 490.8) <0342C3E6-AB89-3F0D-A9CE-5F2CD3587B75> /System/Library/PrivateFrameworks/UIFoundation.framework/Versions/A/UIFoundation 0x7fffa8ddd000 - 0x7fffa8ddfffb com.apple.loginsupport (1.0 - 1) <F3140B97-12C3-35A7-9D3D-43DA2D13C113> /System/Library/PrivateFrameworks/login.framework/Versions/A/Frameworks/loginsupport.framework/Versions/A/loginsupport 0x7fffa8e34000 - 0x7fffa8e4fff7 libCRFSuite.dylib (34) <F78B7F5F-0B4F-35C6-AA2F-84EE9CB22137> /usr/lib/libCRFSuite.dylib 0x7fffa8e50000 - 0x7fffa8e5bfff libChineseTokenizer.dylib (21) <0886E908-A825-36AF-B94B-2361FD8BC2A1> /usr/lib/libChineseTokenizer.dylib 0x7fffa8eed000 - 0x7fffa8eeeff3 libDiagnosticMessagesClient.dylib (102) <84A04D24-0E60-3810-A8C0-90A65E2DF61A> /usr/lib/libDiagnosticMessagesClient.dylib 0x7fffa8eef000 - 0x7fffa9102fff libFosl_dynamic.dylib (16.39) <E22A4243-D148-3C74-BA15-2D906A3D1F9E> /usr/lib/libFosl_dynamic.dylib 0x7fffa9126000 - 0x7fffa9126fff libOpenScriptingUtil.dylib (172.1) <0F1BA407-97D1-36F6-882D-A355EAAD5E00> /usr/lib/libOpenScriptingUtil.dylib 0x7fffa9127000 - 0x7fffa912bffb libScreenReader.dylib (477.40.7) <F7305560-6CF0-3000-8301-72E04BEAA693> /usr/lib/libScreenReader.dylib 0x7fffa912c000 - 0x7fffa912dffb libSystem.B.dylib (1238.60.2) <58358A17-4318-3AD9-B18E-CC36502B9127> /usr/lib/libSystem.B.dylib 0x7fffa9199000 - 0x7fffa91c4ff3 libarchive.2.dylib (41.70.2) <907D1FB1-9A65-33F5-AFC8-0B6E5AE9D83A> /usr/lib/libarchive.2.dylib 0x7fffa91c5000 - 0x7fffa9241fc7 libate.dylib (1.12.13) <D0767875-D02E-3377-84D8-5F174C27BEA9> /usr/lib/libate.dylib 0x7fffa9245000 - 0x7fffa9245ff3 libauto.dylib (187) <34388D0B-C539-3C1B-9408-2BC152162E43> /usr/lib/libauto.dylib 0x7fffa9246000 - 0x7fffa9256ff3 libbsm.0.dylib (34) <20084796-B04D-3B35-A003-EA11459557A9> /usr/lib/libbsm.0.dylib 0x7fffa9257000 - 0x7fffa9265ff7 libbz2.1.0.dylib (38) <ADFA329A-DCE7-356D-8F09-A3168DFC6610> /usr/lib/libbz2.1.0.dylib 0x7fffa9266000 - 0x7fffa92bcff7 libc++.1.dylib (307.5) <0B43BB5D-E6EB-3464-8DE9-B41AC8ED9D1C> /usr/lib/libc++.1.dylib 0x7fffa92bd000 - 0x7fffa92e6ff7 libc++abi.dylib (307.4) <BC271AD3-831B-362A-9DA7-E8C51F285FE4> /usr/lib/libc++abi.dylib 0x7fffa92e7000 - 0x7fffa92f7ffb libcmph.dylib (6) <2B5D405E-2D0B-3320-ABD6-622934C86ABE> /usr/lib/libcmph.dylib 0x7fffa92f8000 - 0x7fffa930efcf libcompression.dylib (39) <F2726F95-F54E-3B21-BCB5-F7151DEFDC2F> /usr/lib/libcompression.dylib 0x7fffa930f000 - 0x7fffa930fff7 libcoretls.dylib (121.50.4) <64B1001E-10F6-3542-A3B2-C4B49F51817F> /usr/lib/libcoretls.dylib 0x7fffa9310000 - 0x7fffa9311ff3 libcoretls_cfhelpers.dylib (121.50.4) <1A10303E-5EB0-3C7C-9165-021FCDFD934D> /usr/lib/libcoretls_cfhelpers.dylib 0x7fffa964d000 - 0x7fffa96a0ff7 libcups.2.dylib (450.4) <2DA65D4A-1428-3F74-869A-E16246DE88C7> /usr/lib/libcups.2.dylib 0x7fffa971d000 - 0x7fffa971dfff libenergytrace.dylib (15) <A1B040A2-7977-3097-9ADF-34FF181EB970> /usr/lib/libenergytrace.dylib 0x7fffa972d000 - 0x7fffa9732ff7 libheimdal-asn1.dylib (498.50.12) <1AC5AB99-2E62-3B9C-ADE4-AE65CFCDA471> /usr/lib/libheimdal-asn1.dylib 0x7fffa9733000 - 0x7fffa9825ff7 libiconv.2.dylib (50) <42125B35-81D7-3FC4-9475-A26DBE10884D> /usr/lib/libiconv.2.dylib 0x7fffa9826000 - 0x7fffa9a4bffb libicucore.A.dylib (57168.0.1) <99D53A36-19F6-34F0-86AB-D8BD6C9BD3AD> /usr/lib/libicucore.A.dylib 0x7fffa9a51000 - 0x7fffa9a52fff liblangid.dylib (126) <2085E7A7-9A34-3735-87F4-F174EF8EABF0> /usr/lib/liblangid.dylib 0x7fffa9a53000 - 0x7fffa9a6cffb liblzma.5.dylib (10) <44BD0279-99DD-36B5-8A6E-C11432E2098D> /usr/lib/liblzma.5.dylib 0x7fffa9a6d000 - 0x7fffa9a83ff7 libmarisa.dylib (5) <9030D214-5D0F-30CB-AC03-902C63909362> /usr/lib/libmarisa.dylib 0x7fffa9a84000 - 0x7fffa9d2cff7 libmecabra.dylib (744.8) <D429FCC9-42A4-38B3-8784-44024BC859EF> /usr/lib/libmecabra.dylib 0x7fffa9d2d000 - 0x7fffa9d5effb libncurses.5.4.dylib (51.30.1) <B03B1BD2-7080-3856-BB02-7E8238320C3B> /usr/lib/libncurses.5.4.dylib 0x7fffa9d5f000 - 0x7fffa9dd9ff3 libnetwork.dylib (856.60.1) <191E99F5-4723-3180-8013-02AF2F9AE4B8> /usr/lib/libnetwork.dylib 0x7fffa9dda000 - 0x7fffaa1ac047 libobjc.A.dylib (709.1) <70614861-0340-32E2-85ED-FE65759CDFFA> /usr/lib/libobjc.A.dylib 0x7fffaa1af000 - 0x7fffaa1b3fff libpam.2.dylib (21.30.1) <71EB0D88-DE84-3C8D-A2C5-58AA282BC5BC> /usr/lib/libpam.2.dylib 0x7fffaa1b4000 - 0x7fffaa1e5fff libpcap.A.dylib (67.60.2) <B2D36AD8-D5C8-3875-AC81-4787A15E44C2> /usr/lib/libpcap.A.dylib 0x7fffaa202000 - 0x7fffaa21effb libresolv.9.dylib (64) <A244AE4C-00B0-396C-98FF-97FE4DB3DA30> /usr/lib/libresolv.9.dylib 0x7fffaa26e000 - 0x7fffaa3bcff7 libsqlite3.dylib (254.8) <1ECF7DF7-7A07-3B4B-A63B-F4EFF6BC7ACF> /usr/lib/libsqlite3.dylib 0x7fffaa505000 - 0x7fffaa512ff7 libxar.1.dylib (417.1) <78B14DC5-5256-3820-8259-117C5046BB9F> /usr/lib/libxar.1.dylib 0x7fffaa513000 - 0x7fffaa602ff3 libxml2.2.dylib (30.24) <D84C6B99-6D4C-3651-8086-387D631CBA37> /usr/lib/libxml2.2.dylib 0x7fffaa603000 - 0x7fffaa62cfff libxslt.1.dylib (15.9.3) <F57ED43F-7912-3C99-8500-AB0EEE9FA178> /usr/lib/libxslt.1.dylib 0x7fffaa62d000 - 0x7fffaa63eff3 libz.1.dylib (67) <46E3FFA2-4328-327A-8D34-A03E20BFFB8E> /usr/lib/libz.1.dylib 0x7fffaa64d000 - 0x7fffaa651ff7 libcache.dylib (79) <093A4DAB-8385-3D47-A350-E20CB7CCF7BF> /usr/lib/system/libcache.dylib 0x7fffaa652000 - 0x7fffaa65cfff libcommonCrypto.dylib (60092.50.5) <4C8A7FE1-C190-3015-A744-66F8220EAF6A> /usr/lib/system/libcommonCrypto.dylib 0x7fffaa65d000 - 0x7fffaa664fff libcompiler_rt.dylib (62) <55D47421-772A-32AB-B529-1A46C2F43B4D> /usr/lib/system/libcompiler_rt.dylib 0x7fffaa665000 - 0x7fffaa66dfff libcopyfile.dylib (138) <819BEA3C-DF11-3E3D-A1A1-5A51C5BF1961> /usr/lib/system/libcopyfile.dylib 0x7fffaa66e000 - 0x7fffaa6f1fdb libcorecrypto.dylib (442.50.22) <E36CE660-855A-3166-8B9C-645C514B2C52> /usr/lib/system/libcorecrypto.dylib 0x7fffaa6f2000 - 0x7fffaa723fff libdispatch.dylib (703.50.38) <54B02414-5908-3EF0-B4D2-230B7FEB1CF7> /usr/lib/system/libdispatch.dylib 0x7fffaa724000 - 0x7fffaa729ffb libdyld.dylib (434) <4A0E66C1-4596-38E6-898E-BD2660478D3D> /usr/lib/system/libdyld.dylib 0x7fffaa72a000 - 0x7fffaa72affb libkeymgr.dylib (28) <7AA011A9-DC21-3488-BF73-3B5B14D1FDD6> /usr/lib/system/libkeymgr.dylib 0x7fffaa72b000 - 0x7fffaa737fff libkxld.dylib (3789.73.50) <E2CCB6DE-F92B-33CE-81A8-DDC42E62B62D> /usr/lib/system/libkxld.dylib 0x7fffaa738000 - 0x7fffaa738fff liblaunch.dylib (972.70.5) <1F770D9B-3892-3BBB-9471-68DDDDB0F69A> /usr/lib/system/liblaunch.dylib 0x7fffaa739000 - 0x7fffaa73eff3 libmacho.dylib (898) <17D5D855-F6C3-3B04-B680-E9BF02EF8AED> /usr/lib/system/libmacho.dylib 0x7fffaa73f000 - 0x7fffaa741ff3 libquarantine.dylib (85.50.1) <12448CC2-378E-35F3-BE33-9DC395A5B970> /usr/lib/system/libquarantine.dylib 0x7fffaa742000 - 0x7fffaa743ffb libremovefile.dylib (45) <38D4CB9C-10CD-30D3-8B7B-A515EC75FE85> /usr/lib/system/libremovefile.dylib 0x7fffaa744000 - 0x7fffaa75cff7 libsystem_asl.dylib (349.50.5) <096E4228-3B7C-30A6-8B13-EC909A64499A> /usr/lib/system/libsystem_asl.dylib 0x7fffaa75d000 - 0x7fffaa75dff7 libsystem_blocks.dylib (67) <10DC5404-73AB-35B3-A277-A8AFECB476EB> /usr/lib/system/libsystem_blocks.dylib 0x7fffaa75e000 - 0x7fffaa7ebfef libsystem_c.dylib (1158.50.2) <E5AE5244-7D0C-36AC-8BB6-C7AE7EA52A4B> /usr/lib/system/libsystem_c.dylib 0x7fffaa7ec000 - 0x7fffaa7efffb libsystem_configuration.dylib (888.60.3) <094DBBF4-276A-3A11-8AF3-72743CC338E6> /usr/lib/system/libsystem_configuration.dylib 0x7fffaa7f0000 - 0x7fffaa7f3fff libsystem_coreservices.dylib (41.4) <7D26DE79-B424-3450-85E1-F7FAB32714AB> /usr/lib/system/libsystem_coreservices.dylib 0x7fffaa7f4000 - 0x7fffaa80cfff libsystem_coretls.dylib (121.50.4) <EC6FCF07-DCFB-3A03-9CC9-6DD3709974C6> /usr/lib/system/libsystem_coretls.dylib 0x7fffaa80d000 - 0x7fffaa813fff libsystem_dnssd.dylib (765.50.11) <B87F96B8-2694-3DB3-9923-1B4E2245C8BF> /usr/lib/system/libsystem_dnssd.dylib 0x7fffaa814000 - 0x7fffaa83dff7 libsystem_info.dylib (503.50.4) <611DB84C-BF70-3F92-8702-B9F28A900920> /usr/lib/system/libsystem_info.dylib 0x7fffaa83e000 - 0x7fffaa860ff7 libsystem_kernel.dylib (3789.73.50) <932ACBB6-9962-3839-AEE3-D8AA6BF1DD02> /usr/lib/system/libsystem_kernel.dylib 0x7fffaa861000 - 0x7fffaa8a8fe7 libsystem_m.dylib (3121.6) <86D499B5-BBDC-3D3B-8A4E-97AE8E6672A4> /usr/lib/system/libsystem_m.dylib 0x7fffaa8a9000 - 0x7fffaa8c7ff7 libsystem_malloc.dylib (116.50.9) <82647590-DAEF-3499-8BF3-F1E3048861FE> /usr/lib/system/libsystem_malloc.dylib 0x7fffaa8c8000 - 0x7fffaa921ffb libsystem_network.dylib (856.60.1) <369D0221-56CA-3C3E-9EDE-94B41CAE77B7> /usr/lib/system/libsystem_network.dylib 0x7fffaa922000 - 0x7fffaa92bff3 libsystem_networkextension.dylib (563.60.2) <B021F2B3-8A75-3633-ABB0-FC012B8E9B0C> /usr/lib/system/libsystem_networkextension.dylib 0x7fffaa92c000 - 0x7fffaa935ff3 libsystem_notify.dylib (165.20.1) <B8160190-A069-3B3A-BDF6-2AA408221FAE> /usr/lib/system/libsystem_notify.dylib 0x7fffaa936000 - 0x7fffaa93efe7 libsystem_platform.dylib (126.50.8) <897462FD-B318-321B-A554-E61982630F7E> /usr/lib/system/libsystem_platform.dylib 0x7fffaa93f000 - 0x7fffaa949ff7 libsystem_pthread.dylib (218.60.3) <B8FB5E20-3295-39E2-B5EB-B464D1D4B104> /usr/lib/system/libsystem_pthread.dylib 0x7fffaa94a000 - 0x7fffaa94dff7 libsystem_sandbox.dylib (592.70.2) <19320A42-2E3B-361B-BBDA-2F5F2E87B100> /usr/lib/system/libsystem_sandbox.dylib 0x7fffaa94e000 - 0x7fffaa94fff3 libsystem_secinit.dylib (24.50.4) <F78B847B-3565-3E4B-98A6-F7AD40392E2D> /usr/lib/system/libsystem_secinit.dylib 0x7fffaa950000 - 0x7fffaa957ffb libsystem_symptoms.dylib (532.50.48) <1C822669-BF39-3639-A00B-B9170A63F342> /usr/lib/system/libsystem_symptoms.dylib 0x7fffaa958000 - 0x7fffaa96bff7 libsystem_trace.dylib (518.70.1) <AC63A7FE-50D9-3A30-96E6-F6B7FF16E465> /usr/lib/system/libsystem_trace.dylib 0x7fffaa96c000 - 0x7fffaa971ffb libunwind.dylib (35.3) <3D50D8A8-C460-334D-A519-2DA841102C6B> /usr/lib/system/libunwind.dylib 0x7fffaa972000 - 0x7fffaa99bff7 libxpc.dylib (972.70.5) <255AA6A1-26AA-33F6-BC11-3DCE12A0BC0F> /usr/lib/system/libxpc.dylib External Modification Summary: Calls made by other processes targeting this process: task_for_pid: 0 thread_create: 0 thread_set_state: 0 Calls made by this process: task_for_pid: 0 thread_create: 0 thread_set_state: 0 Calls made by all processes on this machine: task_for_pid: 400705 thread_create: 0 thread_set_state: 1176 VM Region Summary: ReadOnly portion of Libraries: Total=252.8M resident=0K(0%) swapped_out_or_unallocated=252.8M(100%) Writable regions: Total=89.6M written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=89.6M(100%) VIRTUAL REGION REGION TYPE SIZE COUNT (non-coalesced) =========== ======= ======= Accelerate framework 128K 2 Activity Tracing 256K 2 CG image 264K 3 CoreUI image file 124K 2 Dispatch continuations 8192K 2 Image IO 76K 4 Kernel Alloc Once 8K 2 MALLOC 51.5M 32 MALLOC guard page 48K 9 Memory Tag 242 12K 2 STACK GUARD 54.5M 7 Stack 12.1M 8 VM_ALLOCATE 292K 7 __DATA 25.1M 215 __IMAGE 528K 2 __LINKEDIT 116.0M 16 __TEXT 136.8M 217 __UNICODE 556K 2 mapped file 57.8M 12 shared memory 16.3M 13 =========== ======= ======= TOTAL 480.3M 539 Model: MacBookPro12,1, BootROM 186.0.0.0.0, 2 processors, Intel Core i5, 2,7 GHz, 8 GB, SMC 2.28f7 Graphics: Intel Iris Graphics 6100, Intel Iris Graphics 6100, Built-In Memory Module: BANK 0/DIMM0, 4 GB, DDR3, 1867 MHz, 0x80CE, 0x4B3445364533303445452D45474346000000 Memory Module: BANK 1/DIMM0, 4 GB, DDR3, 1867 MHz, 0x80CE, 0x4B3445364533303445452D45474346000000 AirPort: spairport_wireless_card_type_airport_extreme (0x14E4, 0x133), Broadcom BCM43xx 1.0 (7.21.171.134.1a2) Bluetooth: Version 5.0.5f7, 3 services, 17 devices, 1 incoming serial ports Network Service: Wi-Fi, AirPort, en0 Serial ATA Device: APPLE SSD SM0256G, 251 GB USB Device: USB 3.0 Bus USB Device: Bluetooth USB Host Controller Thunderbolt Bus: MacBook Pro, Apple Inc., 27.1 ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-08-31 20:45 Tabs Juri Linkov 2019-09-01 8:12 ` Tabs martin rudalics 2019-09-01 8:59 ` Tabs (on macos) Jean-Christophe Helary @ 2019-09-01 9:28 ` Alan Mackenzie 2019-09-01 19:18 ` Tabs Juri Linkov 2019-09-01 12:31 ` Tabs Ergus ` (3 subsequent siblings) 6 siblings, 1 reply; 181+ messages in thread From: Alan Mackenzie @ 2019-09-01 9:28 UTC (permalink / raw) To: Juri Linkov; +Cc: emacs-devel Hello, Juri. On Sat, Aug 31, 2019 at 23:45:07 +0300, Juri Linkov wrote: > There is a long story of several attempts to implement tabs in Emacs. I know tabs as things which move visually to the next column 8n. I only know vaguely what "tabs" means in this new sense. A @dfn{tabs} would be greatly appreciated. > Finally now a complete implementation is available for these > etc/TODO tasks: The documentation in the Emacs manual still needs to be finished. I've tried several of the new commands on a Linux tty, including tab-bar-mode, and C-x 6 b. Although they didn't throw any errors, none of them appeared to do anything. Is the new mode intended to work on a tty? [ .... ] > Keybindings for the tab-bar: > C-TAB - switches to the next frame tab; > S-C-TAB - switches to the previous frame tab. I don't think C-TAB and S-C-TAB exist on a typical tty keyboard. They don't on the default Linux tty keyboard. > Clicking on the plus sign adds a new window configuration tab to the tab-bar. Is there a keyboard equivalent? [ .... ] -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-01 9:28 ` Tabs Alan Mackenzie @ 2019-09-01 19:18 ` Juri Linkov 0 siblings, 0 replies; 181+ messages in thread From: Juri Linkov @ 2019-09-01 19:18 UTC (permalink / raw) To: Alan Mackenzie; +Cc: emacs-devel >> There is a long story of several attempts to implement tabs in Emacs. > > I know tabs as things which move visually to the next column 8n. I only > know vaguely what "tabs" means in this new sense. A @dfn{tabs} would be > greatly appreciated. In text editors and tiling window managers, Tab is a graphical control element that allows multiple window layouts to be contained within a single frame, using the tab-bar as a navigational widget for switching between them. The branch implements two kinds of tabs: frame tabs and window tabs. Frame tabs are named persistent window configurations that can be represented visually as rectangular areas on the tab-bar row at the top of the frame for easy switching, but switching should be also possible without using the tab-bar. Window tabs are buffers associated with the window and can be represented visually as rectangular areas on the tab-line row at the top of each window. >> Finally now a complete implementation is available for these >> etc/TODO tasks: > > The documentation in the Emacs manual still needs to be finished. Agreed, will work on this. > I've tried several of the new commands on a Linux tty, including > tab-bar-mode, and C-x 6 b. Although they didn't throw any errors, none > of them appeared to do anything. Is the new mode intended to work on a > tty? Thanks for trying. I guess you tried only frame tabs on a tty since window tabs are already supported on a tty. But in case of frame tabs indeed, tab-bar-mode should not be necessary to be able to use tabs that are just named persistent window configurations. So I added to the branch a new mode that can be used by `M-x list-tabs RTE'. Like `list-buffers' displays a list of buffers, `list-tabs' displays a list of named window configurations - the same list that can be displayed as tabs in the tab-bar when tab-bar-mode is enabled. Or another analogy of its look is like a widget displayed in the center of the screen when switching windows in a window manager. In the list of window configurations, usual keybindings are supported: RET -- select current line's window configuration. d -- mark that window configuration to be deleted, and move down. x -- delete marked window configurations. >> Keybindings for the tab-bar: >> C-TAB - switches to the next frame tab; >> S-C-TAB - switches to the previous frame tab. > > I don't think C-TAB and S-C-TAB exist on a typical tty keyboard. They > don't on the default Linux tty keyboard. Web browsers support alternative keys C-<PgUp> and C-<PgDn>. Are these keys available on a tty? >> Clicking on the plus sign adds a new window configuration tab to the tab-bar. > > Is there a keyboard equivalent? Yes, 'C-x 6 2' or `M-x make-tab RET'. And 'C-x 6 0' ('M-x delete-tab RET') deletes the current tab with its window configuration. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-08-31 20:45 Tabs Juri Linkov ` (2 preceding siblings ...) 2019-09-01 9:28 ` Tabs Alan Mackenzie @ 2019-09-01 12:31 ` Ergus 2019-09-01 19:31 ` Tabs Juri Linkov 2019-09-03 12:22 ` Tabs Robert Pluim ` (2 subsequent siblings) 6 siblings, 1 reply; 181+ messages in thread From: Ergus @ 2019-09-01 12:31 UTC (permalink / raw) To: Juri Linkov; +Cc: emacs-devel Hi Juri: Very thanks for this. I have tried your feature branch but it seems to be working only on gui interface. I tried with -nw in xterm and they are not working. And disabling the toolbar in gui they didn't work either. Is this supposed to work like this? On Sat, Aug 31, 2019 at 11:45:07PM +0300, Juri Linkov wrote: >There is a long story of several attempts to implement tabs in Emacs. >Finally now a complete implementation is available for these >etc/TODO tasks: > > ** "Perspectives" are named persistent window configurations. We have > had the window configuration mechanism in GNU Emacs since the > beginning but we have never developed a good user interface to take > advantage of them. Eclipse's user interface seems to be good. > Perspectives also need to interact with the tabs. > > ** Having tabs above a window to switch buffers in it. > >Frame-local tabs represent window configurations. >Window-local tabs represent window buffers. > >Using such data structures means there is no need in special handling >of saving tabs in the desktop file - both persistence of frame tabs >and persistence of window tabs is already supported by the existing >code in master, because frame tabs are implemented as presentation of >window configurations in the frame parameter saved by frameset as >window states, and window tabs are implemented as presentation of >window buffers already saved by frameset. > >Also both implementation of frame tabs and implementation of >window tabs doesn't require using hooks - frame-local tabs for >window-configuration switching doesn't rely on hooks and >window-local tabs for switching window-buffers doesn't use hooks: >window-configuration-change-hook is not used, no hook >window-size-change-functions, no buffer-list-update-hook, no >post-command-hook is used, none of the hooks. > >All this makes the implementation as simple as possible, >providing only code for displaying and manipulating the already >existing data structures of window configurations and window buffers >represented in the new display elements tab-bar and tab-line >based on the existing elements tool-bar and header-line. > >The prefix '-bar' in tab-bar is by analogy with frame tool-bar, menu-bar. >The prefix '-line' in tab-line is by analogy with window header-line, mode-line. > >The tab-bar is located above the tool-bar like in web browsers. >The tab-line is located above the header-line >that is more related to the current buffer. > >Frame-local horizontal interface elements are in this order: >--- menu-bar --- >--- tab-bar --- >--- tool-bar --- > >Window-local horizontal interface elements are in this order: >--- tab-line --- >--- header-line --- >--- mode-line --- > >The implementation of the tab-bar replicates the existing tool-bar. >The implementation of the tab-line replicates the existing header-line. > >Tabs on the frame tab-bar represent window configurations. >Tabs on the window tab-line represent window buffers: previous on the >left side from the current tab (current-buffer) and next on the right. > >Clicking on the tab in the tab-bar selects its window configuration. >Clicking on the tab in the tab-line selects its window buffer. >Clicking on the close button closes the clicked tab. > >Keybindings for the tab-bar: > C-TAB - switches to the next frame tab; >S-C-TAB - switches to the previous frame tab. >Clicking on the plus sign adds a new window configuration tab to the tab-bar. > >Keybindings for the tab-line: >C-x <left> - switches to the previous window tab; >C-x <right> - switches to the next window tab. >Clicking on the plus sign adds a new buffer tab to the tab-line. > >'C-x 6 2' creates a new frame-local tab; >'C-x 6 b' switches to buffer in another frame-local tab; >'C-x 6 f' and 'C-x 6 C-f' edit file in another frame-local tab. > >I invite everyone to try the new branch named 'feature/tabs' >and to report all found problems. > >Authors of all packages that currently had no choice other than to >misuse the header-line for displaying window tabs are welcome now to >adapt their packages for displaying window tabs on the new dedicated >tab-line that doesn't conflict with the header-line anymore. >For example, I tried just to replace header-line-format with >tab-line-format in the package awesome-tabs and the result >shows two separate rows - tab-line and header-line of Info buffer: > ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-01 12:31 ` Tabs Ergus @ 2019-09-01 19:31 ` Juri Linkov 2019-09-02 4:51 ` Tabs Ergus 2019-09-02 12:41 ` Tabs Stefan Monnier 0 siblings, 2 replies; 181+ messages in thread From: Juri Linkov @ 2019-09-01 19:31 UTC (permalink / raw) To: Ergus; +Cc: emacs-devel > Very thanks for this. I have tried your feature branch but it seems to > be working only on gui interface. I tried with -nw in xterm and they are > not working. And disabling the toolbar in gui they didn't work either. > > Is this supposed to work like this? I pushed now to the branch a new mode that supports switching tabs without using the tab-bar in xterm: 'list-tabs' displays a list of named window configurations for switching; 'make-tab' creates a new window configuration; 'delete-tab' deletes the current window configuration; 'switch-to-tab' switches to the window configuration by its name; 'previous-tab' switches to the previous window configuration; 'next-tab' switches to the next window configuration. All created tabs are still saved in the desktop file. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-01 19:31 ` Tabs Juri Linkov @ 2019-09-02 4:51 ` Ergus 2019-09-02 19:33 ` Tabs Juri Linkov 2019-09-02 12:41 ` Tabs Stefan Monnier 1 sibling, 1 reply; 181+ messages in thread From: Ergus @ 2019-09-02 4:51 UTC (permalink / raw) To: Juri Linkov; +Cc: emacs-devel On Sun, Sep 01, 2019 at 10:31:29PM +0300, Juri Linkov wrote: >> Very thanks for this. I have tried your feature branch but it seems to >> be working only on gui interface. I tried with -nw in xterm and they are >> not working. And disabling the toolbar in gui they didn't work either. >> >> Is this supposed to work like this? > >I pushed now to the branch a new mode that supports switching tabs >without using the tab-bar in xterm: > >'list-tabs' displays a list of named window configurations for switching; >'make-tab' creates a new window configuration; >'delete-tab' deletes the current window configuration; >'switch-to-tab' switches to the window configuration by its name; >'previous-tab' switches to the previous window configuration; >'next-tab' switches to the next window configuration. > >All created tabs are still saved in the desktop file. > Hi Juri: All the commands seems to work not throwing any error, but still no visible tabs are present in xterm at all. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-02 4:51 ` Tabs Ergus @ 2019-09-02 19:33 ` Juri Linkov 2019-09-02 21:06 ` Tabs Stefan Monnier ` (3 more replies) 0 siblings, 4 replies; 181+ messages in thread From: Juri Linkov @ 2019-09-02 19:33 UTC (permalink / raw) To: Ergus; +Cc: emacs-devel > All the commands seems to work not throwing any error, but still no > visible tabs are present in xterm at all. There are no visible tabs present in xterm indeed. I wonder why would you expect to see tabs even when can't click them with the mouse in xterm? ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-02 19:33 ` Tabs Juri Linkov @ 2019-09-02 21:06 ` Stefan Monnier 2019-09-03 19:56 ` Tabs Juri Linkov 2019-09-03 2:30 ` Tabs Eli Zaretskii ` (2 subsequent siblings) 3 siblings, 1 reply; 181+ messages in thread From: Stefan Monnier @ 2019-09-02 21:06 UTC (permalink / raw) To: Juri Linkov; +Cc: Ergus, emacs-devel >> All the commands seems to work not throwing any error, but still no >> visible tabs are present in xterm at all. > > There are no visible tabs present in xterm indeed. > I wonder why would you expect to see tabs even when > can't click them with the mouse in xterm? You should be able to make clicks work with xterm-mouse-mode, of course ;-) Stefan "who has no intention to use visible tabs in a tty (nor in a GUI, actually)" ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-02 21:06 ` Tabs Stefan Monnier @ 2019-09-03 19:56 ` Juri Linkov 0 siblings, 0 replies; 181+ messages in thread From: Juri Linkov @ 2019-09-03 19:56 UTC (permalink / raw) To: Stefan Monnier; +Cc: Ergus, emacs-devel >>> All the commands seems to work not throwing any error, but still no >>> visible tabs are present in xterm at all. >> >> There are no visible tabs present in xterm indeed. >> I wonder why would you expect to see tabs even when >> can't click them with the mouse in xterm? > > You should be able to make clicks work with xterm-mouse-mode, of > course ;-) Ah, I see now xterm-mouse-mode works fine - a while ago I tried it but failed to get it working, so I thought it's something too specific for some other terminals. So now I implemented the display of the tab-bar on xterm and added support for clicking on it to xterm-mouse-mode. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-02 19:33 ` Tabs Juri Linkov 2019-09-02 21:06 ` Tabs Stefan Monnier @ 2019-09-03 2:30 ` Eli Zaretskii 2019-09-03 19:58 ` Tabs Juri Linkov 2019-09-03 5:39 ` Tabs Ergus 2019-09-05 22:24 ` Tabs Ergus 3 siblings, 1 reply; 181+ messages in thread From: Eli Zaretskii @ 2019-09-03 2:30 UTC (permalink / raw) To: Juri Linkov; +Cc: spacibba, emacs-devel > From: Juri Linkov <juri@linkov.net> > Date: Mon, 02 Sep 2019 22:33:03 +0300 > Cc: emacs-devel@gnu.org > > > All the commands seems to work not throwing any error, but still no > > visible tabs are present in xterm at all. > > There are no visible tabs present in xterm indeed. > I wonder why would you expect to see tabs even when > can't click them with the mouse in xterm? Why cannot we support the mouse in text-mode frames? We have several possible features for such support, including GPM, xterm-mouse, the MS-Windows and MS-DOS text-mode mouse functionality, etc. I think we the tab bar should be able to support these. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-03 2:30 ` Tabs Eli Zaretskii @ 2019-09-03 19:58 ` Juri Linkov 0 siblings, 0 replies; 181+ messages in thread From: Juri Linkov @ 2019-09-03 19:58 UTC (permalink / raw) To: Eli Zaretskii; +Cc: spacibba, emacs-devel >> > All the commands seems to work not throwing any error, but still no >> > visible tabs are present in xterm at all. >> >> There are no visible tabs present in xterm indeed. >> I wonder why would you expect to see tabs even when >> can't click them with the mouse in xterm? > > Why cannot we support the mouse in text-mode frames? We have several > possible features for such support, including GPM, xterm-mouse, the > MS-Windows and MS-DOS text-mode mouse functionality, etc. I think we > the tab bar should be able to support these. I implemented now the display and support of the mouse in text-mode frames and pushed to the feature/tabs branch in commit a365251d01. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-02 19:33 ` Tabs Juri Linkov 2019-09-02 21:06 ` Tabs Stefan Monnier 2019-09-03 2:30 ` Tabs Eli Zaretskii @ 2019-09-03 5:39 ` Ergus 2019-09-05 22:24 ` Tabs Ergus 3 siblings, 0 replies; 181+ messages in thread From: Ergus @ 2019-09-03 5:39 UTC (permalink / raw) To: Juri Linkov; +Cc: emacs-devel On Mon, Sep 02, 2019 at 10:33:03PM +0300, Juri Linkov wrote: >> All the commands seems to work not throwing any error, but still no >> visible tabs are present in xterm at all. > >There are no visible tabs present in xterm indeed. >I wonder why would you expect to see tabs even when Actually because vim has them. >can't click them with the mouse in xterm? elscreen actually allows me to use the mouse (I don't do, but I could) emacs interacts with the mouse in xterm very fine... no reason to not support that I think. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-02 19:33 ` Tabs Juri Linkov ` (2 preceding siblings ...) 2019-09-03 5:39 ` Tabs Ergus @ 2019-09-05 22:24 ` Ergus 2019-09-07 20:14 ` Tabs Juri Linkov 3 siblings, 1 reply; 181+ messages in thread From: Ergus @ 2019-09-05 22:24 UTC (permalink / raw) To: Juri Linkov; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 1094 bytes --] Hi Juri: They are working pretty well now, mouse interaction too. Very thanks. I just have 2 more questions/suggestions mainly relates with aesthetics. 1) Is it possible to avoid changing the current tab name to "Current Tab"; and just change the background color for example? I know the current tab name is in the mode-line ; but that's the behavior of most tabs around. Maybe we can just add a bollean variable to customize the changes (if not too complex) in case you prefer it like this. 2) In xterm I observe a padding between consecutive tabs (attached pictures) and the close circle is incomplete. That's usually a consequence of displaying some unicode characters in terminal. Can we avoid that somehow? Very thanks for this package. It is very useful!! On Mon, Sep 02, 2019 at 10:33:03PM +0300, Juri Linkov wrote: >> All the commands seems to work not throwing any error, but still no >> visible tabs are present in xterm at all. > >There are no visible tabs present in xterm indeed. >I wonder why would you expect to see tabs even when >can't click them with the mouse in xterm? [-- Attachment #2: Screenshot_2019-09-06_00-21-15.png --] [-- Type: image/png, Size: 8270 bytes --] ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-05 22:24 ` Tabs Ergus @ 2019-09-07 20:14 ` Juri Linkov 0 siblings, 0 replies; 181+ messages in thread From: Juri Linkov @ 2019-09-07 20:14 UTC (permalink / raw) To: Ergus; +Cc: emacs-devel [-- Attachment #1: Type: text/plain, Size: 1163 bytes --] > They are working pretty well now, mouse interaction too. Very thanks. I > just have 2 more questions/suggestions mainly relates with aesthetics. > > 1) Is it possible to avoid changing the current tab name to "Current > Tab"; and just change the background color for example? I know the > current tab name is in the mode-line ; but that's the behavior of most > tabs around. Maybe we can just add a bollean variable to customize the > changes (if not too complex) in case you prefer it like this. Thanks for the suggestion. I completely agree that your described behavior is better. With the fixed tab name I tried to avoid tab jumping when tab location moves due to changes in tab width that shifts other tabs after the current one. Now this is fixed to avoid changing the current tab name. > 2) In xterm I observe a padding between consecutive tabs (attached > pictures) and the close circle is incomplete. That's usually a > consequence of displaying some unicode characters in terminal. Yeah, this is how Unicode characters are treated by terminals. And this problem is not specific to Emacs. The same clobbering can be seen even in terminal shell: [-- Attachment #2: xterm-unicode.png --] [-- Type: image/png, Size: 3957 bytes --] [-- Attachment #3: Type: text/plain, Size: 116 bytes --] > Can we avoid that somehow? Now to avoid this I added space after Unicode characters only on non-window systems. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-01 19:31 ` Tabs Juri Linkov 2019-09-02 4:51 ` Tabs Ergus @ 2019-09-02 12:41 ` Stefan Monnier 2019-09-02 19:39 ` Tabs Juri Linkov 1 sibling, 1 reply; 181+ messages in thread From: Stefan Monnier @ 2019-09-02 12:41 UTC (permalink / raw) To: Juri Linkov; +Cc: Ergus, emacs-devel > 'list-tabs' displays a list of named window configurations for switching; > 'make-tab' creates a new window configuration; > 'delete-tab' deletes the current window configuration; > 'switch-to-tab' switches to the window configuration by its name; > 'previous-tab' switches to the previous window configuration; > 'next-tab' switches to the next window configuration. Any chance you could use "tab-<foo>" instead of "<foo>-tab"? Stefan ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-02 12:41 ` Tabs Stefan Monnier @ 2019-09-02 19:39 ` Juri Linkov 2019-09-02 21:03 ` Tabs Stefan Monnier 0 siblings, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-09-02 19:39 UTC (permalink / raw) To: Stefan Monnier; +Cc: Ergus, emacs-devel >> 'list-tabs' displays a list of named window configurations for switching; >> 'make-tab' creates a new window configuration; >> 'delete-tab' deletes the current window configuration; >> 'switch-to-tab' switches to the window configuration by its name; >> 'previous-tab' switches to the previous window configuration; >> 'next-tab' switches to the next window configuration. > > Any chance you could use "tab-<foo>" instead of "<foo>-tab"? These names were created by analogy with the existing frame/buffer commands: list-tabs like list-buffers make-tab like make-frame delete-tab like delete-frame switch-to-tab like switch-to-buffer previous-tab like previous-buffer next-tab like next-buffer But I don't like such naming convention too much. I'd rather like to type M-x tab- TAB to see all available related commands as completions: tab-list tab-make tab-delete tab-switch tab-previous tab-next ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-02 19:39 ` Tabs Juri Linkov @ 2019-09-02 21:03 ` Stefan Monnier 0 siblings, 0 replies; 181+ messages in thread From: Stefan Monnier @ 2019-09-02 21:03 UTC (permalink / raw) To: Juri Linkov; +Cc: Ergus, emacs-devel > These names were created by analogy with the existing frame/buffer commands: Yeah, I don't like their lack of prefix-naming either. :-( Stefan ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-08-31 20:45 Tabs Juri Linkov ` (3 preceding siblings ...) 2019-09-01 12:31 ` Tabs Ergus @ 2019-09-03 12:22 ` Robert Pluim 2019-09-03 20:21 ` Tabs Juri Linkov 2019-09-15 19:21 ` Tabs Stefan Kangas 2019-09-19 23:57 ` Tabs Michael Heerdegen 6 siblings, 1 reply; 181+ messages in thread From: Robert Pluim @ 2019-09-03 12:22 UTC (permalink / raw) To: Juri Linkov; +Cc: emacs-devel >>>>> On Sat, 31 Aug 2019 23:45:07 +0300, Juri Linkov <juri@linkov.net> said: Juri> There is a long story of several attempts to implement tabs in Emacs. Juri> Finally now a complete implementation is available for these Juri> etc/TODO tasks: Hi Juri, this fails to compile for me on macOS 10.14. Iʼm Cocoa-ignorant, are there some flags I need to pass to get access to the tabbar types? make[1]: Nothing to be done for `all'. /Library/Developer/CommandLineTools/usr/bin/make -C src VCSWITNESS='' all CC nsterm.o In file included from nsterm.m:49: ./nsterm.h:529:36: error: cannot find protocol declaration for 'NSTabbarDelegate'; did you mean 'NSToolbarDelegate'? @interface EmacsTabbar : NSTabbar <NSTabbarDelegate> ^~~~~~~~~~~~~~~~ NSToolbarDelegate /System/Library/Frameworks/AppKit.framework/Headers/NSToolbar.h:172:11: note: 'NSToolbarDelegate' declared here @protocol NSToolbarDelegate <NSObject> ^ In file included from nsterm.m:49: ./nsterm.h:529:26: error: cannot find interface declaration for 'NSTabbar', superclass of 'EmacsTabbar' @interface EmacsTabbar : NSTabbar <NSTabbarDelegate> ~~~~~~~~~~~~~~~~~~~~~~ ^ ./nsterm.h:551:4: error: expected a type - (NSTabbarItem *)tabbar: (NSTabbar *)tabbar ^ ./nsterm.h:551:28: error: expected a type - (NSTabbarItem *)tabbar: (NSTabbar *)tabbar ^ ./nsterm.h:554:45: error: expected a type - (NSArray *)tabbarDefaultItemIdentifiers: (NSTabbar *)tabbar; ^ ./nsterm.h:555:45: error: expected a type - (NSArray *)tabbarAllowedItemIdentifiers: (NSTabbar *)tabbar; ^ nsterm.m:1092:27: warning: implicit declaration of function 'FRAME_EXTERNAL_TAB_BAR' is invalid in C99 [-Wimplicit-function-declaration] BOOL tarbar_visible = FRAME_EXTERNAL_TAB_BAR (f) ? YES : NO; ^ nsterm.m:1093:5: error: use of undeclared identifier 'NSTabbar' NSTabbar *tabbar = [FRAME_NS_VIEW (f) tabbar]; ^ nsterm.m:1093:15: error: use of undeclared identifier 'tabbar'; did you mean 'Qtab_bar'? NSTabbar *tabbar = [FRAME_NS_VIEW (f) tabbar]; ^~~~~~ Qtab_bar ./globals.h:3139:21: note: 'Qtab_bar' declared here DEFINE_LISP_SYMBOL (Qtab_bar) ^ nsterm.m:1094:32: error: use of undeclared identifier 'tabbar'; did you mean 'Qtab_bar'? if (! tarbar_visible != ! [tabbar isVisible]) ^~~~~~ Qtab_bar ./globals.h:3139:21: note: 'Qtab_bar' declared here DEFINE_LISP_SYMBOL (Qtab_bar) ^ nsterm.m:1094:32: warning: receiver type 'Lisp_Object' (aka 'union Lisp_X *') is not 'id' or interface pointer, consider casting it to 'id' [-Wreceiver-expr] if (! tarbar_visible != ! [tabbar isVisible]) ^~~~~~ nsterm.m:1095:8: error: use of undeclared identifier 'tabbar'; did you mean 'Qtab_bar'? [tabbar setVisible: tarbar_visible]; ^~~~~~ Qtab_bar ./globals.h:3139:21: note: 'Qtab_bar' declared here DEFINE_LISP_SYMBOL (Qtab_bar) ^ nsterm.m:1095:8: warning: receiver type 'Lisp_Object' (aka 'union Lisp_X *') is not 'id' or interface pointer, consider casting it to 'id' [-Wreceiver-expr] [tabbar setVisible: tarbar_visible]; ^~~~~~ nsterm.m:1690:18: warning: 'NSWindow' may not respond to 'tabbar' - FRAME_TABBAR_HEIGHT (f) - FRAME_TOOLBAR_HEIGHT (f)) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1690:18: warning: 'NSWindow' may not respond to 'tabbar' - FRAME_TABBAR_HEIGHT (f) - FRAME_TOOLBAR_HEIGHT (f)) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1690:18: error: property 'isVisible' not found on object of type 'EmacsTabbar *' ./nsterm.h:1087:46: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ^ nsterm.m:1708:56: warning: 'NSWindow' may not respond to 'tabbar' ...f->top_pos = FRAME_PIXEL_HEIGHT (parent) + FRAME_TABBAR_HEIGHT (parent) + FRAME... ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1708:56: warning: 'NSWindow' may not respond to 'tabbar' ...f->top_pos = FRAME_PIXEL_HEIGHT (parent) + FRAME_TABBAR_HEIGHT (parent) + FRAME... ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1708:56: error: property 'isVisible' not found on object of type 'EmacsTabbar *' ./nsterm.h:1087:46: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ^ nsterm.m:1771:9: warning: 'NSWindow' may not respond to 'tabbar' + FRAME_TABBAR_HEIGHT (f) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1771:9: warning: 'NSWindow' may not respond to 'tabbar' + FRAME_TABBAR_HEIGHT (f) ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1771:9: error: property 'isVisible' not found on object of type 'EmacsTabbar *' ./nsterm.h:1087:46: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ^ nsterm.m:1788:18: warning: 'NSWindow' may not respond to 'tabbar' make_fixnum (FRAME_TABBAR_HEIGHT (f) + FRAME_TOOLBAR_HEIGHT (f)))); ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1788:18: warning: 'NSWindow' may not respond to 'tabbar' make_fixnum (FRAME_TABBAR_HEIGHT (f) + FRAME_TOOLBAR_HEIGHT (f)))); ^~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:1788:18: error: property 'isVisible' not found on object of type 'EmacsTabbar *' ./nsterm.h:1087:46: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ^ nsterm.m:1830:19: warning: instance method '-setTabbar:' not found (return type defaults to 'id') [-Wobjc-method-access] [window setTabbar: nil]; ^~~~~~~~~ /System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h:184:12: note: receiver is instance of class declared here @interface NSWindow : NSResponder <NSAnimatablePropertyContainer, NSMenuItemVal... ^ nsterm.m:2415:47: warning: 'NSWindow' may not respond to 'tabbar' FRAME_NS_TITLEBAR_HEIGHT(f) + FRAME_TABBAR_HEIGHT(f) + FRAME_TO... ^~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:2415:47: warning: 'NSWindow' may not respond to 'tabbar' FRAME_NS_TITLEBAR_HEIGHT(f) + FRAME_TABBAR_HEIGHT(f) + FRAME_TO... ^~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:2415:47: error: property 'isVisible' not found on object of type 'EmacsTabbar *' ./nsterm.h:1087:46: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ^ nsterm.m:2778:26: warning: 'scrollRect:by:' is deprecated: first deprecated in macOS 10.14 - Use NSScrollView to achieve scrolling views. [-Wdeprecated-declarations] [FRAME_NS_VIEW (f) scrollRect: src by: delta]; ^ /System/Library/Frameworks/AppKit.framework/Headers/NSView.h:260:1: note: 'scrollRect:by:' has been explicitly marked deprecated here - (void)scrollRect:(NSRect)rect by:(NSSize)delta NS_DEPRECATED_MAC(10_0, 10_14... ^ nsterm.m:5449:29: warning: 'NSFilenamesPboardType' is deprecated: first deprecated in macOS 10.14 - Create multiple pasteboard items with NSPasteboardTypeFileURL or kUTTypeFileURL instead [-Wdeprecated-declarations] NSFilenamesPboardType, ^ /System/Library/Frameworks/AppKit.framework/Headers/NSPasteboard.h:323:32: note: 'NSFilenamesPboardType' has been explicitly marked deprecated here APPKIT_EXTERN NSPasteboardType NSFilenamesPboardType NS_DEPRECATED_MAC(10_0, 10... ^ nsterm.m:6972:23: warning: 'NSWindow' may not respond to 'tabbar' tabbar_height = FRAME_TABBAR_HEIGHT (emacsframe); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:6972:23: warning: 'NSWindow' may not respond to 'tabbar' tabbar_height = FRAME_TABBAR_HEIGHT (emacsframe); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:6972:23: error: property 'isVisible' not found on object of type 'EmacsTabbar *' ./nsterm.h:1087:46: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ^ nsterm.m:6988:11: warning: 'NSWindow' may not respond to 'tabbar' if (FRAME_TABBAR_HEIGHT (emacsframe) == 0 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:6988:11: warning: 'NSWindow' may not respond to 'tabbar' if (FRAME_TABBAR_HEIGHT (emacsframe) == 0 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:6988:11: error: property 'isVisible' not found on object of type 'EmacsTabbar *' ./nsterm.h:1087:46: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ^ nsterm.m:7091:11: warning: 'NSWindow' may not respond to 'tabbar' + FRAME_TABBAR_HEIGHT (emacsframe) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1086:33: note: expanded from macro 'FRAME_TABBAR_HEIGHT' (([[FRAME_NS_VIEW (f) window] tabbar] == nil \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:7091:11: warning: 'NSWindow' may not respond to 'tabbar' + FRAME_TABBAR_HEIGHT (emacsframe) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./nsterm.h:1087:38: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ nsterm.m:7091:11: error: property 'isVisible' not found on object of type 'EmacsTabbar *' ./nsterm.h:1087:46: note: expanded from macro 'FRAME_TABBAR_HEIGHT' || ! [[FRAME_NS_VIEW (f) window] tabbar].isVisible) ? \ ^ nsterm.m:7323:26: warning: class method '+alloc' not found (return type defaults to 'id') [-Wobjc-method-access] tabbar = [[EmacsTabbar alloc] initForView: self withIdentifier: ^~~~~ nsterm.m:7326:11: warning: 'EmacsTabbar' may not respond to 'setVisible:' [tabbar setVisible: NO]; ~~~~~~ ^ nsterm.m:7327:11: warning: instance method '-setTabbar:' not found (return type defaults to 'id') [-Wobjc-method-access] [window setTabbar: tabbar]; ^~~~~~~~~ /System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h:184:12: note: receiver is instance of class declared here @interface NSWindow : NSResponder <NSAnimatablePropertyContainer, NSMenuItemVal... ^ nsterm.m:7331:7: warning: implicit declaration of function 'FRAME_EXTERNAL_TAB_BAR' is invalid in C99 [-Wimplicit-function-declaration] if (FRAME_EXTERNAL_TAB_BAR (f)) wait_for_tab_bar = YES; ^ nsterm.m:7338:50: error: use of undeclared identifier 'NSWindowTabbarButton'; did you mean 'NSWindowToolbarButton'? toggleButton = [window standardWindowButton: NSWindowTabbarButton]; ^~~~~~~~~~~~~~~~~~~~ NSWindowToolbarButton /System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h:153:5: note: 'NSWindowToolbarButton' declared here NSWindowToolbarButton, ^ fatal error: too many errors emitted, stopping now [-ferror-limit=] 26 warnings and 20 errors generated. make[1]: *** [nsterm.o] Error 1 make: *** [src] Error 2 Compilation exited abnormally with code 2 at Tue Sep 3 14:15:42 ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-03 12:22 ` Tabs Robert Pluim @ 2019-09-03 20:21 ` Juri Linkov 0 siblings, 0 replies; 181+ messages in thread From: Juri Linkov @ 2019-09-03 20:21 UTC (permalink / raw) To: emacs-devel > Hi Juri, this fails to compile for me on macOS 10.14. Iʼm > Cocoa-ignorant, are there some flags I need to pass to get access to > the tabbar types? Thanks for sending the compilation log. I have no access to macOS, so I really count on your help in this area. I tried to fix these compilation errors only by looking at your log, please try to compile again. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-08-31 20:45 Tabs Juri Linkov ` (4 preceding siblings ...) 2019-09-03 12:22 ` Tabs Robert Pluim @ 2019-09-15 19:21 ` Stefan Kangas 2019-09-15 21:32 ` Tabs Juri Linkov 2019-09-19 23:57 ` Tabs Michael Heerdegen 6 siblings, 1 reply; 181+ messages in thread From: Stefan Kangas @ 2019-09-15 19:21 UTC (permalink / raw) To: Juri Linkov; +Cc: emacs-devel Hi Juri, Again, thanks for working on this. I have now tested the tabs branch, and I have some feedback for the tab line (buffer tabs). Juri Linkov <juri@linkov.net> writes: > Keybindings for the tab-line: > C-x <left> - switches to the previous window tab; > C-x <right> - switches to the next window tab. 1. When I run C-x <left> or C-x <right>, it automatically creates a new tab with the next buffer. I'd rather it switched between the open tabs, and have a separate command to create a new tab. I believe this would be more in line with how tabs work in other software, and therefore more intuitive. 2. None of these interactive commands work when run with M-x: command-execute: tab-line-add-tab must be bound to an event with parameters command-execute: tab-line-close-tab must be bound to an event with parameters command-execute: tab-line-select-tab must be bound to an event with parameters command-execute: tab-line-switch-to-next-tab must be bound to an event with parameters command-execute: tab-line-switch-to-prev-tab must be bound to an event with parameters 3. It would then be good to have key bindings for the above commands. > Clicking on the plus sign adds a new buffer tab to the tab-line. 4. I'm not super fond of that you have to navigate a menu in order to create a new tab. In e.g. Firefox you get a new "empty tab" when clicking the plus to add a new tab. I suppose in Emacs that would correspond to a window with no buffer, but I don't think this makes much sense (if it's even possible). Perhaps the tab could just show the next buffer like C-x <left> and C-x <right> does right now? This behaviour could of course be configurable, so that you optionally display the menu for users who like that. I suggest that the menu is the optional non-default behaviour. ----- Here are some suggestions that are less fundamental, listed in no particular order. 5. When I hover inactive tabs with the mouse, only the name of the tab is highlighted. Can we get the entire tab highlighted instead, including the section where the close button is? 6. When I hover the close button on the currently active tab, I get a grey line between the tab name and the button. Could we get rid of that line? 7. The active tab seems to be the same color in both the currently active window and in other windows. Could we perhaps color the active tab differently depending on if it's in the active window or not? 8. In Firefox, the close tab button is not visible unless that tab is selected. Perhaps that behaviour makes more sense, especially if we also implement the "fixed size tabs that shrinks to fit" behaviour discussed elsewhere (because smaller tabs make it too easy to accidentally click the close button). 9. It would probably look better if there was a couple of pixels of padding between the tab name and the edge of the tab. 10. Could we make the "+" sign (to add more tabs) more visually distinct from the tabs? For example, it could have no borders. 11. Could we add a tooltip with the name of the buffer to the tabs? 12. The inactive tabs seem to have a shade to the bottom and right. I think that makes them look more like "buttons" than "tabs". Perhaps we could rethink this and just make them one solid color without the shading. 13. It would be nice if the tabs had rounded corners on the top by default. 14. Could we add a vertical line below the tabs to separate it from the buffer? I find that the name of the tab visually melts into the buffer. (This effect would probably be less visible if the tab line was in an even darker color -- I checked some screenshots of Eclipse and that's the solution they seem to have.) Perhaps a vertical bar could be optional. Perhaps we could somehow allow to configure the color of the tab line. Best regards, Stefan Kangas ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-15 19:21 ` Tabs Stefan Kangas @ 2019-09-15 21:32 ` Juri Linkov 2019-09-16 4:19 ` Tabs Yuri Khan 2019-09-28 17:06 ` Tabs Stefan Kangas 0 siblings, 2 replies; 181+ messages in thread From: Juri Linkov @ 2019-09-15 21:32 UTC (permalink / raw) To: Stefan Kangas; +Cc: emacs-devel > I have now tested the tabs branch, and I have some feedback Thanks for valuable feedback. >> Keybindings for the tab-line: >> C-x <left> - switches to the previous window tab; >> C-x <right> - switches to the next window tab. > > 1. When I run C-x <left> or C-x <right>, it automatically creates a new tab with > the next buffer. I'd rather it switched between the open tabs, and have a > separate command to create a new tab. I believe this would be more in line with > how tabs work in other software, and therefore more intuitive. If an inactive tab is displayed to the left from the currently active tab, do you mean that 'C-x <left>' doesn't switch to it but instead creates a new tab? > 2. None of these interactive commands work when run with M-x: > > command-execute: tab-line-add-tab must be bound to an event with parameters > command-execute: tab-line-close-tab must be bound to an event with parameters > command-execute: tab-line-select-tab must be bound to an event with parameters > command-execute: tab-line-switch-to-next-tab must be bound to an event > with parameters > command-execute: tab-line-switch-to-prev-tab must be bound to an event > with parameters Mouse commands don't work with M-x. For example, try M-x Buffer-menu-mouse-select but we could declare the EVENT arg optional for these commands, and perform non-mouse logic when it's nil. > 3. It would then be good to have key bindings for the above commands. tab-line-switch-to-prev-tab is already the same as 'C-x <left>' tab-line-switch-to-next-tab is already the same as 'C-x <right>' tab-line-add-tab is the same as 'C-x b' or any other buffer switching command tab-line-close-tab is the same as bury-buffer or quit-window (`q') only tab-line-select-tab could have a keybinding for referring tab by its absolute position. >> Clicking on the plus sign adds a new buffer tab to the tab-line. > > 4. I'm not super fond of that you have to navigate a menu in order to create a > new tab. In e.g. Firefox you get a new "empty tab" when clicking the plus to > add a new tab. I suppose in Emacs that would correspond to a window with no > buffer, but I don't think this makes much sense (if it's even possible). > > Perhaps the tab could just show the next buffer like C-x <left> and C-x <right> > does right now? This behaviour could of course be configurable, so that you > optionally display the menu for users who like that. I suggest that the menu is > the optional non-default behaviour. I agree this should be configurable, like in e.g. Firefox a new tab page is configurable. > ----- > > Here are some suggestions that are less fundamental, listed in no particular > order. > > 5. When I hover inactive tabs with the mouse, only the name of the tab is > highlighted. Can we get the entire tab highlighted instead, including the > section where the close button is? This is fixed now in the branch. > 6. When I hover the close button on the currently active tab, I get a grey line > between the tab name and the button. Could we get rid of that line? This is fixed now. > 7. The active tab seems to be the same color in both the currently active window > and in other windows. Could we perhaps color the active tab differently > depending on if it's in the active window or not? This is an interesting suggestion, I'd never thought about such distinction, but it could be useful for additional indication of the currently selected window, like different faces of the mode-line indicate the selected window. > 8. In Firefox, the close tab button is not visible unless that tab is selected. > Perhaps that behaviour makes more sense, especially if we also implement the > "fixed size tabs that shrinks to fit" behaviour discussed elsewhere (because > smaller tabs make it too easy to accidentally click the close button). This Firefox behaviour is very inconvenient - to be able to close several tabs in a row I have first to switch to each of them that starts loading the page, so browser hangs for a while - very frustrating experience. Chromium close buttons on every tab are much better. However, you can set the close button variable to nil to disable close buttons. > 9. It would probably look better if there was a couple of pixels of padding > between the tab name and the edge of the tab. Is this possible in Emacs? Could you please show an example of a text property that would put e.g. 5 pixels between characters in string. > 10. Could we make the "+" sign (to add more tabs) more visually > distinct from the tabs? For example, it could have no borders. This is fixed now in the branch. > 11. Could we add a tooltip with the name of the buffer to the tabs? A tooltip is added only when the buffer name is truncated. > 12. The inactive tabs seem to have a shade to the bottom and right. I think > that makes them look more like "buttons" than "tabs". Perhaps we could rethink > this and just make them one solid color without the shading. This is fixed now in the branch. > 13. It would be nice if the tabs had rounded corners on the top by default. I agree, this is on my TODO list, hope to implement next week if I'll have time. > 14. Could we add a vertical line below the tabs to separate it from the buffer? > I find that the name of the tab visually melts into the buffer. (This effect > would probably be less visible if the tab line was in an even darker color -- I > checked some screenshots of Eclipse and that's the solution they seem to have.) > Perhaps a vertical bar could be optional. Perhaps we could somehow allow to > configure the color of the tab line. This is fixed now in the branch, please try it. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-15 21:32 ` Tabs Juri Linkov @ 2019-09-16 4:19 ` Yuri Khan 2019-09-16 20:59 ` Tabs Juri Linkov 2019-09-28 17:06 ` Tabs Stefan Kangas 1 sibling, 1 reply; 181+ messages in thread From: Yuri Khan @ 2019-09-16 4:19 UTC (permalink / raw) To: Juri Linkov; +Cc: Stefan Kangas, Emacs developers On Mon, 16 Sep 2019 at 05:13, Juri Linkov <juri@linkov.net> wrote: > > 8. In Firefox, the close tab button is not visible unless that tab is selected. > > This Firefox behaviour is very inconvenient - to be able to close > several tabs in a row I have first to switch to each of them that starts > loading the page, so browser hangs for a while - very frustrating experience. > Chromium close buttons on every tab are much better. However, you can set > the close button variable to nil to disable close buttons. Don’t people mostly close tabs using the middle button click or a keyboard shortcut? This removes the need for close buttons altogether. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-16 4:19 ` Tabs Yuri Khan @ 2019-09-16 20:59 ` Juri Linkov 2019-09-17 5:29 ` Tabs Yuri Khan 0 siblings, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-09-16 20:59 UTC (permalink / raw) To: Yuri Khan; +Cc: Stefan Kangas, Emacs developers >> > 8. In Firefox, the close tab button is not visible unless that tab is selected. >> >> This Firefox behaviour is very inconvenient - to be able to close >> several tabs in a row I have first to switch to each of them that starts >> loading the page, so browser hangs for a while - very frustrating experience. >> Chromium close buttons on every tab are much better. However, you can set >> the close button variable to nil to disable close buttons. > > Don’t people mostly close tabs using the middle button click or a > keyboard shortcut? This removes the need for close buttons altogether. I didn't know that the middle button click can close the tab in browser, because clicking on the close icon is more reliable since clicking the same mouse button caused different actions in different browsers with no consistent behaviour (maybe they are more consistent now I don't know). But after trying I see that pressing the wheel button requires more effort and is less reliable since might cause scrolling before pressing (BTW, tab scrolling with the wheel is already supported in the branch). Currently in the branch Ctrl key in combination with mouse click closes the tab, but the middle button click could be supported as well. Regarding a keyboard shortcut, do you mean C-w? ^ permalink raw reply [flat|nested] 181+ messages in thread
* Tabs 2019-09-16 20:59 ` Tabs Juri Linkov @ 2019-09-17 5:29 ` Yuri Khan 2019-09-17 20:37 ` Tabs Juri Linkov 0 siblings, 1 reply; 181+ messages in thread From: Yuri Khan @ 2019-09-17 5:29 UTC (permalink / raw) To: Juri Linkov; +Cc: Stefan Kangas, Emacs developers [-- Attachment #1: Type: text/plain, Size: 564 bytes --] On Tue, Sep 17, 2019, 04:15 Juri Linkov <juri@linkov.net> wrote: > But after trying I see that pressing the wheel button requires more effort > and is less reliable since might cause scrolling before pressing This is a deficiency of your mouse. Good mice let you middle-click easily and reliably. Excellent mice have a middle button separate from the wheel. > Regarding a keyboard shortcut, do you mean C-w? In browsers, yes (sometimes also Ctrl+F4). In Emacs, that would probably translate to the usual ‘kill-buffer’ binding the user prefers. [-- Attachment #2: Type: text/html, Size: 632 bytes --] ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-17 5:29 ` Tabs Yuri Khan @ 2019-09-17 20:37 ` Juri Linkov 2019-09-17 22:53 ` Tabs Drew Adams 0 siblings, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-09-17 20:37 UTC (permalink / raw) To: Yuri Khan; +Cc: Stefan Kangas, Emacs developers >> But after trying I see that pressing the wheel button requires more effort >> and is less reliable since might cause scrolling before pressing > > This is a deficiency of your mouse. Good mice let you middle-click easily > and reliably. Excellent mice have a middle button separate from the wheel. Yeah, but mice with more buttons grow larger and compete with keyboards by their dimensions :) >> Regarding a keyboard shortcut, do you mean C-w? > > In browsers, yes (sometimes also Ctrl+F4). In Emacs, that would probably > translate to the usual ‘kill-buffer’ binding the user prefers. Since C-w can't be used then this is what remains indeed. Fortunately, C-S-t is free to use for tab close undo feature since only C-t is bound to transpose-chars, not C-S-t. ^ permalink raw reply [flat|nested] 181+ messages in thread
* RE: Tabs 2019-09-17 20:37 ` Tabs Juri Linkov @ 2019-09-17 22:53 ` Drew Adams 0 siblings, 0 replies; 181+ messages in thread From: Drew Adams @ 2019-09-17 22:53 UTC (permalink / raw) To: Juri Linkov, Yuri Khan; +Cc: Stefan Kangas, Emacs developers > Fortunately, C-S-t is free to use for tab close undo feature > since only C-t is bound to transpose-chars, not C-S-t. [Caveat: I'm no expert on any of this; I haven't followed this (long!) thread much]; and I don't use a tab bar.] I thought you guys were discussing key bindings local to the tab bar. But when you speak of `C-t' being bound to `transpose-chars' I wonder - sounds like you're talking about the global keymap instead. FWIW, I'm not a fan of dedicating a global key, by default, for this kind of thing. Also, it can be overridden by major and minor modes. In Dired buffers, for example, `C-t' is a prefix key for `image-dired-*' commands. Sure, `C-S-t' could be made to do something different from `C-t', but do we really want that here? In addition, `C-t' and `C-S-t' are repeatable keys (just hold them down to repeat the command). If we're talking now about using `C-S-t' for something other than the longstanding global`C-t' behavior (`transpose-char') then I'd prefer that it be saved for some repeatable command, i.e., a command that it makes sense to be able to repeat by just holding a key/chord pressed. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-15 21:32 ` Tabs Juri Linkov 2019-09-16 4:19 ` Tabs Yuri Khan @ 2019-09-28 17:06 ` Stefan Kangas 2019-09-28 19:52 ` Tabs Juri Linkov 2019-11-02 21:40 ` Tabs Juri Linkov 1 sibling, 2 replies; 181+ messages in thread From: Stefan Kangas @ 2019-09-28 17:06 UTC (permalink / raw) To: Juri Linkov; +Cc: Emacs developers Juri Linkov <juri@linkov.net> writes: > > 1. When I run C-x <left> or C-x <right>, it automatically creates a new tab with > > the next buffer. I'd rather it switched between the open tabs, and have a > > separate command to create a new tab. I believe this would be more in line with > > how tabs work in other software, and therefore more intuitive. > > If an inactive tab is displayed to the left from the currently active tab, > do you mean that 'C-x <left>' doesn't switch to it but instead creates a new tab? When I do: 0. emacs -Q 1. M-x global-tab-line-mode 1. C-x <left> I see a new tab open up with the *Messages* buffer. I would expect it to not open up a new tab when I just ask to see the next or previous tab. > > 2. None of these interactive commands work when run with M-x: > > > > command-execute: tab-line-add-tab must be bound to an event with parameters > > command-execute: tab-line-close-tab must be bound to an event with parameters > > command-execute: tab-line-select-tab must be bound to an event with parameters > > command-execute: tab-line-switch-to-next-tab must be bound to an event > > with parameters > > command-execute: tab-line-switch-to-prev-tab must be bound to an event > > with parameters > > Mouse commands don't work with M-x. For example, try M-x Buffer-menu-mouse-select True. > but we could declare the EVENT arg optional for these commands, > and perform non-mouse logic when it's nil. This is what I would prefer. I think users will naturally try to use these commands and be surprised when they don't work. > > 3. It would then be good to have key bindings for the above commands. > > tab-line-switch-to-prev-tab is already the same as 'C-x <left>' > tab-line-switch-to-next-tab is already the same as 'C-x <right>' > tab-line-add-tab is the same as 'C-x b' or any other buffer switching command > tab-line-close-tab is the same as bury-buffer or quit-window (`q') Interesting. Could the doc strings for the tab-line-* commands refer to the corresponding functions? I think that would help lessen the confusion. > only tab-line-select-tab could have a keybinding for referring tab by its > absolute position. That would be good, yes. > > I suggest that the menu is > > the optional non-default behaviour. > > I agree this should be configurable, like in e.g. Firefox a new tab page > is configurable. Fair enough. > > Here are some suggestions that are less fundamental, listed in no particular > > order. > > > > 5. When I hover inactive tabs with the mouse, only the name of the tab is > > highlighted. Can we get the entire tab highlighted instead, including the > > section where the close button is? > > This is fixed now in the branch. Looks great. It might look even better if there is an "extra" highlight on just the button when hovering only that. That would provide the feedback that there is something clickable there. The same goes for the active tab, where I see no highlight when I hover the close button. > > 6. When I hover the close button on the currently active tab, I get a grey line > > between the tab name and the button. Could we get rid of that line? > > This is fixed now. Looks great. > > 7. The active tab seems to be the same color in both the currently active window > > and in other windows. Could we perhaps color the active tab differently > > depending on if it's in the active window or not? > > This is an interesting suggestion, I'd never thought about such distinction, > but it could be useful for additional indication of the currently selected > window, like different faces of the mode-line indicate the selected window. Indeed. > > 8. In Firefox, the close tab button is not visible unless that tab is selected. > > Perhaps that behaviour makes more sense, especially if we also implement the > > "fixed size tabs that shrinks to fit" behaviour discussed elsewhere (because > > smaller tabs make it too easy to accidentally click the close button). > > This Firefox behaviour is very inconvenient - to be able to close > several tabs in a row I have first to switch to each of them that starts > loading the page, so browser hangs for a while - very frustrating experience. > Chromium close buttons on every tab are much better. However, you can set > the close button variable to nil to disable close buttons. In my experience, there is rarely any significant loading time when switching buffer in Emacs. In my opinion, removing the close buttons makes it easier to quickly select tabs without worrying about accidentally closing them. Setting tab-bar-close-button to nil gets rid of them altogether; what I want is to only have a close button on the currently active tab. Perhaps we could add a separate defcustom to make my preferred behaviour optional? That makes me wonder how we can best track these feature suggestions for this branch? Wait until it lands on master and then file wishlist bugs? > > 9. It would probably look better if there was a couple of pixels of padding > > between the tab name and the edge of the tab. > > Is this possible in Emacs? Could you please show an example of a text property > that would put e.g. 5 pixels between characters in string. Sorry, I don't know how to do that. Is it possible to use variable-pitch-mode for the tab-bar only? In that case C-x 8 RET THIN SPACE RET would probably do the trick. In any case, having a variable width font for the tabs in my opinion would be a fantastic feature to have, and will probably go a long way to make it look more polished and professional. > > 10. Could we make the "+" sign (to add more tabs) more visually > > distinct from the tabs? For example, it could have no borders. > > This is fixed now in the branch. Sorry to nit-pick so much, but I suggest to make it a bit bigger, to make the background the same color as the surrounding tab bar, and to make the lines thicker. (I also think that the close buttons could be a bit bigger and thicker, too.) > > 14. Could we add a vertical line below the tabs to separate it from the buffer? [...] > > This is fixed now in the branch, please try it. Yes, this looks good. I also see some other areas where you could perhaps look over the behaviour: A) 0. emacs -Q 1. C-x b *Messages* RET 2. M-x global-tab-bar-mode I now see two tabs -- but I would expect to see only one. B) 0. emacs -Q 1. M-x global-tab-bar-mode 2. Create new tab using "+" (add tab button). 3. Run C-x <right> The two tabs now switches places. I would expect them to stay where they are unless I ask to move them. C) 0. emacs -Q 1. M-x global-tab-bar-mode 2. Click "+" (add tab button) In the menu, I now see the "*scratch*" buffer as an option. If I click it, nothing happens. Expected: I only see the other available but not open buffer. D) 0. emacs -Q 1. M-x global-tab-bar-mode 2. Click "+" (add tab button) 3. Click "*Messages*" 4. Click "+" (add tab button) (BTW, here I would expect to see an error message that there are no more buffers to select or something...) 5. Click "*scratch" Now I'm in the "*scratch*" buffer -- and the buffers switch places. I suppose this is a result of the behaviour I've described above. E) Finally, and I understand this could potentially be a lot of work, but it would be fantastic if one could drag and drop tabs to have them switch places (bonus points if one can drag them to other windows or frames!). Great to see that this feature is progressing so well! Best regards, Stefan Kangas ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-28 17:06 ` Tabs Stefan Kangas @ 2019-09-28 19:52 ` Juri Linkov 2019-10-20 22:38 ` Tabs Juri Linkov 2019-11-02 21:40 ` Tabs Juri Linkov 1 sibling, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-09-28 19:52 UTC (permalink / raw) To: Stefan Kangas; +Cc: Emacs developers >> > 1. When I run C-x <left> or C-x <right>, it automatically creates a new tab with >> > the next buffer. I'd rather it switched between the open tabs, and have a >> > separate command to create a new tab. I believe this would be more in line with >> > how tabs work in other software, and therefore more intuitive. >> >> If an inactive tab is displayed to the left from the currently active tab, >> do you mean that 'C-x <left>' doesn't switch to it but instead creates a new tab? > > When I do: > > 0. emacs -Q > 1. M-x global-tab-line-mode > 1. C-x <left> > > I see a new tab open up with the *Messages* buffer. I would expect it > to not open up a new tab when I just ask to see the next or previous > tab. This is intentional. This feature allows you to add more tabs from the frame's buffer-list and buried-buffer-list. If you don't want to use this feature, just don't type C-x <left> on the first tab. Also you can close unwanted tabs by clicking on the close buttons. >> > 2. None of these interactive commands work when run with M-x: >> > >> > command-execute: tab-line-add-tab must be bound to an event with parameters >> > command-execute: tab-line-close-tab must be bound to an event with parameters >> > command-execute: tab-line-select-tab must be bound to an event with parameters >> > command-execute: tab-line-switch-to-next-tab must be bound to an event >> > with parameters >> > command-execute: tab-line-switch-to-prev-tab must be bound to an event >> > with parameters >> >> Mouse commands don't work with M-x. For example, try M-x Buffer-menu-mouse-select > > True. > >> but we could declare the EVENT arg optional for these commands, >> and perform non-mouse logic when it's nil. > > This is what I would prefer. I think users will naturally try to use > these commands and be surprised when they don't work. But the EVENT arg in these commands already is optional. And executing them with M-x fails because interactive spec is (interactive "e"). Do you know what interactive spec to use to not raise the error "must be bound to an event with parameters" when executing with M-x? >> > 3. It would then be good to have key bindings for the above commands. >> >> tab-line-switch-to-prev-tab is already the same as 'C-x <left>' >> tab-line-switch-to-next-tab is already the same as 'C-x <right>' >> tab-line-add-tab is the same as 'C-x b' or any other buffer switching command >> tab-line-close-tab is the same as bury-buffer or quit-window (`q') > > Interesting. Could the doc strings for the tab-line-* commands refer > to the corresponding functions? I think that would help lessen the > confusion. Yes, this should be mentioned in the doc strings. >> only tab-line-select-tab could have a keybinding for referring tab by its >> absolute position. > > That would be good, yes. > >> > I suggest that the menu is >> > the optional non-default behaviour. >> >> I agree this should be configurable, like in e.g. Firefox a new tab page >> is configurable. > > Fair enough. Implemented now in the branch. >> > Here are some suggestions that are less fundamental, listed in no particular >> > order. >> > >> > 5. When I hover inactive tabs with the mouse, only the name of the tab is >> > highlighted. Can we get the entire tab highlighted instead, including the >> > section where the close button is? >> >> This is fixed now in the branch. > > Looks great. It might look even better if there is an "extra" > highlight on just the button when hovering only that. That would > provide the feedback that there is something clickable there. The > same goes for the active tab, where I see no highlight when I hover > the close button. Do you know is it possible to change image on mouse hover in Emacs? >> > 6. When I hover the close button on the currently active tab, I get a grey line >> > between the tab name and the button. Could we get rid of that line? >> >> This is fixed now. > > Looks great. > >> > 7. The active tab seems to be the same color in both the currently active window >> > and in other windows. Could we perhaps color the active tab differently >> > depending on if it's in the active window or not? >> >> This is an interesting suggestion, I'd never thought about such distinction, >> but it could be useful for additional indication of the currently selected >> window, like different faces of the mode-line indicate the selected window. > > Indeed. > >> > 8. In Firefox, the close tab button is not visible unless that tab is selected. >> > Perhaps that behaviour makes more sense, especially if we also implement the >> > "fixed size tabs that shrinks to fit" behaviour discussed elsewhere (because >> > smaller tabs make it too easy to accidentally click the close button). >> >> This Firefox behaviour is very inconvenient - to be able to close >> several tabs in a row I have first to switch to each of them that starts >> loading the page, so browser hangs for a while - very frustrating experience. >> Chromium close buttons on every tab are much better. However, you can set >> the close button variable to nil to disable close buttons. > > In my experience, there is rarely any significant loading time when > switching buffer in Emacs. > > In my opinion, removing the close buttons makes it easier to quickly > select tabs without worrying about accidentally closing them. Setting > tab-bar-close-button to nil gets rid of them altogether; what I want > is to only have a close button on the currently active tab. Perhaps > we could add a separate defcustom to make my preferred behaviour > optional? This is implemented now by new defcustom tab-line-close-button-show that has these options: - On all tabs - On selected tab - On non-selected tabs - None > That makes me wonder how we can best track these feature suggestions > for this branch? Wait until it lands on master and then file wishlist > bugs? Yes, it's better to merge to master before adding more features because it would be more difficult to merge with additional non-major features. >> > 9. It would probably look better if there was a couple of pixels of padding >> > between the tab name and the edge of the tab. >> >> Is this possible in Emacs? Could you please show an example of a text property >> that would put e.g. 5 pixels between characters in string. > > Sorry, I don't know how to do that. > > Is it possible to use variable-pitch-mode for the tab-bar only? In > that case C-x 8 RET THIN SPACE RET would probably do the trick. > > In any case, having a variable width font for the tabs in my opinion > would be a fantastic feature to have, and will probably go a long way > to make it look more polished and professional. Please try to customize the `tab-line' face with a variable width font. Do you like the result? >> > 10. Could we make the "+" sign (to add more tabs) more visually >> > distinct from the tabs? For example, it could have no borders. >> >> This is fixed now in the branch. > > Sorry to nit-pick so much, but I suggest to make it a bit bigger, to > make the background the same color as the surrounding tab bar, and to > make the lines thicker. (I also think that the close buttons could be > a bit bigger and thicker, too.) What font size do you use? >> > 14. Could we add a vertical line below the tabs to separate it from the buffer? > [...] >> >> This is fixed now in the branch, please try it. > > Yes, this looks good. > > I also see some other areas where you could perhaps look over the behaviour: > > A) > 0. emacs -Q > 1. C-x b *Messages* RET > 2. M-x global-tab-bar-mode > > I now see two tabs -- but I would expect to see only one. The *scratch* buffer was displayed in the same window, so it belongs to window's buffer list. > B) > 0. emacs -Q > 1. M-x global-tab-bar-mode > 2. Create new tab using "+" (add tab button). > 3. Run C-x <right> > > The two tabs now switches places. I would expect them to stay where > they are unless I ask to move them. C-x <right> tries to bring buffers from the global buffer-list and there are no more buffers except *scratch*. If you want to switch to the left tab, just press C-x <left>. > C) > 0. emacs -Q > 1. M-x global-tab-bar-mode > 2. Click "+" (add tab button) > > In the menu, I now see the "*scratch*" buffer as an option. If I > click it, nothing happens. > Expected: I only see the other available but not open buffer. The same question applies to `mouse-buffer-menu'. If you click <C-down-mouse-1> inside the buffer, do you expect the current buffer in the list? > D) > 0. emacs -Q > 1. M-x global-tab-bar-mode > 2. Click "+" (add tab button) > 3. Click "*Messages*" > 4. Click "+" (add tab button) > > (BTW, here I would expect to see an error message that there are no > more buffers to select or something...) This is the same question as above. > 5. Click "*scratch" > > Now I'm in the "*scratch*" buffer -- and the buffers switch places. I > suppose this is a result of the behaviour I've described above. > > E) > Finally, and I understand this could potentially be a lot of work, but > it would be fantastic if one could drag and drop tabs to have them > switch places (bonus points if one can drag them to other windows or > frames!). I already started to implement this additional feature but better to commit it after merge because it's easier to merge with less code. > Great to see that this feature is progressing so well! Thanks! ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-28 19:52 ` Tabs Juri Linkov @ 2019-10-20 22:38 ` Juri Linkov 0 siblings, 0 replies; 181+ messages in thread From: Juri Linkov @ 2019-10-20 22:38 UTC (permalink / raw) To: Stefan Kangas; +Cc: Emacs developers >>> > 2. None of these interactive commands work when run with M-x: >>> > >>> > command-execute: tab-line-add-tab must be bound to an event with parameters >>> > command-execute: tab-line-close-tab must be bound to an event with parameters >>> > command-execute: tab-line-select-tab must be bound to an event with parameters >>> > command-execute: tab-line-switch-to-next-tab must be bound to an event >>> > with parameters >>> > command-execute: tab-line-switch-to-prev-tab must be bound to an event >>> > with parameters >>> >>> Mouse commands don't work with M-x. For example, try M-x Buffer-menu-mouse-select >> >> True. >> >>> but we could declare the EVENT arg optional for these commands, >>> and perform non-mouse logic when it's nil. >> >> This is what I would prefer. I think users will naturally try to use >> these commands and be surprised when they don't work. > > But the EVENT arg in these commands already is optional. > And executing them with M-x fails because interactive spec is > (interactive "e"). Do you know what interactive spec to use > to not raise the error "must be bound to an event with parameters" > when executing with M-x? I realized this is possible to do by replacing ‘(interactive "e")’ with ‘(interactive (list last-nonmenu-event))’, implemented. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-28 17:06 ` Tabs Stefan Kangas 2019-09-28 19:52 ` Tabs Juri Linkov @ 2019-11-02 21:40 ` Juri Linkov 1 sibling, 0 replies; 181+ messages in thread From: Juri Linkov @ 2019-11-02 21:40 UTC (permalink / raw) To: Stefan Kangas; +Cc: Emacs developers >> > 7. The active tab seems to be the same color in both the currently active window >> > and in other windows. Could we perhaps color the active tab differently >> > depending on if it's in the active window or not? >> >> This is an interesting suggestion, I'd never thought about such distinction, >> but it could be useful for additional indication of the currently selected >> window, like different faces of the mode-line indicate the selected window. > > Indeed. Now thanks to Martin suggested to use old-selected-window in https://lists.gnu.org/archive/html/emacs-devel/2019-10/msg01066.html (I didn't know about old-selected-window, or maybe forgot if it was implemented for other purpose, maybe for some hook) Anyway, now it's possible to use it to indicate the selected window in the tab-line using the 'tab-line-tab-selected' face. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-08-31 20:45 Tabs Juri Linkov ` (5 preceding siblings ...) 2019-09-15 19:21 ` Tabs Stefan Kangas @ 2019-09-19 23:57 ` Michael Heerdegen 2019-09-21 22:45 ` Tabs Juri Linkov 6 siblings, 1 reply; 181+ messages in thread From: Michael Heerdegen @ 2019-09-19 23:57 UTC (permalink / raw) To: Juri Linkov; +Cc: emacs-devel Juri Linkov <juri@linkov.net> writes: > There is a long story of several attempts to implement tabs in Emacs. > Finally now a complete implementation is available for these > etc/TODO tasks: Sorry, I didn't try your implementation, but I have a question: My usage is like this: I want tabs in w3m, for w3m buffers, tabs for eww buffers in a frame "dedicated" to browsing with eww (like a firefox window), tabs in *info* showing *info* buffers, etc. I don't want tabs always and everywhere, I want tabs only for certain modes and then they should only show related buffers. And I don't (necessarily) want to save any desktop file or frame configurations or so. I just want to have missing tab support for e.g. eww or info, preferably without losing the header line. Does your implementation cover such a user behavior? Thanks, Michael. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-19 23:57 ` Tabs Michael Heerdegen @ 2019-09-21 22:45 ` Juri Linkov 2019-09-22 0:31 ` Tabs Michael Heerdegen 0 siblings, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-09-21 22:45 UTC (permalink / raw) To: Michael Heerdegen; +Cc: emacs-devel > My usage is like this: I want tabs in w3m, for w3m buffers, tabs for > eww buffers in a frame "dedicated" to browsing with eww (like a firefox > window), tabs in *info* showing *info* buffers, etc. I don't want > tabs always and everywhere, I want tabs only for certain modes and then > they should only show related buffers. And I don't (necessarily) want > to save any desktop file or frame configurations or so. I just want to > have missing tab support for e.g. eww or info, preferably without losing > the header line. > > Does your implementation cover such a user behavior? Yes, it's already customizable enough to cover many different needs. At the core it provides a new place at the top of the frame for the frame-local tab-bar, and also places for window-local tab-lines at the top of each window. So authors of many existing packages that currently had no choice other than taking space from the header-line, now can adapt packages to use new locations reserved specially for tabs. If you are already using one of these packages you might want to continue using them with the new tabs locations that doesn't conflict with the header-line. These packages provide dozens of user options, and it makes no sense to copy all them to the core. Instead of trying to cover an infinite set of possible customization preferences, the core should be general to allow adapting to the customization needs easily. The current implementation is already flexible enough, so for example, what you asked for *info* buffers, is possible to do with the current implementation with just a few lines: (advice-add 'tab-line-tabs :around (lambda (orig-fun &optional window) (if (derived-mode-p 'Info-mode) (mapcan (lambda (b) (with-current-buffer b (when (derived-mode-p 'Info-mode) (list b)))) (buffer-list)) (funcall orig-fun window)))) Later this could be generalized to provide e.g. an option for the list of modes where to enable this behavior. Also I already implemented more features such as tab close undo, tab history back, etc. But it would be better to add them later after merging the branch to master, so merging will be easier with minimal set of changes. Thus perhaps now I should start preparations for merging the feature/tabs branch to master that includes mostly writing documentation for the Info manual. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-21 22:45 ` Tabs Juri Linkov @ 2019-09-22 0:31 ` Michael Heerdegen 2019-09-25 20:15 ` Tabs Juri Linkov 0 siblings, 1 reply; 181+ messages in thread From: Michael Heerdegen @ 2019-09-22 0:31 UTC (permalink / raw) To: Juri Linkov; +Cc: emacs-devel Juri Linkov <juri@linkov.net> writes: > The current implementation is already flexible enough, so for example, > what you asked for *info* buffers, is possible to do with the current > implementation with just a few lines: > > (advice-add 'tab-line-tabs :around > (lambda (orig-fun &optional window) > (if (derived-mode-p 'Info-mode) > (mapcan (lambda (b) > (with-current-buffer b > (when (derived-mode-p 'Info-mode) > (list b)))) > (buffer-list)) > (funcall orig-fun window)))) This seems exactly what I imagined - sounds very promising. Looking forward for it to appear in master. Thanks, Michael. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-22 0:31 ` Tabs Michael Heerdegen @ 2019-09-25 20:15 ` Juri Linkov 2019-10-05 13:57 ` Tabs Michael Heerdegen 0 siblings, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-09-25 20:15 UTC (permalink / raw) To: Michael Heerdegen; +Cc: emacs-devel >> The current implementation is already flexible enough, so for example, >> what you asked for *info* buffers, is possible to do with the current >> implementation with just a few lines: >> >> (advice-add 'tab-line-tabs :around >> (lambda (orig-fun &optional window) >> (if (derived-mode-p 'Info-mode) >> (mapcan (lambda (b) >> (with-current-buffer b >> (when (derived-mode-p 'Info-mode) >> (list b)))) >> (buffer-list)) >> (funcall orig-fun window)))) > > This seems exactly what I imagined - sounds very promising. Now configuration is even simpler: (add-hook 'Info-mode-hook (lambda () (setq-local tab-line-tabs-function (lambda () (mapcan (lambda (b) (when (with-current-buffer b (derived-mode-p 'Info-mode)) (list b))) (buffer-list)))))) And you can even use the tab-bar as well for the same purpose (if you don't need to switch window configurations): (add-hook 'Info-mode-hook (lambda () (setq-local tab-bar-tabs-function (lambda () (mapcan (lambda (b) (when (with-current-buffer b (derived-mode-p 'Info-mode)) (list `(,(if (eq b (current-buffer)) 'current-tab 'tab) (name . ,(buffer-name b)) (binding . (lambda () (interactive) (switch-to-buffer ,b))) (close-binding . (lambda () (interactive) (kill-buffer ,b) (force-mode-line-update))))))) (buffer-list)))))) > Looking forward for it to appear in master. After thorough testing and improving customization the work on the branch is finished, and it is mostly ready for merge, but writing documentation is the most time-consuming process. I hope to finish writing documentation by the weekend. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-09-25 20:15 ` Tabs Juri Linkov @ 2019-10-05 13:57 ` Michael Heerdegen 2019-10-05 22:12 ` Tabs Juri Linkov 0 siblings, 1 reply; 181+ messages in thread From: Michael Heerdegen @ 2019-10-05 13:57 UTC (permalink / raw) To: Juri Linkov; +Cc: emacs-devel Juri Linkov <juri@linkov.net> writes: > Now configuration is even simpler: > > (add-hook 'Info-mode-hook > (lambda () > (setq-local tab-line-tabs-function > (lambda () > (mapcan > (lambda (b) > (when (with-current-buffer b (derived-mode-p 'Info-mode)) > (list b))) > (buffer-list)))))) Works for me, thanks. What I didn't get working is to show tabs only for Info buffers and hide it for all others. Whatever I tried tabs are either displayed in every window or in none. This is what I have so far: #+begin_src emacs-lisp (customize-set-variable 'tab-bar-show 1) (setq-default tab-bar-tabs-function #'ignore) (add-hook 'Info-mode-hook (defun my-Info-mode-hook-configure-tab-bar () (setq-local tab-bar-tabs-function (lambda () (mapcan (lambda (b) (when (with-current-buffer b (derived-mode-p 'Info-mode)) (list `(,(if (eq b (current-buffer)) 'current-tab 'tab) (name . ,(buffer-name b)) (binding . (lambda () (interactive) (switch-to-buffer ,b))) (close-binding . (lambda () (interactive) (kill-buffer ,b) (force-mode-line-update))))))) (buffer-list)))))) #+end_src Can I get it work? TIA, Michael. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-05 13:57 ` Tabs Michael Heerdegen @ 2019-10-05 22:12 ` Juri Linkov 2019-10-06 8:22 ` Tabs Michael Heerdegen 0 siblings, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-10-05 22:12 UTC (permalink / raw) To: Michael Heerdegen; +Cc: emacs-devel > What I didn't get working is to show tabs only for Info buffers and hide > it for all others. Whatever I tried tabs are either displayed in every > window or in none. > > This is what I have so far: > > #+begin_src emacs-lisp > (customize-set-variable 'tab-bar-show 1) > (setq-default tab-bar-tabs-function #'ignore) > (add-hook 'Info-mode-hook > (defun my-Info-mode-hook-configure-tab-bar () > (setq-local > tab-bar-tabs-function > (lambda () > (mapcan > (lambda (b) > (when (with-current-buffer b (derived-mode-p 'Info-mode)) > (list `(,(if (eq b (current-buffer)) 'current-tab 'tab) > (name . ,(buffer-name b)) > (binding . (lambda () (interactive) (switch-to-buffer ,b))) > (close-binding . (lambda () (interactive) (kill-buffer ,b) (force-mode-line-update))))))) > (buffer-list)))))) > #+end_src > > Can I get it work? I tried your code, and it works fine: tabs are shown only when the current buffer is in Info mode, and hidden when the selected window's buffer is in other modes. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-05 22:12 ` Tabs Juri Linkov @ 2019-10-06 8:22 ` Michael Heerdegen 2019-10-06 12:09 ` Tabs Michael Heerdegen 2019-10-08 19:15 ` Tabs Michael Heerdegen 0 siblings, 2 replies; 181+ messages in thread From: Michael Heerdegen @ 2019-10-06 8:22 UTC (permalink / raw) To: Juri Linkov; +Cc: emacs-devel Juri Linkov <juri@linkov.net> writes: > > #+begin_src emacs-lisp > > (customize-set-variable 'tab-bar-show 1) > > (setq-default tab-bar-tabs-function #'ignore) > > (add-hook 'Info-mode-hook > > (defun my-Info-mode-hook-configure-tab-bar () > > (setq-local > > tab-bar-tabs-function > > (lambda () > > (mapcan > > (lambda (b) > > (when (with-current-buffer b (derived-mode-p 'Info-mode)) > > (list `(,(if (eq b (current-buffer)) 'current-tab 'tab) > > (name . ,(buffer-name b)) > > (binding . (lambda () (interactive) (switch-to-buffer ,b))) > > (close-binding . (lambda () (interactive) (kill-buffer ,b) (force-mode-line-update))))))) > > (buffer-list)))))) > > #+end_src > > > > Can I get it work? > > I tried your code, and it works fine: tabs are shown only when > the current buffer is in Info mode, and hidden when the selected window's > buffer is in other modes. Hmm, no not for me, I never get tabs with this code. I also tried with emacs -Q. This is with current master - or do I still have to use a different branch? I see that (funcall tab-bar-tabs-function) in info buffers returns a list with multiple elements, so it /should/ work. Regards, Michael. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-06 8:22 ` Tabs Michael Heerdegen @ 2019-10-06 12:09 ` Michael Heerdegen 2019-10-06 15:16 ` Tabs Michael Heerdegen 2019-10-06 17:49 ` Tabs Eli Zaretskii 2019-10-08 19:15 ` Tabs Michael Heerdegen 1 sibling, 2 replies; 181+ messages in thread From: Michael Heerdegen @ 2019-10-06 12:09 UTC (permalink / raw) To: Juri Linkov; +Cc: emacs-devel Michael Heerdegen <michael_heerdegen@web.de> writes: > I see that (funcall tab-bar-tabs-function) in info buffers returns a > list with multiple elements, so it /should/ work. One more thing: with the posted setup, although I don't see any tab bar, whenever I switch to a different workspace and back, and also under some under conditions I don't fully understand, Emacs gets stuck, it apparently infloops in redisplay. I need to send three SIGUSR2 to get control back. This with with my config loaded FWIW. Michael. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-06 12:09 ` Tabs Michael Heerdegen @ 2019-10-06 15:16 ` Michael Heerdegen 2019-10-06 17:49 ` Tabs Eli Zaretskii 1 sibling, 0 replies; 181+ messages in thread From: Michael Heerdegen @ 2019-10-06 15:16 UTC (permalink / raw) To: Juri Linkov; +Cc: emacs-devel Michael Heerdegen <michael_heerdegen@web.de> writes: > One more thing: with the posted setup, although I don't see any tab bar, > whenever I switch to a different workspace and back, and also under some > under conditions I don't fully understand, Emacs gets stuck, it > apparently infloops in redisplay. I need to send three SIGUSR2 to get > control back. This with with my config loaded FWIW. It's probably not your fault: this still happens with tab-lines turned off. Michael. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-06 12:09 ` Tabs Michael Heerdegen 2019-10-06 15:16 ` Tabs Michael Heerdegen @ 2019-10-06 17:49 ` Eli Zaretskii 2019-10-06 17:55 ` Tabs Juri Linkov 1 sibling, 1 reply; 181+ messages in thread From: Eli Zaretskii @ 2019-10-06 17:49 UTC (permalink / raw) To: Michael Heerdegen; +Cc: emacs-devel, juri > From: Michael Heerdegen <michael_heerdegen@web.de> > Date: Sun, 06 Oct 2019 14:09:30 +0200 > Cc: emacs-devel@gnu.org > One more thing: with the posted setup, although I don't see any tab bar, > whenever I switch to a different workspace and back, and also under some > under conditions I don't fully understand, Emacs gets stuck, it > apparently infloops in redisplay. When this happens, please attach a debugger and use the technique described in etc/DEBUG to find out where it loops. TIA ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-06 17:49 ` Tabs Eli Zaretskii @ 2019-10-06 17:55 ` Juri Linkov 2019-10-06 18:05 ` Tabs Juri Linkov ` (2 more replies) 0 siblings, 3 replies; 181+ messages in thread From: Juri Linkov @ 2019-10-06 17:55 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Michael Heerdegen, emacs-devel >> One more thing: with the posted setup, although I don't see any tab bar, >> whenever I switch to a different workspace and back, and also under some >> under conditions I don't fully understand, Emacs gets stuck, it >> apparently infloops in redisplay. > > When this happens, please attach a debugger and use the technique > described in etc/DEBUG to find out where it loops. I can reproduce the redisplay issue, I never seen this before, maybe some recent change broke redisplaying. I tried to debug and in redisplay_internal, the value of garbaged_frame_retries has a very large number - about thousands order of magnitude. It never resets the 'garbaged' flag set in the selected frame. And I have no idea how to force the 'garbaged' flag to be reset. It infloops in these lines: /* On some platforms (at least MS-Windows), the scroll_run_hook called from scrolling_window called from update_frame could set the frame's garbaged flag, in which case we need to redisplay the frame. */ if (FRAME_GARBAGED_P (f)) goto retry_frame; ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-06 17:55 ` Tabs Juri Linkov @ 2019-10-06 18:05 ` Juri Linkov 2019-10-06 18:58 ` Tabs Eli Zaretskii 2019-10-06 18:59 ` Tabs Eli Zaretskii 2019-10-06 18:38 ` Tabs Michael Heerdegen 2019-10-06 18:56 ` Tabs Eli Zaretskii 2 siblings, 2 replies; 181+ messages in thread From: Juri Linkov @ 2019-10-06 18:05 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Michael Heerdegen, emacs-devel >>> One more thing: with the posted setup, although I don't see any tab bar, >>> whenever I switch to a different workspace and back, and also under some >>> under conditions I don't fully understand, Emacs gets stuck, it >>> apparently infloops in redisplay. >> >> When this happens, please attach a debugger and use the technique >> described in etc/DEBUG to find out where it loops. > > I can reproduce the redisplay issue, I never seen this before, > maybe some recent change broke redisplaying. > > I tried to debug and in redisplay_internal, the value of > garbaged_frame_retries has a very large number - about thousands > order of magnitude. It never resets the 'garbaged' flag set in the > selected frame. And I have no idea how to force the 'garbaged' flag > to be reset. It infloops in these lines: > > /* On some platforms (at least MS-Windows), the > scroll_run_hook called from scrolling_window > called from update_frame could set the frame's > garbaged flag, in which case we need to > redisplay the frame. */ > if (FRAME_GARBAGED_P (f)) > goto retry_frame; This problem can be reproduced easily by just resizing the frame several times. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-06 18:05 ` Tabs Juri Linkov @ 2019-10-06 18:58 ` Eli Zaretskii 2019-10-06 18:59 ` Tabs Eli Zaretskii 1 sibling, 0 replies; 181+ messages in thread From: Eli Zaretskii @ 2019-10-06 18:58 UTC (permalink / raw) To: Juri Linkov; +Cc: michael_heerdegen, emacs-devel > From: Juri Linkov <juri@linkov.net> > Cc: Michael Heerdegen <michael_heerdegen@web.de>, emacs-devel@gnu.org > Date: Sun, 06 Oct 2019 21:05:12 +0300 > > > /* On some platforms (at least MS-Windows), the > > scroll_run_hook called from scrolling_window > > called from update_frame could set the frame's > > garbaged flag, in which case we need to > > redisplay the frame. */ > > if (FRAME_GARBAGED_P (f)) > > goto retry_frame; > > This problem can be reproduced easily by just resizing the frame > several times. Doesn't happen here, no matter how many times I try. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-06 18:05 ` Tabs Juri Linkov 2019-10-06 18:58 ` Tabs Eli Zaretskii @ 2019-10-06 18:59 ` Eli Zaretskii 2019-10-06 19:08 ` Tabs Michael Heerdegen 2019-10-06 19:11 ` Tabs Juri Linkov 1 sibling, 2 replies; 181+ messages in thread From: Eli Zaretskii @ 2019-10-06 18:59 UTC (permalink / raw) To: Juri Linkov; +Cc: michael_heerdegen, emacs-devel > From: Juri Linkov <juri@linkov.net> > Cc: Michael Heerdegen <michael_heerdegen@web.de>, emacs-devel@gnu.org > Date: Sun, 06 Oct 2019 21:05:12 +0300 > > > /* On some platforms (at least MS-Windows), the > > scroll_run_hook called from scrolling_window > > called from update_frame could set the frame's > > garbaged flag, in which case we need to > > redisplay the frame. */ > > if (FRAME_GARBAGED_P (f)) > > goto retry_frame; > > This problem can be reproduced easily by just resizing the frame > several times. In "emacs -Q"? Just start Emacs and resize the frame by dragging its edge with the mouse? Or something else? ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-06 18:59 ` Tabs Eli Zaretskii @ 2019-10-06 19:08 ` Michael Heerdegen 2019-10-06 19:11 ` Tabs Juri Linkov 1 sibling, 0 replies; 181+ messages in thread From: Michael Heerdegen @ 2019-10-06 19:08 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel, Juri Linkov Eli Zaretskii <eliz@gnu.org> writes: > In "emacs -Q"? Just start Emacs and resize the frame by dragging its > edge with the mouse? Yes, exactly that. Happens for the seconds drag here. I count on Juri for further debugging since I'm not good at it. Michael. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-06 18:59 ` Tabs Eli Zaretskii 2019-10-06 19:08 ` Tabs Michael Heerdegen @ 2019-10-06 19:11 ` Juri Linkov 2019-10-06 19:21 ` Tabs Eli Zaretskii 1 sibling, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-10-06 19:11 UTC (permalink / raw) To: Eli Zaretskii; +Cc: michael_heerdegen, emacs-devel >> > /* On some platforms (at least MS-Windows), the >> > scroll_run_hook called from scrolling_window >> > called from update_frame could set the frame's >> > garbaged flag, in which case we need to >> > redisplay the frame. */ >> > if (FRAME_GARBAGED_P (f)) >> > goto retry_frame; >> >> This problem can be reproduced easily by just resizing the frame >> several times. > > In "emacs -Q"? Just start Emacs and resize the frame by dragging its > edge with the mouse? Or something else? In "emacs -Q" build with GTK+ Version 3.22.30 it infloops after resizing by quickly dragging its edge with the mouse. Maybe this requires a slow computer that makes frame updating even slower by configuring without optimization: --enable-checking='yes,glyphs' --enable-check-lisp-object-type CFLAGS='-O0 -g3 -gdwarf-4' ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-06 19:11 ` Tabs Juri Linkov @ 2019-10-06 19:21 ` Eli Zaretskii 2019-10-06 19:58 ` Tabs Juri Linkov 0 siblings, 1 reply; 181+ messages in thread From: Eli Zaretskii @ 2019-10-06 19:21 UTC (permalink / raw) To: Juri Linkov; +Cc: michael_heerdegen, emacs-devel > From: Juri Linkov <juri@linkov.net> > Cc: michael_heerdegen@web.de, emacs-devel@gnu.org > Date: Sun, 06 Oct 2019 22:11:43 +0300 > > > In "emacs -Q"? Just start Emacs and resize the frame by dragging its > > edge with the mouse? Or something else? > > In "emacs -Q" build with GTK+ Version 3.22.30 it infloops after resizing > by quickly dragging its edge with the mouse. I guess it's somehow specific to the GTK build (or maybe more generally to X). > Maybe this requires a slow computer that makes frame updating even slower > by configuring without optimization: > > --enable-checking='yes,glyphs' --enable-check-lisp-object-type CFLAGS='-O0 -g3 -gdwarf-4' No, because that's how I built mine. OK, can you set a watchpoint on the frame's garbaged flag, and show me both C and Lisp backtraces each time the flag is set or reset while we loop for two iterations there? Thanks. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-06 19:21 ` Tabs Eli Zaretskii @ 2019-10-06 19:58 ` Juri Linkov 2019-10-07 16:05 ` Tabs Eli Zaretskii 0 siblings, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-10-06 19:58 UTC (permalink / raw) To: Eli Zaretskii; +Cc: michael_heerdegen, emacs-devel >> > In "emacs -Q"? Just start Emacs and resize the frame by dragging its >> > edge with the mouse? Or something else? >> >> In "emacs -Q" build with GTK+ Version 3.22.30 it infloops after resizing >> by quickly dragging its edge with the mouse. > > I guess it's somehow specific to the GTK build (or maybe more > generally to X). > >> Maybe this requires a slow computer that makes frame updating even slower >> by configuring without optimization: >> >> --enable-checking='yes,glyphs' --enable-check-lisp-object-type CFLAGS='-O0 -g3 -gdwarf-4' > > No, because that's how I built mine. > > OK, can you set a watchpoint on the frame's garbaged flag, and show me > both C and Lisp backtraces each time the flag is set or reset while we > loop for two iterations there? It's very strange but a watchpoint is hit only on setting flag to false: (gdb) bt #0 0x000055555560a8eb in redisplay_internal () at xdisp.c:15707 #1 0x000055555560b243 in redisplay_preserve_echo_area (from_where=11) at xdisp.c:15946 #2 0x00005555559e7922 in wait_reading_process_output (time_limit=30, nsecs=0, read_kbd=-1, do_display=true, wait_for_cell=XIL(0), wait_proc=0x0, just_wait_proc=0) at process.c:5429 #3 0x00005555555aa009 in sit_for (timeout=make_fixnum(30), reading=true, display_option=1) at dispnew.c:6021 #4 0x00005555557e119f in read_char (commandflag=1, map=XIL(0x555556e0e2b3), prev_event=XIL(0), used_mouse_menu=0x7fffffffd5e5, end_time=0x0) at keyboard.c:2718 #5 0x00005555557f3bcb in read_key_sequence (keybuf=0x7fffffffd7d0, prompt=XIL(0), dont_downcase_last=false, can_return_switch_frame=true, fix_current_buffer=true, prevent_redisplay=false) at keyboard.c:9527 #6 0x00005555557dca01 in command_loop_1 () at keyboard.c:1345 #7 0x000055555594bb94 in internal_condition_case (bfun=0x5555557dc583 <command_loop_1>, handlers=XIL(0x90), hfun=0x5555557dbb4f <cmd_error>) at eval.c:1355 #8 0x00005555557dc16a in command_loop_2 (ignore=XIL(0)) at keyboard.c:1091 #9 0x000055555594afee in internal_catch (tag=XIL(0xcf00), func=0x5555557dc13d <command_loop_2>, arg=XIL(0)) at eval.c:1116 #10 0x00005555557dc108 in command_loop () at keyboard.c:1070 #11 0x00005555557db636 in recursive_edit_1 () at keyboard.c:714 #12 0x00005555557db82e in Frecursive_edit () at keyboard.c:786 #13 0x00005555557d1725 in main (argc=3, argv=0x7fffffffdc28) at emacs.c:2055 Lisp Backtrace: "redisplay_internal (C function)" (0x0) (gdb) l 15702 { 15703 struct frame *f = XFRAME (frame); 15704 if (f->updated_p) 15705 { 15706 f->redisplay = false; 15707 f->garbaged = false; 15708 mark_window_display_accurate (f->root_window, true); 15709 if (FRAME_TERMINAL (f)->frame_up_to_date_hook) 15710 FRAME_TERMINAL (f)->frame_up_to_date_hook (f); 15711 } but never on setting flag to true, yet f->garbaged becomes true in redisplay_internal somehow. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-06 19:58 ` Tabs Juri Linkov @ 2019-10-07 16:05 ` Eli Zaretskii 2019-10-07 16:53 ` Tabs Michael Heerdegen 2019-10-07 19:11 ` Tabs Juri Linkov 0 siblings, 2 replies; 181+ messages in thread From: Eli Zaretskii @ 2019-10-07 16:05 UTC (permalink / raw) To: Juri Linkov; +Cc: michael_heerdegen, emacs-devel > From: Juri Linkov <juri@linkov.net> > Cc: michael_heerdegen@web.de, emacs-devel@gnu.org > Date: Sun, 06 Oct 2019 22:58:28 +0300 > > > OK, can you set a watchpoint on the frame's garbaged flag, and show me > > both C and Lisp backtraces each time the flag is set or reset while we > > loop for two iterations there? > > It's very strange but a watchpoint is hit only on setting flag to false: Hmm... I guess that's the problem, then. Please try the latest master, I hope this is now fixed. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-07 16:05 ` Tabs Eli Zaretskii @ 2019-10-07 16:53 ` Michael Heerdegen 2019-10-07 17:12 ` Tabs Ergus 2019-10-07 17:58 ` Tabs Eli Zaretskii 2019-10-07 19:11 ` Tabs Juri Linkov 1 sibling, 2 replies; 181+ messages in thread From: Michael Heerdegen @ 2019-10-07 16:53 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel, Juri Linkov Eli Zaretskii <eliz@gnu.org> writes: > Please try the latest master, I hope this is now fixed. Seems fixed for me indeed. Thank you! Michael. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-07 16:53 ` Tabs Michael Heerdegen @ 2019-10-07 17:12 ` Ergus 2019-10-07 18:24 ` Tabs Eli Zaretskii 2019-10-07 17:58 ` Tabs Eli Zaretskii 1 sibling, 1 reply; 181+ messages in thread From: Ergus @ 2019-10-07 17:12 UTC (permalink / raw) To: Michael Heerdegen; +Cc: Eli Zaretskii, emacs-devel, Juri Linkov Hi I am trying to open a file in a new tab: C-x 6 f and I am getting a segfault: --------------------------------------- Core was generated by `emacs -Q -nw'. Program terminated with signal SIGSEGV, Segmentation fault. #0 0x00007fef54a957b5 in raise () from /usr/lib/libpthread.so.0 [Current thread is 1 (Thread 0x7fef5016ce80 (LWP 149751))] (gdb) where #0 0x00007fef54a957b5 in raise () at /usr/lib/libpthread.so.0 #1 0x0000561288381ff1 in terminate_due_to_signal (sig=sig@entry=11, backtrace_limit=backtrace_limit@entry=40) at ../../src/emacs.c:401 #2 0x0000561288382434 in handle_fatal_signal (sig=sig@entry=11) at ../../src/sysdep.c:1790 #3 0x000056128847983d in deliver_thread_signal (sig=sig@entry=11, handler=0x561288382429 <handle_fatal_signal>) at ../../src/sysdep.c:1764 #4 0x00005612884798b9 in deliver_fatal_thread_signal (sig=11) at ../../src/sysdep.c:1887 #5 0x00005612884798b9 in handle_sigsegv (sig=11, siginfo=<optimized out>, arg=<optimized out>) at ../../src/sysdep.c:1887 #6 0x00007fef54a95930 in <signal handler called> () at /usr/lib/libpthread.so.0 #7 0x00007fef5486a743 in __memmove_avx_unaligned_erms () at /usr/lib/libc.so.6 #8 0x000056128838f30a in memcpy (__len=8160, __src=<optimized out>, __dest=<optimized out>) at /usr/include/bits/string_fortified.h:34 #9 0x000056128838f30a in save_current_matrix (f=0x561288fcf140) at ../../src/dispnew.c:1919 #10 0x000056128838f30a in adjust_frame_glyphs_for_frame_redisplay (f=0x561288fcf140) at ../../src/dispnew.c:2078 #11 0x000056128838f30a in adjust_frame_glyphs (f=f@entry=0x561288fcf140) at ../../src/dispnew.c:1821 #12 0x0000561288394be2 in adjust_frame_size (f=0x561288fcf140, new_width=<optimized out>, new_height=<optimized out>, inhibit=inhibit@entry=5, pretend=pretend@entry=false, parameter=parameter@entry=0x3cc0) at ../../src/frame.c:821 #13 0x0000561288389a63 in change_frame_size_1 (f=<optimized out>, new_width=<optimized out>, new_height=<optimized out>, pretend=pretend@entry=false, delay=delay@entry=false, safe=safe@entry=true, pixelwise=<optimized out>) at ../../src/lisp.h:1032 #14 0x0000561288391c28 in change_frame_size (pixelwise=<optimized out>, safe=true, delay=false, pretend=false, new_height=<optimized out>, new_width=<optimized out>, f=<optimized out>) at ../../src/dispnew.c:5795 #15 0x0000561288391c28 in do_pending_window_change (safe=safe@entry=true) at ../../src/dispnew.c:5721 #16 0x00005612883c694f in redisplay_internal () at ../../src/xdisp.c:15234 #17 0x000056128846c21f in read_char (commandflag=1, map=0x56128905d643, prev_event=0x0, used_mouse_menu=0x7ffc179c3b3b, end_time=0x0) at ../../src/keyboard.c:2473 #18 0x000056128846ea6a in read_key_sequence (keybuf=<optimized out>, prompt=0x0, dont_downcase_last=<optimized out>, can_return_switch_frame=true, fix_current_buffer=true, prevent_redisplay=<optimized out>) at ../../src/keyboard.c:9527 #19 0x000056128847010c in command_loop_1 () at ../../src/lisp.h:1032 #20 0x00005612884d7277 in internal_condition_case (bfun=bfun@entry=0x56128846ff10 <command_loop_1>, handlers=handlers@entry=0x90, hfun=hfun@entry=0x5612884670a0 <cmd_error>) at ../../src/eval.c:1355 #21 0x0000561288461e84 in command_loop_2 (ignore=ignore@entry=0x0) at ../../src/lisp.h:1032 #22 0x00005612884d71d1 in internal_catch (tag=tag@entry=0xd500, func=func@entry=0x561288461e60 <command_loop_2>, arg=arg@entry=0x0) at ../../src/eval.c:1116 #23 0x0000561288461e2b in command_loop () at ../../src/lisp.h:1032 #24 0x0000561288466cb6 in recursive_edit_1 () at ../../src/keyboard.c:714 #25 0x0000561288466fe2 in Frecursive_edit () at ../../src/keyboard.c:786 #26 0x0000561288388e37 in main (argc=3, argv=<optimized out>) at ../../src/emacs.c:2055 ------------------------------------------------- This used to work fine before... I just pull and recompiled (since saturday)... Anyone else getting similar error? The previous bt was when -nw, but in gui I am getting nothing.. C-x 6 f opens the file but not creates a tab... What happened?? This was fine before. Best, Ergus ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-07 17:12 ` Tabs Ergus @ 2019-10-07 18:24 ` Eli Zaretskii 2019-10-07 19:28 ` Tabs Ergus 0 siblings, 1 reply; 181+ messages in thread From: Eli Zaretskii @ 2019-10-07 18:24 UTC (permalink / raw) To: Ergus; +Cc: michael_heerdegen, juri, emacs-devel > Date: Mon, 7 Oct 2019 19:12:30 +0200 > From: Ergus <spacibba@aol.com> > Cc: Eli Zaretskii <eliz@gnu.org>, emacs-devel@gnu.org, > Juri Linkov <juri@linkov.net> > > Hi I am trying to open a file in a new tab: C-x 6 f and I am getting a > segfault: Should be fixed now. > The previous bt was when -nw, but in gui I am getting nothing.. C-x 6 f > opens the file but not creates a tab... What happened?? This was fine > before. I cannot reproduce this part: C-x 6 f works for me in GUI sessions as expected. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-07 18:24 ` Tabs Eli Zaretskii @ 2019-10-07 19:28 ` Ergus 2019-10-08 7:42 ` Tabs Eli Zaretskii 0 siblings, 1 reply; 181+ messages in thread From: Ergus @ 2019-10-07 19:28 UTC (permalink / raw) To: Eli Zaretskii; +Cc: michael_heerdegen, juri, emacs-devel On Mon, Oct 07, 2019 at 09:24:39PM +0300, Eli Zaretskii wrote: >> Date: Mon, 7 Oct 2019 19:12:30 +0200 >> From: Ergus <spacibba@aol.com> >> Cc: Eli Zaretskii <eliz@gnu.org>, emacs-devel@gnu.org, >> Juri Linkov <juri@linkov.net> >> >> Hi I am trying to open a file in a new tab: C-x 6 f and I am getting a >> segfault: > >Should be fixed now. > I get the same error... >> The previous bt was when -nw, but in gui I am getting nothing.. C-x 6 f >> opens the file but not creates a tab... What happened?? This was fine >> before. > >I cannot reproduce this part: C-x 6 f works for me in GUI sessions as >expected. > ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-07 19:28 ` Tabs Ergus @ 2019-10-08 7:42 ` Eli Zaretskii 2019-10-08 8:56 ` Tabs Ergus 0 siblings, 1 reply; 181+ messages in thread From: Eli Zaretskii @ 2019-10-08 7:42 UTC (permalink / raw) To: Ergus; +Cc: michael_heerdegen, emacs-devel, juri > Date: Mon, 7 Oct 2019 21:28:36 +0200 > From: Ergus <spacibba@aol.com> > Cc: michael_heerdegen@web.de, juri@linkov.net, emacs-devel@gnu.org > > On Mon, Oct 07, 2019 at 09:24:39PM +0300, Eli Zaretskii wrote: > >> Date: Mon, 7 Oct 2019 19:12:30 +0200 > >> From: Ergus <spacibba@aol.com> > >> Cc: Eli Zaretskii <eliz@gnu.org>, emacs-devel@gnu.org, > >> Juri Linkov <juri@linkov.net> > >> > >> Hi I am trying to open a file in a new tab: C-x 6 f and I am getting a > >> segfault: > > > >Should be fixed now. > > > > I get the same error... Then please bisect to see which commit caused this. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-08 7:42 ` Tabs Eli Zaretskii @ 2019-10-08 8:56 ` Ergus 2019-10-08 9:18 ` Tabs Eli Zaretskii 0 siblings, 1 reply; 181+ messages in thread From: Ergus @ 2019-10-08 8:56 UTC (permalink / raw) To: Eli Zaretskii; +Cc: michael_heerdegen, emacs-devel, juri [-- Attachment #1: Type: text/plain, Size: 666 bytes --] Hi Eli: The segfault actually disappeared today after your fix... Not sure why on yesterday it was still there... But the issue of not having the tabs in gui is still there. The tabs are only visible when I type M-x and the minibuffer is active and they are incomplete and look weird (with wrong information actually). (Picture attached) When no minibuffer is active I get no tabs at all. I am moving back in history and the issue seems to be there since ever. (I just haven't try gui before) My build options are: ../configure --prefix=/mnt/casa/install_arch/emacs --with-xwidgets --with-x-toolkit=gtk3 --with-xft --with-modules --with-mailutil Best, Ergus. [-- Attachment #2: Screenshot_2019-10-08_10-41-38.png --] [-- Type: image/png, Size: 30498 bytes --] ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-08 8:56 ` Tabs Ergus @ 2019-10-08 9:18 ` Eli Zaretskii 2019-10-08 13:58 ` Tabs Eli Zaretskii 2019-10-08 16:00 ` Tabs Ergus 0 siblings, 2 replies; 181+ messages in thread From: Eli Zaretskii @ 2019-10-08 9:18 UTC (permalink / raw) To: Ergus; +Cc: michael_heerdegen, juri, emacs-devel > Date: Tue, 8 Oct 2019 10:56:04 +0200 > From: Ergus <spacibba@aol.com> > Cc: michael_heerdegen@web.de, emacs-devel@gnu.org, juri@linkov.net > > The segfault actually disappeared today after your fix... Not sure why > on yesterday it was still there... That's what I thought yesterday. But today I see it with my fix, so I think it's some kind of Heisenbug related to memory allocation problems. Expect it to come back. I will look more into it. > But the issue of not having the tabs in gui is still there. The tabs are > only visible when I type M-x and the minibuffer is active and they are > incomplete and look weird (with wrong information actually). (Picture > attached) > > When no minibuffer is active I get no tabs at all. I am moving back in > history and the issue seems to be there since ever. (I just haven't try > gui before) Please show an exact recipe starting from "emacs -Q". ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-08 9:18 ` Tabs Eli Zaretskii @ 2019-10-08 13:58 ` Eli Zaretskii 2019-10-08 16:00 ` Tabs Ergus 1 sibling, 0 replies; 181+ messages in thread From: Eli Zaretskii @ 2019-10-08 13:58 UTC (permalink / raw) To: spacibba; +Cc: michael_heerdegen, emacs-devel, juri > Date: Tue, 08 Oct 2019 12:18:01 +0300 > From: Eli Zaretskii <eliz@gnu.org> > Cc: michael_heerdegen@web.de, juri@linkov.net, emacs-devel@gnu.org > > > Date: Tue, 8 Oct 2019 10:56:04 +0200 > > From: Ergus <spacibba@aol.com> > > Cc: michael_heerdegen@web.de, emacs-devel@gnu.org, juri@linkov.net > > > > The segfault actually disappeared today after your fix... Not sure why > > on yesterday it was still there... > > That's what I thought yesterday. But today I see it with my fix, so I > think it's some kind of Heisenbug related to memory allocation > problems. Expect it to come back. I will look more into it. I hope I fixed this tricky bug now. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-08 9:18 ` Tabs Eli Zaretskii 2019-10-08 13:58 ` Tabs Eli Zaretskii @ 2019-10-08 16:00 ` Ergus 2019-10-08 16:18 ` Tabs Eli Zaretskii 1 sibling, 1 reply; 181+ messages in thread From: Ergus @ 2019-10-08 16:00 UTC (permalink / raw) To: Eli Zaretskii; +Cc: michael_heerdegen, emacs-devel, juri On Tue, Oct 08, 2019 at 12:18:01PM +0300, Eli Zaretskii wrote: >> Date: Tue, 8 Oct 2019 10:56:04 +0200 >> From: Ergus <spacibba@aol.com> >> Cc: michael_heerdegen@web.de, emacs-devel@gnu.org, juri@linkov.net >> >> The segfault actually disappeared today after your fix... Not sure why >> on yesterday it was still there... > >That's what I thought yesterday. But today I see it with my fix, so I >think it's some kind of Heisenbug related to memory allocation >problems. Expect it to come back. I will look more into it. > >> But the issue of not having the tabs in gui is still there. The tabs are >> only visible when I type M-x and the minibuffer is active and they are >> incomplete and look weird (with wrong information actually). (Picture >> attached) >> >> When no minibuffer is active I get no tabs at all. I am moving back in >> history and the issue seems to be there since ever. (I just haven't try >> gui before) > >Please show an exact recipe starting from "emacs -Q". emacs -Q C-x 6 f file RET The file is opened but it not visible tabs. C-TAB switches between scratch and file as expected, but no visible tabs. M-x Enables the minibuffer and makes the tab-bar visible as in the picture. With a hole in the beginning. The visible tab content is actually the one not actually active I think... but randomly after a while it becomes visible. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-08 16:00 ` Tabs Ergus @ 2019-10-08 16:18 ` Eli Zaretskii 2019-10-08 16:40 ` Tabs Ergus 0 siblings, 1 reply; 181+ messages in thread From: Eli Zaretskii @ 2019-10-08 16:18 UTC (permalink / raw) To: Ergus; +Cc: michael_heerdegen, juri, emacs-devel > Date: Tue, 8 Oct 2019 18:00:38 +0200 > From: Ergus <spacibba@aol.com> > Cc: michael_heerdegen@web.de, emacs-devel@gnu.org, juri@linkov.net > > >Please show an exact recipe starting from "emacs -Q". > > > emacs -Q > > C-x 6 f file RET > > The file is opened but it not visible tabs. If you run this under GDB with a breakpoint on x_change_tab_bar_height, do you see that function called after you press RET? If so, please show the backtrace from the call. I expect it to be called twice, so please show both backtraces. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-08 16:18 ` Tabs Eli Zaretskii @ 2019-10-08 16:40 ` Ergus 2019-10-08 17:03 ` Tabs Eli Zaretskii 0 siblings, 1 reply; 181+ messages in thread From: Ergus @ 2019-10-08 16:40 UTC (permalink / raw) To: Eli Zaretskii; +Cc: michael_heerdegen, juri, emacs-devel [-- Attachment #1: Type: text/plain, Size: 663 bytes --] gdb log attached. Tell me if you need something else: On Tue, Oct 08, 2019 at 07:18:40PM +0300, Eli Zaretskii wrote: >> Date: Tue, 8 Oct 2019 18:00:38 +0200 >> From: Ergus <spacibba@aol.com> >> Cc: michael_heerdegen@web.de, emacs-devel@gnu.org, juri@linkov.net >> >> >Please show an exact recipe starting from "emacs -Q". >> >> >> emacs -Q >> >> C-x 6 f file RET >> >> The file is opened but it not visible tabs. > >If you run this under GDB with a breakpoint on >x_change_tab_bar_height, do you see that function called after you >press RET? If so, please show the backtrace from the call. I expect >it to be called twice, so please show both backtraces. > [-- Attachment #2: gdb.txt --] [-- Type: text/plain, Size: 12895 bytes --] Breakpoint 1 at 0x1c9e9b: file ../../src/xfns.c, line 1634. Starting program: /mnt/almacen/repo/gits/emacs/build/src/emacs -Q [Thread debugging using libthread_db enabled] Using host libthread_db library "/usr/lib/libthread_db.so.1". [New Thread 0x7ffff119a700 (LWP 678317)] [New Thread 0x7fffebf67700 (LWP 678318)] [New Thread 0x7fffeb766700 (LWP 678319)] Thread 1 "emacs" hit Breakpoint 1, x_change_tab_bar_height (f=0x5555560da410, height=0) at ../../src/xfns.c:1634 1634 int unit = FRAME_LINE_HEIGHT (f); #0 0x000055555571de9b in x_change_tab_bar_height (f=0x5555560da410, height=0) at ../../src/xfns.c:1634 #1 0x000055555571de84 in x_set_tab_bar_lines (f=0x5555560da410, value=0x2, oldval=0x0) at ../../src/xfns.c:1626 #2 0x00005555555b8262 in gui_set_frame_parameters (f=0x5555560da410, alist=0x0) at ../../src/frame.c:4106 #3 0x00005555555bbe25 in gui_default_parameter (f=0x5555560da410, alist=0x555555fca783, prop=0xcd50, deflt=0x2, xprop=0x0, xclass=0x0, type=RES_TYPE_NUMBER) at ../../src/frame.c:5276 #4 0x0000555555722f66 in Fx_create_frame (parms=0x555555fca783) at ../../src/xfns.c:4013 #5 0x000055555589ab85 in funcall_subr (subr=0x555555eddd20 <Sx_create_frame>, numargs=1, args=0x7fffffffa618) at ../../src/eval.c:2867 #6 0x000055555589a744 in Ffuncall (nargs=2, args=0x7fffffffa610) at ../../src/eval.c:2794 #7 0x0000555555908f9c in exec_byte_code (bytestr=0x7ffff1a910ec, vector=0x7ffff1a8fee5, maxdepth=0x36, args_template=0x402, nargs=1, args=0x7fffffffab30) at ../../src/bytecode.c:633 #8 0x000055555589b24b in funcall_lambda (fun=0x7ffff1a8feb5, nargs=1, arg_vector=0x7fffffffab28) at ../../src/eval.c:2989 #9 0x000055555589a788 in Ffuncall (nargs=2, args=0x7fffffffab20) at ../../src/eval.c:2796 #10 0x0000555555908f9c in exec_byte_code (bytestr=0x7ffff1a9112c, vector=0x7ffff1a8fe75, maxdepth=0xe, args_template=0x406, nargs=1, args=0x7fffffffb150) at ../../src/bytecode.c:633 #11 0x000055555589b24b in funcall_lambda (fun=0x7ffff1a8fe25, nargs=1, arg_vector=0x7fffffffb148) at ../../src/eval.c:2989 #12 0x000055555589a788 in Ffuncall (nargs=2, args=0x7fffffffb140) at ../../src/eval.c:2796 #13 0x0000555555899656 in Fapply (nargs=2, args=0x7fffffffb140) at ../../src/eval.c:2381 #14 0x000055555589aa90 in funcall_subr (subr=0x555555ee68e0 <Sapply>, numargs=2, args=0x7fffffffb140) at ../../src/eval.c:2847 #15 0x000055555589a744 in Ffuncall (nargs=3, args=0x7fffffffb138) at ../../src/eval.c:2794 #16 0x0000555555908f9c in exec_byte_code (bytestr=0x7ffff190cf54, vector=0x7ffff1a8cc3d, maxdepth=0x3e, args_template=0x202, nargs=1, args=0x7fffffffb678) at ../../src/bytecode.c:633 #17 0x000055555589b24b in funcall_lambda (fun=0x7ffff1a8cc0d, nargs=1, arg_vector=0x7fffffffb678) at ../../src/eval.c:2989 #18 0x000055555589a788 in Ffuncall (nargs=2, args=0x7fffffffb670) at ../../src/eval.c:2796 #19 0x0000555555908f9c in exec_byte_code (bytestr=0x7ffff1aa065c, vector=0x7ffff188702d, maxdepth=0x3a, args_template=0x402, nargs=1, args=0x7fffffffbc58) at ../../src/bytecode.c:633 #20 0x000055555589b24b in funcall_lambda (fun=0x7ffff1886ff5, nargs=1, arg_vector=0x7fffffffbc50) at ../../src/eval.c:2989 #21 0x000055555589a788 in Ffuncall (nargs=2, args=0x7fffffffbc48) at ../../src/eval.c:2796 #22 0x0000555555908f9c in exec_byte_code (bytestr=0x7ffff1c5b12c, vector=0x7ffff1c5b085, maxdepth=0x1a, args_template=0x2, nargs=0, args=0x7fffffffc140) at ../../src/bytecode.c:633 #23 0x000055555589b24b in funcall_lambda (fun=0x7ffff1c5b055, nargs=0, arg_vector=0x7fffffffc140) at ../../src/eval.c:2989 #24 0x000055555589a788 in Ffuncall (nargs=1, args=0x7fffffffc138) at ../../src/eval.c:2796 #25 0x0000555555908f9c in exec_byte_code (bytestr=0x7ffff1c611e4, vector=0x7ffff1c5d20d, maxdepth=0x3a, args_template=0x2, nargs=0, args=0x7fffffffcc88) at ../../src/bytecode.c:633 #26 0x000055555589b24b in funcall_lambda (fun=0x7ffff1c5d1dd, nargs=0, arg_vector=0x7fffffffcc88) at ../../src/eval.c:2989 #27 0x000055555589a788 in Ffuncall (nargs=1, args=0x7fffffffcc80) at ../../src/eval.c:2796 #28 0x0000555555908f9c in exec_byte_code (bytestr=0x7ffff1c61eac, vector=0x7ffff1c613b5, maxdepth=0x32, args_template=0x2, nargs=0, args=0x7fffffffd2c0) at ../../src/bytecode.c:633 #29 0x000055555589b24b in funcall_lambda (fun=0x7ffff1c61385, nargs=0, arg_vector=0x7fffffffd2c0) at ../../src/eval.c:2989 #30 0x000055555589af73 in apply_lambda (fun=0x7ffff1c61385, args=0x0, count=4) at ../../src/eval.c:2926 #31 0x000055555589929f in eval_sub (form=0x7ffff1db931b) at ../../src/eval.c:2318 #32 0x00005555558986d7 in Feval (form=0x7ffff1db931b, lexical=0x0) at ../../src/eval.c:2102 #33 0x0000555555772871 in top_level_2 () at ../../src/keyboard.c:1100 #34 0x0000555555896dd5 in internal_condition_case (bfun=0x55555577284e <top_level_2>, handlers=0x90, hfun=0x5555557722d3 <cmd_error>) at ../../src/eval.c:1355 #35 0x00005555557728b9 in top_level_1 (ignore=0x0) at ../../src/keyboard.c:1108 #36 0x0000555555896646 in internal_catch (tag=0xd470, func=0x555555772873 <top_level_1>, arg=0x0) at ../../src/eval.c:1116 #37 0x000055555577279a in command_loop () at ../../src/keyboard.c:1069 #38 0x0000555555771ea2 in recursive_edit_1 () at ../../src/keyboard.c:714 #39 0x0000555555772026 in Frecursive_edit () at ../../src/keyboard.c:786 #40 0x000055555576a491 in main (argc=2, argv=0x7fffffffd818) at ../../src/emacs.c:2055 Continuing. [New Thread 0x7fffea8b2700 (LWP 678548)] [Detaching after vfork from child process 678798] [Detaching after vfork from child process 678799] [Detaching after vfork from child process 678800] [Detaching after vfork from child process 678801] # Here Opens the window # and type C-x 6 f file RET Thread 1 "emacs" hit Breakpoint 1, x_change_tab_bar_height (f=0x5555560da410, height=18) at ../../src/xfns.c:1634 1634 int unit = FRAME_LINE_HEIGHT (f); #0 0x000055555571de9b in x_change_tab_bar_height (f=0x5555560da410, height=18) at ../../src/xfns.c:1634 #1 0x000055555571de84 in x_set_tab_bar_lines (f=0x5555560da410, value=0x6, oldval=0x2) at ../../src/xfns.c:1626 #2 0x00005555555b8262 in gui_set_frame_parameters (f=0x5555560da410, alist=0x0) at ../../src/frame.c:4106 #3 0x00005555555b6542 in Fmodify_frame_parameters (frame=0x5555560da415, alist=0x555556011fb3) at ../../src/frame.c:3324 #4 0x000055555589abaf in funcall_subr (subr=0x555555ed90a0 <Smodify_frame_parameters>, numargs=2, args=0x7fffffffafc8) at ../../src/eval.c:2869 #5 0x000055555589a744 in Ffuncall (nargs=3, args=0x7fffffffafc0) at ../../src/eval.c:2794 #6 0x0000555555908f9c in exec_byte_code (bytestr=0x7ffff1837134, vector=0x7ffff18370d5, maxdepth=0x1e, args_template=0xc0e, nargs=3, args=0x7fffffffb490) at ../../src/bytecode.c:633 #7 0x000055555589b24b in funcall_lambda (fun=0x7ffff18370a5, nargs=3, arg_vector=0x7fffffffb478) at ../../src/eval.c:2989 #8 0x000055555589a788 in Ffuncall (nargs=4, args=0x7fffffffb470) at ../../src/eval.c:2796 #9 0x0000555555908f9c in exec_byte_code (bytestr=0x7ffff1aba184, vector=0x7ffff183b2d5, maxdepth=0x2a, args_template=0x402, nargs=1, args=0x7fffffffb9b0) at ../../src/bytecode.c:633 #10 0x000055555589b24b in funcall_lambda (fun=0x7ffff183b29d, nargs=1, arg_vector=0x7fffffffb9a8) at ../../src/eval.c:2989 #11 0x000055555589a788 in Ffuncall (nargs=2, args=0x7fffffffb9a0) at ../../src/eval.c:2796 #12 0x0000555555908f9c in exec_byte_code (bytestr=0x7ffff1a7910c, vector=0x7ffff1a7895d, maxdepth=0x2e, args_template=0x2, nargs=0, args=0x7fffffffbf50) at ../../src/bytecode.c:633 #13 0x000055555589b24b in funcall_lambda (fun=0x7ffff1a78925, nargs=0, arg_vector=0x7fffffffbf50) at ../../src/eval.c:2989 #14 0x000055555589a788 in Ffuncall (nargs=1, args=0x7fffffffbf48) at ../../src/eval.c:2796 #15 0x0000555555908f9c in exec_byte_code (bytestr=0x7ffff1abdfd4, vector=0x7ffff1abdfa5, maxdepth=0x16, args_template=0x806, nargs=1, args=0x7fffffffc400) at ../../src/bytecode.c:633 #16 0x000055555589b24b in funcall_lambda (fun=0x7ffff1abdf05, nargs=1, arg_vector=0x7fffffffc3f8) at ../../src/eval.c:2989 #17 0x000055555589a788 in Ffuncall (nargs=2, args=0x7fffffffc3f0) at ../../src/eval.c:2796 #18 0x0000555555908f9c in exec_byte_code (bytestr=0x7ffff1a4f89c, vector=0x7ffff1abe17d, maxdepth=0x1e, args_template=0x806, nargs=2, args=0x7fffffffc9f0) at ../../src/bytecode.c:633 #19 0x000055555589b24b in funcall_lambda (fun=0x7ffff1abe0d5, nargs=2, arg_vector=0x7fffffffc9e0) at ../../src/eval.c:2989 #20 0x000055555589a788 in Ffuncall (nargs=3, args=0x7fffffffc9d8) at ../../src/eval.c:2796 #21 0x000055555588d20c in Ffuncall_interactively (nargs=3, args=0x7fffffffc9d8) at ../../src/callint.c:254 #22 0x000055555589aa90 in funcall_subr (subr=0x555555ee60e0 <Sfuncall_interactively>, numargs=3, args=0x7fffffffc9d8) at ../../src/eval.c:2847 #23 0x000055555589a744 in Ffuncall (nargs=4, args=0x7fffffffc9d0) at ../../src/eval.c:2794 #24 0x00005555558999b7 in Fapply (nargs=3, args=0x7fffffffcc50) at ../../src/eval.c:2424 #25 0x000055555588d5b6 in Fcall_interactively (function=0x2aaa9bb73ca0, record_flag=0x0, keys=0x7ffff1db9425) at ../../src/callint.c:342 #26 0x000055555589abe5 in funcall_subr (subr=0x555555ee6120 <Scall_interactively>, numargs=3, args=0x7fffffffce00) at ../../src/eval.c:2872 #27 0x000055555589a744 in Ffuncall (nargs=4, args=0x7fffffffcdf8) at ../../src/eval.c:2794 #28 0x0000555555908f9c in exec_byte_code (bytestr=0x7ffff195d8cc, vector=0x7ffff195d45d, maxdepth=0x36, args_template=0x1006, nargs=1, args=0x7fffffffd340) at ../../src/bytecode.c:633 #29 0x000055555589b24b in funcall_lambda (fun=0x7ffff195d42d, nargs=1, arg_vector=0x7fffffffd338) at ../../src/eval.c:2989 #30 0x000055555589a788 in Ffuncall (nargs=2, args=0x7fffffffd330) at ../../src/eval.c:2796 #31 0x0000555555899fdf in call1 (fn=0x4320, arg1=0x2aaa9bb73ca0) at ../../src/eval.c:2654 #32 0x000055555577338c in command_loop_1 () at ../../src/keyboard.c:1458 #33 0x0000555555896dd5 in internal_condition_case (bfun=0x555555772b60 <command_loop_1>, handlers=0x90, hfun=0x5555557722d3 <cmd_error>) at ../../src/eval.c:1355 #34 0x0000555555772825 in command_loop_2 (ignore=0x0) at ../../src/keyboard.c:1091 #35 0x0000555555896646 in internal_catch (tag=0xd470, func=0x5555557727f8 <command_loop_2>, arg=0x0) at ../../src/eval.c:1116 #36 0x00005555557727c3 in command_loop () at ../../src/keyboard.c:1070 #37 0x0000555555771ea2 in recursive_edit_1 () at ../../src/keyboard.c:714 #38 0x0000555555772026 in Frecursive_edit () at ../../src/keyboard.c:786 #39 0x000055555576a491 in main (argc=2, argv=0x7fffffffd818) at ../../src/emacs.c:2055 Continuing. Thread 1 "emacs" hit Breakpoint 1, x_change_tab_bar_height (f=0x5555560da410, height=21) at ../../src/xfns.c:1634 1634 int unit = FRAME_LINE_HEIGHT (f); #0 0x000055555571de9b in x_change_tab_bar_height (f=0x5555560da410, height=21) at ../../src/xfns.c:1634 #1 0x00005555555f009a in redisplay_tab_bar (f=0x5555560da410) at ../../src/xdisp.c:13061 #2 0x00005555555ff187 in redisplay_window (window=0x5555562b8ba5, just_this_one_p=false) at ../../src/xdisp.c:18879 #3 0x00005555555f555a in redisplay_window_0 (window=0x5555562b8ba5) at ../../src/xdisp.c:16148 #4 0x0000555555896e7c in internal_condition_case_1 (bfun=0x5555555f5518 <redisplay_window_0>, arg=0x5555562b8ba5, handlers=0x7ffff1aeb853, hfun=0x5555555f54e0 <redisplay_window_error>) at ../../src/eval.c:1379 #5 0x00005555555f54b6 in redisplay_windows (window=0x5555562b8ba5) at ../../src/xdisp.c:16128 #6 0x00005555555f433f in redisplay_internal () at ../../src/xdisp.c:15598 #7 0x00005555555f2564 in redisplay () at ../../src/xdisp.c:14825 #8 0x0000555555775f59 in read_char (commandflag=1, map=0x555556010983, prev_event=0x0, used_mouse_menu=0x7fffffffd171, end_time=0x0) at ../../src/keyboard.c:2473 #9 0x00005555557858ba in read_key_sequence (keybuf=0x7fffffffd3a0, prompt=0x0, dont_downcase_last=false, can_return_switch_frame=true, fix_current_buffer=true, prevent_redisplay=false) at ../../src/keyboard.c:9527 #10 0x0000555555772fa8 in command_loop_1 () at ../../src/keyboard.c:1345 #11 0x0000555555896dd5 in internal_condition_case (bfun=0x555555772b60 <command_loop_1>, handlers=0x90, hfun=0x5555557722d3 <cmd_error>) at ../../src/eval.c:1355 #12 0x0000555555772825 in command_loop_2 (ignore=0x0) at ../../src/keyboard.c:1091 #13 0x0000555555896646 in internal_catch (tag=0xd470, func=0x5555557727f8 <command_loop_2>, arg=0x0) at ../../src/eval.c:1116 #14 0x00005555557727c3 in command_loop () at ../../src/keyboard.c:1070 #15 0x0000555555771ea2 in recursive_edit_1 () at ../../src/keyboard.c:714 #16 0x0000555555772026 in Frecursive_edit () at ../../src/keyboard.c:786 #17 0x000055555576a491 in main (argc=2, argv=0x7fffffffd818) at ../../src/emacs.c:2055 Continuing. [Thread 0x7fffea8b2700 (LWP 678548) exited] [Thread 0x7fffebf67700 (LWP 678318) exited] [Thread 0x7ffff119a700 (LWP 678317) exited] [Thread 0x7ffff2106e40 (LWP 678307) exited] [Inferior 1 (process 678307) exited normally] ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-08 16:40 ` Tabs Ergus @ 2019-10-08 17:03 ` Eli Zaretskii 2019-10-08 23:43 ` Tabs Ergus 0 siblings, 1 reply; 181+ messages in thread From: Eli Zaretskii @ 2019-10-08 17:03 UTC (permalink / raw) To: Ergus; +Cc: michael_heerdegen, emacs-devel, juri > Date: Tue, 8 Oct 2019 18:40:48 +0200 > From: Ergus <spacibba@aol.com> > Cc: michael_heerdegen@web.de, juri@linkov.net, emacs-devel@gnu.org > > > [1:text/plain Hide] > > gdb log attached. Tell me if you need something else: Thanks. If you run the recipe with breakpoint on this line of xdisp.c: if (FRAME_GARBAGED_P (f)) { fset_redisplay (f); f->garbaged = false; <<<<<<<<<<<<<<<<<<<< goto retry_frame; } (if your repository is up to date and you are on the master branch, this should be line 15690), does the breakpoint fire after you type the "C-x 6 f FILENAME RET" command? ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-08 17:03 ` Tabs Eli Zaretskii @ 2019-10-08 23:43 ` Ergus 2019-10-09 8:37 ` Tabs Eli Zaretskii 0 siblings, 1 reply; 181+ messages in thread From: Ergus @ 2019-10-08 23:43 UTC (permalink / raw) To: Eli Zaretskii; +Cc: michael_heerdegen, juri, emacs-devel [-- Attachment #1: Type: text/plain, Size: 1696 bytes --] On Tue, Oct 08, 2019 at 08:03:23PM +0300, Eli Zaretskii wrote: >> Date: Tue, 8 Oct 2019 18:40:48 +0200 >> From: Ergus <spacibba@aol.com> >> Cc: michael_heerdegen@web.de, juri@linkov.net, emacs-devel@gnu.org >> >> >> [1:text/plain Hide] >> >> gdb log attached. Tell me if you need something else: > >Thanks. If you run the recipe with breakpoint on this line of >xdisp.c: > > if (FRAME_GARBAGED_P (f)) > { > fset_redisplay (f); > f->garbaged = false; <<<<<<<<<<<<<<<<<<<< > goto retry_frame; > } > >(if your repository is up to date and you are on the master branch, >this should be line 15690), does the breakpoint fire after you type >the "C-x 6 f FILENAME RET" command? No actually. I only get some messages: (gdb) run Starting program: /mnt/almacen/repo/gits/emacs/build/src/emacs -Q [Thread debugging using libthread_db enabled] Using host libthread_db library "/usr/lib/libthread_db.so.1". [New Thread 0x7ffff119e700 (LWP 20903)] [New Thread 0x7fffebf6b700 (LWP 20904)] [New Thread 0x7fffeb76a700 (LWP 20905)] [New Thread 0x7fffea8b6700 (LWP 20917)] [Detaching after vfork from child process 21286] [Detaching after vfork from child process 21287] [Detaching after vfork from child process 21288] [Detaching after vfork from child process 21289] But nothing else; the breakpoint is not reached. Something else I observe is that when I leave the desktop and return back; the tab-bar is visible, but with the cursor there. When I move the cursor horizontally, the tabs image is substituted with the text that is supposed to be in the first visible line that is supposed to be bellow the tab-bar (attached image with the config.log open.) [-- Attachment #2: Screenshot_2019-10-09_01-37-46.png --] [-- Type: image/png, Size: 43740 bytes --] ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-08 23:43 ` Tabs Ergus @ 2019-10-09 8:37 ` Eli Zaretskii 2019-10-09 10:39 ` Tabs Ergus 0 siblings, 1 reply; 181+ messages in thread From: Eli Zaretskii @ 2019-10-09 8:37 UTC (permalink / raw) To: Ergus; +Cc: michael_heerdegen, emacs-devel, juri > Date: Wed, 9 Oct 2019 01:43:50 +0200 > From: Ergus <spacibba@aol.com> > Cc: michael_heerdegen@web.de, juri@linkov.net, emacs-devel@gnu.org > > > if (FRAME_GARBAGED_P (f)) > > { > > fset_redisplay (f); > > f->garbaged = false; <<<<<<<<<<<<<<<<<<<< > > goto retry_frame; > > } > > > >(if your repository is up to date and you are on the master branch, > >this should be line 15690), does the breakpoint fire after you type > >the "C-x 6 f FILENAME RET" command? > > No actually. I only get some messages: > But nothing else; the breakpoint is not reached. OK, so this is not due to the recent change which introduced the above code. In your original message you wrote: > This used to work fine before... I just pull and recompiled (since > saturday)... Can you tell what was the latest date when this problem in GUI frames didn't exist in your builds? > Something else I observe is that when I leave the desktop and return > back; the tab-bar is visible, but with the cursor there. When I move the > cursor horizontally, the tabs image is substituted with the text that is > supposed to be in the first visible line that is supposed to be bellow > the tab-bar (attached image with the config.log open.) Yes, these and other symptoms you described all tell one thing: that some redisplay optimization is taken that shouldn't be used in this case. IOW, Emacs optimizes redisplay ignoring the fact that there is now a tab bar, which usurps portions of display that previously belonged to some window. I just don't yet understand why this happens, because the call to SET_FRAME_GARBAGED in x_change_tab_bar_height should have had the effect of disabling all the redisplay optimizations for this frame... Does the change below fix this problem, per chance? diff --git a/src/xfns.c b/src/xfns.c index 20e63a2..f2264be 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -1660,6 +1660,8 @@ x_change_tab_bar_height (struct frame *f, int height) if ((height < old_height) && WINDOWP (f->tab_bar_window)) clear_glyph_matrix (XWINDOW (f->tab_bar_window)->current_matrix); + else if (height > old_height) + clear_current_matrices (f); /* Recalculate tabbar height. */ f->n_tab_bar_rows = 0; ^ permalink raw reply related [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-09 8:37 ` Tabs Eli Zaretskii @ 2019-10-09 10:39 ` Ergus 2019-10-09 11:35 ` Tabs Eli Zaretskii 0 siblings, 1 reply; 181+ messages in thread From: Ergus @ 2019-10-09 10:39 UTC (permalink / raw) To: Eli Zaretskii; +Cc: michael_heerdegen, juri, emacs-devel Hi: On Wed, Oct 09, 2019 at 11:37:09AM +0300, Eli Zaretskii wrote: >> Date: Wed, 9 Oct 2019 01:43:50 +0200 >> From: Ergus <spacibba@aol.com> >> Cc: michael_heerdegen@web.de, juri@linkov.net, emacs-devel@gnu.org >> >> > if (FRAME_GARBAGED_P (f)) >> > { >> > fset_redisplay (f); >> > f->garbaged = false; <<<<<<<<<<<<<<<<<<<< >> > goto retry_frame; >> > } >> > >> >(if your repository is up to date and you are on the master branch, >> >this should be line 15690), does the breakpoint fire after you type >> >the "C-x 6 f FILENAME RET" command? >> >> No actually. I only get some messages: >> But nothing else; the breakpoint is not reached. > >OK, so this is not due to the recent change which introduced the above >code. > >In your original message you wrote: > >> This used to work fine before... I just pull and recompiled (since >> saturday)... > >Can you tell what was the latest date when this problem in GUI frames >didn't exist in your builds? > >> Something else I observe is that when I leave the desktop and return >> back; the tab-bar is visible, but with the cursor there. When I move the >> cursor horizontally, the tabs image is substituted with the text that is >> supposed to be in the first visible line that is supposed to be bellow >> the tab-bar (attached image with the config.log open.) > >Yes, these and other symptoms you described all tell one thing: that >some redisplay optimization is taken that shouldn't be used in this >case. IOW, Emacs optimizes redisplay ignoring the fact that there is >now a tab bar, which usurps portions of display that previously >belonged to some window. I just don't yet understand why this >happens, because the call to SET_FRAME_GARBAGED in >x_change_tab_bar_height should have had the effect of disabling all >the redisplay optimizations for this frame... > >Does the change below fix this problem, per chance? > >diff --git a/src/xfns.c b/src/xfns.c >index 20e63a2..f2264be 100644 >--- a/src/xfns.c >+++ b/src/xfns.c >@@ -1660,6 +1660,8 @@ x_change_tab_bar_height (struct frame *f, int height) > > if ((height < old_height) && WINDOWP (f->tab_bar_window)) > clear_glyph_matrix (XWINDOW (f->tab_bar_window)->current_matrix); >+ else if (height > old_height) >+ clear_current_matrices (f); > > /* Recalculate tabbar height. */ > f->n_tab_bar_rows = 0; It solved partially the problem, which is good. 1) The tabs does not become visible automatically after C-x 6 f, and C-TAB works as yesterday. 2) But when I leave the desk and return they become visible but this time they are clickable. (unlike yesterday) They does not have a cursor as before and the first line is after the tab-bar as they should. So it seems that the problem is related with this. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-09 10:39 ` Tabs Ergus @ 2019-10-09 11:35 ` Eli Zaretskii 2019-10-09 12:05 ` Tabs Ergus 0 siblings, 1 reply; 181+ messages in thread From: Eli Zaretskii @ 2019-10-09 11:35 UTC (permalink / raw) To: Ergus; +Cc: michael_heerdegen, emacs-devel, juri > Date: Wed, 9 Oct 2019 12:39:36 +0200 > From: Ergus <spacibba@aol.com> > Cc: michael_heerdegen@web.de, juri@linkov.net, emacs-devel@gnu.org > > >Does the change below fix this problem, per chance? > > > >diff --git a/src/xfns.c b/src/xfns.c > >index 20e63a2..f2264be 100644 > >--- a/src/xfns.c > >+++ b/src/xfns.c > >@@ -1660,6 +1660,8 @@ x_change_tab_bar_height (struct frame *f, int height) > > > > if ((height < old_height) && WINDOWP (f->tab_bar_window)) > > clear_glyph_matrix (XWINDOW (f->tab_bar_window)->current_matrix); > >+ else if (height > old_height) > >+ clear_current_matrices (f); > > > > /* Recalculate tabbar height. */ > > f->n_tab_bar_rows = 0; > > It solved partially the problem, which is good. > > 1) The tabs does not become visible automatically after C-x 6 f, and > C-TAB works as yesterday. > > 2) But when I leave the desk and return they become visible but this > time they are clickable. (unlike yesterday) What about the change below? If it still doesn't work, can you try disabling double-buffering? diff --git a/src/xdisp.c b/src/xdisp.c index 893ce92..f94f651 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -11796,7 +11796,7 @@ clear_garbaged_frames (void) if (FRAME_VISIBLE_P (f) && FRAME_GARBAGED_P (f)) { - if (f->resized_p + if ((f->resized_p || f->tab_bar_resized) /* It makes no sense to redraw a non-selected TTY frame, since that will actually clear the selected frame, and might leave the selected ^ permalink raw reply related [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-09 11:35 ` Tabs Eli Zaretskii @ 2019-10-09 12:05 ` Ergus 2019-10-09 12:18 ` Tabs Eli Zaretskii ` (2 more replies) 0 siblings, 3 replies; 181+ messages in thread From: Ergus @ 2019-10-09 12:05 UTC (permalink / raw) To: Eli Zaretskii; +Cc: michael_heerdegen, juri, emacs-devel On Wed, Oct 09, 2019 at 02:35:41PM +0300, Eli Zaretskii wrote: >> Date: Wed, 9 Oct 2019 12:39:36 +0200 >> From: Ergus <spacibba@aol.com> >> Cc: michael_heerdegen@web.de, juri@linkov.net, emacs-devel@gnu.org >> >> >Does the change below fix this problem, per chance? >> > >> >diff --git a/src/xfns.c b/src/xfns.c >> >index 20e63a2..f2264be 100644 >> >--- a/src/xfns.c >> >+++ b/src/xfns.c >> >@@ -1660,6 +1660,8 @@ x_change_tab_bar_height (struct frame *f, int height) >> > >> > if ((height < old_height) && WINDOWP (f->tab_bar_window)) >> > clear_glyph_matrix (XWINDOW (f->tab_bar_window)->current_matrix); >> >+ else if (height > old_height) >> >+ clear_current_matrices (f); >> > >> > /* Recalculate tabbar height. */ >> > f->n_tab_bar_rows = 0; >> >> It solved partially the problem, which is good. >> >> 1) The tabs does not become visible automatically after C-x 6 f, and >> C-TAB works as yesterday. >> >> 2) But when I leave the desk and return they become visible but this >> time they are clickable. (unlike yesterday) > >What about the change below? > >If it still doesn't work, can you try disabling double-buffering? > How? >diff --git a/src/xdisp.c b/src/xdisp.c >index 893ce92..f94f651 100644 >--- a/src/xdisp.c >+++ b/src/xdisp.c >@@ -11796,7 +11796,7 @@ clear_garbaged_frames (void) > > if (FRAME_VISIBLE_P (f) && FRAME_GARBAGED_P (f)) > { >- if (f->resized_p >+ if ((f->resized_p || f->tab_bar_resized) > /* It makes no sense to redraw a non-selected TTY > frame, since that will actually clear the > selected frame, and might leave the selected No, this does nothing, actually after trying it a little bit more the other change the behavior is the same most of the cases. So, the previous change didn't fix/change anything :(. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-09 12:05 ` Tabs Ergus @ 2019-10-09 12:18 ` Eli Zaretskii 2019-10-09 12:32 ` Tabs Eli Zaretskii 2019-10-09 12:36 ` Tabs Eli Zaretskii 2 siblings, 0 replies; 181+ messages in thread From: Eli Zaretskii @ 2019-10-09 12:18 UTC (permalink / raw) To: Ergus; +Cc: michael_heerdegen, emacs-devel, juri > Date: Wed, 9 Oct 2019 14:05:34 +0200 > From: Ergus <spacibba@aol.com> > Cc: michael_heerdegen@web.de, juri@linkov.net, emacs-devel@gnu.org > > >If it still doesn't work, can you try disabling double-buffering? > > > How? Evaluate this (before invoking "C-x 6 f"): (modify-frame-parameters nil '((inhibit-double-buffering . t))) ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-09 12:05 ` Tabs Ergus 2019-10-09 12:18 ` Tabs Eli Zaretskii @ 2019-10-09 12:32 ` Eli Zaretskii 2019-10-09 18:12 ` Tabs martin rudalics 2019-10-09 12:36 ` Tabs Eli Zaretskii 2 siblings, 1 reply; 181+ messages in thread From: Eli Zaretskii @ 2019-10-09 12:32 UTC (permalink / raw) To: martin rudalics; +Cc: Ergus, emacs-devel, juri Martin, can you please explain the rationale behind this code in x_change_tool_bar_height (and similar code in the w32 variant)? /* Recalculate toolbar height. */ f->n_tool_bar_rows = 0; if (old_height == 0 && (!f->after_make_frame || NILP (frame_inhibit_implied_resize) || (CONSP (frame_inhibit_implied_resize) && NILP (Fmemq (Qtool_bar_lines, frame_inhibit_implied_resize))))) f->tool_bar_redisplayed = f->tool_bar_resized = false; adjust_frame_size (f, -1, -1, ((!f->tool_bar_resized && (NILP (fullscreen = get_frame_param (f, Qfullscreen)) || EQ (fullscreen, Qfullwidth))) ? 1 : (old_height == 0 || height == 0) ? 2 : 4), false, Qtool_bar_lines); f->tool_bar_resized = f->tool_bar_redisplayed; Here are the questions that I couldn't answer myself: . why the tool_bar_resized flag is reset when frame-inhibit-implied-resize is nil, i.e. implied resizing is _NOT_ inhibited? shouldn't it be the other way around? . the above resets the tool_bar_redisplayed flag, then uses it after the call to adjust_frame_size; but nothing in that call can ever change the value of the tool_bar_redisplayed flag, so I don't understand what the code tries to accomplish. . which code is supposed to reset the tool_bar_resized flag? AFAICT, once set, it stays set, at least in "emacs -Q". Did I miss something? Same question regarding the tool_bar_redisplayed flag. The real motivation for these questions is the problem with redisplaying the frame when tab-bar is turned on by "C-x 6 f", but since the tab-bar code was simply copied from the tool-bar code, I find myself wondering about the latter, and hope you can show me the light there. TIA ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-09 12:32 ` Tabs Eli Zaretskii @ 2019-10-09 18:12 ` martin rudalics 2019-10-09 18:46 ` Tabs Eli Zaretskii 0 siblings, 1 reply; 181+ messages in thread From: martin rudalics @ 2019-10-09 18:12 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Ergus, emacs-devel, juri > Martin, can you please explain the rationale behind this code in > x_change_tool_bar_height (and similar code in the w32 variant)? It's also in GTK's update_frame_tool_bar. > /* Recalculate toolbar height. */ > f->n_tool_bar_rows = 0; > if (old_height == 0 > && (!f->after_make_frame > || NILP (frame_inhibit_implied_resize) > || (CONSP (frame_inhibit_implied_resize) > && NILP (Fmemq (Qtool_bar_lines, frame_inhibit_implied_resize))))) > f->tool_bar_redisplayed = f->tool_bar_resized = false; > > adjust_frame_size (f, -1, -1, > ((!f->tool_bar_resized > && (NILP (fullscreen = > get_frame_param (f, Qfullscreen)) > || EQ (fullscreen, Qfullwidth))) ? 1 > : (old_height == 0 || height == 0) ? 2 > : 4), > false, Qtool_bar_lines); > > f->tool_bar_resized = f->tool_bar_redisplayed; > > Here are the questions that I couldn't answer myself: > > . why the tool_bar_resized flag is reset when > frame-inhibit-implied-resize is nil, i.e. implied resizing is _NOT_ > inhibited? shouldn't it be the other way around? The original motivation was as follows. A frame needs intially as many text lines as the user wants. On the Lucid, Motif, Windows builds, as an ancient rule, a frame does not get resized when the tool bar is activated or deactivated. However, in the before make frame phase the frame must be resized to get its number of lines. So the idea was that redisplay eventually will set tool_bar_redisplayed after calculating the tool bar height and that value is copied to tool_bar_resized to make sure this frame never gets resized again when the tool bar changes. So these resets should handle only this initial resize operation and no others. In addition we should not resize if 'frame-inhibit-implied-resize' is t, the frame is full height or full screen and the like. > . the above resets the tool_bar_redisplayed flag, ... conditionally, though ... > then uses it after > the call to adjust_frame_size; but nothing in that call can ever > change the value of the tool_bar_redisplayed flag, so I don't > understand what the code tries to accomplish. It's at least badly documented and maybe also badly ordered. The idea is that eventually the tool_bar_redisplayed and the tool_bar_resized flag get both set and in the default case the frame is never resized after that when the number of tool bar lines changes. > . which code is supposed to reset the tool_bar_resized flag? AFAICT, > once set, it stays set, at least in "emacs -Q". Did I miss > something? Same question regarding the tool_bar_redisplayed flag. Once set for a particular frame, these are never reset. The aim was (after a row of complaints) a single one: To give all frames regardless of build and window system the same initial number of text lines regardless of whether tool bars are turned on or off initially. > The real motivation for these questions is the problem with > redisplaying the frame when tab-bar is turned on by "C-x 6 f", but > since the tab-bar code was simply copied from the tool-bar code, I > find myself wondering about the latter, and hope you can show me the > light there. As you mentioned earlier, tab bars are initially off and the tool bar is on. Maybe that's the cause of the problem. martin ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-09 18:12 ` Tabs martin rudalics @ 2019-10-09 18:46 ` Eli Zaretskii 2019-10-10 9:15 ` Tabs martin rudalics 0 siblings, 1 reply; 181+ messages in thread From: Eli Zaretskii @ 2019-10-09 18:46 UTC (permalink / raw) To: martin rudalics; +Cc: spacibba, emacs-devel, juri > Cc: Ergus <spacibba@aol.com>, juri@linkov.net, emacs-devel@gnu.org > From: martin rudalics <rudalics@gmx.at> > Date: Wed, 9 Oct 2019 20:12:44 +0200 > > So the idea was that redisplay eventually will set > tool_bar_redisplayed after calculating the tool bar height and that > value is copied to tool_bar_resized to make sure this frame never gets > resized again when the tool bar changes. So these resets should > handle only this initial resize operation and no others. Ah, so these are one-off flags, and not indications of the resize, i.e. they are not supposed to be sensitive to, say, when a tool bar becomes too large for one line and needs two, is that so? > > The real motivation for these questions is the problem with > > redisplaying the frame when tab-bar is turned on by "C-x 6 f", but > > since the tab-bar code was simply copied from the tool-bar code, I > > find myself wondering about the latter, and hope you can show me the > > light there. > > As you mentioned earlier, tab bars are initially off and the tool bar > is on. Maybe that's the cause of the problem. No, I think the cause of the problem is that we have no equivalent of "C-x 6 f" that turns on the tool bar as a side effect of a command that displays a buffer. But that's a guess, because I've just established with Jimmy's help that even the call to redraw_frame doesn't cause the expected effect. Which completely stumps me, and I need to think about it before I come with more ideas (_if_ I come with more ideas)... ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-09 18:46 ` Tabs Eli Zaretskii @ 2019-10-10 9:15 ` martin rudalics 2019-10-10 9:59 ` Tabs Eli Zaretskii 0 siblings, 1 reply; 181+ messages in thread From: martin rudalics @ 2019-10-10 9:15 UTC (permalink / raw) To: Eli Zaretskii; +Cc: spacibba, juri, emacs-devel > Ah, so these are one-off flags, and not indications of the resize, > i.e. they are not supposed to be sensitive to, say, when a tool bar > becomes too large for one line and needs two, is that so? They are one-off in the following sense: (1) Initially the flags are off. redisplay_tool_bar unconditionally sets f->tool_bar_redisplayed to true every time it runs, so redisplay_tool_bar is, by design, agnostic of the underlying mechanism. (2) The mechanism for exceptionally allowing to change the frame height when a tool bar height shall be established is confined to the change_tool_bar_height functions and their GTK counterpart. There, f->tool_bar_redisplayed is reset if certain conditions are met so any earlier calculation by redisplay_tool_bar is forgotten - don't ask me if such a calculation could have happened in practice, I don't remember. In either case the mechanism is only sharpened here and as we have seen with Bug#37609 its effect may trigger a long time after the initial frame has been made. Maybe we could inhibit it by having any caller(s) of redisplay_tool_bar set f->tool_bar_redisplayed even if they do not call redisplay_tool_bar. But I'm not sure. ISTR that I tried alternative solutions for this but was always surprised at how late in the frame creation phase the tool bar could take on its final, exact size. (3) Once the frame has been made and f->tool_bar_resized is set, the latter is never reset again and it's really one-off in the sense you described. >> As you mentioned earlier, tab bars are initially off and the tool bar >> is on. Maybe that's the cause of the problem. > > No, I think the cause of the problem is that we have no equivalent of > "C-x 6 f" that turns on the tool bar as a side effect of a command > that displays a buffer. I'm missing you here. Do you mean that displaying a tool bar for the first time in an Emacs session on a specific frame when you display a certain buffer on that frame would have a similar dramatic effect? Couldn't you verify that? > But that's a guess, because I've just > established with Jimmy's help that even the call to redraw_frame > doesn't cause the expected effect. Which completely stumps me, and I > need to think about it before I come with more ideas (_if_ I come with > more ideas)... I'm still not entirely sure whether it was a good idea to cargo cult the tab bar code from the tool bar code. Not that I have a substantially better offer. As a matter of fact, we should have provided a good pseudo window mechanism for that. martin ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 9:15 ` Tabs martin rudalics @ 2019-10-10 9:59 ` Eli Zaretskii 2019-10-10 10:38 ` Tabs martin rudalics 0 siblings, 1 reply; 181+ messages in thread From: Eli Zaretskii @ 2019-10-10 9:59 UTC (permalink / raw) To: martin rudalics; +Cc: spacibba, juri, emacs-devel > Cc: spacibba@aol.com, emacs-devel@gnu.org, juri@linkov.net > From: martin rudalics <rudalics@gmx.at> > Date: Thu, 10 Oct 2019 11:15:55 +0200 > > (3) Once the frame has been made and f->tool_bar_resized is set, the > latter is never reset again and it's really one-off in the sense > you described. Thanks. I will update the commentary for these members to reflect your description. > > No, I think the cause of the problem is that we have no equivalent of > > "C-x 6 f" that turns on the tool bar as a side effect of a command > > that displays a buffer. > > I'm missing you here. Do you mean that displaying a tool bar for the > first time in an Emacs session on a specific frame when you display a > certain buffer on that frame would have a similar dramatic effect? That's my current theory, yes. Although I'm nowhere near sure it's correct. > Couldn't you verify that? I don't know how. We don't have the equivalent of "C-x 6 f" that turns on a tool bar that was off before that, do we? > I'm still not entirely sure whether it was a good idea to cargo cult > the tab bar code from the tool bar code. As a first approximation, it wasn't a bad idea. But it needs various adjustments due to the tab-bar specifics (including, but not limited to, tab bar on TTY frames, where there's no "prior art" in tool-bar code), and that's what we are struggling with now. Also, the default GTK build has a tool bar that is displayed entirely unlike the tab bar, and that is another difficulty. Btw... why do we set frame_inhibit_implied_resize to nil in GTK builds? Shouldn't it be (tab-bar-lines) instead? The tab bar in GTK build uses our own window, doesn't it? ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 9:59 ` Tabs Eli Zaretskii @ 2019-10-10 10:38 ` martin rudalics 2019-10-10 11:33 ` Tabs Eli Zaretskii 0 siblings, 1 reply; 181+ messages in thread From: martin rudalics @ 2019-10-10 10:38 UTC (permalink / raw) To: Eli Zaretskii; +Cc: spacibba, juri, emacs-devel > I don't know how. We don't have the equivalent of "C-x 6 f" that > turns on a tool bar that was off before that, do we? Doesn't Juri's recipe from Bug#37609 work? Start with emacs -Q -f tool-bar-mode and use some function that enables 'tool-bar-mode'. > As a first approximation, it wasn't a bad idea. But it needs various > adjustments due to the tab-bar specifics (including, but not limited > to, tab bar on TTY frames, where there's no "prior art" in tool-bar > code), and that's what we are struggling with now. Shouldn't on a TTY the tab bar behave just like the menu bar? > Also, the default > GTK build has a tool bar that is displayed entirely unlike the tab > bar, and that is another difficulty. Which difficulty? I doubt it's the one that GTK auto-widens frames when the tool bar gets too large. > Btw... why do we set frame_inhibit_implied_resize to nil in GTK > builds? Shouldn't it be (tab-bar-lines) instead? Now that you mention it, yes. > The tab bar in GTK > build uses our own window, doesn't it? I've nowhere seen any code that would tell otherwise. martin ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 10:38 ` Tabs martin rudalics @ 2019-10-10 11:33 ` Eli Zaretskii 2019-10-10 11:53 ` Tabs Eli Zaretskii 0 siblings, 1 reply; 181+ messages in thread From: Eli Zaretskii @ 2019-10-10 11:33 UTC (permalink / raw) To: martin rudalics; +Cc: spacibba, juri, emacs-devel > Cc: spacibba@aol.com, emacs-devel@gnu.org, juri@linkov.net > From: martin rudalics <rudalics@gmx.at> > Date: Thu, 10 Oct 2019 12:38:01 +0200 > > > I don't know how. We don't have the equivalent of "C-x 6 f" that > > turns on a tool bar that was off before that, do we? > > Doesn't Juri's recipe from Bug#37609 work? Start with > > emacs -Q -f tool-bar-mode > > and use some function that enables 'tool-bar-mode'. I need a function that will turn on the tool bar from switch-to-buffer-* family of functions, and then cause adjustment of frame glyphs from set-window-buffer, via apply_window_adjustment. If you have a suggestion for how to do this, please tell. > > As a first approximation, it wasn't a bad idea. But it needs various > > adjustments due to the tab-bar specifics (including, but not limited > > to, tab bar on TTY frames, where there's no "prior art" in tool-bar > > code), and that's what we are struggling with now. > > Shouldn't on a TTY the tab bar behave just like the menu bar? Similar, yes. But that a separate code, and it cannot be shared with the menu bar, because the tab bar needs to know on the C level which tab was clicked (the latter is a consequence of the fact that tab bar support was copied from tool bar support code). > > Also, the default > > GTK build has a tool bar that is displayed entirely unlike the tab > > bar, and that is another difficulty. > > Which difficulty? That similar problems with tool bar might go unnoticed because the code is never run. > > Btw... why do we set frame_inhibit_implied_resize to nil in GTK > > builds? Shouldn't it be (tab-bar-lines) instead? > > Now that you mention it, yes. Will do. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 11:33 ` Tabs Eli Zaretskii @ 2019-10-10 11:53 ` Eli Zaretskii 2019-10-10 14:58 ` Tabs martin rudalics 0 siblings, 1 reply; 181+ messages in thread From: Eli Zaretskii @ 2019-10-10 11:53 UTC (permalink / raw) To: rudalics; +Cc: spacibba, emacs-devel, juri > Date: Thu, 10 Oct 2019 14:33:23 +0300 > From: Eli Zaretskii <eliz@gnu.org> > Cc: spacibba@aol.com, juri@linkov.net, emacs-devel@gnu.org > > > > Btw... why do we set frame_inhibit_implied_resize to nil in GTK > > > builds? Shouldn't it be (tab-bar-lines) instead? > > > > Now that you mention it, yes. > > Will do. Done. But this value doesn't affect the initial resize when tool bar or tab bar are enabled for the first time in a session. Right? ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 11:53 ` Tabs Eli Zaretskii @ 2019-10-10 14:58 ` martin rudalics 0 siblings, 0 replies; 181+ messages in thread From: martin rudalics @ 2019-10-10 14:58 UTC (permalink / raw) To: Eli Zaretskii; +Cc: spacibba, emacs-devel, juri > Done. But this value doesn't affect the initial resize when tool bar > or tab bar are enabled for the first time in a session. Right? Right. Conceptually, the initial resize to get the right number of text lines should take place regardless of any settings. The only exclusion are full height and size frames. martin ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-09 12:05 ` Tabs Ergus 2019-10-09 12:18 ` Tabs Eli Zaretskii 2019-10-09 12:32 ` Tabs Eli Zaretskii @ 2019-10-09 12:36 ` Eli Zaretskii 2019-10-09 13:55 ` Tabs Ergus 2 siblings, 1 reply; 181+ messages in thread From: Eli Zaretskii @ 2019-10-09 12:36 UTC (permalink / raw) To: Ergus; +Cc: michael_heerdegen, emacs-devel, juri > Date: Wed, 9 Oct 2019 14:05:34 +0200 > From: Ergus <spacibba@aol.com> > Cc: michael_heerdegen@web.de, juri@linkov.net, emacs-devel@gnu.org > > >diff --git a/src/xdisp.c b/src/xdisp.c > >index 893ce92..f94f651 100644 > >--- a/src/xdisp.c > >+++ b/src/xdisp.c > >@@ -11796,7 +11796,7 @@ clear_garbaged_frames (void) > > > > if (FRAME_VISIBLE_P (f) && FRAME_GARBAGED_P (f)) > > { > >- if (f->resized_p > >+ if ((f->resized_p || f->tab_bar_resized) > > /* It makes no sense to redraw a non-selected TTY > > frame, since that will actually clear the > > selected frame, and might leave the selected > > No, this does nothing If you set a breakpoint in this fragment from clear_garbaged_frames: if (FRAME_VISIBLE_P (f) && FRAME_GARBAGED_P (f)) { if ((f->resized_p || f->tab_bar_resized) /* It makes no sense to redraw a non-selected TTY frame, since that will actually clear the selected frame, and might leave the selected frame with corrupted display, if it happens not to be marked garbaged. */ && !(f != sf && (FRAME_TERMCAP_P (f) || FRAME_MSDOS_P (f)))) redraw_frame (f); <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< else clear_current_matrices (f); does the breakpoint fire after you type "C-x 6 f"? ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-09 12:36 ` Tabs Eli Zaretskii @ 2019-10-09 13:55 ` Ergus 2019-10-09 14:21 ` Tabs Eli Zaretskii 0 siblings, 1 reply; 181+ messages in thread From: Ergus @ 2019-10-09 13:55 UTC (permalink / raw) To: Eli Zaretskii; +Cc: michael_heerdegen, juri, emacs-devel On Wed, Oct 09, 2019 at 03:36:06PM +0300, Eli Zaretskii wrote: >> Date: Wed, 9 Oct 2019 14:05:34 +0200 >> From: Ergus <spacibba@aol.com> >> Cc: michael_heerdegen@web.de, juri@linkov.net, emacs-devel@gnu.org >> >> >diff --git a/src/xdisp.c b/src/xdisp.c >> >index 893ce92..f94f651 100644 >> >--- a/src/xdisp.c >> >+++ b/src/xdisp.c >> >@@ -11796,7 +11796,7 @@ clear_garbaged_frames (void) >> > >> > if (FRAME_VISIBLE_P (f) && FRAME_GARBAGED_P (f)) >> > { >> >- if (f->resized_p >> >+ if ((f->resized_p || f->tab_bar_resized) >> > /* It makes no sense to redraw a non-selected TTY >> > frame, since that will actually clear the >> > selected frame, and might leave the selected >> >> No, this does nothing > >If you set a breakpoint in this fragment from clear_garbaged_frames: > > if (FRAME_VISIBLE_P (f) && FRAME_GARBAGED_P (f)) > { > if ((f->resized_p || f->tab_bar_resized) > /* It makes no sense to redraw a non-selected TTY > frame, since that will actually clear the > selected frame, and might leave the selected > frame with corrupted display, if it happens not > to be marked garbaged. */ > && !(f != sf && (FRAME_TERMCAP_P (f) || FRAME_MSDOS_P (f)))) > redraw_frame (f); <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< > else > clear_current_matrices (f); > >does the breakpoint fire after you type "C-x 6 f"? Yes: Thread 1 "emacs" hit Breakpoint 1, clear_garbaged_frames () at ../../src/xdisp.c:11805 11805 redraw_frame (f); (gdb) bt #0 0x00005555555ed30c in clear_garbaged_frames () at ../../src/xdisp.c:11805 #1 0x00005555555f33c9 in redisplay_internal () at ../../src/xdisp.c:15237 #2 0x00005555555f2564 in redisplay () at ../../src/xdisp.c:14825 #3 0x0000555555775f6f in read_char (commandflag=1, map=0x55555691f1e3, prev_event=0x0, used_mouse_menu=0x7fffffffd171, end_time=0x0) at ../../src/keyboard.c:2473 #4 0x00005555557858d0 in read_key_sequence (keybuf=0x7fffffffd3a0, prompt=0x0, dont_downcase_last=false, can_return_switch_frame=true, fix_current_buffer=true, prevent_redisplay=false) at ../../src/keyboard.c:9527 #5 0x0000555555772fbe in command_loop_1 () at ../../src/keyboard.c:1345 #6 0x0000555555896deb in internal_condition_case (bfun=0x555555772b76 <command_loop_1>, handlers=0x90, hfun=0x5555557722e9 <cmd_error>) at ../../src/eval.c:1355 #7 0x000055555577283b in command_loop_2 (ignore=0x0) at ../../src/keyboard.c:1091 #8 0x000055555589665c in internal_catch (tag=0xd470, func=0x55555577280e <command_loop_2>, arg=0x0) at ../../src/eval.c:1116 #9 0x00005555557727d9 in command_loop () at ../../src/keyboard.c:1070 #10 0x0000555555771eb8 in recursive_edit_1 () at ../../src/keyboard.c:714 #11 0x000055555577203c in Frecursive_edit () at ../../src/keyboard.c:786 #12 0x000055555576a4a7 in main (argc=2, argv=0x7fffffffd818) at ../../src/emacs.c:2055 (gdb) c Continuing. Thread 1 "emacs" hit Breakpoint 1, clear_garbaged_frames () at ../../src/xdisp.c:11805 11805 redraw_frame (f); (gdb) bt #0 0x00005555555ed30c in clear_garbaged_frames () at ../../src/xdisp.c:11805 #1 0x00005555555f33c9 in redisplay_internal () at ../../src/xdisp.c:15237 #2 0x00005555555f2564 in redisplay () at ../../src/xdisp.c:14825 #3 0x0000555555775f6f in read_char (commandflag=1, map=0x55555691f1e3, prev_event=0x0, used_mouse_menu=0x7fffffffd171, end_time=0x0) at ../../src/keyboard.c:2473 #4 0x00005555557858d0 in read_key_sequence (keybuf=0x7fffffffd3a0, prompt=0x0, dont_downcase_last=false, can_return_switch_frame=true, fix_current_buffer=true, prevent_redisplay=false) at ../../src/keyboard.c:9527 #5 0x0000555555772fbe in command_loop_1 () at ../../src/keyboard.c:1345 #6 0x0000555555896deb in internal_condition_case (bfun=0x555555772b76 <command_loop_1>, handlers=0x90, hfun=0x5555557722e9 <cmd_error>) at ../../src/eval.c:1355 #7 0x000055555577283b in command_loop_2 (ignore=0x0) at ../../src/keyboard.c:1091 #8 0x000055555589665c in internal_catch (tag=0xd470, func=0x55555577280e <command_loop_2>, arg=0x0) at ../../src/eval.c:1116 #9 0x00005555557727d9 in command_loop () at ../../src/keyboard.c:1070 #10 0x0000555555771eb8 in recursive_edit_1 () at ../../src/keyboard.c:714 #11 0x000055555577203c in Frecursive_edit () at ../../src/keyboard.c:786 #12 0x000055555576a4a7 in main (argc=2, argv=0x7fffffffd818) at ../../src/emacs.c:2055 (gdb) c Continuing. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-09 13:55 ` Tabs Ergus @ 2019-10-09 14:21 ` Eli Zaretskii 2019-10-09 15:15 ` Tabs Ergus 2019-10-09 22:37 ` Tabs Juri Linkov 0 siblings, 2 replies; 181+ messages in thread From: Eli Zaretskii @ 2019-10-09 14:21 UTC (permalink / raw) To: Ergus, juri; +Cc: michael_heerdegen, emacs-devel > Date: Wed, 9 Oct 2019 15:55:39 +0200 > From: Ergus <spacibba@aol.com> > Cc: michael_heerdegen@web.de, juri@linkov.net, emacs-devel@gnu.org > > >If you set a breakpoint in this fragment from clear_garbaged_frames: > > > > if (FRAME_VISIBLE_P (f) && FRAME_GARBAGED_P (f)) > > { > > if ((f->resized_p || f->tab_bar_resized) > > /* It makes no sense to redraw a non-selected TTY > > frame, since that will actually clear the > > selected frame, and might leave the selected > > frame with corrupted display, if it happens not > > to be marked garbaged. */ > > && !(f != sf && (FRAME_TERMCAP_P (f) || FRAME_MSDOS_P (f)))) > > redraw_frame (f); <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< > > else > > clear_current_matrices (f); > > > >does the breakpoint fire after you type "C-x 6 f"? > > Yes: > > Thread 1 "emacs" hit Breakpoint 1, clear_garbaged_frames () at ../../src/xdisp.c:11805 > 11805 redraw_frame (f); So you are saying that the call to redraw_frame does nothing in your case? It's supposed to clear out the entire X window and then cause its redisplay... What about disabling double buffering, does it help in any way? And what about the question I asked earlier about the last master build you had that didn't have this problem? do you have an answer? TIA. Anyway, Juri, I'm at the end of my wits (which evidently are too short to begin with) regarding this problem. It is bad enough to have to debug this without being able to reproduce the problem on my machine, and in addition, I don't have a clear understanding how this is supposed to work. AFAIU, you just copied the code from the tool-bar code, so it's possible that you don't understand that either. Maybe Martin will be able to explain how the tool-bar related flags are supposed to work, and maybe that will help me see the light. But I'm not holding my breath, given that even the call to redraw_frame doesn't seem to do what it's supposed to. Do you see the problem described by Jimmy on your system? If so, are you able to debug it on your system (with my help, if you need it)? If not, would someone else who sees the problem please try debugging it? ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-09 14:21 ` Tabs Eli Zaretskii @ 2019-10-09 15:15 ` Ergus 2019-10-09 15:35 ` Tabs Eli Zaretskii 2019-10-09 22:37 ` Tabs Juri Linkov 1 sibling, 1 reply; 181+ messages in thread From: Ergus @ 2019-10-09 15:15 UTC (permalink / raw) To: Eli Zaretskii; +Cc: juri, michael_heerdegen, emacs-devel [-- Attachment #1: Type: text/plain, Size: 2595 bytes --] On Wed, Oct 09, 2019 at 05:21:15PM +0300, Eli Zaretskii wrote: >> Date: Wed, 9 Oct 2019 15:55:39 +0200 >> From: Ergus <spacibba@aol.com> >> Cc: michael_heerdegen@web.de, juri@linkov.net, emacs-devel@gnu.org >> >> >If you set a breakpoint in this fragment from clear_garbaged_frames: >> > >> > if (FRAME_VISIBLE_P (f) && FRAME_GARBAGED_P (f)) >> > { >> > if ((f->resized_p || f->tab_bar_resized) >> > /* It makes no sense to redraw a non-selected TTY >> > frame, since that will actually clear the >> > selected frame, and might leave the selected >> > frame with corrupted display, if it happens not >> > to be marked garbaged. */ >> > && !(f != sf && (FRAME_TERMCAP_P (f) || FRAME_MSDOS_P (f)))) >> > redraw_frame (f); <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< >> > else >> > clear_current_matrices (f); >> > >> >does the breakpoint fire after you type "C-x 6 f"? >> >> Yes: >> >> Thread 1 "emacs" hit Breakpoint 1, clear_garbaged_frames () at ../../src/xdisp.c:11805 >> 11805 redraw_frame (f); > >So you are saying that the call to redraw_frame does nothing in your >case? It's supposed to clear out the entire X window and then cause >its redisplay... > Exactly >What about disabling double buffering, does it help in any way? > The same >And what about the question I asked earlier about the last master >build you had that didn't have this problem? do you have an answer? > I will look for it now. >TIA. > >Anyway, Juri, I'm at the end of my wits (which evidently are too short >to begin with) regarding this problem. It is bad enough to have to >debug this without being able to reproduce the problem on my machine, >and in addition, I don't have a clear understanding how this is >supposed to work. AFAIU, you just copied the code from the tool-bar >code, so it's possible that you don't understand that either. Maybe >Martin will be able to explain how the tool-bar related flags are >supposed to work, and maybe that will help me see the light. But I'm >not holding my breath, given that even the call to redraw_frame >doesn't seem to do what it's supposed to. > >Do you see the problem described by Jimmy on your system? If so, are >you able to debug it on your system (with my help, if you need it)? >If not, would someone else who sees the problem please try debugging >it? This seems to be related with an optimization in redisplay as you said because sometimes when I get the broken tab-bar if I scroll with the mouse the bar scrolls too. (attached picture.) This happens with and without double buffering. [-- Attachment #2: Screenshot_2019-10-09_17-08-58.png --] [-- Type: image/png, Size: 157686 bytes --] ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-09 15:15 ` Tabs Ergus @ 2019-10-09 15:35 ` Eli Zaretskii 2019-10-10 11:52 ` Tabs Eli Zaretskii 0 siblings, 1 reply; 181+ messages in thread From: Eli Zaretskii @ 2019-10-09 15:35 UTC (permalink / raw) To: Ergus; +Cc: michael_heerdegen, emacs-devel, juri > Date: Wed, 9 Oct 2019 17:15:05 +0200 > From: Ergus <spacibba@aol.com> > Cc: juri@linkov.net, michael_heerdegen@web.de, emacs-devel@gnu.org > > This seems to be related with an optimization in redisplay as you said > because sometimes when I get the broken tab-bar if I scroll with the > mouse the bar scrolls too. Emacs doesn't understand that this part of the display is taken by the tab bar, it thinks that it's part of some window's text area. The question is: why does the display engine fail to realize that, given what we do when "C-x 6 f" turns on tab-bar-mode? ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-09 15:35 ` Tabs Eli Zaretskii @ 2019-10-10 11:52 ` Eli Zaretskii 2019-10-10 13:12 ` Tabs Ergus 2019-10-10 13:29 ` Tabs Ergus 0 siblings, 2 replies; 181+ messages in thread From: Eli Zaretskii @ 2019-10-10 11:52 UTC (permalink / raw) To: spacibba; +Cc: juri, emacs-devel Please try the latest master, I made a change which could potentially affect the issue. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 11:52 ` Tabs Eli Zaretskii @ 2019-10-10 13:12 ` Ergus 2019-10-10 13:54 ` Tabs Eli Zaretskii 2019-10-10 13:29 ` Tabs Ergus 1 sibling, 1 reply; 181+ messages in thread From: Ergus @ 2019-10-10 13:12 UTC (permalink / raw) To: Eli Zaretskii; +Cc: juri, emacs-devel Hi Eli: It seems to be working fine now !!!! I will try a bit more latter (Because paradoxically I don't actually use gui interface myself). But so far it seems to be working fine now. Very thanks. Ergus On Thu, Oct 10, 2019 at 02:52:36PM +0300, Eli Zaretskii wrote: >Please try the latest master, I made a change which could potentially >affect the issue. > ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 13:12 ` Tabs Ergus @ 2019-10-10 13:54 ` Eli Zaretskii 2019-10-10 14:19 ` Tabs Ergus 0 siblings, 1 reply; 181+ messages in thread From: Eli Zaretskii @ 2019-10-10 13:54 UTC (permalink / raw) To: Ergus; +Cc: emacs-devel, juri > Date: Thu, 10 Oct 2019 15:12:32 +0200 > From: Ergus <spacibba@aol.com> > Cc: juri@linkov.net, emacs-devel@gnu.org > > It seems to be working fine now !!!! I will try a bit more latter > (Because paradoxically I don't actually use gui interface myself). But > so far it seems to be working fine now. Thanks. If that change fixed the issue, it's by sheer luck... Moreover, if I set frame-inhibit-implied-resize to nil, as it was in your build before that change, I still don't see the problem on my system... If you eval (setq frame-inhibit-implied-resize nil) right after entering "emacs -Q", and then invoke "C-x 6 f", do you see the problem again? ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 13:54 ` Tabs Eli Zaretskii @ 2019-10-10 14:19 ` Ergus 2019-10-10 15:03 ` Tabs Eli Zaretskii 2019-10-16 9:16 ` Tabs martin rudalics 0 siblings, 2 replies; 181+ messages in thread From: Ergus @ 2019-10-10 14:19 UTC (permalink / raw) To: Eli Zaretskii; +Cc: juri, emacs-devel On Thu, Oct 10, 2019 at 04:54:29PM +0300, Eli Zaretskii wrote: >> Date: Thu, 10 Oct 2019 15:12:32 +0200 >> From: Ergus <spacibba@aol.com> >> Cc: juri@linkov.net, emacs-devel@gnu.org >> >> It seems to be working fine now !!!! I will try a bit more latter >> (Because paradoxically I don't actually use gui interface myself). But >> so far it seems to be working fine now. > >Thanks. If that change fixed the issue, it's by sheer luck... > >Moreover, if I set frame-inhibit-implied-resize to nil, as it was in >your build before that change, I still don't see the problem on my >system... > >If you eval (setq frame-inhibit-implied-resize nil) right after >entering "emacs -Q", and then invoke "C-x 6 f", do you see the problem >again? Yes. Exactly as before. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 14:19 ` Tabs Ergus @ 2019-10-10 15:03 ` Eli Zaretskii 2019-10-10 15:35 ` Tabs martin rudalics 2019-10-16 9:16 ` Tabs martin rudalics 1 sibling, 1 reply; 181+ messages in thread From: Eli Zaretskii @ 2019-10-10 15:03 UTC (permalink / raw) To: Ergus; +Cc: emacs-devel, juri > Date: Thu, 10 Oct 2019 16:19:37 +0200 > From: Ergus <spacibba@aol.com> > Cc: juri@linkov.net, emacs-devel@gnu.org > > >If you eval (setq frame-inhibit-implied-resize nil) right after > >entering "emacs -Q", and then invoke "C-x 6 f", do you see the problem > >again? > > Yes. Exactly as before. Thanks. Martin, any ideas how this could contribute to the problem? ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 15:03 ` Tabs Eli Zaretskii @ 2019-10-10 15:35 ` martin rudalics 2019-10-10 15:46 ` Tabs Ergus 0 siblings, 1 reply; 181+ messages in thread From: martin rudalics @ 2019-10-10 15:35 UTC (permalink / raw) To: Eli Zaretskii, Ergus; +Cc: juri, emacs-devel > Martin, any ideas how this could contribute to the problem? I suppose with problem you mean Ergus' "hole in the beginning". The only cause for this I can think of is the apply_window_adjustment call you mentioned earlier. And maybe some omission in the GTK build due to the fact that Juri somehow merged the tool bar widget and Emacs windows concepts. Ergus, does the "hole" also show up when you disable the tool bar before doing C-x 6 f? martin ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 15:35 ` Tabs martin rudalics @ 2019-10-10 15:46 ` Ergus 2019-10-10 18:14 ` Tabs martin rudalics 0 siblings, 1 reply; 181+ messages in thread From: Ergus @ 2019-10-10 15:46 UTC (permalink / raw) To: martin rudalics; +Cc: Eli Zaretskii, emacs-devel, juri On Thu, Oct 10, 2019 at 05:35:56PM +0200, martin rudalics wrote: >> Martin, any ideas how this could contribute to the problem? > >I suppose with problem you mean Ergus' "hole in the beginning". The >only cause for this I can think of is the apply_window_adjustment call >you mentioned earlier. And maybe some omission in the GTK build due >to the fact that Juri somehow merged the tool bar widget and Emacs >windows concepts. > >Ergus, does the "hole" also show up when you disable the tool bar >before doing C-x 6 f? > >martin Hi Martin: Actually the hole is not the issue anymore. The problem was (before the latest Eli's change): 1) C-x 6 f file RET does not show any tab-bar/tab. 2) Leaving the desktop and returning made the tab-bar visible, but 2.1) It was not clickable, 2.2) Overlapped text in the first text line. 2.3) The cursor was also there. 2.4) Moving the cursor "erased" the tab exposing the text line under it. 2.5) Scrolling the text also scrolled part of the tab-bar. I sent pictures of all these issues since Tuesday. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 15:46 ` Tabs Ergus @ 2019-10-10 18:14 ` martin rudalics 2019-10-10 18:26 ` Tabs Eli Zaretskii 0 siblings, 1 reply; 181+ messages in thread From: martin rudalics @ 2019-10-10 18:14 UTC (permalink / raw) To: Ergus; +Cc: Eli Zaretskii, juri, emacs-devel > Actually the hole is not the issue anymore. The problem was (before the > latest Eli's change): > > 1) C-x 6 f file RET does not show any tab-bar/tab. > 2) Leaving the desktop and returning made the tab-bar visible, but > 2.1) It was not clickable, > 2.2) Overlapped text in the first text line. > 2.3) The cursor was also there. > 2.4) Moving the cursor "erased" the tab exposing the text line under > it. > 2.5) Scrolling the text also scrolled part of the tab-bar. > > I sent pictures of all these issues since Tuesday. The only picture I have is Screenshot_2019-10-09_17-08-58.png. Is that the one you mean? Are you sure that you are on an unmodified master? And did you try turning off the tool bar? The 'dired' icon there looks unduly large IMHO. And finally: Did you try building without widgets, xft and modules? martin ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 18:14 ` Tabs martin rudalics @ 2019-10-10 18:26 ` Eli Zaretskii 2019-10-11 8:18 ` Tabs martin rudalics 0 siblings, 1 reply; 181+ messages in thread From: Eli Zaretskii @ 2019-10-10 18:26 UTC (permalink / raw) To: martin rudalics; +Cc: spacibba, emacs-devel, juri > From: martin rudalics <rudalics@gmx.at> > Date: Thu, 10 Oct 2019 20:14:39 +0200 > Cc: Eli Zaretskii <eliz@gnu.org>, juri@linkov.net, emacs-devel@gnu.org > > > 1) C-x 6 f file RET does not show any tab-bar/tab. > > 2) Leaving the desktop and returning made the tab-bar visible, but > > 2.1) It was not clickable, > > 2.2) Overlapped text in the first text line. > > 2.3) The cursor was also there. > > 2.4) Moving the cursor "erased" the tab exposing the text line under > > it. The screenshots for this are shown here: https://lists.gnu.org/archive/html/emacs-devel/2019-10/msg00324.html https://lists.gnu.org/archive/html/emacs-devel/2019-10/msg00345.html > > 2.5) Scrolling the text also scrolled part of the tab-bar. The screenshot for this is shown here: https://lists.gnu.org/archive/html/emacs-devel/2019-10/msg00368.html > The only picture I have is Screenshot_2019-10-09_17-08-58.png. Is > that the one you mean? That's the last one above. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 18:26 ` Tabs Eli Zaretskii @ 2019-10-11 8:18 ` martin rudalics 2019-10-11 9:16 ` Tabs Eli Zaretskii 0 siblings, 1 reply; 181+ messages in thread From: martin rudalics @ 2019-10-11 8:18 UTC (permalink / raw) To: Eli Zaretskii; +Cc: spacibba, juri, emacs-devel > The screenshots for this are shown here: > > https://lists.gnu.org/archive/html/emacs-devel/2019-10/msg00324.html > https://lists.gnu.org/archive/html/emacs-devel/2019-10/msg00345.html > >> > 2.5) Scrolling the text also scrolled part of the tab-bar. > > The screenshot for this is shown here: > > https://lists.gnu.org/archive/html/emacs-devel/2019-10/msg00368.html > > >> The only picture I have is Screenshot_2019-10-09_17-08-58.png. Is >> that the one you mean? > > That's the last one above. Thanks. I still don't have the slightest clue what might cause these. I can't imagine that any geometric miscalculation on our side would be the culprit, these should be seen by others as well. Could we get some sort of summary which kinds of problems people see with all sorts of GUI builds of latest master so that I can try to reproduce at least something here? TIA, martin ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-11 8:18 ` Tabs martin rudalics @ 2019-10-11 9:16 ` Eli Zaretskii 0 siblings, 0 replies; 181+ messages in thread From: Eli Zaretskii @ 2019-10-11 9:16 UTC (permalink / raw) To: martin rudalics; +Cc: spacibba, juri, emacs-devel > Cc: spacibba@aol.com, emacs-devel@gnu.org, juri@linkov.net > From: martin rudalics <rudalics@gmx.at> > Date: Fri, 11 Oct 2019 10:18:53 +0200 > > > The screenshots for this are shown here: > > > > https://lists.gnu.org/archive/html/emacs-devel/2019-10/msg00324.html > > https://lists.gnu.org/archive/html/emacs-devel/2019-10/msg00345.html > > > >> > 2.5) Scrolling the text also scrolled part of the tab-bar. > > > > The screenshot for this is shown here: > > > > https://lists.gnu.org/archive/html/emacs-devel/2019-10/msg00368.html > > > > > >> The only picture I have is Screenshot_2019-10-09_17-08-58.png. Is > >> that the one you mean? > > > > That's the last one above. > > Thanks. I still don't have the slightest clue what might cause these. Given that changing the default for frame-inhibit-implied-resize fixed the problem, and setting it to the previous default recreates it, I'd suspect something done in x_change_tab_bar_height (and/or its sibling for GTK). ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 14:19 ` Tabs Ergus 2019-10-10 15:03 ` Tabs Eli Zaretskii @ 2019-10-16 9:16 ` martin rudalics 1 sibling, 0 replies; 181+ messages in thread From: martin rudalics @ 2019-10-16 9:16 UTC (permalink / raw) To: Ergus, Eli Zaretskii; +Cc: emacs-devel, juri >> If you eval (setq frame-inhibit-implied-resize nil) right after >> entering "emacs -Q", and then invoke "C-x 6 f", do you see the problem >> again? > > Yes. Exactly as before. Please try again. This should have been fixed now. Thanks, martin ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 11:52 ` Tabs Eli Zaretskii 2019-10-10 13:12 ` Tabs Ergus @ 2019-10-10 13:29 ` Ergus 2019-10-10 13:47 ` Tabs Eli Zaretskii 1 sibling, 1 reply; 181+ messages in thread From: Ergus @ 2019-10-10 13:29 UTC (permalink / raw) To: Eli Zaretskii; +Cc: juri, emacs-devel [-- Attachment #1: Type: text/plain, Size: 371 bytes --] BTW: At some point during the latest changes there was a change in the tui tabs?? They where made as text mode before, but now they are graphical tabs over the terminal (picture attached)... was this intentional? On Thu, Oct 10, 2019 at 02:52:36PM +0300, Eli Zaretskii wrote: >Please try the latest master, I made a change which could potentially >affect the issue. > [-- Attachment #2: Screenshot_2019-10-10_15-21-07.png --] [-- Type: image/png, Size: 16639 bytes --] ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 13:29 ` Tabs Ergus @ 2019-10-10 13:47 ` Eli Zaretskii 2019-10-10 14:15 ` Tabs Ergus 2019-10-10 14:40 ` Tabs Ergus 0 siblings, 2 replies; 181+ messages in thread From: Eli Zaretskii @ 2019-10-10 13:47 UTC (permalink / raw) To: Ergus; +Cc: emacs-devel, juri > Date: Thu, 10 Oct 2019 15:29:31 +0200 > From: Ergus <spacibba@aol.com> > Cc: juri@linkov.net, emacs-devel@gnu.org > > BTW: At some point during the latest changes there was a change in the > tui tabs?? They where made as text mode before, but now they are > graphical tabs over the terminal (picture attached)... They aren't graphical, they are still text. Emacs cannot display graphics on TTY frames. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 13:47 ` Tabs Eli Zaretskii @ 2019-10-10 14:15 ` Ergus 2019-10-10 14:40 ` Tabs Ergus 1 sibling, 0 replies; 181+ messages in thread From: Ergus @ 2019-10-10 14:15 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel, juri On Thu, Oct 10, 2019 at 04:47:57PM +0300, Eli Zaretskii wrote: >> Date: Thu, 10 Oct 2019 15:29:31 +0200 >> From: Ergus <spacibba@aol.com> >> Cc: juri@linkov.net, emacs-devel@gnu.org >> >> BTW: At some point during the latest changes there was a change in the >> tui tabs?? They where made as text mode before, but now they are >> graphical tabs over the terminal (picture attached)... > >They aren't graphical, they are still text. Emacs cannot display >graphics on TTY frames. > Ohh sorry, they looked like gui but it is only a face, now I see it... I was confused because I didn't see any reference to a tabs face in the manual. Sorry. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 13:47 ` Tabs Eli Zaretskii 2019-10-10 14:15 ` Tabs Ergus @ 2019-10-10 14:40 ` Ergus 2019-10-10 15:11 ` Tabs Eli Zaretskii 2019-10-10 20:54 ` Tabs Juri Linkov 1 sibling, 2 replies; 181+ messages in thread From: Ergus @ 2019-10-10 14:40 UTC (permalink / raw) To: Eli Zaretskii; +Cc: emacs-devel, juri On Thu, Oct 10, 2019 at 04:47:57PM +0300, Eli Zaretskii wrote: >> Date: Thu, 10 Oct 2019 15:29:31 +0200 >> From: Ergus <spacibba@aol.com> >> Cc: juri@linkov.net, emacs-devel@gnu.org >> >> BTW: At some point during the latest changes there was a change in the >> tui tabs?? They where made as text mode before, but now they are >> graphical tabs over the terminal (picture attached)... > >They aren't graphical, they are still text. Emacs cannot display >graphics on TTY frames. > I have a non so technical question here. I see that the tab-bar face is defined completely in the code, but if instead we define it as inheriting from a more "traditional/standard" face (like tool-bar or similes) maybe the users that had already configured it will have the impression of a better integration??. I mention this because many themes define a toolbar color/font and it will be needed some time before they also define a tab-bar color, so when emacs 27 will be released all the users with those themes will have tabs not matching in their emacs appearance. Does it makes sense? ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 14:40 ` Tabs Ergus @ 2019-10-10 15:11 ` Eli Zaretskii 2019-10-10 20:54 ` Tabs Juri Linkov 1 sibling, 0 replies; 181+ messages in thread From: Eli Zaretskii @ 2019-10-10 15:11 UTC (permalink / raw) To: Ergus; +Cc: juri, emacs-devel > Date: Thu, 10 Oct 2019 16:40:56 +0200 > From: Ergus <spacibba@aol.com> > Cc: emacs-devel@gnu.org, juri@linkov.net > > I have a non so technical question here. I see that the tab-bar face is > defined completely in the code, but if instead we define it as > inheriting from a more "traditional/standard" face (like tool-bar or > similes) maybe the users that had already configured it will have the > impression of a better integration??. > > I mention this because many themes define a toolbar color/font and it > will be needed some time before they also define a tab-bar color, so > when emacs 27 will be released all the users with those themes will have > tabs not matching in their emacs appearance. I think we should simply have a prettier default for the tab-bar faces. They are currently too dull, IMNSHO. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 14:40 ` Tabs Ergus 2019-10-10 15:11 ` Tabs Eli Zaretskii @ 2019-10-10 20:54 ` Juri Linkov 2019-10-11 7:08 ` Tabs Eli Zaretskii 1 sibling, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-10-10 20:54 UTC (permalink / raw) To: Ergus; +Cc: Eli Zaretskii, emacs-devel >>> BTW: At some point during the latest changes there was a change in the >>> tui tabs?? They where made as text mode before, but now they are >>> graphical tabs over the terminal (picture attached)... The intention was to make text tabs look like gui tabs. Thanks for confirming that the goal was achieved. >>They aren't graphical, they are still text. Emacs cannot display >>graphics on TTY frames. > > I have a non so technical question here. I see that the tab-bar face is > defined completely in the code, but if instead we define it as > inheriting from a more "traditional/standard" face (like tool-bar or > similes) maybe the users that had already configured it will have the > impression of a better integration??. > > I mention this because many themes define a toolbar color/font and it > will be needed some time before they also define a tab-bar color, so > when emacs 27 will be released all the users with those themes will have > tabs not matching in their emacs appearance. > > Does it makes sense? The problem is that by default tool-bar takes its colors from external resources. faces.el defines the 'tool-bar' background color as "grey75", but running 'emacs -q' (lowercase '-q' that loads x-resources) and visiting the 'tool-bar' face customization via M-x list-faces-display shows other colors: [X] : Foreground: #4a4a4a Choose (sample) [X] : Background: #f0f0f0 Choose (sample) Where does it get #4a4a4a and #f0f0f0? I tried to run 'xrdb -query | grep -i tool' and the output is: Emacs.tool-bar.attributeBackground: #f0f0f0 Emacs.tool-bar.attributeForeground: #4a4a4a But where these settings come from? I searched in /etc and found /etc/xrdb/Emacs.ad with: Emacs.tool-bar.attributeBackground: BACKGROUND Emacs.tool-bar.attributeForeground: FOREGROUND But there is no "Emacs.tab-bar". Anyway I already added reading the "Emacs.tab-bar" resource to x-apply-session-resources in startup.el, so I guess now maintainers of different distributions could add it to the list of default X resources. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 20:54 ` Tabs Juri Linkov @ 2019-10-11 7:08 ` Eli Zaretskii 2019-10-13 20:57 ` Tabs Juri Linkov 0 siblings, 1 reply; 181+ messages in thread From: Eli Zaretskii @ 2019-10-11 7:08 UTC (permalink / raw) To: Juri Linkov; +Cc: spacibba, emacs-devel > From: Juri Linkov <juri@linkov.net> > Cc: Eli Zaretskii <eliz@gnu.org>, emacs-devel@gnu.org > Date: Thu, 10 Oct 2019 23:54:48 +0300 > > Anyway I already added reading the "Emacs.tab-bar" resource to > x-apply-session-resources in startup.el I don't see these resources documented, neither in NEWS nor in the user manual (where we have a special appendix about the resources Emacs uses). Please add that, and thanks. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-11 7:08 ` Tabs Eli Zaretskii @ 2019-10-13 20:57 ` Juri Linkov 0 siblings, 0 replies; 181+ messages in thread From: Juri Linkov @ 2019-10-13 20:57 UTC (permalink / raw) To: Eli Zaretskii; +Cc: spacibba, emacs-devel >> Anyway I already added reading the "Emacs.tab-bar" resource to >> x-apply-session-resources in startup.el > > I don't see these resources documented, neither in NEWS nor in the > user manual (where we have a special appendix about the resources > Emacs uses). Please add that, and thanks. This is added now to NEWS and the user manual. PS: About providing compatibility with tool-bar customization, I don't know a good way to use tool-bar colors for tab-bar - we can't inherit tab-bar face from tool-bar face. Maybe update tab-bar face attributes explicitly in 'set-face-attribute-from-resource'? For example, use 'x-get-resource' to get tool-bar background/foreground colors, and apply these colors to the tab-bar face? ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-09 14:21 ` Tabs Eli Zaretskii 2019-10-09 15:15 ` Tabs Ergus @ 2019-10-09 22:37 ` Juri Linkov 2019-10-10 7:51 ` Tabs Eli Zaretskii 1 sibling, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-10-09 22:37 UTC (permalink / raw) To: Eli Zaretskii; +Cc: michael_heerdegen, Ergus, emacs-devel > Do you see the problem described by Jimmy on your system? If so, are > you able to debug it on your system (with my help, if you need it)? > If not, would someone else who sees the problem please try debugging > it? It's strange that the problem is not reproducible even when I tried with exactly the same configuration with gtk3 and without optimization. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-09 22:37 ` Tabs Juri Linkov @ 2019-10-10 7:51 ` Eli Zaretskii 2019-10-10 22:35 ` Tabs Juri Linkov 0 siblings, 1 reply; 181+ messages in thread From: Eli Zaretskii @ 2019-10-10 7:51 UTC (permalink / raw) To: Juri Linkov; +Cc: michael_heerdegen, spacibba, emacs-devel > From: Juri Linkov <juri@linkov.net> > Cc: Ergus <spacibba@aol.com>, michael_heerdegen@web.de, emacs-devel@gnu.org > Date: Thu, 10 Oct 2019 01:37:49 +0300 > > > Do you see the problem described by Jimmy on your system? If so, are > > you able to debug it on your system (with my help, if you need it)? > > If not, would someone else who sees the problem please try debugging > > it? > > It's strange that the problem is not reproducible even when > I tried with exactly the same configuration with gtk3 and > without optimization. Do you see it in an optimized build? ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 7:51 ` Tabs Eli Zaretskii @ 2019-10-10 22:35 ` Juri Linkov 2019-10-11 8:18 ` Tabs martin rudalics 2019-10-11 9:20 ` Tabs Eli Zaretskii 0 siblings, 2 replies; 181+ messages in thread From: Juri Linkov @ 2019-10-10 22:35 UTC (permalink / raw) To: Eli Zaretskii; +Cc: michael_heerdegen, spacibba, emacs-devel >> > Do you see the problem described by Jimmy on your system? If so, are >> > you able to debug it on your system (with my help, if you need it)? >> > If not, would someone else who sees the problem please try debugging >> > it? >> >> It's strange that the problem is not reproducible even when >> I tried with exactly the same configuration with gtk3 and >> without optimization. > > Do you see it in an optimized build? I see the same problem after building with ./configure --with-x-toolkit=no However, this patch fixes it. Please rewrite it, if you think these #if could be grouped more compactly. diff --git a/src/frame.c b/src/frame.c index 099db29598..48f1d02101 100644 --- a/src/frame.c +++ b/src/frame.c @@ -6308,7 +6308,7 @@ focus (where a frame immediately loses focus when it's left by the mouse #elif defined (USE_LUCID) || defined (USE_MOTIF) || defined (HAVE_NTGUI) frame_inhibit_implied_resize = list2 (Qtab_bar_lines, Qtool_bar_lines); #else - frame_inhibit_implied_resize = Qnil; + frame_inhibit_implied_resize = list1 (Qtab_bar_lines); #endif #else frame_inhibit_implied_resize = Qt; ^ permalink raw reply related [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 22:35 ` Tabs Juri Linkov @ 2019-10-11 8:18 ` martin rudalics 2019-10-12 22:42 ` Tabs Juri Linkov 2019-10-11 9:20 ` Tabs Eli Zaretskii 1 sibling, 1 reply; 181+ messages in thread From: martin rudalics @ 2019-10-11 8:18 UTC (permalink / raw) To: Juri Linkov, Eli Zaretskii; +Cc: michael_heerdegen, spacibba, emacs-devel >> Do you see it in an optimized build? > > I see the same problem after building with > > ./configure --with-x-toolkit=no Which is the problem you see here? C-x 6 f works pretty well in such builds although I would prefer to (at least customizably) see the tab bar to appear below the tool bar but that's no great deal. In either case, I have no problems with 'frame-inhibit-implied-resize' nil here in non-toolkit builds, neither with the tab bar nor with the tool bar. martin ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-11 8:18 ` Tabs martin rudalics @ 2019-10-12 22:42 ` Juri Linkov 2019-10-13 8:16 ` Tabs martin rudalics 0 siblings, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-10-12 22:42 UTC (permalink / raw) To: martin rudalics; +Cc: michael_heerdegen, Eli Zaretskii, spacibba, emacs-devel [-- Attachment #1: Type: text/plain, Size: 379 bytes --] >>> Do you see it in an optimized build? >> >> I see the same problem after building with >> >> ./configure --with-x-toolkit=no > > Which is the problem you see here? C-x 6 f works pretty well in such > builds I see the problem with this test case: 0. emacs -Q 1. C-x t 2 2. C-S-TAB where switching back to the first tab damages the tool bar as shown on this screenshot: [-- Attachment #2: frame-inhibit.png --] [-- Type: image/png, Size: 15081 bytes --] [-- Attachment #3: Type: text/plain, Size: 595 bytes --] So maybe the problem is in set-window-configuration? (that is used by tab switching) But changing the default value of frame-inhibit-implied-resize to '(tab-bar-lines tool-bar-lines)' fixes it. > although I would prefer to (at least customizably) see the tab > bar to appear below the tool bar but that's no great deal. I have no preference, but in web browsers the tab bar is above the tool bar, and this makes more sense because the tool bar depends more on the buffer so it should located closer to the buffer, whereas the tab bar refers to elements higher in the window/frame hierarchy. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-12 22:42 ` Tabs Juri Linkov @ 2019-10-13 8:16 ` martin rudalics 2019-10-14 18:02 ` Tabs martin rudalics 2019-10-14 19:00 ` Tabs Juri Linkov 0 siblings, 2 replies; 181+ messages in thread From: martin rudalics @ 2019-10-13 8:16 UTC (permalink / raw) To: Juri Linkov; +Cc: michael_heerdegen, Eli Zaretskii, spacibba, emacs-devel > So maybe the problem is in set-window-configuration? > (that is used by tab switching) Presumably so. A much simpler scenario without tab bars is (let ((conf (current-window-configuration))) (tool-bar-mode -1) (set-window-configuration conf)) or on other builds with an internal tool bar (including Windows) (let ((conf (current-window-configuration)) (frame-inhibit-implied-resize nil)) (tool-bar-mode -1) (set-window-configuration conf)) This will require some surgery, so don't expect a fix in a few days. And I have no idea yet whether and how this could affect GTK builds. >> although I would prefer to (at least customizably) see the tab >> bar to appear below the tool bar but that's no great deal. > > I have no preference, but in web browsers the tab bar is above the tool bar, Certainly not in mine (though it took me some effort to fix that). > and this makes more sense because the tool bar depends more on the buffer so > it should located closer to the buffer, whereas the tab bar refers to elements > higher in the window/frame hierarchy. IIUC, in all other builds we show the tab bar below the tool bar. martin ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-13 8:16 ` Tabs martin rudalics @ 2019-10-14 18:02 ` martin rudalics 2019-10-14 18:29 ` Tabs Eli Zaretskii 2019-10-14 19:35 ` Tabs Juri Linkov 2019-10-14 19:00 ` Tabs Juri Linkov 1 sibling, 2 replies; 181+ messages in thread From: martin rudalics @ 2019-10-14 18:02 UTC (permalink / raw) To: Juri Linkov; +Cc: michael_heerdegen, Eli Zaretskii, spacibba, emacs-devel [-- Attachment #1: Type: text/plain, Size: 2725 bytes --] > This will require some surgery, so don't expect a fix in a few days. > > And I have no idea yet whether and how this could affect GTK builds. The forensics (informal): (1) Suppose you have a frame with a visible tab-bar (and no other pseudo window) and save its window configuration. In the saved configuration, the root window is at a line 3. (2) You disable the tab-bar. The root window is now at line 0. (3) You restore the configuration saved in (1). The root window is at line 2 again. Now adjust_frame_size kicks in. And this one had the optimization to do almost nothing in the most frequent case where && new_text_width == old_text_width && new_text_height == old_text_height && new_windows_width == old_windows_width && new_windows_height == old_windows_height && new_pixel_width == old_pixel_width && new_pixel_height == old_pixel_height && new_cols == old_cols && new_lines == old_lines) /* No change. Sanitize window sizes and return. */ hold. Unfortunately, in our case all of these miraculously do hold, apparently nothing changed. The reason for this is the 'frame-inhibit-implied-resize' nil setting. When (2) removes the tab bar from the frame this sets all these sizes (which later here appear as old_...) to the sizes of the saved window configuration (which appear here as new_...) and we have a frame where the root window remains at line 3 and its bottom is cut off. I attach a patch for this. Please carefully check all builds with 'frame-inhibit-implied-resize' nil for whether they DTRT now (and obviously the GTK build is affected too since the tab-bar is now its first internal window). martin PS: I noticed two annoying things about tab-bar - it (1) usurpates my private <C-tab> binding even after I turned it off and (2) apparently turns off 'truncate-lines' (always t here) in the buffer from where I invoked it. Finally, I can't make tab-bar work on Windows any more always getting something like Debugger entered--Lisp error: (wrong-type-argument sequencep #<buffer *Messages*>) #f(compiled-function (tab) #<bytecode 0x1d723d1>)((current-tab (name . #<buffer *Messages*>))) mapcan(#f(compiled-function (tab) #<bytecode 0x1d723d1>) ((current-tab (name . #<buffer *Messages*>)))) tab-bar-make-keymap-1() tab-bar-make-keymap(ignore) redisplay_internal\ \(C\ function\)() redisplay() sit-for(2) execute-extended-command(nil "tab-bar-mode" "tab-bar-mode") funcall-interactively(execute-extended-command nil "tab-bar-mode" "tab-bar-mode") call-interactively(execute-extended-command nil nil) command-execute(execute-extended-command) Any ideas? [-- Attachment #2: adjust_frame_size.diffs --] [-- Type: text/plain, Size: 1612 bytes --] diff --git a/src/frame.c b/src/frame.c index f7e65be727..4dd181f6a9 100644 --- a/src/frame.c +++ b/src/frame.c @@ -704,18 +704,17 @@ adjust_frame_size (struct frame *f, int new_width, int new_height, int inhibit, inhibit_vertical ? Qt : Qnil)); if (FRAME_TERMINAL (f)->set_window_size_hook) - FRAME_TERMINAL (f)->set_window_size_hook (f, - 0, - new_text_width, - new_text_height, - 1); + FRAME_TERMINAL (f)->set_window_size_hook + (f, 0, new_text_width, new_text_height, 1); f->resized_p = true; return; } #endif - if (new_text_width == old_text_width + if ((XWINDOW (FRAME_ROOT_WINDOW (f))->pixel_top + == FRAME_TOP_MARGIN_HEIGHT (f)) + && new_text_width == old_text_width && new_text_height == old_text_height && new_windows_width == old_windows_width && new_windows_height == old_windows_height diff --git a/src/window.c b/src/window.c index ba9af3b9b0..7d70c9b002 100644 --- a/src/window.c +++ b/src/window.c @@ -7132,7 +7132,7 @@ the return value is nil. Otherwise the value is t. */) /* Allow set_window_size_hook again and apply frame size changes if needed. */ f->can_set_window_size = true; - adjust_frame_size (f, -1, -1, 1, false, Qset_window_configuration); + adjust_frame_size (f, -1, -1, 4, false, Qset_window_configuration); adjust_frame_glyphs (f); unblock_input (); ^ permalink raw reply related [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-14 18:02 ` Tabs martin rudalics @ 2019-10-14 18:29 ` Eli Zaretskii 2019-10-15 9:47 ` Tabs martin rudalics 2019-10-14 19:35 ` Tabs Juri Linkov 1 sibling, 1 reply; 181+ messages in thread From: Eli Zaretskii @ 2019-10-14 18:29 UTC (permalink / raw) To: martin rudalics; +Cc: michael_heerdegen, spacibba, emacs-devel, juri > From: martin rudalics <rudalics@gmx.at> > Cc: michael_heerdegen@web.de, Eli Zaretskii <eliz@gnu.org>, spacibba@aol.com, > emacs-devel@gnu.org > Date: Mon, 14 Oct 2019 20:02:57 +0200 > > PS: I noticed two annoying things about tab-bar - it (1) usurpates my > private <C-tab> binding even after I turned it off and (2) apparently > turns off 'truncate-lines' (always t here) in the buffer from where I > invoked it. Finally, I can't make tab-bar work on Windows any more > always getting something like > > Debugger entered--Lisp error: (wrong-type-argument sequencep #<buffer *Messages*>) None if this happens here with the latest master. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-14 18:29 ` Tabs Eli Zaretskii @ 2019-10-15 9:47 ` martin rudalics 0 siblings, 0 replies; 181+ messages in thread From: martin rudalics @ 2019-10-15 9:47 UTC (permalink / raw) To: Eli Zaretskii; +Cc: michael_heerdegen, spacibba, juri, emacs-devel >> PS: I noticed two annoying things about tab-bar - it (1) usurpates my >> private <C-tab> binding even after I turned it off and This one still does happen here. But maybe there's nothing that can be done about this. > (2) apparently >> turns off 'truncate-lines' (always t here) in the buffer from where I >> invoked it. This doesn't seem to happen any more. Finally, I can't make tab-bar work on Windows any more >> always getting something like >> >> Debugger entered--Lisp error: (wrong-type-argument sequencep #<buffer *Messages*>) This one has been fixed. > None if this happens here with the latest master. martin ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-14 18:02 ` Tabs martin rudalics 2019-10-14 18:29 ` Tabs Eli Zaretskii @ 2019-10-14 19:35 ` Juri Linkov 2019-10-14 21:17 ` Tabs T.V Raman 2019-10-15 9:47 ` Tabs martin rudalics 1 sibling, 2 replies; 181+ messages in thread From: Juri Linkov @ 2019-10-14 19:35 UTC (permalink / raw) To: martin rudalics; +Cc: michael_heerdegen, Eli Zaretskii, spacibba, emacs-devel > PS: I noticed two annoying things about tab-bar - it > (1) usurpates my private <C-tab> binding even after I turned it off Do you think after turning off, it should just unbind <C-tab>, or restore a previous binding, or when turning it on to check if there is already <C-tab> bound and don't override the existing binding? > (2) apparently turns off 'truncate-lines' (always t here) in the > buffer from where I invoked it. This is something new, it should not affect 'truncate-lines'. > Finally, I can't make tab-bar work on Windows any more always getting something like > Debugger entered--Lisp error: (wrong-type-argument sequencep #<buffer *Messages*>) This was fixed recently. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-14 19:35 ` Tabs Juri Linkov @ 2019-10-14 21:17 ` T.V Raman 2019-10-14 21:53 ` Tabs Phil Sainty 2019-10-15 6:12 ` Tabs Eli Zaretskii 2019-10-15 9:47 ` Tabs martin rudalics 1 sibling, 2 replies; 181+ messages in thread From: T.V Raman @ 2019-10-14 21:17 UTC (permalink / raw) To: Juri Linkov Cc: martin rudalics, michael_heerdegen, Eli Zaretskii, spacibba, emacs-devel Juri Linkov <juri@linkov.net> writes: One additional thought on keybindings, at present, when running under X, C-1 ..C-0 all run "digit-argument" and there are other ways to supply that -- from myself, I never have used c-1 etc for digit argument. Could we perhaps use C-1 .. to jump to a tab by index?>> PS: I noticed two annoying things about tab-bar - it > >> (1) usurpates my private <C-tab> binding even after I turned it off > > Do you think after turning off, it should just unbind <C-tab>, > or restore a previous binding, or when turning it on to check > if there is already <C-tab> bound and don't override > the existing binding? > >> (2) apparently turns off 'truncate-lines' (always t here) in the >> buffer from where I invoked it. > > This is something new, it should not affect 'truncate-lines'. > >> Finally, I can't make tab-bar work on Windows any more always getting something like >> Debugger entered--Lisp error: (wrong-type-argument sequencep #<buffer *Messages*>) > > This was fixed recently. > -- Id: kg:/m/0285kf1 ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-14 21:17 ` Tabs T.V Raman @ 2019-10-14 21:53 ` Phil Sainty 2019-10-14 22:00 ` Tabs Juri Linkov 2019-10-15 6:12 ` Tabs Eli Zaretskii 1 sibling, 1 reply; 181+ messages in thread From: Phil Sainty @ 2019-10-14 21:53 UTC (permalink / raw) To: T.V Raman Cc: spacibba, michael_heerdegen, emacs-devel, martin rudalics, Eli Zaretskii, Juri Linkov On 2019-10-15 10:17, T.V Raman wrote: > One additional thought on keybindings, at present, when running under > X, > C-1 ..C-0 all run "digit-argument" and there are other ways to supply > that -- from myself, I never have used c-1 etc for digit argument. > Could > we perhaps use C-1 .. to jump to a tab by index? The C-0 to 9 and M-0 to 9 sets of `digit-argument' bindings are *both* useful, because sometimes you'll be following the numeric arg with a Ctrl-modified key, and sometimes you'll follow it with a Meta-modified key, and simply holding down the same modifier throughout makes the sequence easier to type, vs having to switch modifiers in the middle. As such, I don't think clobbering those should be a default; but it could certainly be an option. Perhaps it could be done similarly to `windmove-default-keybindings', where the user can trivially choose the modifier key to use. -Phil ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-14 21:53 ` Tabs Phil Sainty @ 2019-10-14 22:00 ` Juri Linkov 2019-10-14 22:36 ` Tabs T.V Raman 0 siblings, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-10-14 22:00 UTC (permalink / raw) To: Phil Sainty Cc: spacibba, michael_heerdegen, emacs-devel, martin rudalics, Eli Zaretskii, T.V Raman >> One additional thought on keybindings, at present, when running under X, >> C-1 ..C-0 all run "digit-argument" and there are other ways to supply >> that -- from myself, I never have used c-1 etc for digit argument. Could >> we perhaps use C-1 .. to jump to a tab by index? > > The C-0 to 9 and M-0 to 9 sets of `digit-argument' bindings are *both* > useful, because sometimes you'll be following the numeric arg with a > Ctrl-modified key, and sometimes you'll follow it with a Meta-modified > key, and simply holding down the same modifier throughout makes the > sequence easier to type, vs having to switch modifiers in the middle. > > As such, I don't think clobbering those should be a default; but it could > certainly be an option. > > Perhaps it could be done similarly to `windmove-default-keybindings', > where the user can trivially choose the modifier key to use. Currently I'm using the hard-coded modifier (dotimes (i 9) (global-set-key (vector (list 'super (+ i 1 ?0))) 'tab-bar-select-tab)) but making it customizable is a good idea. What modifier we could set as the default value? ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-14 22:00 ` Tabs Juri Linkov @ 2019-10-14 22:36 ` T.V Raman 2019-10-15 20:39 ` Tabs Juri Linkov 0 siblings, 1 reply; 181+ messages in thread From: T.V Raman @ 2019-10-14 22:36 UTC (permalink / raw) To: juri Cc: psainty, raman, rudalics, michael_heerdegen, eliz, spacibba, emacs-devel Hard to pick defaults in emacs, everyone will have a prefered default:-) Juri Linkov writes: > >> One additional thought on keybindings, at present, when running under X, > >> C-1 ..C-0 all run "digit-argument" and there are other ways to supply > >> that -- from myself, I never have used c-1 etc for digit argument. Could > >> we perhaps use C-1 .. to jump to a tab by index? > > > > The C-0 to 9 and M-0 to 9 sets of `digit-argument' bindings are *both* > > useful, because sometimes you'll be following the numeric arg with a > > Ctrl-modified key, and sometimes you'll follow it with a Meta-modified > > key, and simply holding down the same modifier throughout makes the > > sequence easier to type, vs having to switch modifiers in the middle. > > > > As such, I don't think clobbering those should be a default; but it could > > certainly be an option. > > > > Perhaps it could be done similarly to `windmove-default-keybindings', > > where the user can trivially choose the modifier key to use. > > Currently I'm using the hard-coded modifier > > (dotimes (i 9) > (global-set-key (vector (list 'super (+ i 1 ?0))) > 'tab-bar-select-tab)) > > but making it customizable is a good idea. > > What modifier we could set as the default value? -- Id: kg:/m/0285kf1 -- Id: kg:/m/0285kf1 ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-14 22:36 ` Tabs T.V Raman @ 2019-10-15 20:39 ` Juri Linkov 2019-10-16 0:14 ` Tabs T.V Raman 0 siblings, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-10-15 20:39 UTC (permalink / raw) To: T.V Raman Cc: spacibba, psainty, emacs-devel, rudalics, michael_heerdegen, eliz > Hard to pick defaults in emacs, everyone will have a prefered default :-) So now the new option tab-bar-select-tab-modifiers has no default. It allows selecting a set of modifiers such as Ctrl or Meta. > > >> One additional thought on keybindings, at present, when running under X, > > >> C-1 ..C-0 all run "digit-argument" and there are other ways to supply > > >> that -- from myself, I never have used c-1 etc for digit argument. Could > > >> we perhaps use C-1 .. to jump to a tab by index? > > > > > > The C-0 to 9 and M-0 to 9 sets of `digit-argument' bindings are *both* > > > useful, because sometimes you'll be following the numeric arg with a > > > Ctrl-modified key, and sometimes you'll follow it with a Meta-modified > > > key, and simply holding down the same modifier throughout makes the > > > sequence easier to type, vs having to switch modifiers in the middle. > > > > > > As such, I don't think clobbering those should be a default; but it could > > > certainly be an option. > > > > > > Perhaps it could be done similarly to `windmove-default-keybindings', > > > where the user can trivially choose the modifier key to use. > > > > Currently I'm using the hard-coded modifier > > > > (dotimes (i 9) > > (global-set-key (vector (list 'super (+ i 1 ?0))) > > 'tab-bar-select-tab)) > > > > but making it customizable is a good idea. > > > > What modifier we could set as the default value? ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-15 20:39 ` Tabs Juri Linkov @ 2019-10-16 0:14 ` T.V Raman 0 siblings, 0 replies; 181+ messages in thread From: T.V Raman @ 2019-10-16 0:14 UTC (permalink / raw) To: Juri Linkov Cc: spacibba, psainty, emacs-devel, rudalics, michael_heerdegen, eliz Juri Linkov <juri@linkov.net> writes: Nice, works well for me (set it to control) >> Hard to pick defaults in emacs, everyone will have a prefered default :-) > > So now the new option tab-bar-select-tab-modifiers has no default. > It allows selecting a set of modifiers such as Ctrl or Meta. > >> > >> One additional thought on keybindings, at present, when running under X, >> > >> C-1 ..C-0 all run "digit-argument" and there are other ways to supply >> > >> that -- from myself, I never have used c-1 etc for digit argument. Could >> > >> we perhaps use C-1 .. to jump to a tab by index? >> > > >> > > The C-0 to 9 and M-0 to 9 sets of `digit-argument' bindings are *both* >> > > useful, because sometimes you'll be following the numeric arg with a >> > > Ctrl-modified key, and sometimes you'll follow it with a Meta-modified >> > > key, and simply holding down the same modifier throughout makes the >> > > sequence easier to type, vs having to switch modifiers in the middle. >> > > >> > > As such, I don't think clobbering those should be a default; but it could >> > > certainly be an option. >> > > >> > > Perhaps it could be done similarly to `windmove-default-keybindings', >> > > where the user can trivially choose the modifier key to use. >> > >> > Currently I'm using the hard-coded modifier >> > >> > (dotimes (i 9) >> > (global-set-key (vector (list 'super (+ i 1 ?0))) >> > 'tab-bar-select-tab)) >> > >> > but making it customizable is a good idea. >> > >> > What modifier we could set as the default value? > -- ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-14 21:17 ` Tabs T.V Raman 2019-10-14 21:53 ` Tabs Phil Sainty @ 2019-10-15 6:12 ` Eli Zaretskii 1 sibling, 0 replies; 181+ messages in thread From: Eli Zaretskii @ 2019-10-15 6:12 UTC (permalink / raw) To: T.V Raman; +Cc: michael_heerdegen, rudalics, spacibba, emacs-devel, juri > From: "T.V Raman" <raman@google.com> > Cc: martin rudalics <rudalics@gmx.at>, michael_heerdegen@web.de, Eli > Zaretskii <eliz@gnu.org>, spacibba@aol.com, emacs-devel@gnu.org > Date: Mon, 14 Oct 2019 14:17:02 -0700 > > One additional thought on keybindings, at present, when running under X, > C-1 ..C-0 all run "digit-argument" and there are other ways to supply > that -- from myself, I never have used c-1 etc for digit argument. Could > we perhaps use C-1 .. to jump to a tab by index? That cannot be done by default, since C-1 etc. are very old bindings; we cannot break them just like that. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-14 19:35 ` Tabs Juri Linkov 2019-10-14 21:17 ` Tabs T.V Raman @ 2019-10-15 9:47 ` martin rudalics 2019-10-15 17:45 ` Tabs Juri Linkov 1 sibling, 1 reply; 181+ messages in thread From: martin rudalics @ 2019-10-15 9:47 UTC (permalink / raw) To: Juri Linkov; +Cc: michael_heerdegen, Eli Zaretskii, spacibba, emacs-devel >> (1) usurpates my private <C-tab> binding even after I turned it off > > Do you think after turning off, it should just unbind <C-tab>, > or restore a previous binding, or when turning it on to check > if there is already <C-tab> bound and don't override > the existing binding? Either restore a previous binding or don't override the existing binding. I think that, as a rule, the latter is preferable when rebinding such fairly popular keys as say <C-tab>. >> (2) apparently turns off 'truncate-lines' (always t here) in the >> buffer from where I invoked it. > > This is something new, it should not affect 'truncate-lines'. It didn't happen again. Maybe a consequence of the below error. >> Finally, I can't make tab-bar work on Windows any more always getting something like >> Debugger entered--Lisp error: (wrong-type-argument sequencep #<buffer *Messages*>) > > This was fixed recently. Indeed. Please try the patch I sent you. 'frame-inhibit-implied-resize' nil should now behave well with tab bars. Thanks, martin ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-15 9:47 ` Tabs martin rudalics @ 2019-10-15 17:45 ` Juri Linkov 2019-10-16 9:16 ` Tabs martin rudalics 0 siblings, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-10-15 17:45 UTC (permalink / raw) To: martin rudalics; +Cc: emacs-devel > Please try the patch I sent you. 'frame-inhibit-implied-resize' nil > should now behave well with tab bars. I tried your patch in non-GTK builds with the tab-bar above and below the the tool-bar, and in GTK builds, and with 'frame-inhibit-implied-resize' nil everything works fine, thanks. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-15 17:45 ` Tabs Juri Linkov @ 2019-10-16 9:16 ` martin rudalics 0 siblings, 0 replies; 181+ messages in thread From: martin rudalics @ 2019-10-16 9:16 UTC (permalink / raw) To: Juri Linkov; +Cc: emacs-devel > I tried your patch in non-GTK builds with the tab-bar above and below the > the tool-bar, and in GTK builds, and with 'frame-inhibit-implied-resize' nil > everything works fine, thanks. OK, installed. Thanks for checking, martin ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-13 8:16 ` Tabs martin rudalics 2019-10-14 18:02 ` Tabs martin rudalics @ 2019-10-14 19:00 ` Juri Linkov 2019-10-15 9:47 ` Tabs martin rudalics 1 sibling, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-10-14 19:00 UTC (permalink / raw) To: martin rudalics; +Cc: Eli Zaretskii, emacs-devel [-- Attachment #1: Type: text/plain, Size: 630 bytes --] >>> although I would prefer to (at least customizably) see the tab >>> bar to appear below the tool bar but that's no great deal. >> >> I have no preference, but in web browsers the tab bar is above the tool bar, > > Certainly not in mine (though it took me some effort to fix that). > >> and this makes more sense because the tool bar depends more on the buffer so >> it should located closer to the buffer, whereas the tab bar refers to elements >> higher in the window/frame hierarchy. > > IIUC, in all other builds we show the tab bar below the tool bar. Now I implemented the option to show the tab bar below the tool bar: [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: tab-bar-position.patch --] [-- Type: text/x-diff, Size: 2697 bytes --] diff --git a/lisp/cus-start.el b/lisp/cus-start.el index 89a96a9f51..85273a2d2a 100644 --- a/lisp/cus-start.el +++ b/lisp/cus-start.el @@ -591,6 +591,12 @@ minibuffer-prompt-properties--setter (const :tag "Text-image-horiz" :value text-image-horiz) (const :tag "System default" :value nil)) "24.1") (tool-bar-max-label-size frames integer "24.1") + (tab-bar-position tab-bar boolean "27.1" + :set (lambda (sym val) + (set-default sym val) + ;; Redraw the bars: + (tab-bar-mode -1) + (tab-bar-mode 1))) (auto-hscroll-mode scrolling (choice (const :tag "Don't scroll automatically" diff --git a/src/dispnew.c b/src/dispnew.c index 4dd5ee2a1e..4cdc76f5bc 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -2166,8 +2166,10 @@ adjust_frame_glyphs_for_window_redisplay (struct frame *f) w->pixel_left = 0; w->left_col = 0; - w->pixel_top = FRAME_MENU_BAR_HEIGHT (f); - w->top_line = FRAME_MENU_BAR_LINES (f); + w->pixel_top = FRAME_MENU_BAR_HEIGHT (f) + + (!NILP (Vtab_bar_position) ? FRAME_TOOL_BAR_HEIGHT (f) : 0); + w->top_line = FRAME_MENU_BAR_LINES (f) + + (!NILP (Vtab_bar_position) ? FRAME_TOOL_BAR_LINES (f) : 0); w->total_cols = FRAME_TOTAL_COLS (f); w->pixel_width = (FRAME_PIXEL_WIDTH (f) - 2 * FRAME_INTERNAL_BORDER_WIDTH (f)); @@ -2196,8 +2198,10 @@ adjust_frame_glyphs_for_window_redisplay (struct frame *f) w->pixel_left = 0; w->left_col = 0; - w->pixel_top = FRAME_MENU_BAR_HEIGHT (f) + FRAME_TAB_BAR_HEIGHT (f); - w->top_line = FRAME_MENU_BAR_LINES (f) + FRAME_TAB_BAR_LINES (f); + w->pixel_top = FRAME_MENU_BAR_HEIGHT (f) + + (NILP (Vtab_bar_position) ? FRAME_TAB_BAR_HEIGHT (f) : 0); + w->top_line = FRAME_MENU_BAR_LINES (f) + + (NILP (Vtab_bar_position) ? FRAME_TAB_BAR_LINES (f) : 0); w->total_cols = FRAME_TOTAL_COLS (f); w->pixel_width = (FRAME_PIXEL_WIDTH (f) - 2 * FRAME_INTERNAL_BORDER_WIDTH (f)); @@ -6569,6 +6573,11 @@ syms_of_display (void) beginning of the next redisplay). */ redisplay_dont_pause = true; + DEFVAR_LISP ("tab-bar-position", Vtab_bar_position, + doc: /* Specify on which side from the tool bar the tab bar shall be. +Possible values are `t' (below the tool bar), `nil' (above the tool bar). +This option affects only builds where the tool bar is not external. */); + pdumper_do_now_and_after_load (syms_of_display_for_pdumper); } ^ permalink raw reply related [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-14 19:00 ` Tabs Juri Linkov @ 2019-10-15 9:47 ` martin rudalics 0 siblings, 0 replies; 181+ messages in thread From: martin rudalics @ 2019-10-15 9:47 UTC (permalink / raw) To: Juri Linkov; +Cc: Eli Zaretskii, emacs-devel >> IIUC, in all other builds we show the tab bar below the tool bar. > > Now I implemented the option to show the tab bar below the tool bar: Thanks. I think you should install it. martin ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 22:35 ` Tabs Juri Linkov 2019-10-11 8:18 ` Tabs martin rudalics @ 2019-10-11 9:20 ` Eli Zaretskii 2019-10-12 22:47 ` Tabs Juri Linkov 1 sibling, 1 reply; 181+ messages in thread From: Eli Zaretskii @ 2019-10-11 9:20 UTC (permalink / raw) To: Juri Linkov; +Cc: michael_heerdegen, spacibba, emacs-devel > From: Juri Linkov <juri@linkov.net> > Cc: spacibba@aol.com, michael_heerdegen@web.de, emacs-devel@gnu.org > Date: Fri, 11 Oct 2019 01:35:03 +0300 > > I see the same problem after building with > > ./configure --with-x-toolkit=no > > However, this patch fixes it. Please rewrite it, > if you think these #if could be grouped more compactly. > > diff --git a/src/frame.c b/src/frame.c > index 099db29598..48f1d02101 100644 > --- a/src/frame.c > +++ b/src/frame.c > @@ -6308,7 +6308,7 @@ focus (where a frame immediately loses focus when it's left by the mouse > #elif defined (USE_LUCID) || defined (USE_MOTIF) || defined (HAVE_NTGUI) > frame_inhibit_implied_resize = list2 (Qtab_bar_lines, Qtool_bar_lines); > #else > - frame_inhibit_implied_resize = Qnil; > + frame_inhibit_implied_resize = list1 (Qtab_bar_lines); > #endif > #else > frame_inhibit_implied_resize = Qt; Please install the change. We still need to understand why this default has any effect on the issue, but that's a separate discussion. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-11 9:20 ` Tabs Eli Zaretskii @ 2019-10-12 22:47 ` Juri Linkov 2019-10-13 6:51 ` Tabs Eli Zaretskii 0 siblings, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-10-12 22:47 UTC (permalink / raw) To: Eli Zaretskii; +Cc: michael_heerdegen, spacibba, emacs-devel >> @@ -6308,7 +6308,7 @@ focus (where a frame immediately loses focus when it's left by the mouse >> #elif defined (USE_LUCID) || defined (USE_MOTIF) || defined (HAVE_NTGUI) >> frame_inhibit_implied_resize = list2 (Qtab_bar_lines, Qtool_bar_lines); >> #else >> - frame_inhibit_implied_resize = Qnil; >> + frame_inhibit_implied_resize = list1 (Qtab_bar_lines); >> #endif >> #else >> frame_inhibit_implied_resize = Qt; > > Please install the change. We still need to understand why this > default has any effect on the issue, but that's a separate discussion. Actually I don't understand why the no-toolkit case should differ from Lucid, Motif, Windows? They all have non-external tool-bar and tab-bar. Only GTK+ has an external tool-bar, so 'tool-bar-lines' is not included in its default value. Is this a more correct patch? It uses '(tab-bar-lines tool-bar-lines)' in the no-toolkit case as well: diff --git a/src/frame.c b/src/frame.c index 099db29598..fba1ed8970 100644 --- a/src/frame.c +++ b/src/frame.c @@ -6292,12 +6292,11 @@ focus (where a frame immediately loses focus when it's left by the mouse The default value is \\='(tab-bar-lines) in GTK+, (which means that adding/removing a tab bar does not change the frame height), -\\='(tab-bar-lines tool-bar-lines) on Lucid, Motif and Windows -\(which means that adding/removing a tool bar or tab bar does not -change the frame height), nil on all other window systems (which -means that changing any of the parameters listed above may change -the size of the frame), and t otherwise (which means the frame size -never changes implicitly when there's no window system support). +\\='(tab-bar-lines tool-bar-lines) on Lucid, Motif, Windows and on all +other window systems (which means that adding/removing a tool bar or +tab bar does not change the frame height), and t otherwise (which +means the frame size never changes implicitly when there's no window +system support). Note that when a frame is not large enough to accommodate a change of any of the parameters listed above, Emacs may try to enlarge the frame @@ -6305,10 +6304,8 @@ focus (where a frame immediately loses focus when it's left by the mouse #if defined (HAVE_WINDOW_SYSTEM) #if defined USE_GTK frame_inhibit_implied_resize = list1 (Qtab_bar_lines); -#elif defined (USE_LUCID) || defined (USE_MOTIF) || defined (HAVE_NTGUI) +#else frame_inhibit_implied_resize = list2 (Qtab_bar_lines, Qtool_bar_lines); -#else - frame_inhibit_implied_resize = Qnil; #endif #else frame_inhibit_implied_resize = Qt; ^ permalink raw reply related [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-12 22:47 ` Tabs Juri Linkov @ 2019-10-13 6:51 ` Eli Zaretskii 2019-10-13 20:48 ` Tabs Juri Linkov 0 siblings, 1 reply; 181+ messages in thread From: Eli Zaretskii @ 2019-10-13 6:51 UTC (permalink / raw) To: Juri Linkov; +Cc: michael_heerdegen, spacibba, emacs-devel > From: Juri Linkov <juri@linkov.net> > Cc: spacibba@aol.com, michael_heerdegen@web.de, emacs-devel@gnu.org > Date: Sun, 13 Oct 2019 01:47:20 +0300 > > Actually I don't understand why the no-toolkit case should differ from > Lucid, Motif, Windows? They all have non-external tool-bar and tab-bar. It's been a while since I last used the non-toolkit X build of Emacs. I thought it had no tool bar. If it does, then I think you are right. > Only GTK+ has an external tool-bar I think NS has an external tool bar as well, no? > +\\='(tab-bar-lines tool-bar-lines) on Lucid, Motif, Windows and on all > +other window systems (which means that adding/removing a tool bar or Instead of enumerating the toolkits, I'd simply say on all other types of GUI frames (but note my reference to NS above). Thanks. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-13 6:51 ` Tabs Eli Zaretskii @ 2019-10-13 20:48 ` Juri Linkov 2019-10-13 21:09 ` Tabs Eli Zaretskii 0 siblings, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-10-13 20:48 UTC (permalink / raw) To: Eli Zaretskii; +Cc: michael_heerdegen, spacibba, emacs-devel >> Actually I don't understand why the no-toolkit case should differ from >> Lucid, Motif, Windows? They all have non-external tool-bar and tab-bar. > > It's been a while since I last used the non-toolkit X build of Emacs. > I thought it had no tool bar. If it does, then I think you are right. > >> Only GTK+ has an external tool-bar > > I think NS has an external tool bar as well, no? NS has an external tool bar and no tab bar, so its default value is nil. >> +\\='(tab-bar-lines tool-bar-lines) on Lucid, Motif, Windows and on all >> +other window systems (which means that adding/removing a tool bar or > > Instead of enumerating the toolkits, I'd simply say > > on all other types of GUI frames > > (but note my reference to NS above). Fixed. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-13 20:48 ` Tabs Juri Linkov @ 2019-10-13 21:09 ` Eli Zaretskii 2019-10-13 21:33 ` Tabs Juri Linkov 0 siblings, 1 reply; 181+ messages in thread From: Eli Zaretskii @ 2019-10-13 21:09 UTC (permalink / raw) To: Juri Linkov; +Cc: michael_heerdegen, spacibba, emacs-devel > From: Juri Linkov <juri@linkov.net> > Cc: spacibba@aol.com, michael_heerdegen@web.de, emacs-devel@gnu.org > Date: Sun, 13 Oct 2019 23:48:37 +0300 > > >> Only GTK+ has an external tool-bar > > > > I think NS has an external tool bar as well, no? > > NS has an external tool bar and no tab bar, But that's temporary, at least we hope so, right? > so its default value is nil. Why not make it identical to GTK? ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-13 21:09 ` Tabs Eli Zaretskii @ 2019-10-13 21:33 ` Juri Linkov 2019-10-14 8:24 ` Tabs Eli Zaretskii 0 siblings, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-10-13 21:33 UTC (permalink / raw) To: Eli Zaretskii; +Cc: michael_heerdegen, spacibba, emacs-devel >> >> Only GTK+ has an external tool-bar >> > >> > I think NS has an external tool bar as well, no? >> >> NS has an external tool bar and no tab bar, > > But that's temporary, at least we hope so, right? Right, we need to find a macOS developer who likes tabs enough to implement NS tab-bar :-) >> so its default value is nil. > > Why not make it identical to GTK? Because then I don't know how to explain in the docstring why NS has the default value 'tab-bar-lines'. This is how the docstring would look in this case: In GTK+ and NS that use the external tool bar, the default value is \\='(tab-bar-lines) which means that adding/removing a tab bar does not change the frame height. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-13 21:33 ` Tabs Juri Linkov @ 2019-10-14 8:24 ` Eli Zaretskii 0 siblings, 0 replies; 181+ messages in thread From: Eli Zaretskii @ 2019-10-14 8:24 UTC (permalink / raw) To: Juri Linkov; +Cc: michael_heerdegen, spacibba, emacs-devel > From: Juri Linkov <juri@linkov.net> > Cc: spacibba@aol.com, michael_heerdegen@web.de, emacs-devel@gnu.org > Date: Mon, 14 Oct 2019 00:33:47 +0300 > > > Why not make it identical to GTK? > > Because then I don't know how to explain in the docstring > why NS has the default value 'tab-bar-lines'. This is > how the docstring would look in this case: > > In GTK+ and NS that use the external tool bar, the default value is > \\='(tab-bar-lines) which means that adding/removing a tab bar does > not change the frame height. Looks good to me, I suggest installing that. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-07 16:53 ` Tabs Michael Heerdegen 2019-10-07 17:12 ` Tabs Ergus @ 2019-10-07 17:58 ` Eli Zaretskii 1 sibling, 0 replies; 181+ messages in thread From: Eli Zaretskii @ 2019-10-07 17:58 UTC (permalink / raw) To: Michael Heerdegen; +Cc: emacs-devel, juri > From: Michael Heerdegen <michael_heerdegen@web.de> > Cc: Juri Linkov <juri@linkov.net>, emacs-devel@gnu.org > Date: Mon, 07 Oct 2019 18:53:24 +0200 > > Eli Zaretskii <eliz@gnu.org> writes: > > > Please try the latest master, I hope this is now fixed. > > Seems fixed for me indeed. Thank you! Great, thanks for testing. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-07 16:05 ` Tabs Eli Zaretskii 2019-10-07 16:53 ` Tabs Michael Heerdegen @ 2019-10-07 19:11 ` Juri Linkov 1 sibling, 0 replies; 181+ messages in thread From: Juri Linkov @ 2019-10-07 19:11 UTC (permalink / raw) To: Eli Zaretskii; +Cc: michael_heerdegen, emacs-devel > Please try the latest master, I hope this is now fixed. Thanks, I confirm this is fixed. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-06 17:55 ` Tabs Juri Linkov 2019-10-06 18:05 ` Tabs Juri Linkov @ 2019-10-06 18:38 ` Michael Heerdegen 2019-10-06 19:03 ` Tabs Eli Zaretskii 2019-10-06 18:56 ` Tabs Eli Zaretskii 2 siblings, 1 reply; 181+ messages in thread From: Michael Heerdegen @ 2019-10-06 18:38 UTC (permalink / raw) To: Juri Linkov; +Cc: Eli Zaretskii, emacs-devel Juri Linkov <juri@linkov.net> writes: > It infloops in these lines: > > /* On some platforms (at least MS-Windows), the > scroll_run_hook called from scrolling_window > called from update_frame could set the frame's > garbaged flag, in which case we need to > redisplay the frame. */ > if (FRAME_GARBAGED_P (f)) > goto retry_frame; Thanks. Seems Eli changed this in 2fa9699fd7 Fix display of cursor in obscure use case on MS-Windows Michael. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-06 18:38 ` Tabs Michael Heerdegen @ 2019-10-06 19:03 ` Eli Zaretskii 0 siblings, 0 replies; 181+ messages in thread From: Eli Zaretskii @ 2019-10-06 19:03 UTC (permalink / raw) To: Michael Heerdegen; +Cc: emacs-devel, juri > From: Michael Heerdegen <michael_heerdegen@web.de> > Cc: Eli Zaretskii <eliz@gnu.org>, emacs-devel@gnu.org > Date: Sun, 06 Oct 2019 20:38:54 +0200 > > > /* On some platforms (at least MS-Windows), the > > scroll_run_hook called from scrolling_window > > called from update_frame could set the frame's > > garbaged flag, in which case we need to > > redisplay the frame. */ > > if (FRAME_GARBAGED_P (f)) > > goto retry_frame; > > Thanks. Seems Eli changed this in > > 2fa9699fd7 Fix display of cursor in obscure use case on MS-Windows That change is not a bug: we cannot possible leave the frame garbaged when we end a redisplay cycle. Some other factor is at work here, and it sounds like I need all the help you can provide to understand what that is, because it doesn't seem to happen to me. TIA ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-06 17:55 ` Tabs Juri Linkov 2019-10-06 18:05 ` Tabs Juri Linkov 2019-10-06 18:38 ` Tabs Michael Heerdegen @ 2019-10-06 18:56 ` Eli Zaretskii 2 siblings, 0 replies; 181+ messages in thread From: Eli Zaretskii @ 2019-10-06 18:56 UTC (permalink / raw) To: Juri Linkov; +Cc: michael_heerdegen, emacs-devel > From: Juri Linkov <juri@linkov.net> > Cc: Michael Heerdegen <michael_heerdegen@web.de>, emacs-devel@gnu.org > Date: Sun, 06 Oct 2019 20:55:31 +0300 > > I can reproduce the redisplay issue, I never seen this before, > maybe some recent change broke redisplaying. > > I tried to debug and in redisplay_internal, the value of > garbaged_frame_retries has a very large number - about thousands > order of magnitude. It never resets the 'garbaged' flag set in the > selected frame. And I have no idea how to force the 'garbaged' flag > to be reset. It infloops in these lines: > > /* On some platforms (at least MS-Windows), the > scroll_run_hook called from scrolling_window > called from update_frame could set the frame's > garbaged flag, in which case we need to > redisplay the frame. */ > if (FRAME_GARBAGED_P (f)) > goto retry_frame; I need a reproducer. Can you provide one? ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-06 8:22 ` Tabs Michael Heerdegen 2019-10-06 12:09 ` Tabs Michael Heerdegen @ 2019-10-08 19:15 ` Michael Heerdegen 2019-10-09 22:48 ` Tabs Juri Linkov 1 sibling, 1 reply; 181+ messages in thread From: Michael Heerdegen @ 2019-10-08 19:15 UTC (permalink / raw) To: Juri Linkov; +Cc: emacs-devel Hi again, is there anything I can try or do to find out why it doesn't work for me? > > I tried your code, and it works fine: tabs are shown only when > > the current buffer is in Info mode, and hidden when the selected window's > > buffer is in other modes. > > Hmm, no not for me, I never get tabs with this code. I also tried with > emacs -Q. This is with current master - or do I still have to use a > different branch? > > I see that (funcall tab-bar-tabs-function) in info buffers returns a > list with multiple elements, so it /should/ work. > > Regards, > > Michael. Thanks, Michael. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-08 19:15 ` Tabs Michael Heerdegen @ 2019-10-09 22:48 ` Juri Linkov 2019-10-10 11:06 ` Tabs Michael Heerdegen 0 siblings, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-10-09 22:48 UTC (permalink / raw) To: Michael Heerdegen; +Cc: emacs-devel >> > I tried your code, and it works fine: tabs are shown only when >> > the current buffer is in Info mode, and hidden when the selected window's >> > buffer is in other modes. >> >> Hmm, no not for me, I never get tabs with this code. I also tried with >> emacs -Q. This is with current master - or do I still have to use a >> different branch? >> >> I see that (funcall tab-bar-tabs-function) in info buffers returns a >> list with multiple elements, so it /should/ work. > > is there anything I can try or do to find out why it doesn't work for > me? I tried your code again after enabling tab-bar-mode and it displays tabs only in Info mode. In other modes it displays an empty tab-bar without tabs. Is this what you expect? ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-09 22:48 ` Tabs Juri Linkov @ 2019-10-10 11:06 ` Michael Heerdegen 2019-10-10 20:59 ` Tabs Juri Linkov 0 siblings, 1 reply; 181+ messages in thread From: Michael Heerdegen @ 2019-10-10 11:06 UTC (permalink / raw) To: Juri Linkov; +Cc: emacs-devel Juri Linkov <juri@linkov.net> writes: > I tried your code again after enabling tab-bar-mode and it displays > tabs only in Info mode. In other modes it displays an empty tab-bar > without tabs. Is this what you expect? It is not what I get! I never see a tab-bar with that code. No tabs in Info mode buffers. We obviously see something different! Plus, what I really want to achieve is to have tabs in Info and _no_ tab-bar in other buffers - a hidden instead of an empty tab bar. Is that even possible? Regards, Michael. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 11:06 ` Tabs Michael Heerdegen @ 2019-10-10 20:59 ` Juri Linkov 2019-10-13 9:32 ` Tabs Michael Heerdegen 0 siblings, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-10-10 20:59 UTC (permalink / raw) To: Michael Heerdegen; +Cc: emacs-devel >> I tried your code again after enabling tab-bar-mode and it displays >> tabs only in Info mode. In other modes it displays an empty tab-bar >> without tabs. Is this what you expect? > > It is not what I get! I never see a tab-bar with that code. No tabs in > Info mode buffers. We obviously see something different! Have you really enabled tab-bar-mode? > Plus, what I really want to achieve is to have tabs in Info and _no_ > tab-bar in other buffers - a hidden instead of an empty tab bar. Is > that even possible? This is possible but will have a “shaking” effect: switching to an Info buffer will shift the whole text area down to free screen space for the tab-bar, and switching to another buffer will move text up after automatically removing the tab-bar. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-10 20:59 ` Tabs Juri Linkov @ 2019-10-13 9:32 ` Michael Heerdegen 2019-10-13 20:24 ` Tabs Juri Linkov 0 siblings, 1 reply; 181+ messages in thread From: Michael Heerdegen @ 2019-10-13 9:32 UTC (permalink / raw) To: Juri Linkov; +Cc: emacs-devel Juri Linkov <juri@linkov.net> writes: > > It is not what I get! I never see a tab-bar with that code. No tabs in > > Info mode buffers. We obviously see something different! > > Have you really enabled tab-bar-mode? Ok, when I explicitly enable it it works. But I had expected that the custom setter of `tab-bar-show' would already do that...? > > Plus, what I really want to achieve is to have tabs in Info and _no_ > > tab-bar in other buffers - a hidden instead of an empty tab bar. Is > > that even possible? > > This is possible but will have a “shaking” effect: switching to > an Info buffer will shift the whole text area down to free screen space > for the tab-bar, and switching to another buffer will move text up > after automatically removing the tab-bar. I think that would be acceptable: all buffers where I want tabs will probably be displayed in a separate one-window frame. Ok, and how do I get that? Thanks, Michael. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-13 9:32 ` Tabs Michael Heerdegen @ 2019-10-13 20:24 ` Juri Linkov 2019-10-15 14:42 ` Tabs Michael Heerdegen 0 siblings, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-10-13 20:24 UTC (permalink / raw) To: Michael Heerdegen; +Cc: emacs-devel >> > It is not what I get! I never see a tab-bar with that code. No tabs in >> > Info mode buffers. We obviously see something different! >> >> Have you really enabled tab-bar-mode? > > Ok, when I explicitly enable it it works. But I had expected that the > custom setter of `tab-bar-show' would already do that...? `tab-bar-show' affects only tab commands. >> > Plus, what I really want to achieve is to have tabs in Info and _no_ >> > tab-bar in other buffers - a hidden instead of an empty tab bar. Is >> > that even possible? >> >> This is possible but will have a “shaking” effect: switching to >> an Info buffer will shift the whole text area down to free screen space >> for the tab-bar, and switching to another buffer will move text up >> after automatically removing the tab-bar. > > I think that would be acceptable: all buffers where I want tabs will > probably be displayed in a separate one-window frame. Ok, and how do I > get that? Then the solution is much simpler - in that frame just set (set-frame-parameter nil 'tab-bar-lines 1) and to 0 in all other frames. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-13 20:24 ` Tabs Juri Linkov @ 2019-10-15 14:42 ` Michael Heerdegen 2019-10-19 22:51 ` Tabs Juri Linkov 0 siblings, 1 reply; 181+ messages in thread From: Michael Heerdegen @ 2019-10-15 14:42 UTC (permalink / raw) To: Juri Linkov; +Cc: emacs-devel Juri Linkov <juri@linkov.net> writes: > >> This is possible but will have a “shaking” effect: switching to > >> an Info buffer will shift the whole text area down to free screen space > >> for the tab-bar, and switching to another buffer will move text up > >> after automatically removing the tab-bar. > > > > I think that would be acceptable: all buffers where I want tabs will > > probably be displayed in a separate one-window frame. Ok, and how do I > > get that? > > Then the solution is much simpler - in that frame just set > > (set-frame-parameter nil 'tab-bar-lines 1) > > and to 0 in all other frames. And the alternative? I would prefer a solution where the tabs would appear without such an explicit activation. TIA, Michael. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-15 14:42 ` Tabs Michael Heerdegen @ 2019-10-19 22:51 ` Juri Linkov 2019-10-25 11:19 ` Tabs Michael Heerdegen 0 siblings, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-10-19 22:51 UTC (permalink / raw) To: Michael Heerdegen; +Cc: emacs-devel >> >> This is possible but will have a “shaking” effect: switching to >> >> an Info buffer will shift the whole text area down to free screen space >> >> for the tab-bar, and switching to another buffer will move text up >> >> after automatically removing the tab-bar. >> > >> > I think that would be acceptable: all buffers where I want tabs will >> > probably be displayed in a separate one-window frame. Ok, and how do I >> > get that? >> >> Then the solution is much simpler - in that frame just set >> >> (set-frame-parameter nil 'tab-bar-lines 1) >> >> and to 0 in all other frames. > > And the alternative? I would prefer a solution where the tabs would > appear without such an explicit activation. Do you think we should have global-tab-bar-mode that affects all frames, and tab-bar-mode to enable/disable the tab-bar only in the selected frame? Analogously, having global-tab-line-mode to enable tab-line in all windows, and tab-line-mode to toggle tab-line only in the selected window? ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-19 22:51 ` Tabs Juri Linkov @ 2019-10-25 11:19 ` Michael Heerdegen 2019-10-26 22:40 ` Tabs Juri Linkov 0 siblings, 1 reply; 181+ messages in thread From: Michael Heerdegen @ 2019-10-25 11:19 UTC (permalink / raw) To: Juri Linkov; +Cc: emacs-devel Juri Linkov <juri@linkov.net> writes: > Do you think we should have global-tab-bar-mode that affects all frames, > and tab-bar-mode to enable/disable the tab-bar only in the selected frame? > Analogously, having global-tab-line-mode to enable tab-line in all windows, > and tab-line-mode to toggle tab-line only in the selected window? Could be useful maybe. I've now just found out that what I want is to use a tab-line, like this: #+begin_src emacs-lisp (require 'tab-line) (setq-default tab-line-format nil) (setq-default tab-line-close-tab-action #'kill-buffer) (setq-default tab-line-tabs-function (defun my-tab-line-get-mode-tabs () (cl-sort (let ((mode major-mode)) (delq nil (mapcar (lambda (b) (and (with-current-buffer b (derived-mode-p mode)) (not (string-match-p (rx bos " ") (buffer-name b))) b)) (buffer-list)))) #'string< :key #'buffer-name))) (defun my-enable-tab-line () (setq-local tab-line-format '(:eval (tab-line-format)))) (dolist (hook '(Info-mode-hook eww-mode-hook)) (add-hook hook #'my-enable-tab-line)) #+end_src I think a local tab-line mode doesn't make that much sense currently since everything, as far as I can see, is programmed around a global tab bar/line, and using it as I want still requires local setup, so a local mode per se isn't that useful for me. FWIW, I think it would be an improvement when the documentation just told somewhere how the tab-line can be set up to cover use cases like mine. I see that you did not have my use case in mind when I e.g. try `tab-line-switch-to-next-tab': it switches to buffers that are not displayed in the tab-line, and the tab-line just vanishes. Maybe there could be different tab-bar/tab-line modes for the different use cases, or something like that, haven't thought about it. Thanks, Michael. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-25 11:19 ` Tabs Michael Heerdegen @ 2019-10-26 22:40 ` Juri Linkov 2019-10-29 19:09 ` Tabs Michael Heerdegen 0 siblings, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-10-26 22:40 UTC (permalink / raw) To: Michael Heerdegen; +Cc: emacs-devel > I've now just found out that what I want is to use a tab-line, like this: > > #+begin_src emacs-lisp > (require 'tab-line) > (setq-default tab-line-format nil) > (setq-default tab-line-close-tab-action #'kill-buffer) > > (setq-default > tab-line-tabs-function > (defun my-tab-line-get-mode-tabs () > (cl-sort > (let ((mode major-mode)) > (delq nil > (mapcar > (lambda (b) > (and (with-current-buffer b > (derived-mode-p mode)) > (not (string-match-p (rx bos " ") > (buffer-name b))) > b)) > (buffer-list)))) > #'string< :key #'buffer-name))) > > (defun my-enable-tab-line () > (setq-local tab-line-format '(:eval (tab-line-format)))) > > (dolist (hook '(Info-mode-hook eww-mode-hook)) > (add-hook hook #'my-enable-tab-line)) > #+end_src > [...] > I see that you did not have my use case in mind when I e.g. try > `tab-line-switch-to-next-tab': it switches to buffers that are not > displayed in the tab-line, and the tab-line just vanishes. > > Maybe there could be different tab-bar/tab-line modes for the different > use cases, or something like that, haven't thought about it. Thanks for posting the use case with real needs, so now it's clear how to make tab-line customizable. Now you can replace all code above with just 3 lines: (setq tab-line-tabs-function #'tab-line-tabs-mode-buffers) (dolist (hook '(Info-mode-hook eww-mode-hook)) (add-hook hook #'tab-line-mode)) This is because now tab-line-tabs-function is customizable to the function that populates the tab-line with buffers having the same mode. Also there is separate global-tab-line-mode that affects all buffers and buffer-local tab-line-mode. tab-line-switch-to-next-tab works as well in your case now. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-26 22:40 ` Tabs Juri Linkov @ 2019-10-29 19:09 ` Michael Heerdegen 2019-11-05 23:24 ` Tabs Juri Linkov 0 siblings, 1 reply; 181+ messages in thread From: Michael Heerdegen @ 2019-10-29 19:09 UTC (permalink / raw) To: Juri Linkov; +Cc: emacs-devel Juri Linkov <juri@linkov.net> writes: > Now you can replace all code above with just 3 lines: > > (setq tab-line-tabs-function #'tab-line-tabs-mode-buffers) > (dolist (hook '(Info-mode-hook eww-mode-hook)) > (add-hook hook #'tab-line-mode)) > > This is because now tab-line-tabs-function is customizable to the > function that populates the tab-line with buffers having the same > mode. Tried that for some days now, and it works perfectly so far. > tab-line-switch-to-next-tab works as well in your case now. Confirmed. Thank you very much! Regards, Michael. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-10-29 19:09 ` Tabs Michael Heerdegen @ 2019-11-05 23:24 ` Juri Linkov 2019-11-08 18:45 ` Tabs Michael Heerdegen 0 siblings, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-11-05 23:24 UTC (permalink / raw) To: Michael Heerdegen; +Cc: emacs-devel >> Now you can replace all code above with just 3 lines: >> >> (setq tab-line-tabs-function #'tab-line-tabs-mode-buffers) >> (dolist (hook '(Info-mode-hook eww-mode-hook)) >> (add-hook hook #'tab-line-mode)) >> >> This is because now tab-line-tabs-function is customizable to the >> function that populates the tab-line with buffers having the same >> mode. > > Tried that for some days now, and it works perfectly so far. Now 'tab-line-tabs-function' has a new more general option 'tab-line-tabs-buffer-groups' that groups tabs by buffer modes. Clicking on the mode name displays all modes. Selecting a mode from mode list displays only buffers with the same mode. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-11-05 23:24 ` Tabs Juri Linkov @ 2019-11-08 18:45 ` Michael Heerdegen 2019-11-08 19:56 ` Tabs Michael Heerdegen 0 siblings, 1 reply; 181+ messages in thread From: Michael Heerdegen @ 2019-11-08 18:45 UTC (permalink / raw) To: Juri Linkov; +Cc: emacs-devel Juri Linkov <juri@linkov.net> writes: > Now 'tab-line-tabs-function' has a new more general option > 'tab-line-tabs-buffer-groups' that groups tabs by buffer modes. > Clicking on the mode name displays all modes. Selecting a mode > from mode list displays only buffers with the same mode. Works fine here - nice! Thanks, Michael. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-11-08 18:45 ` Tabs Michael Heerdegen @ 2019-11-08 19:56 ` Michael Heerdegen 2019-11-12 21:31 ` Tabs Juri Linkov 0 siblings, 1 reply; 181+ messages in thread From: Michael Heerdegen @ 2019-11-08 19:56 UTC (permalink / raw) To: Juri Linkov; +Cc: emacs-devel Michael Heerdegen <michael_heerdegen@web.de> writes: > Works fine here - nice! BTW, was it on purpose that you include buffers whose name starts with a space character? For example, when using `tab-line-tabs-mode-buffers' when I visit an Info buffer the tab line often lists a buffer named " temp-info-look" which is an internal helper buffer AFAIK. Or should there be some kind of configurable filter? Michael. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-11-08 19:56 ` Tabs Michael Heerdegen @ 2019-11-12 21:31 ` Juri Linkov 2019-11-13 16:47 ` Tabs Michael Heerdegen 0 siblings, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-11-12 21:31 UTC (permalink / raw) To: Michael Heerdegen; +Cc: emacs-devel >> Works fine here - nice! > > BTW, was it on purpose that you include buffers whose name starts with a > space character? > > For example, when using `tab-line-tabs-mode-buffers' when I visit an > Info buffer the tab line often lists a buffer named " temp-info-look" > which is an internal helper buffer AFAIK. > > Or should there be some kind of configurable filter? A list of buffers is configurable now using a new variable that by default doesn't include buffers whose name starts with a space character. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-11-12 21:31 ` Tabs Juri Linkov @ 2019-11-13 16:47 ` Michael Heerdegen 2019-11-13 22:10 ` Tabs Juri Linkov 0 siblings, 1 reply; 181+ messages in thread From: Michael Heerdegen @ 2019-11-13 16:47 UTC (permalink / raw) To: Juri Linkov; +Cc: emacs-devel Juri Linkov <juri@linkov.net> writes: > > Or should there be some kind of configurable filter? > > A list of buffers is configurable now using a new variable that by > default doesn't include buffers whose name starts with a space > character. Looks good, thanks. Seems I can also use buffer local bindings for `tab-line-tabs-buffer-list-function', which is also good. BTW, in `tab-line-tabs-buffer-list', is the `buffer-live-p' filter test on the result of `buffer-list': "Return a list of all live buffers.[...]" redundant? Regards, Michael. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-11-13 16:47 ` Tabs Michael Heerdegen @ 2019-11-13 22:10 ` Juri Linkov 2019-11-14 9:20 ` Tabs martin rudalics 0 siblings, 1 reply; 181+ messages in thread From: Juri Linkov @ 2019-11-13 22:10 UTC (permalink / raw) To: Michael Heerdegen; +Cc: emacs-devel >> A list of buffers is configurable now using a new variable that by >> default doesn't include buffers whose name starts with a space >> character. > > Looks good, thanks. Seems I can also use buffer local bindings for > `tab-line-tabs-buffer-list-function', which is also good. > > BTW, in `tab-line-tabs-buffer-list', is the `buffer-live-p' filter test > on the result of `buffer-list': > > "Return a list of all live buffers.[...]" > > redundant? I added `buffer-live-p' after discovering that not all buffers are live in the buffer list. But maybe this happened only in the buffer list combined with the list of window-prev-buffers. ^ permalink raw reply [flat|nested] 181+ messages in thread
* Re: Tabs 2019-11-13 22:10 ` Tabs Juri Linkov @ 2019-11-14 9:20 ` martin rudalics 0 siblings, 0 replies; 181+ messages in thread From: martin rudalics @ 2019-11-14 9:20 UTC (permalink / raw) To: Juri Linkov, Michael Heerdegen; +Cc: emacs-devel >> BTW, in `tab-line-tabs-buffer-list', is the `buffer-live-p' filter test >> on the result of `buffer-list': >> >> "Return a list of all live buffers.[...]" >> >> redundant? > > I added `buffer-live-p' after discovering that not all buffers > are live in the buffer list. But maybe this happened only in the > buffer list combined with the list of window-prev-buffers. 'buffer-list' should be clean in this regard. 'window-prev-buffers' (and 'window-next-buffers') are not, for the simple technical reason that a window is not accessible when it has been deleted but remains within some saved configuration or state. This means that 'kill-buffer' cannot always update these lists for sure and it mainly depends on GC frequency whether a killed buffer appears in one of these lists or not. Both, 'switch-to-prev-buffer' and 'switch-to-next-buffer' prune dead buffers from the respective lists when they find one. martin ^ permalink raw reply [flat|nested] 181+ messages in thread
end of thread, other threads:[~2019-11-14 9:20 UTC | newest] Thread overview: 181+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2019-08-31 20:45 Tabs Juri Linkov 2019-09-01 8:12 ` Tabs martin rudalics 2019-09-01 14:40 ` Tabs Eli Zaretskii 2019-09-01 19:57 ` Tabs Juri Linkov 2019-09-02 0:40 ` Tabs Stefan Kangas 2019-09-02 10:11 ` Tabs Elias Mårtenson 2019-09-02 11:16 ` Tabs Dmitry Gutov 2019-09-02 19:27 ` Tabs Juri Linkov 2019-09-03 5:21 ` Tabs Jean Louis 2019-09-03 19:40 ` Tabs Juri Linkov 2019-09-03 20:14 ` Tabs Jean Louis 2019-09-02 19:17 ` Tabs Juri Linkov 2019-09-03 5:45 ` Tabs Yuri Khan 2019-09-03 19:45 ` Tabs Juri Linkov 2019-09-15 16:44 ` Tabs Stefan Kangas 2019-09-15 21:17 ` Tabs Juri Linkov 2019-09-02 2:29 ` Tabs Eli Zaretskii 2019-09-02 19:29 ` Tabs Juri Linkov 2019-09-03 2:27 ` Tabs Eli Zaretskii 2019-09-01 8:59 ` Tabs (on macos) Jean-Christophe Helary 2019-09-01 20:11 ` Juri Linkov 2019-09-16 13:41 ` Stefan Kangas 2019-09-16 20:33 ` Juri Linkov 2019-09-17 9:11 ` Stefan Kangas 2019-09-17 9:29 ` Stefan Kangas 2019-09-17 20:28 ` Juri Linkov 2019-09-17 22:38 ` Stefan Kangas 2019-09-20 18:26 ` Alan Third 2019-09-17 23:29 ` Stefan Kangas 2019-09-01 9:28 ` Tabs Alan Mackenzie 2019-09-01 19:18 ` Tabs Juri Linkov 2019-09-01 12:31 ` Tabs Ergus 2019-09-01 19:31 ` Tabs Juri Linkov 2019-09-02 4:51 ` Tabs Ergus 2019-09-02 19:33 ` Tabs Juri Linkov 2019-09-02 21:06 ` Tabs Stefan Monnier 2019-09-03 19:56 ` Tabs Juri Linkov 2019-09-03 2:30 ` Tabs Eli Zaretskii 2019-09-03 19:58 ` Tabs Juri Linkov 2019-09-03 5:39 ` Tabs Ergus 2019-09-05 22:24 ` Tabs Ergus 2019-09-07 20:14 ` Tabs Juri Linkov 2019-09-02 12:41 ` Tabs Stefan Monnier 2019-09-02 19:39 ` Tabs Juri Linkov 2019-09-02 21:03 ` Tabs Stefan Monnier 2019-09-03 12:22 ` Tabs Robert Pluim 2019-09-03 20:21 ` Tabs Juri Linkov 2019-09-15 19:21 ` Tabs Stefan Kangas 2019-09-15 21:32 ` Tabs Juri Linkov 2019-09-16 4:19 ` Tabs Yuri Khan 2019-09-16 20:59 ` Tabs Juri Linkov 2019-09-17 5:29 ` Tabs Yuri Khan 2019-09-17 20:37 ` Tabs Juri Linkov 2019-09-17 22:53 ` Tabs Drew Adams 2019-09-28 17:06 ` Tabs Stefan Kangas 2019-09-28 19:52 ` Tabs Juri Linkov 2019-10-20 22:38 ` Tabs Juri Linkov 2019-11-02 21:40 ` Tabs Juri Linkov 2019-09-19 23:57 ` Tabs Michael Heerdegen 2019-09-21 22:45 ` Tabs Juri Linkov 2019-09-22 0:31 ` Tabs Michael Heerdegen 2019-09-25 20:15 ` Tabs Juri Linkov 2019-10-05 13:57 ` Tabs Michael Heerdegen 2019-10-05 22:12 ` Tabs Juri Linkov 2019-10-06 8:22 ` Tabs Michael Heerdegen 2019-10-06 12:09 ` Tabs Michael Heerdegen 2019-10-06 15:16 ` Tabs Michael Heerdegen 2019-10-06 17:49 ` Tabs Eli Zaretskii 2019-10-06 17:55 ` Tabs Juri Linkov 2019-10-06 18:05 ` Tabs Juri Linkov 2019-10-06 18:58 ` Tabs Eli Zaretskii 2019-10-06 18:59 ` Tabs Eli Zaretskii 2019-10-06 19:08 ` Tabs Michael Heerdegen 2019-10-06 19:11 ` Tabs Juri Linkov 2019-10-06 19:21 ` Tabs Eli Zaretskii 2019-10-06 19:58 ` Tabs Juri Linkov 2019-10-07 16:05 ` Tabs Eli Zaretskii 2019-10-07 16:53 ` Tabs Michael Heerdegen 2019-10-07 17:12 ` Tabs Ergus 2019-10-07 18:24 ` Tabs Eli Zaretskii 2019-10-07 19:28 ` Tabs Ergus 2019-10-08 7:42 ` Tabs Eli Zaretskii 2019-10-08 8:56 ` Tabs Ergus 2019-10-08 9:18 ` Tabs Eli Zaretskii 2019-10-08 13:58 ` Tabs Eli Zaretskii 2019-10-08 16:00 ` Tabs Ergus 2019-10-08 16:18 ` Tabs Eli Zaretskii 2019-10-08 16:40 ` Tabs Ergus 2019-10-08 17:03 ` Tabs Eli Zaretskii 2019-10-08 23:43 ` Tabs Ergus 2019-10-09 8:37 ` Tabs Eli Zaretskii 2019-10-09 10:39 ` Tabs Ergus 2019-10-09 11:35 ` Tabs Eli Zaretskii 2019-10-09 12:05 ` Tabs Ergus 2019-10-09 12:18 ` Tabs Eli Zaretskii 2019-10-09 12:32 ` Tabs Eli Zaretskii 2019-10-09 18:12 ` Tabs martin rudalics 2019-10-09 18:46 ` Tabs Eli Zaretskii 2019-10-10 9:15 ` Tabs martin rudalics 2019-10-10 9:59 ` Tabs Eli Zaretskii 2019-10-10 10:38 ` Tabs martin rudalics 2019-10-10 11:33 ` Tabs Eli Zaretskii 2019-10-10 11:53 ` Tabs Eli Zaretskii 2019-10-10 14:58 ` Tabs martin rudalics 2019-10-09 12:36 ` Tabs Eli Zaretskii 2019-10-09 13:55 ` Tabs Ergus 2019-10-09 14:21 ` Tabs Eli Zaretskii 2019-10-09 15:15 ` Tabs Ergus 2019-10-09 15:35 ` Tabs Eli Zaretskii 2019-10-10 11:52 ` Tabs Eli Zaretskii 2019-10-10 13:12 ` Tabs Ergus 2019-10-10 13:54 ` Tabs Eli Zaretskii 2019-10-10 14:19 ` Tabs Ergus 2019-10-10 15:03 ` Tabs Eli Zaretskii 2019-10-10 15:35 ` Tabs martin rudalics 2019-10-10 15:46 ` Tabs Ergus 2019-10-10 18:14 ` Tabs martin rudalics 2019-10-10 18:26 ` Tabs Eli Zaretskii 2019-10-11 8:18 ` Tabs martin rudalics 2019-10-11 9:16 ` Tabs Eli Zaretskii 2019-10-16 9:16 ` Tabs martin rudalics 2019-10-10 13:29 ` Tabs Ergus 2019-10-10 13:47 ` Tabs Eli Zaretskii 2019-10-10 14:15 ` Tabs Ergus 2019-10-10 14:40 ` Tabs Ergus 2019-10-10 15:11 ` Tabs Eli Zaretskii 2019-10-10 20:54 ` Tabs Juri Linkov 2019-10-11 7:08 ` Tabs Eli Zaretskii 2019-10-13 20:57 ` Tabs Juri Linkov 2019-10-09 22:37 ` Tabs Juri Linkov 2019-10-10 7:51 ` Tabs Eli Zaretskii 2019-10-10 22:35 ` Tabs Juri Linkov 2019-10-11 8:18 ` Tabs martin rudalics 2019-10-12 22:42 ` Tabs Juri Linkov 2019-10-13 8:16 ` Tabs martin rudalics 2019-10-14 18:02 ` Tabs martin rudalics 2019-10-14 18:29 ` Tabs Eli Zaretskii 2019-10-15 9:47 ` Tabs martin rudalics 2019-10-14 19:35 ` Tabs Juri Linkov 2019-10-14 21:17 ` Tabs T.V Raman 2019-10-14 21:53 ` Tabs Phil Sainty 2019-10-14 22:00 ` Tabs Juri Linkov 2019-10-14 22:36 ` Tabs T.V Raman 2019-10-15 20:39 ` Tabs Juri Linkov 2019-10-16 0:14 ` Tabs T.V Raman 2019-10-15 6:12 ` Tabs Eli Zaretskii 2019-10-15 9:47 ` Tabs martin rudalics 2019-10-15 17:45 ` Tabs Juri Linkov 2019-10-16 9:16 ` Tabs martin rudalics 2019-10-14 19:00 ` Tabs Juri Linkov 2019-10-15 9:47 ` Tabs martin rudalics 2019-10-11 9:20 ` Tabs Eli Zaretskii 2019-10-12 22:47 ` Tabs Juri Linkov 2019-10-13 6:51 ` Tabs Eli Zaretskii 2019-10-13 20:48 ` Tabs Juri Linkov 2019-10-13 21:09 ` Tabs Eli Zaretskii 2019-10-13 21:33 ` Tabs Juri Linkov 2019-10-14 8:24 ` Tabs Eli Zaretskii 2019-10-07 17:58 ` Tabs Eli Zaretskii 2019-10-07 19:11 ` Tabs Juri Linkov 2019-10-06 18:38 ` Tabs Michael Heerdegen 2019-10-06 19:03 ` Tabs Eli Zaretskii 2019-10-06 18:56 ` Tabs Eli Zaretskii 2019-10-08 19:15 ` Tabs Michael Heerdegen 2019-10-09 22:48 ` Tabs Juri Linkov 2019-10-10 11:06 ` Tabs Michael Heerdegen 2019-10-10 20:59 ` Tabs Juri Linkov 2019-10-13 9:32 ` Tabs Michael Heerdegen 2019-10-13 20:24 ` Tabs Juri Linkov 2019-10-15 14:42 ` Tabs Michael Heerdegen 2019-10-19 22:51 ` Tabs Juri Linkov 2019-10-25 11:19 ` Tabs Michael Heerdegen 2019-10-26 22:40 ` Tabs Juri Linkov 2019-10-29 19:09 ` Tabs Michael Heerdegen 2019-11-05 23:24 ` Tabs Juri Linkov 2019-11-08 18:45 ` Tabs Michael Heerdegen 2019-11-08 19:56 ` Tabs Michael Heerdegen 2019-11-12 21:31 ` Tabs Juri Linkov 2019-11-13 16:47 ` Tabs Michael Heerdegen 2019-11-13 22:10 ` Tabs Juri Linkov 2019-11-14 9:20 ` Tabs martin rudalics
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).