From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Manuel Giraud Newsgroups: gmane.emacs.bugs Subject: bug#58406: 29.0.50; Bars refactoring? Date: Mon, 10 Oct 2022 09:37:43 +0200 Message-ID: <87a6641648.fsf@elite.giraud> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="36283"; mail-complaints-to="usenet@ciao.gmane.io" To: 58406@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Oct 10 09:39:40 2022 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ohnO0-0009Fn-29 for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 10 Oct 2022 09:39:40 +0200 Original-Received: from localhost ([::1]:59508 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ohnNy-0002wH-Jc for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 10 Oct 2022 03:39:38 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:41246) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ohnNO-0002uv-Nk for bug-gnu-emacs@gnu.org; Mon, 10 Oct 2022 03:39:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:46682) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ohnNO-0002rX-EY for bug-gnu-emacs@gnu.org; Mon, 10 Oct 2022 03:39:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1ohnNO-0005QY-7d for bug-gnu-emacs@gnu.org; Mon, 10 Oct 2022 03:39:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Manuel Giraud Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 10 Oct 2022 07:39:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 58406 X-GNU-PR-Package: emacs X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.166538749020801 (code B ref -1); Mon, 10 Oct 2022 07:39:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 10 Oct 2022 07:38:10 +0000 Original-Received: from localhost ([127.0.0.1]:45760 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ohnMX-0005PQ-85 for submit@debbugs.gnu.org; Mon, 10 Oct 2022 03:38:10 -0400 Original-Received: from lists.gnu.org ([209.51.188.17]:49030) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ohnMU-0005PG-E8 for submit@debbugs.gnu.org; Mon, 10 Oct 2022 03:38:07 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:37962) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ohnMU-0001ok-4p for bug-gnu-emacs@gnu.org; Mon, 10 Oct 2022 03:38:06 -0400 Original-Received: from ledu-giraud.fr ([51.159.28.247]:9704) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ohnMQ-0002lm-96 for bug-gnu-emacs@gnu.org; Mon, 10 Oct 2022 03:38:05 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; s=rsa; bh=HJNV/RWMobN9FuQ8 HhC35ZqM6fyWqDRpBZQ8x6kcr0M=; h=date:subject:to:from; d=ledu-giraud.fr; b=cuT8B5SZoCcE+55wNvGw4y5JHfHcOcusMQACyURiBe6MnUUsGg UcH4GP3P+/vcNU4VnmFWU3cbzK43FRoIxhHhQD2cJQ3L41Uy0CQX8HBfwKzfgvdmQwyB3s kA0PZIg1+r6IWvTzb0DHxxNdOndOPAQ8suMe+CKVfRc+NHdI1oppASclQ78UULZxu1MuWo B9qp7ZpXqPUpbORpTZ6KKktFjoWdWEamE8wNbe4r7cHPK3wkqjikIRaV6yztZocQybFLl9 E9J7bbN3ziGUYbc1Ih+tCToOtm/4o6f5rhMURlMSCGylj3EXP6Y0v7NFTWU6TfV2k4Ur8H riLO080nzHZA== Original-Received: from elite.giraud ( [10.1.1.1]) by ledu-giraud.fr (OpenSMTPD) with ESMTPSA id 432ee3fc (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO) for ; Mon, 10 Oct 2022 09:37:44 +0200 (CEST) Received-SPF: pass client-ip=51.159.28.247; envelope-from=manuel@ledu-giraud.fr; helo=ledu-giraud.fr X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_SBL=0.141, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_SBL_A=0.1 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:244985 Archived-At: --=-=-= Content-Type: text/plain Hi, I'm trying to have some kind of highlight feature on the no-toolkit menu bar. As this feature is already present in tool/tab bar, I'd like to mimic those. While trying this, I think that I found that some "bar" functions could be factorized (up to a certain point I guess). Here is a patch that shows my direction. Do you think that this approach could make it into master or would it be frown upon? And if so, what would be a better way? Best regards, --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-start-bars-refactoring.patch >From cc5a4e5702c4eeb427d91776204b844ceda61a32 Mon Sep 17 00:00:00 2001 From: Manuel Giraud Date: Sun, 9 Oct 2022 13:27:31 +0200 Subject: [PATCH] start bars refactoring --- src/frame.h | 7 ++ src/xdisp.c | 280 ++++++++++++++++++++++++---------------------------- 2 files changed, 137 insertions(+), 150 deletions(-) diff --git a/src/frame.h b/src/frame.h index 458b6257e4..4c78f0a555 100644 --- a/src/frame.h +++ b/src/frame.h @@ -76,6 +76,13 @@ #define EMACS_FRAME_H #endif #endif /* HAVE_WINDOW_SYSTEM */ +enum bar_type + { + MENU_BAR, + TAB_BAR, + TOOL_BAR + }; + /* The structure representing a frame. */ struct frame diff --git a/src/xdisp.c b/src/xdisp.c index 9534e27843..a822b0fe1c 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -13524,6 +13524,110 @@ gui_consider_frame_title (Lisp_Object frame) #endif /* not HAVE_WINDOW_SYSTEM */ + +/*********************************************************************** + Generics for Bars + ***********************************************************************/ + +/* Get information about the bar item which is displayed in GLYPH on + frame F. Return in *PROP_IDX the index where bar item properties + start in the bar items. For TAB_BAR, return in CLOSE_P an + indication whether the click was on the close-tab icon of the tab. + Value is false if GLYPH doesn't display a bar item. */ + +static bool +bar_item_info (ENUM_BF(bar_type) bar, struct frame *f, struct glyph *glyph, + int *prop_idx, bool *close_p) +{ + Lisp_Object prop, string; + ptrdiff_t charpos; + + if (bar == TOOL_BAR) + string = f->current_tool_bar_string; + else if (bar == TAB_BAR) + string = f->current_tab_bar_string; + else + return false; + + /* This function can be called asynchronously, which means we must + exclude any possibility that Fget_text_property signals an + error. */ + charpos = min (SCHARS (string), glyph->charpos); + charpos = max (0, charpos); + + /* Get the text property `menu-item' at pos. The value of that + property is the start index of this item's properties in + F->tool_bar_items. */ + prop = Fget_text_property (make_fixnum (charpos), Qmenu_item, string); + if (! FIXNUMP (prop)) + return false; + *prop_idx = XFIXNUM (prop); + + if (bar == TAB_BAR) + *close_p = !NILP (Fget_text_property (make_fixnum (charpos), + Qclose_tab, + string)); + + return true; +} + +/* Get information about the bar item at position X/Y on frame F. + Return in *GLYPH a pointer to the glyph of the bar item in the + current matrix of the bar window of F, or NULL if not on a bar + item. Return in *PROP_IDX the index of the bar item in bar items. + Value is + + -1 if X/Y is not on a bar item + 0 if X/Y is on the same item that was highlighted before. + 1 otherwise. */ + +static int +get_bar_item (ENUM_BF(bar_type) bar, struct frame *f, int x, int y, + struct glyph **glyph, int *hpos, int *vpos, int *prop_idx, + bool *close_p) +{ + Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f); + Lisp_Object window; + struct window *w; + int area; + + if (bar == TOOL_BAR) + window = f->tool_bar_window; + else if (bar == MENU_BAR) + window = f->menu_bar_window; + else if (bar == TAB_BAR) + window = f->tab_bar_window; + else + return -1; + + w = XWINDOW (window); + + /* Find the glyph under X/Y. */ + *glyph = x_y_to_hpos_vpos (w, x, y, hpos, vpos, 0, 0, &area); + if (*glyph == NULL) + return -1; + + /* Get the start of this tool-bar item's properties in + f->tool_bar_items. */ + if (!bar_item_info (bar, f, *glyph, prop_idx, close_p)) + return -1; + + /* Is mouse on the highlighted item? */ + if (bar == TAB_BAR) + return *prop_idx == f->last_tab_bar_item ? 0 : 1; + else if (EQ (window, hlinfo->mouse_face_window) + && *vpos >= hlinfo->mouse_face_beg_row + && *vpos <= hlinfo->mouse_face_end_row + && (*vpos > hlinfo->mouse_face_beg_row + || *hpos >= hlinfo->mouse_face_beg_col) + && (*vpos < hlinfo->mouse_face_end_row + || *hpos < hlinfo->mouse_face_end_col + || hlinfo->mouse_face_past_end)) + return 0; + + return 1; +} + /*********************************************************************** Menu Bars @@ -14471,73 +14575,6 @@ redisplay_tab_bar (struct frame *f) return false; } -/* Get information about the tab-bar item which is displayed in GLYPH - on frame F. Return in *PROP_IDX the index where tab-bar item - properties start in F->tab_bar_items. Return in CLOSE_P an - indication whether the click was on the close-tab icon of the tab. - Value is false if GLYPH doesn't display a tab-bar item. */ - -static bool -tab_bar_item_info (struct frame *f, struct glyph *glyph, - int *prop_idx, bool *close_p) -{ - Lisp_Object prop; - ptrdiff_t charpos; - - /* This function can be called asynchronously, which means we must - exclude any possibility that Fget_text_property signals an - error. */ - charpos = min (SCHARS (f->current_tab_bar_string), glyph->charpos); - charpos = max (0, charpos); - - /* Get the text property `menu-item' at pos. The value of that - property is the start index of this item's properties in - F->tab_bar_items. */ - prop = Fget_text_property (make_fixnum (charpos), - Qmenu_item, f->current_tab_bar_string); - if (! FIXNUMP (prop)) - return false; - *prop_idx = XFIXNUM (prop); - - *close_p = !NILP (Fget_text_property (make_fixnum (charpos), - Qclose_tab, - f->current_tab_bar_string)); - - return true; -} - - -/* Get information about the tab-bar item at position X/Y on frame F. - Return in *GLYPH a pointer to the glyph of the tab-bar item in - the current matrix of the tab-bar window of F, or NULL if not - on a tab-bar item. Return in *PROP_IDX the index of the tab-bar - item in F->tab_bar_items. Value is - - -1 if X/Y is not on a tab-bar item - 0 if X/Y is on the same item that was highlighted before. - 1 otherwise. */ - -static int -get_tab_bar_item (struct frame *f, int x, int y, struct glyph **glyph, - int *hpos, int *vpos, int *prop_idx, bool *close_p) -{ - struct window *w = XWINDOW (f->tab_bar_window); - int area; - - /* Find the glyph under X/Y. */ - *glyph = x_y_to_hpos_vpos (w, x, y, hpos, vpos, 0, 0, &area); - if (*glyph == NULL) - return -1; - - /* Get the start of this tab-bar item's properties in - f->tab_bar_items. */ - if (!tab_bar_item_info (f, *glyph, prop_idx, close_p)) - return -1; - - return *prop_idx == f->last_tab_bar_item ? 0 : 1; -} - - /* EXPORT: Handle mouse button event on the tab-bar of frame F, at frame-relative coordinates X/Y. DOWN_P is true for a button press, @@ -14557,7 +14594,7 @@ handle_tab_bar_click (struct frame *f, int x, int y, bool down_p, int ts; frame_to_window_pixel_xy (w, &x, &y); - ts = get_tab_bar_item (f, x, y, &glyph, &hpos, &vpos, &prop_idx, &close_p); + ts = get_bar_item (TAB_BAR, f, x, y, &glyph, &hpos, &vpos, &prop_idx, &close_p); if (ts == -1) return Fcons (Qtab_bar, Qnil); @@ -14624,7 +14661,7 @@ note_tab_bar_highlight (struct frame *f, int x, int y) return; } - rc = get_tab_bar_item (f, x, y, &glyph, &hpos, &vpos, &prop_idx, &close_p); + rc = get_bar_item (TAB_BAR, f, x, y, &glyph, &hpos, &vpos, &prop_idx, &close_p); if (rc < 0) { /* Not on tab-bar item. */ @@ -15400,77 +15437,6 @@ redisplay_tool_bar (struct frame *f) return false; } -/* Get information about the tool-bar item which is displayed in GLYPH - on frame F. Return in *PROP_IDX the index where tool-bar item - properties start in F->tool_bar_items. Value is false if - GLYPH doesn't display a tool-bar item. */ - -static bool -tool_bar_item_info (struct frame *f, struct glyph *glyph, int *prop_idx) -{ - Lisp_Object prop; - ptrdiff_t charpos; - - /* This function can be called asynchronously, which means we must - exclude any possibility that Fget_text_property signals an - error. */ - charpos = min (SCHARS (f->current_tool_bar_string), glyph->charpos); - charpos = max (0, charpos); - - /* Get the text property `menu-item' at pos. The value of that - property is the start index of this item's properties in - F->tool_bar_items. */ - prop = Fget_text_property (make_fixnum (charpos), - Qmenu_item, f->current_tool_bar_string); - if (! FIXNUMP (prop)) - return false; - *prop_idx = XFIXNUM (prop); - return true; -} - - -/* Get information about the tool-bar item at position X/Y on frame F. - Return in *GLYPH a pointer to the glyph of the tool-bar item in - the current matrix of the tool-bar window of F, or NULL if not - on a tool-bar item. Return in *PROP_IDX the index of the tool-bar - item in F->tool_bar_items. Value is - - -1 if X/Y is not on a tool-bar item - 0 if X/Y is on the same item that was highlighted before. - 1 otherwise. */ - -static int -get_tool_bar_item (struct frame *f, int x, int y, struct glyph **glyph, - int *hpos, int *vpos, int *prop_idx) -{ - Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f); - struct window *w = XWINDOW (f->tool_bar_window); - int area; - - /* Find the glyph under X/Y. */ - *glyph = x_y_to_hpos_vpos (w, x, y, hpos, vpos, 0, 0, &area); - if (*glyph == NULL) - return -1; - - /* Get the start of this tool-bar item's properties in - f->tool_bar_items. */ - if (!tool_bar_item_info (f, *glyph, prop_idx)) - return -1; - - /* Is mouse on the highlighted item? */ - if (EQ (f->tool_bar_window, hlinfo->mouse_face_window) - && *vpos >= hlinfo->mouse_face_beg_row - && *vpos <= hlinfo->mouse_face_end_row - && (*vpos > hlinfo->mouse_face_beg_row - || *hpos >= hlinfo->mouse_face_beg_col) - && (*vpos < hlinfo->mouse_face_end_row - || *hpos < hlinfo->mouse_face_end_col - || hlinfo->mouse_face_past_end)) - return 0; - - return 1; -} - /* EXPORT: Handle mouse button event on the tool-bar of frame F, at @@ -15485,6 +15451,7 @@ handle_tool_bar_click_with_device (struct frame *f, int x, int y, bool down_p, Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f); struct window *w = XWINDOW (f->tool_bar_window); int hpos, vpos, prop_idx; + bool close_p; struct glyph *glyph; Lisp_Object enabled_p; int ts; @@ -15497,7 +15464,7 @@ handle_tool_bar_click_with_device (struct frame *f, int x, int y, bool down_p, highlight, since tool-bar items are not highlighted in that case. */ frame_to_window_pixel_xy (w, &x, &y); - ts = get_tool_bar_item (f, x, y, &glyph, &hpos, &vpos, &prop_idx); + ts = get_bar_item (TOOL_BAR, f, x, y, &glyph, &hpos, &vpos, &prop_idx, &close_p); if (ts == -1 || (ts != 0 && !NILP (Vmouse_highlight))) return; @@ -15555,11 +15522,10 @@ handle_tool_bar_click (struct frame *f, int x, int y, bool down_p, note_mouse_highlight. */ static void -note_tool_bar_highlight (struct frame *f, int x, int y) +note_bar_highlight (ENUM_BF(bar_type) bar, struct frame *f, int x, int y) { - Lisp_Object window = f->tool_bar_window; - struct window *w = XWINDOW (window); - Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f); + Lisp_Object window; + struct window *w; Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f); int hpos, vpos; struct glyph *glyph; @@ -15567,10 +15533,22 @@ note_tool_bar_highlight (struct frame *f, int x, int y) int i; Lisp_Object enabled_p; int prop_idx; + bool close_p; enum draw_glyphs_face draw = DRAW_IMAGE_RAISED; - bool mouse_down_p; int rc; + /* Select bar window. */ + if (bar == TOOL_BAR) + window = f->tool_bar_window; + else if (bar == MENU_BAR) + window = f->menu_bar_window; + else if (bar == TAB_BAR) + window = f->tab_bar_window; + else + return; + + w = XWINDOW (window); + /* Function note_mouse_highlight is called with negative X/Y values when mouse moves outside of the frame. */ if (x <= 0 || y <= 0) @@ -15579,20 +15557,22 @@ note_tool_bar_highlight (struct frame *f, int x, int y) return; } - rc = get_tool_bar_item (f, x, y, &glyph, &hpos, &vpos, &prop_idx); + rc = get_bar_item (bar, f, x, y, &glyph, &hpos, &vpos, &prop_idx, &close_p); if (rc < 0) { - /* Not on tool-bar item. */ + /* Not on bar item. */ clear_mouse_face (hlinfo); return; } else if (rc == 0) - /* On same tool-bar item as before. */ + /* On same bar item as before. */ goto set_help_echo; clear_mouse_face (hlinfo); + bool mouse_down_p = false; /* Mouse is down, but on different tool-bar item? */ + Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f); mouse_down_p = (gui_mouse_grabbed (dpyinfo) && f == dpyinfo->last_mouse_frame); @@ -35049,7 +35029,7 @@ note_mouse_highlight (struct frame *f, int x, int y) buffer. */ if (EQ (window, f->tool_bar_window)) { - note_tool_bar_highlight (f, x, y); + note_bar_highlight (TOOL_BAR, f, x, y); return; } #endif -- 2.37.3 --=-=-= Content-Type: text/plain In GNU Emacs 29.0.50 (build 1, x86_64-unknown-openbsd7.2, cairo version 1.17.6) of 2022-10-09 built on elite.giraud Repository revision: 300a6ab95ca970899b3fef8852af06d4548d0395 Repository branch: mgi/menubar Windowing system distributor 'The X.Org Foundation', version 11.0.12101004 System Description: OpenBSD elite.giraud 7.2 GENERIC.MP#739 amd64 Configured using: 'configure --prefix=/home/manuel/emacs --bindir=/home/manuel/bin --with-x-toolkit=no --without-sound --without-compress-install CPPFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib' Configured features: CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG JSON LCMS2 LIBOTF LIBXML2 MODULES NOTIFY KQUEUE OLDXMENU PDUMPER PNG RSVG SQLITE3 THREADS TIFF WEBP X11 XDBE XIM XINPUT2 XPM ZLIB Important settings: value of $LC_ALL: en_US.UTF-8 locale-coding-system: utf-8-unix Major mode: Dired by name Minor modes in effect: global-git-commit-mode: t magit-auto-revert-mode: t gnus-dired-mode: t icomplete-mode: t display-time-mode: t display-battery-mode: t shell-dirtrack-mode: t global-so-long-mode: t repeat-mode: t global-eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t buffer-read-only: t line-number-mode: t indent-tabs-mode: t transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t Load-path shadows: /home/manuel/.emacs.d/elpa/transient-20220918.2101/transient hides /home/manuel/emacs/share/emacs/29.0.50/lisp/transient Features: (shadow sort mail-extr emacsbug whitespace magit-patch magit-extras misearch multi-isearch bug-reference face-remap magit-bookmark magit-submodule magit-obsolete magit-blame magit-stash magit-reflog magit-bisect magit-push magit-pull magit-fetch magit-clone magit-remote magit-commit magit-sequence magit-notes magit-worktree magit-tag magit-merge magit-branch magit-reset magit-files magit-refs magit-status magit magit-repos magit-apply magit-wip magit-log which-func imenu magit-diff smerge-mode diff git-commit log-edit pcvs-util add-log magit-core magit-autorevert autorevert filenotify magit-margin magit-transient magit-process with-editor magit-mode transient magit-git magit-base magit-section dash compat-27 compat-26 compat compat-macs gnus-dired sh-script smie executable pulse vc-git diff-mode vc-dispatcher vc-svn shortdoc help-fns radix-tree cl-print paredit edmacro icomplete time battery exwm-randr xcb-randr exwm-config exwm exwm-input xcb-keysyms xcb-xkb exwm-manage exwm-floating xcb-cursor xcb-render exwm-layout exwm-workspace exwm-core xcb-ewmh xcb-icccm xcb xcb-xproto xcb-types xcb-debug kmacro server stimmung-themes modus-operandi-theme modus-themes ytdious osm mingus libmpdee reporter edebug debug backtrace transmission diary-lib diary-loaddefs color calc-bin calc-ext calc calc-loaddefs rect calc-macs w3m-load mu4e mu4e-org mu4e-main mu4e-view mu4e-headers mu4e-compose mu4e-draft mu4e-actions smtpmail mu4e-search mu4e-lists mu4e-bookmarks mu4e-mark mu4e-message flow-fill mule-util hl-line mu4e-contacts mu4e-update mu4e-folders mu4e-server mu4e-context mu4e-vars mu4e-helpers mu4e-config bookmark ido supercite regi ebdb-message ebdb-gnus gnus-msg gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls dig gnus-sum shr pixel-fill kinsoku url-file svg dom gnus-group gnus-undo gnus-start gnus-dbus gnus-cloud nnimap nnmail mail-source utf7 nnoo gnus-spec gnus-int gnus-range message sendmail yank-media puny rfc822 mml mml-sec epa epg rfc6068 epg-config mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 ietf-drums gmm-utils mailheader gnus-win gnus nnheader gnus-util mail-utils range mm-util mail-prsvr ebdb-mua ebdb-com crm ebdb-format ebdb mailabbrev eieio-opt speedbar ezimage dframe eieio-base pcase timezone org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-footnote org-src ob-comint org-pcomplete org-list org-faces org-entities org-version ob-emacs-lisp ob-core ob-eval org-table oc-basic bibtex ol org-keys oc org-compat org-macs org-loaddefs find-func cal-menu calendar cal-loaddefs visual-basic-mode cl web-mode disp-table erlang-start smart-tabs-mode skeleton cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs slime-asdf grep slime-tramp tramp tramp-loaddefs trampver tramp-integration cus-edit cus-load wid-edit files-x tramp-compat rx shell pcomplete parse-time iso8601 time-date ls-lisp format-spec slime-fancy slime-indentation slime-cl-indent cl-indent slime-trace-dialog slime-fontifying-fu slime-package-fu slime-references slime-compiler-notes-tree slime-scratch slime-presentations advice bridge slime-macrostep macrostep slime-mdot-fu slime-enclosing-context slime-fuzzy slime-fancy-trace slime-fancy-inspector slime-c-p-c slime-editing-commands slime-autodoc slime-repl elp slime-parse slime derived cl-extra help-mode lisp-mnt gud apropos compile text-property-search etags fileloop generator xref project arc-mode archive-mode noutline outline icons pp comint ansi-osc ansi-color ring hyperspec thingatpt slime-autoloads dired-aux dired-x dired dired-loaddefs so-long notifications dbus xml repeat easy-mmode auctex-autoloads tex-site boxquote-autoloads debbugs-autoloads hyperbole-autoloads magit-autoloads git-commit-autoloads magit-section-autoloads dash-autoloads paredit-autoloads rust-mode-autoloads stimmung-themes-autoloads transient-autoloads with-editor-autoloads info compat-autoloads ytdious-autoloads package browse-url url url-proxy url-privacy url-expand url-methods url-history url-cookie generate-lisp-file url-domsuf url-util mailcap url-handlers url-parse auth-source cl-seq eieio eieio-core cl-macs password-cache json subr-x map byte-opt gv bytecomp byte-compile cconv url-vars cl-loaddefs cl-lib rmc iso-transl tooltip eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic indonesian philippine cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs faces cus-face macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget keymap hashtable-print-readable backquote threads dbusbind kqueue lcms2 dynamic-setting system-font-setting font-render-setting cairo xinput2 x multi-tty make-network-process emacs) Memory information: ((conses 16 783040 73048) (symbols 48 57310 3) (strings 32 175122 8336) (string-bytes 1 5700851) (vectors 16 96473) (vector-slots 8 1272766 67536) (floats 8 572 583) (intervals 56 15839 533) (buffers 1000 25)) -- Manuel Giraud --=-=-=--