commit d35c4ee10a549deb613f0ab2f99244e0240c4b60 (HEAD, refs/remotes/origin/master) Author: Po Lu Date: Thu Feb 3 07:50:36 2022 +0000 Stop creating cairo contexts in haiku_begin_cr_clip * src/haikufont.c (haikufont_draw): * src/ftcrfont.c (ftcrfont_draw): Stop holding the draw lock. * src/haiku_support.cc (class EmacsView): New field `cairo_context'. (DetachCairoSurface): Destroy cairo_context. (AttachCairoSurface): Create cairo_context from the surface. (EmacsView_cairo_surface): Delete function. (EmacsView_cairo_context): New function. * src/haiku_support.h: Update prototypes. * src/haikuterm.c (haiku_begin_cr_clip): (haiku_end_cr_clip): Retrieve the existing cairo context instead of creating a new one. * src/haikuterm.h (FRAME_CR_CONTEXT): New macro. diff --git a/src/ftcrfont.c b/src/ftcrfont.c index c327146ba2..7d192697ca 100644 --- a/src/ftcrfont.c +++ b/src/ftcrfont.c @@ -538,12 +538,12 @@ ftcrfont_draw (struct glyph_string *s, cr = pgtk_begin_cr_clip (f); #endif #else - BView_draw_lock (FRAME_HAIKU_VIEW (f)); + /* Presumably the draw lock is already held by + haiku_draw_glyph_string. */ EmacsWindow_begin_cr_critical_section (FRAME_HAIKU_WINDOW (f)); cr = haiku_begin_cr_clip (f, s); if (!cr) { - BView_draw_unlock (FRAME_HAIKU_VIEW (f)); EmacsWindow_end_cr_critical_section (FRAME_HAIKU_WINDOW (f)); unblock_input (); return 0; @@ -610,7 +610,6 @@ ftcrfont_draw (struct glyph_string *s, #else haiku_end_cr_clip (cr); EmacsWindow_end_cr_critical_section (FRAME_HAIKU_WINDOW (f)); - BView_draw_unlock (FRAME_HAIKU_VIEW (f)); #endif unblock_input (); diff --git a/src/haiku_support.cc b/src/haiku_support.cc index 8ab8217091..fad2b46654 100644 --- a/src/haiku_support.cc +++ b/src/haiku_support.cc @@ -1184,6 +1184,7 @@ class EmacsView : public BView #ifdef USE_BE_CAIRO cairo_surface_t *cr_surface = NULL; + cairo_t *cr_context = NULL; BLocker cr_surface_lock; #endif @@ -1215,8 +1216,10 @@ class EmacsView : public BView gui_abort ("Could not lock cr surface during detachment"); if (!cr_surface) gui_abort ("Trying to detach window cr surface when none exists"); + cairo_destroy (cr_context); cairo_surface_destroy (cr_surface); cr_surface = NULL; + cr_context = NULL; cr_surface_lock.Unlock (); } @@ -1236,6 +1239,10 @@ class EmacsView : public BView offscreen_draw_bitmap_1->BytesPerRow ()); if (!cr_surface) gui_abort ("Cr surface allocation failed for double-buffered view"); + + cr_context = cairo_create (cr_surface); + if (!cr_context) + gui_abort ("cairo_t allocation failed for double-buffered view"); cr_surface_lock.Unlock (); } #endif @@ -3178,12 +3185,12 @@ BView_show_tooltip (void *view) #ifdef USE_BE_CAIRO -/* Return VIEW's cairo surface. */ -cairo_surface_t * -EmacsView_cairo_surface (void *view) +/* Return VIEW's cairo context. */ +cairo_t * +EmacsView_cairo_context (void *view) { EmacsView *vw = (EmacsView *) view; - return vw->cr_surface; + return vw->cr_context; } /* Transfer each clip rectangle in VIEW to the cairo context diff --git a/src/haiku_support.h b/src/haiku_support.h index b98fa56415..ea34ccb435 100644 --- a/src/haiku_support.h +++ b/src/haiku_support.h @@ -827,8 +827,8 @@ extern "C" BView_show_tooltip (void *view); #ifdef USE_BE_CAIRO - extern cairo_surface_t * - EmacsView_cairo_surface (void *view); + extern cairo_t * + EmacsView_cairo_context (void *view); extern void BView_cr_dump_clipping (void *view, cairo_t *ctx); diff --git a/src/haikufont.c b/src/haikufont.c index e08792be4b..67b1113e44 100644 --- a/src/haikufont.c +++ b/src/haikufont.c @@ -955,7 +955,8 @@ haikufont_draw (struct glyph_string *s, int from, int to, block_input (); prepare_face_for_display (s->f, face); - BView_draw_lock (view); + /* Presumably the draw lock is already held by + haiku_draw_glyph_string; */ if (with_background) { int height = FONT_HEIGHT (s->font), ascent = FONT_BASE (s->font); @@ -1014,7 +1015,7 @@ haikufont_draw (struct glyph_string *s, int from, int to, BView_DrawString (view, b, b_len); xfree (b); } - BView_draw_unlock (view); + unblock_input (); return 1; } diff --git a/src/haikuterm.c b/src/haikuterm.c index ac0540b77f..e8c734d671 100644 --- a/src/haikuterm.c +++ b/src/haikuterm.c @@ -3618,18 +3618,22 @@ haiku_set_offset (struct frame *frame, int x, int y, cairo_t * haiku_begin_cr_clip (struct frame *f, struct glyph_string *s) { - cairo_surface_t *surface = FRAME_CR_SURFACE (f); - if (!surface) + cairo_t *cr = FRAME_CR_CONTEXT (f); + + if (!cr) return NULL; - cairo_t *context = cairo_create (surface); - return context; + cairo_save (cr); + return cr; } void haiku_end_cr_clip (cairo_t *cr) { - cairo_destroy (cr); + if (!cr) + return NULL; + + cairo_restore (cr); } #endif diff --git a/src/haikuterm.h b/src/haikuterm.h index de607e6dc5..2dbdb6aafc 100644 --- a/src/haikuterm.h +++ b/src/haikuterm.h @@ -231,8 +231,10 @@ struct scroll_bar #define FRAME_CURSOR_COLOR(f) (FRAME_OUTPUT_DATA (f)->cursor_color) #ifdef USE_BE_CAIRO -#define FRAME_CR_SURFACE(f) \ - (FRAME_HAIKU_VIEW (f) ? EmacsView_cairo_surface (FRAME_HAIKU_VIEW (f)) : 0); +#define FRAME_CR_CONTEXT(f) \ + (FRAME_HAIKU_VIEW (f) \ + ? EmacsView_cairo_context (FRAME_HAIKU_VIEW (f)) \ + : NULL) #endif extern void syms_of_haikuterm (void); commit fc79118f19f9a33ceb98c25ef38c67d2b935b9da Author: Po Lu Date: Thu Feb 3 07:14:59 2022 +0000 Obtain draw lock outside haiku_start_clip * src/haikuterm.c (haiku_start_clip): (haiku_end_clip): Stop obtaining the draw lock. (haiku_draw_glyph_string): Set draw lock here instead. diff --git a/src/haikuterm.c b/src/haikuterm.c index 1b2259bcc5..ac0540b77f 100644 --- a/src/haikuterm.c +++ b/src/haikuterm.c @@ -1105,7 +1105,6 @@ static void haiku_start_clip (struct glyph_string *s) { void *view = FRAME_HAIKU_VIEW (s->f); - BView_draw_lock (view); BView_StartClip (view); } @@ -1114,7 +1113,6 @@ haiku_end_clip (struct glyph_string *s) { void *view = FRAME_HAIKU_VIEW (s->f); BView_EndClip (view); - BView_draw_unlock (view); } static void @@ -1448,7 +1446,11 @@ haiku_draw_image_glyph_string (struct glyph_string *s) static void haiku_draw_glyph_string (struct glyph_string *s) { + void *view; + block_input (); + view = FRAME_HAIKU_VIEW (s->f); + BView_draw_lock (view); prepare_face_for_display (s->f, s->face); struct face *face = s->face; @@ -1597,6 +1599,7 @@ haiku_draw_glyph_string (struct glyph_string *s) } } haiku_end_clip (s); + BView_draw_unlock (view); unblock_input (); } commit dce93e397d54de19353a9e768757009043be1fc2 Merge: 3d7f17bf80 ab2f275422 Author: Stefan Kangas Date: Thu Feb 3 06:30:29 2022 +0100 Merge from origin/emacs-28 ab2f275422 Improve documentation of 'emacs-version' commit 3d7f17bf80b8689c7f22e69dc9a96ab200e52f97 Author: Po Lu Date: Thu Feb 3 05:21:33 2022 +0000 * src/haikuterm.c (haiku_draw_text_decoration): Don't lock for draws. diff --git a/src/haikuterm.c b/src/haikuterm.c index eb58d1714e..1b2259bcc5 100644 --- a/src/haikuterm.c +++ b/src/haikuterm.c @@ -610,7 +610,6 @@ haiku_draw_text_decoration (struct glyph_string *s, struct face *face, return; void *view = FRAME_HAIKU_VIEW (s->f); - BView_draw_lock (view); if (face->underline) { @@ -744,8 +743,6 @@ haiku_draw_text_decoration (struct glyph_string *s, struct face *face, BView_FillRectangle (view, s->x, glyph_y + dy, s->width, h); } - - BView_draw_unlock (view); } static void commit abdb198474e96cc7426196453ebe55dbd2a7c74d Author: Po Lu Date: Thu Feb 3 05:16:35 2022 +0000 Simplify box display code on Haiku * src/haikuterm.c (haiku_calculate_relief_colors): Remove `rgbout_c' parameter. (haiku_draw_relief_rect): Push state if performing additional clipping. (haiku_draw_string_box): Stop passing clip rects to the relief drawing functions. (haiku_draw_glyph_string): Fix calls to haiku_draw_string_box for new parameters. diff --git a/src/haikuterm.c b/src/haikuterm.c index a007aeaba6..eb58d1714e 100644 --- a/src/haikuterm.c +++ b/src/haikuterm.c @@ -461,9 +461,8 @@ haiku_draw_box_rect (struct glyph_string *s, } static void -haiku_calculate_relief_colors (struct glyph_string *s, - uint32_t *rgbout_w, uint32_t *rgbout_b, - uint32_t *rgbout_c) +haiku_calculate_relief_colors (struct glyph_string *s, uint32_t *rgbout_w, + uint32_t *rgbout_b) { struct face *face = s->face; @@ -480,7 +479,6 @@ haiku_calculate_relief_colors (struct glyph_string *s, hsl_color_rgb (h, cs, fmin (1.0, fmax (0.2, l) * 0.6), rgbout_b); hsl_color_rgb (h, cs, fmin (1.0, fmax (0.2, l) * 1.2), rgbout_w); - hsl_color_rgb (h, cs, fmin (1.0, fmax (0.2, l) * 1.8), rgbout_c); } static void @@ -492,16 +490,18 @@ haiku_draw_relief_rect (struct glyph_string *s, { uint32_t color_white; uint32_t color_black; - uint32_t color_corner; - haiku_calculate_relief_colors (s, &color_white, &color_black, - &color_corner); + haiku_calculate_relief_colors (s, &color_white, &color_black); void *view = FRAME_HAIKU_VIEW (s->f); BView_SetHighColor (view, raised_p ? color_white : color_black); if (clip_rect) - BView_ClipToRect (view, clip_rect->x, clip_rect->y, clip_rect->width, - clip_rect->height); + { + BView_StartClip (view); + haiku_clip_to_string (s); + BView_ClipToRect (view, clip_rect->x, clip_rect->y, clip_rect->width, + clip_rect->height); + } if (top_p) BView_FillRectangle (view, left_x, top_y, right_x - left_x + 1, hwidth); if (left_p) @@ -546,7 +546,7 @@ haiku_draw_relief_rect (struct glyph_string *s, if (vwidth > 1 && right_p) BView_StrokeLine (view, right_x, top_y, right_x, bottom_y); - BView_SetHighColor (view, color_corner); + BView_SetHighColor (view, s->face->background); /* Omit corner pixels. */ if (hwidth > 1 || vwidth > 1) @@ -560,6 +560,9 @@ haiku_draw_relief_rect (struct glyph_string *s, if (right_p && bot_p) BView_FillRectangle (view, right_x, bottom_y, 1, 1); } + + if (clip_rect) + BView_EndClip (view); } static void @@ -746,13 +749,11 @@ haiku_draw_text_decoration (struct glyph_string *s, struct face *face, } static void -haiku_draw_string_box (struct glyph_string *s, int clip_p) +haiku_draw_string_box (struct glyph_string *s) { int hwidth, vwidth, left_x, right_x, top_y, bottom_y, last_x; bool raised_p, left_p, right_p; struct glyph *last_glyph; - struct haiku_rect clip_rect; - struct face *face = s->face; last_x = ((s->row->full_width_p && !s->w->pseudo_window_p) @@ -800,30 +801,13 @@ haiku_draw_string_box (struct glyph_string *s, int clip_p) && (s->next == NULL || s->next->hl != s->hl))); - get_glyph_string_clip_rect (s, &clip_rect); - if (face->box == FACE_SIMPLE_BOX) haiku_draw_box_rect (s, left_x, top_y, right_x, bottom_y, hwidth, - vwidth, left_p, right_p, &clip_rect); + vwidth, left_p, right_p, NULL); else haiku_draw_relief_rect (s, left_x, top_y, right_x, bottom_y, hwidth, vwidth, raised_p, true, true, left_p, right_p, - &clip_rect, 1); - - if (clip_p) - { - void *view = FRAME_HAIKU_VIEW (s->f); - - haiku_draw_text_decoration (s, face, s->width, s->x); - BView_ClipToInverseRect (view, left_x, top_y, right_x - left_x + 1, hwidth); - if (left_p) - BView_ClipToInverseRect (view, left_x, top_y, vwidth, bottom_y - top_y + 1); - BView_ClipToInverseRect (view, left_x, bottom_y - hwidth + 1, - right_x - left_x + 1, hwidth); - if (right_p) - BView_ClipToInverseRect (view, right_x - vwidth + 1, - top_y, vwidth, bottom_y - top_y + 1); - } + NULL, 1); } static void @@ -1506,7 +1490,7 @@ haiku_draw_glyph_string (struct glyph_string *s) haiku_clip_to_string (s); haiku_maybe_draw_background (s, 1); box_filled_p = 1; - haiku_draw_string_box (s, 0); + haiku_draw_string_box (s); } else if (!s->clip_head /* draw_glyphs didn't specify a clip mask. */ && !s->clip_tail @@ -1559,7 +1543,7 @@ haiku_draw_glyph_string (struct glyph_string *s) if (!s->for_overlaps) { if (!box_filled_p && face->box != FACE_NO_BOX) - haiku_draw_string_box (s, 1); + haiku_draw_string_box (s); else haiku_draw_text_decoration (s, face, s->width, s->x); commit 11ee58de9db67ff2431d243fd7ab83ea8f417cb5 Author: Po Lu Date: Thu Feb 3 01:57:00 2022 +0000 Fix display of text decorations with defaulted foreground on Haiku * src/haikuterm.c (haiku_draw_text_decoration): Remove parameter `dcol' and use face->foreground instead. All callers changed. diff --git a/src/haikuterm.c b/src/haikuterm.c index c25e73f8c1..a007aeaba6 100644 --- a/src/haikuterm.c +++ b/src/haikuterm.c @@ -601,7 +601,7 @@ haiku_draw_underwave (struct glyph_string *s, int width, int x) static void haiku_draw_text_decoration (struct glyph_string *s, struct face *face, - uint8_t dcol, int width, int x) + int width, int x) { if (s->for_overlaps) return; @@ -616,7 +616,7 @@ haiku_draw_text_decoration (struct glyph_string *s, struct face *face, else if (!face->underline_defaulted_p) BView_SetHighColor (view, face->underline_color); else - BView_SetHighColor (view, dcol); + BView_SetHighColor (view, face->foreground); if (face->underline == FACE_UNDER_WAVE) haiku_draw_underwave (s, width, x); @@ -713,7 +713,7 @@ haiku_draw_text_decoration (struct glyph_string *s, struct face *face, else if (!face->overline_color_defaulted_p) BView_SetHighColor (view, face->overline_color); else - BView_SetHighColor (view, dcol); + BView_SetHighColor (view, face->foreground); BView_FillRectangle (view, s->x, s->y + dy, s->width, h); } @@ -737,7 +737,7 @@ haiku_draw_text_decoration (struct glyph_string *s, struct face *face, else if (!face->strike_through_color_defaulted_p) BView_SetHighColor (view, face->strike_through_color); else - BView_SetHighColor (view, dcol); + BView_SetHighColor (view, face->foreground); BView_FillRectangle (view, s->x, glyph_y + dy, s->width, h); } @@ -814,7 +814,7 @@ haiku_draw_string_box (struct glyph_string *s, int clip_p) { void *view = FRAME_HAIKU_VIEW (s->f); - haiku_draw_text_decoration (s, face, face->foreground, s->width, s->x); + haiku_draw_text_decoration (s, face, s->width, s->x); BView_ClipToInverseRect (view, left_x, top_y, right_x - left_x + 1, hwidth); if (left_p) BView_ClipToInverseRect (view, left_x, top_y, vwidth, bottom_y - top_y + 1); @@ -1561,8 +1561,7 @@ haiku_draw_glyph_string (struct glyph_string *s) if (!box_filled_p && face->box != FACE_NO_BOX) haiku_draw_string_box (s, 1); else - haiku_draw_text_decoration (s, face, face->foreground, - s->width, s->x); + haiku_draw_text_decoration (s, face, s->width, s->x); if (s->prev) { commit 60fe17c958bb74eab7cbabe596f2700adee8b6ce Author: Po Lu Date: Thu Feb 3 01:47:29 2022 +0000 Fix background daemon on Haiku * src/emacs.c (DAEMON_MUST_EXEC): Define when using the Haiku application kit. diff --git a/src/emacs.c b/src/emacs.c index 2014e97fbf..31cc2078bd 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -190,8 +190,11 @@ static uintmax_t heap_bss_diff; We mark being in the exec'd process by a daemon name argument of form "--daemon=\nFD0,FD1\nNAME" where FD are the pipe file descriptors, - NAME is the original daemon name, if any. */ -#if defined NS_IMPL_COCOA || defined CYGWIN + NAME is the original daemon name, if any. + + On Haiku, the table of semaphores used for looper locks doesn't + persist across forked processes. */ +#if defined NS_IMPL_COCOA || defined CYGWIN || defined HAVE_HAIKU # define DAEMON_MUST_EXEC #endif commit aa67e10fe97fad65430780439df337ae8a463dac Author: Po Lu Date: Thu Feb 3 09:28:43 2022 +0800 Prevent the initial frame from showing up in the frame menu * lisp/menu-bar.el (menu-bar-update-buffers): Ignore initial frame when generating frame list. (bug#53740) diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el index bde34ac910..891cdfd5d5 100644 --- a/lisp/menu-bar.el +++ b/lisp/menu-bar.el @@ -2342,9 +2342,12 @@ It must accept a buffer as its only required argument.") (and (lookup-key (current-global-map) [menu-bar buffer]) (or force (frame-or-buffer-changed-p)) (let ((buffers (buffer-list)) - (frames (frame-list)) - buffers-menu) - + frames buffers-menu) + ;; Ignore the initial frame if present. It can happen if + ;; Emacs was started as a daemon. (bug#53740) + (dolist (frame (frame-list)) + (unless (eq frame frame-initial-frame) + (push frame frames))) ;; Make the menu of buffers proper. (setq buffers-menu (let ((i 0) commit 7728f493cd1416bac45be4b4495c989e12caf3ac Author: Stefan Kangas Date: Wed Feb 2 20:56:56 2022 +0100 New theme leuven-dark (Bug#53032) * etc/themes/leuven-dark-theme.el: New file, written by Fabrice Niessen and Thibault Polge. diff --git a/etc/NEWS b/etc/NEWS index cb9f855a9c..ff9f22b6b0 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -917,6 +917,10 @@ Enabling this minor mode turns on hiding header material, like * New Modes and Packages in Emacs 29.1 +--- +** New theme 'leuven-dark'. +This is a dark version of the 'leuven' theme. + +++ ** New mode 'erts-mode'. This mode is used to edit files geared towards testing actions in diff --git a/etc/themes/leuven-dark-theme.el b/etc/themes/leuven-dark-theme.el new file mode 100644 index 0000000000..0f4c7920eb --- /dev/null +++ b/etc/themes/leuven-dark-theme.el @@ -0,0 +1,1095 @@ +;;; leuven-dark-theme.el --- Awesome Emacs color theme on dark background + +;; Copyright (C) 2003-2022 Free Software Foundation, Inc. + +;; Author: Fabrice Niessen <(concat "fniessen" at-sign "pirilampo.org")> +;; Contributor: Thibault Polge <(concat "thibault" at-sign "thb.lt")> +;; URL: https://github.com/fniessen/emacs-leuven-dark-theme +;; Version: 20220202.1126 +;; Keywords: color theme + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . + +;;; Commentary: + +;; This elegant Org-enhancing color theme "leuven-dark" ROCKS! +;; ... and not just for Org mode. +;; +;; To use it, put the following in your Emacs configuration file: +;; +;; (load-theme 'leuven-dark t) +;; +;; Requirements: Emacs 24+. +;; +;; NOTE -- Would you like implement a version of this for dark backgrounds, +;; please do so! I'm willing to integrate it... + +;;; Code: + +;;; Options. + +(defgroup leuven-dark nil + "Leuven theme options. +The theme has to be reloaded after changing anything in this group." + :group 'faces) + +(defcustom leuven-dark-scale-org-document-title t + "Scale Org document title. +This can be nil for unscaled, t for using the theme default, or a scaling +number." + :type '(choice + (const :tag "Unscaled" nil) + (const :tag "Default provided by theme" t) + (number :tag "Set scaling"))) + +(defcustom leuven-dark-scale-outline-headlines t + "Scale `outline' (and `org') level-1 headlines. +This can be nil for unscaled, t for using the theme default, or a scaling +number." + :type '(choice + (const :tag "Unscaled" nil) + (const :tag "Default provided by theme" t) + (number :tag "Set scaling"))) + +(defcustom leuven-dark-scale-org-agenda-structure t + "Scale Org agenda structure lines, like dates. +This can be nil for unscaled, t for using the theme default, or a scaling +number." + :type '(choice + (const :tag "Unscaled" nil) + (const :tag "Default provided by theme" t) + (number :tag "Set scaling"))) + +(defcustom leuven-dark-scale-volatile-highlight t + "Increase size in the `next-error' face. +This can be nil for unscaled, t for using the theme default, or a scaling +number." + :type '(choice + (const :tag "Unscaled" nil) + (const :tag "Default provided by theme" t) + (number :tag "Set scaling"))) + +;;;###autoload +(defun leuven-dark-scale-font (control default-height) + "Function for splicing optional font heights into face descriptions. +CONTROL can be a number, nil, or t. When t, use DEFAULT-HEIGHT." + (cond + ((numberp control) (list :height control)) + ((eq t control) (list :height default-height)) + (t nil))) + +;;; Theme Faces. + +(deftheme leuven-dark + "Face colors with a light background. +Basic, Font Lock, Isearch, Gnus, Message, Org mode, Diff, Ediff, +Flyspell, Semantic, and Ansi-Color faces are included -- and much +more...") + +(let ((class '((class color) (min-colors 89))) + + ;; Leuven generic colors. + (cancel '(:slant italic :strike-through t :foreground "#5b5660")) + (clock-line '(:box (:line-width 1 :color "#cfa161") :foreground "#ffffff" :background "#1636ff")) + (code-block '(:foreground "#ffff7f" :background "#252046")) + (code-inline '(:foreground "#ff9bff" :background "#262031")) + (column '(:height 1.0 :weight normal :slant normal :underline nil :strike-through nil :foreground "#1e52b8" :background "#252c48")) + (completion-inline '(:weight normal :foreground "#443f49" :inherit hl-line)) ; Like Google. + (completion-other-candidates '(:weight bold :foreground "#ffffff" :background "#372a2a")) + (completion-selected-candidate '(:weight bold :foreground "#25202a" :background "#ffad65")) + (diff-added '(:background "#442049")) + (diff-changed '(:foreground "#ffff0b" :background "#443f2a")) + (diff-header '(:weight bold :foreground "#83ffff" :background "#252073")) + (diff-hunk-header '(:foreground "#6bff6f" :background "#252f2a")) + (diff-none '(:foreground "#7b777f")) + (diff-refine-added '(:background "#6d0d73")) + (diff-refine-removed '(:background "#06494f")) + (diff-removed '(:background "#25353e")) + (directory '(:weight bold :foreground "#ffff0b" :background "#252053")) + (file '(:foreground "#ffffff")) + (function-param '(:foreground "#de8d83")) + (grep-file-name '(:weight bold :foreground "#d8b76b")) ; Used for grep hits. + (grep-line-number '(:weight bold :foreground "#5fca5b")) + (highlight-blue '(:background "#3c312a")) + (highlight-blue2 '(:background "#3e2d2f")) + (highlight-gray '(:background "#3e3944")) + (highlight-green '(:background "#2f0e3a")) + (highlight-red '(:background "#063741")) + (highlight-yellow '(:background "#2d2058")) + (link '(:weight normal :underline t :foreground "#ff925a")) + (link-no-underline '(:weight normal :foreground "#ff925a")) + (mail-header-name '(:family "Sans Serif" :weight normal :foreground "#615c67")) + (mail-header-other '(:family "Sans Serif" :slant normal :foreground "#9d99a1")) + (mail-read '(:foreground "#77737b")) + (mail-read-high '(:foreground "#837f87")) + (mail-ticked '(:foreground "#06ccff")) + (mail-to '(:family "Sans Serif" :underline nil :foreground "#ff925a")) + (mail-unread '(:weight bold :foreground "#ffffff")) + (mail-unread-high '(:weight bold :foreground "#eea682")) + (marked-line '(:foreground "#5affff" :background "#06555f")) + (match '(:weight bold :background "#0601ff")) ; occur patterns + match in helm for files + match in Org files. + (ol1 `(,@(leuven-dark-scale-font leuven-dark-scale-outline-headlines 1.3) :weight bold :overline "#5d5862" :foreground "#c7c3cb" :background "#322d37")) + (ol2 '(:height 1.0 :weight bold :overline "#efcab2" :foreground "#efcab2" :background "#3d2a2d")) + (ol3 '(:height 1.0 :weight bold :foreground "#ffaae3" :background "#332038")) + (ol4 '(:height 1.0 :weight bold :slant normal :foreground "#1a9cff")) + (ol5 '(:height 1.0 :weight bold :slant normal :foreground "#21da7a")) + (ol6 '(:height 1.0 :weight bold :slant italic :foreground "#ff883d")) + (ol7 '(:height 1.0 :weight bold :slant italic :foreground "#d451d9")) + (ol8 '(:height 1.0 :weight bold :slant italic :foreground "#077ffa")) + (paren-matched '(:background "#7B4B98")) ; XXX Edited by hqnd. + (paren-unmatched '(:weight bold :underline "#06ffff" :foreground "#ffffff" :background "#065a64")) + (region '(:background "#752c0b")) + (shadow '(:foreground "#848088")) + (string '(:foreground "#ff7fff")) ; or #34c8d8 + (subject '(:family "Sans Serif" :weight bold :foreground "#ffffff")) + (symlink '(:foreground "#e37233")) + (tab '(:foreground "#3a353f" :background "#25202a")) + (trailing '(:foreground "#3a353f" :background "#252076")) + (volatile-highlight '(:underline nil :foreground "#25202a" :background "#66c96f")) + (volatile-highlight-supersize `(,@(leuven-dark-scale-font leuven-dark-scale-volatile-highlight 1.1) :underline nil :foreground "#25202a" :background "#66c96f")) ; flash-region + (vc-branch '(:box (:line-width 1 :color "#ff33d2") :foreground "#ffffff" :background "#5a015f")) + (xml-attribute '(:foreground "#119cd0")) + (xml-tag '(:foreground "#56e46f")) + (highlight-current-tag '(:background "#3a352a")) ; #342b32 or #0614df + ) + + (custom-theme-set-faces + 'leuven-dark + `(default ((,class (:foreground "#cfccd2" :background "#25202a")))) + `(bold ((,class (:weight bold :foreground "#ffffff")))) + `(bold-italic ((,class (:weight bold :slant italic :foreground "#ffffff")))) + `(italic ((,class (:slant italic :foreground "#e8e5eb")))) + `(underline ((,class (:underline t)))) + `(cursor ((,class (:background "#e1420b")))) + + ;; Lucid toolkit emacs menus. + `(menu ((,class (:foreground "#25202a" :background "#cfccd2")))) + + ;; Highlighting faces. + `(fringe ((,class (:foreground "#b76130" :background "#25202a")))) + `(highlight ((,class ,highlight-blue))) + `(region ((,class ,region))) + `(secondary-selection ((,class ,match))) ; Used by Org-mode for highlighting matched entries and keywords. + `(isearch ((,class (:underline "#ffffff" :foreground "#25202a" :background "#aa8b5e")))) + `(isearch-fail ((,class (:weight bold :foreground "#ffffff" :background "#06333d")))) + `(lazy-highlight ((,class (:foreground "#ffffff" :background "#0601ff")))) ; Isearch others (see `match'). + `(trailing-whitespace ((,class ,trailing))) + `(query-replace ((,class (:inherit isearch)))) + `(whitespace-hspace ((,class (:foreground "#322d37")))) ; see also `nobreak-space' + `(whitespace-indentation ((,class ,tab))) + `(whitespace-line ((,class (:foreground "#38ffff" :background "#06017f")))) + `(whitespace-tab ((,class ,tab))) + `(whitespace-trailing ((,class ,trailing))) + + ;; Mode line faces. + `(mode-line ((,class (:box (:line-width 1 :color "#e8d0b3") :foreground "#7e311e" :background "#cfa161")))) + `(mode-line-inactive ((,class (:box (:line-width 1 :color "#b5b1bb") :foreground "#322d38" :background "#696371")))) + `(mode-line-buffer-id ((,class (:weight bold :foreground "#25202a")))) + `(mode-line-emphasis ((,class (:weight bold :foreground "#25202a")))) + `(mode-line-highlight ((,class (:foreground "#0601ff")))) + + ;; Escape and prompt faces. + `(minibuffer-prompt ((,class (:weight bold :foreground "#ffffff" :background "#0628ff")))) + `(minibuffer-noticeable-prompt ((,class (:weight bold :foreground "#ffffff" :background "#0628ff")))) + `(escape-glyph ((,class (:foreground "#ff7138")))) + `(error ((,class (:foreground "#06ffff")))) + `(warning ((,class (:weight bold :foreground "#065aff")))) + `(success ((,class (:foreground "#ff01ff")))) + + ;; Font lock faces. + `(font-lock-builtin-face ((,class (:foreground "#ff9029")))) + `(font-lock-comment-delimiter-face ((,class (:foreground "#767283")))) ; #9a969e + `(font-lock-comment-face ((,class (:slant italic :foreground "#767283")))) ; #9a969e + `(font-lock-constant-face ((,class (:foreground "#34c8d8")))) + `(font-lock-doc-face ((,class (:foreground "#fd95fa")))) + ;; `(font-lock-doc-string-face ((,class (:foreground "#ff7fff")))) ; XEmacs only, but is used for HTML exports from org2html (and not interactively) + `(font-lock-function-name-face ((,class (:weight normal :foreground "#ff996f")))) + `(font-lock-keyword-face ((,class (:bold nil :foreground "#ffff0b")))) ; #ccab2d + `(font-lock-preprocessor-face ((,class (:foreground "#837f87")))) + `(font-lock-regexp-grouping-backslash ((,class (:weight bold :inherit nil)))) + `(font-lock-regexp-grouping-construct ((,class (:weight bold :inherit nil)))) + `(font-lock-string-face ((,class ,string))) + `(font-lock-type-face ((,class (:weight normal :foreground "#9fcb66")))) + `(font-lock-variable-name-face ((,class (:weight normal :foreground "#4ac964")))) ; #83ff87 + `(font-lock-warning-face ((,class (:weight bold :foreground "#06ffff")))) + + ;; Button and link faces. + `(link ((,class ,link))) + `(link-visited ((,class (:underline t :foreground "#1f879a")))) + `(button ((,class (:underline t :foreground "#ff925a")))) + `(header-line ((,class (:box (:line-width 1 :color "#ffffff") :foreground "#ffffff" :background "#322d37")))) + + ;; Gnus faces. + `(gnus-button ((,class (:weight normal)))) + `(gnus-cite-attribution-face ((,class (:foreground "#b3af59")))) + `(gnus-cite-1 ((,class (:foreground "#b3af59" :background "#2d2832")))) + `(gnus-cite-2 ((,class (:foreground "#9dffa1" :background "#2d2832")))) + `(gnus-cite-3 ((,class (:foreground "#ff8890" :background "#2d2832")))) + `(gnus-cite-4 ((,class (:foreground "#6bffff" :background "#2d2832")))) + `(gnus-cite-5 ((,class (:foreground "#ffff6f" :background "#2d2832")))) + `(gnus-cite-6 ((,class (:foreground "#4999ff" :background "#2d2832")))) + `(gnus-cite-7 ((,class (:foreground "#b3af59" :background "#2d2832")))) + `(gnus-cite-8 ((,class (:foreground "#9dffa1" :background "#2d2832")))) + `(gnus-cite-9 ((,class (:foreground "#ff8890" :background "#2d2832")))) + `(gnus-cite-10 ((,class (:foreground "#6bffff" :background "#2d2832")))) + `(gnus-emphasis-bold ((,class (:weight bold)))) + `(gnus-emphasis-highlight-words ((,class (:foreground "#0601ff" :background "#ffffff")))) + `(gnus-group-mail-1 ((,class (:weight bold :foreground "#06af59")))) + `(gnus-group-mail-1-empty ((,class (:foreground "#b3af59")))) + `(gnus-group-mail-2 ((,class (:weight bold :foreground "#06ffa1")))) + `(gnus-group-mail-2-empty ((,class (:foreground "#9dffa1")))) + `(gnus-group-mail-3 ((,class ,mail-unread))) + `(gnus-group-mail-3-empty ((,class ,mail-read))) + `(gnus-group-mail-low ((,class ,cancel))) + `(gnus-group-mail-low-empty ((,class ,cancel))) + `(gnus-group-news-1 ((,class (:weight bold :foreground "#06af59")))) + `(gnus-group-news-1-empty ((,class (:foreground "#b3af59")))) + `(gnus-group-news-2 ((,class (:weight bold :foreground "#06ffa1")))) + `(gnus-group-news-2-empty ((,class (:foreground "#9dffa1")))) + `(gnus-group-news-3 ((,class ,mail-unread))) + `(gnus-group-news-3-empty ((,class ,mail-read))) + `(gnus-group-news-4 ((,class (:weight bold :foreground "#06ffff")))) + `(gnus-group-news-4-empty ((,class (:foreground "#6bffff")))) + `(gnus-group-news-5 ((,class (:weight bold :foreground "#06ff6f")))) + `(gnus-group-news-5-empty ((,class (:foreground "#ffff6f")))) + `(gnus-group-news-6 ((,class (:weight bold :foreground "#848088")))) + `(gnus-group-news-6-empty ((,class (:foreground "#837f87")))) + `(gnus-header-content ((,class ,mail-header-other))) + `(gnus-header-from ((,class (:family "Sans Serif" :foreground "#ffffff")))) + `(gnus-header-name ((,class ,mail-header-name))) + `(gnus-header-newsgroups ((,class (:family "Sans Serif" :foreground "#cf663d")))) + `(gnus-header-subject ((,class ,subject))) + `(gnus-picon ((,class (:foreground "#0601ff" :background "#25202a")))) + `(gnus-picon-xbm ((,class (:foreground "#0601ff" :background "#25202a")))) + `(gnus-server-closed ((,class (:slant italic :foreground "#ffff0b" :background "#25202a")))) + `(gnus-server-denied ((,class (:weight bold :foreground "#06ffff" :background "#25202a")))) + `(gnus-server-opened ((,class (:family "Sans Serif" :foreground "#25202a" :foreground "#bd9432")))) + `(gnus-signature ((,class (:slant italic :foreground "#787279")))) + `(gnus-splash ((,class (:foreground "#0673ff")))) + `(gnus-summary-cancelled ((,class ,cancel))) + `(gnus-summary-high-ancient ((,class ,mail-unread-high))) + `(gnus-summary-high-read ((,class ,mail-read-high))) + `(gnus-summary-high-ticked ((,class ,mail-ticked))) + `(gnus-summary-high-unread ((,class ,mail-unread-high))) + `(gnus-summary-low-ancient ((,class (:slant italic :foreground "#ffffff")))) + `(gnus-summary-low-read ((,class (:slant italic :foreground "#6b666f" :background "#413c46")))) + `(gnus-summary-low-ticked ((,class ,mail-ticked))) + `(gnus-summary-low-unread ((,class (:slant italic :foreground "#ffffff")))) + `(gnus-summary-normal-ancient ((,class ,mail-read))) + `(gnus-summary-normal-read ((,class ,mail-read))) + `(gnus-summary-normal-ticked ((,class ,mail-ticked))) + `(gnus-summary-normal-unread ((,class ,mail-unread))) + `(gnus-summary-selected ((,class (:foreground "#25202a" :background "#ff7332")))) + `(gnus-x-face ((,class (:foreground "#ffffff" :background "#25202a")))) + + ;; Message faces. + `(message-header-name ((,class ,mail-header-name))) + `(message-header-cc ((,class ,mail-to))) + `(message-header-other ((,class ,mail-header-other))) + `(message-header-subject ((,class ,subject))) + `(message-header-to ((,class ,mail-to))) + `(message-cited-text ((,class (:foreground "#b3af59" :background "#2d2832")))) + `(message-separator ((,class (:family "Sans Serif" :weight normal :foreground "#473d43")))) + `(message-header-newsgroups ((,class (:family "Sans Serif" :foreground "#cf663d")))) + `(message-header-xheader ((,class ,mail-header-other))) + `(message-mml ((,class (:foreground "#e074e3")))) + + ;; Diff. + `(diff-added ((,class ,diff-added))) + `(diff-changed ((,class ,diff-changed))) + `(diff-context ((,class ,diff-none))) + `(diff-file-header ((,class ,diff-header))) + `(diff-file1-hunk-header ((,class (:foreground "#78ff7c" :background "#382c33")))) + `(diff-file2-hunk-header ((,class (:foreground "#d781db" :background "#382c33")))) + `(diff-function ((,class (:foreground "#38663d")))) + `(diff-header ((,class ,diff-header))) + `(diff-hunk-header ((,class ,diff-hunk-header))) + `(diff-index ((,class ,diff-header))) + `(diff-indicator-added ((,class (:foreground "#c966cc" :background "#53204e")))) + `(diff-indicator-changed ((,class (:background "#46302a")))) + `(diff-indicator-removed ((,class (:foreground "#38ccd2" :background "#254046")))) + `(diff-refine-added ((,class ,diff-refine-added))) + `(diff-refine-change ((,class (:background "#443f2a")))) + `(diff-refine-removed ((,class ,diff-refine-removed))) + `(diff-removed ((,class ,diff-removed))) + + ;; SMerge. + `(smerge-mine ((,class ,diff-changed))) + `(smerge-other ((,class ,diff-added))) + `(smerge-base ((,class ,diff-removed))) + `(smerge-markers ((,class (:background "#253859")))) + `(smerge-refined-change ((,class (:background "#5a550b")))) + + ;; Ediff. + `(ediff-current-diff-A ((,class (:background "#253f49")))) + `(ediff-current-diff-B ((,class (:background "#442049")))) + `(ediff-current-diff-C ((,class (:background "#ff010b")))) + `(ediff-even-diff-A ((,class (:background "#312c36")))) + `(ediff-even-diff-B ((,class (:background "#312c36")))) + `(ediff-fine-diff-A ((,class (:background "#06555f")))) + `(ediff-fine-diff-B ((,class (:background "#ae01b2")))) + `(ediff-odd-diff-A ((,class (:background "#312c36")))) + `(ediff-odd-diff-B ((,class (:background "#312c36")))) + + ;; Flyspell. + (if (version< emacs-version "24.4") + `(flyspell-duplicate ((,class (:underline "#101487" :inherit nil)))) + `(flyspell-duplicate ((,class (:underline (:style wave :color "#101487") :background "#292759" :inherit nil))))) + (if (version< emacs-version "24.4") + `(flyspell-incorrect ((,class (:underline "#0a5864" :inherit nil)))) + `(flyspell-incorrect ((,class (:underline (:style wave :color "#0a5864") :background "#2f454c":inherit nil))))) + + ;; ;; Semantic faces. + ;; `(semantic-decoration-on-includes ((,class (:underline ,cham-4)))) + ;; `(semantic-decoration-on-private-members-face ((,class (:background ,alum-2)))) + ;; `(semantic-decoration-on-protected-members-face ((,class (:background ,alum-2)))) + `(semantic-decoration-on-unknown-includes ((,class (:background "#252630")))) + ;; `(semantic-decoration-on-unparsed-includes ((,class (:underline ,orange-3)))) + `(semantic-highlight-func-current-tag-face ((,class ,highlight-current-tag))) + `(semantic-tag-boundary-face ((,class (:overline "#8c8890")))) ; Method separator. + ;; `(semantic-unmatched-syntax-face ((,class (:underline ,red-1)))) + + `(Info-title-1-face ((,class ,ol1))) + `(Info-title-2-face ((,class ,ol2))) + `(Info-title-3-face ((,class ,ol3))) + `(Info-title-4-face ((,class ,ol4))) + `(ace-jump-face-foreground ((,class (:weight bold :foreground "#ffffff" :background "#065aff")))) + `(ahs-face ((,class (:background "#3e392a")))) + `(ahs-definition-face ((,class (:background "#064943")))) + `(ahs-plugin-defalt-face ((,class (:background "#25392a")))) ; Current. + `(anzu-match-1 ((,class (:foreground "#ffffff" :background "#840135")))) + `(anzu-match-2 ((,class (:foreground "#ffffff" :background "springgreen")))) + `(anzu-match-3 ((,class (:foreground "#ffffff" :background "#06ffff")))) + `(anzu-mode-line ((,class (:foreground "#ffffff" :background "#830187")))) + `(anzu-mode-line-no-match ((,class (:foreground "#ffffff" :background "#067f87")))) + `(anzu-replace-highlight ((,class (:inherit query-replace)))) + `(anzu-replace-to ((,class (:weight bold :foreground "#47cc0c" :background "#0742d2")))) + `(auto-dim-other-buffers-face ((,class (:background "#2c2731")))) + `(avy-background-face ((,class (:background "#5b5660")))) + `(avy-lead-face ((,class (:weight bold :foreground "#ffffff" :background "#065aff")))) + `(bbdb-company ((,class (:slant italic :foreground "#bd7d55")))) + `(bbdb-field-name ((,class (:weight bold :foreground "#bd7d55")))) + `(bbdb-field-value ((,class (:foreground "#bd7d55")))) + `(bbdb-name ((,class (:underline t :foreground "#0699d2")))) + `(bmkp-light-autonamed ((,class (:background "#322d37")))) + `(bmkp-light-fringe-autonamed ((,class (:foreground "#a9a5ad" :background "#302b35")))) + `(bmkp-light-fringe-non-autonamed ((,class (:foreground "#252059" :background "#fe010e")))) ; default + `(bmkp-light-non-autonamed ((,class (:background "#60202a")))) + `(bmkp-no-local ((,class (:background "#063f3e")))) + `(browse-kill-ring-separator-face ((,class (:foreground "#06ffff")))) + `(calendar-month-header ((,class (:weight bold :foreground "#b4b5ca" :background "#252059")))) + `(calendar-today ((,class (:weight bold :foreground "#b4b5ca" :background "#252059")))) + `(calendar-weekday-header ((,class (:weight bold :foreground "#ec9d5a")))) + `(calendar-weekend-header ((,class (:weight bold :foreground "#b5b1b9")))) + `(cfw:face-annotation ((,class (:foreground "#ff01ff" :background "#06ffff")))) + `(cfw:face-day-title ((,class (:foreground "#3b3640")))) + `(cfw:face-default-content ((,class (:foreground "#d9ad66")))) + `(cfw:face-default-day ((,class (:weight bold)))) + `(cfw:face-disable ((,class (:foreground "#5b5660")))) + `(cfw:face-grid ((,class (:foreground "#27222c")))) + `(cfw:face-header ((,class (:foreground "#ec9d5a" :background "#25202a" :weight bold)))) + `(cfw:face-holiday ((,class (:foreground "#8c8890" :background "#3e322a")))) + `(cfw:face-periods ((,class (:foreground "#25202a" :background "#9d7330" :slant italic)))) + `(cfw:face-saturday ((,class (:foreground "#b5b1b9" :background "#25202a" :weight bold)))) + `(cfw:face-select ((,class (:foreground "#b96a1e" :background "#352d2e")))) + `(cfw:face-sunday ((,class (:foreground "#b5b1b9" :background "#25202a" :weight bold)))) + `(cfw:face-title ((,class (:height 2.0 :foreground "#9c98a0" :weight bold :inherit variable-pitch)))) + `(cfw:face-today ((,class (:foreground "#b4b5ca" :background "#252059")))) + `(cfw:face-today-title ((,class (:foreground "#25202a" :background "#eb9958")))) + `(cfw:face-toolbar ((,class (:background "#25202a")))) + `(cfw:face-toolbar-button-off ((,class (:foreground "#35303a" :background "#25202a")))) + `(cfw:face-toolbar-button-on ((,class (:foreground "#a5a1a9" :background "#2d2832")))) + `(change-log-date ((,class (:foreground "#64df19")))) + `(change-log-file ((,class (:weight bold :foreground "#c27c45")))) + `(change-log-list ((,class (:foreground "#ffffff" :background "#8e1142")))) + `(change-log-name ((,class (:foreground "#ff7fff")))) + `(circe-highlight-all-nicks-face ((,class (:foreground "#ffff0b" :background "#322d37")))) ; other nick names + `(circe-highlight-nick-face ((,class (:foreground "#ff6cff" :background "#322d37")))) ; messages with my nick cited + `(circe-my-message-face ((,class (:foreground "#78747c" :background "#322d37")))) + `(circe-originator-face ((,class (:foreground "#ffff0b")))) + `(circe-prompt-face ((,class (:foreground "#06ffff")))) + `(circe-server-face ((,class (:foreground "#6b3524")))) + `(comint-highlight-input ((,class (:weight bold :foreground "#ffff0b" :inherit nil)))) + ;; `(comint-highlight-prompt ((,class (:weight bold :foreground "#ffffff" :background "#0628ff")))) + `(comint-highlight-prompt ((,class (:weight bold :foreground "#ffff0b" :inherit nil)))) + + ;; `(ac-selection-face ((,class ,completion-selected-candidate))) + `(ac-selection-face ((,class (:weight bold :foreground "#25202a" :background "#065aff")))) ; TEMP For diff'ing AC from Comp. + `(ac-candidate-face ((,class ,completion-other-candidates))) + `(ac-completion-face ((,class ,completion-inline))) + `(ac-candidate-mouse-face ((,class (:inherit highlight)))) + `(popup-scroll-bar-background-face ((,class (:background "#372a2a")))) + `(popup-scroll-bar-foreground-face ((,class (:background "#332525")))) ; Scrollbar (visible). + + ;; Company. + `(company-tooltip-common-selection ((,class (:weight normal :foreground "#2a3159" :inherit company-tooltip-selection)))) ; Prefix + common part in tooltip (for selection). + `(company-tooltip-selection ((,class ,completion-selected-candidate))) ; Suffix in tooltip (for selection). + `(company-tooltip-annotation-selection ((,class (:weight normal :foreground "#2a3159")))) ; Annotation (for selection). + + `(company-tooltip-common ((,class (:weight normal :foreground "#54ff59" :inherit company-tooltip)))) ; Prefix + common part in tooltip. + `(company-tooltip ((,class ,completion-other-candidates))) ; Suffix in tooltip. + `(company-tooltip-annotation ((,class (:weight normal :foreground "#deea0b")))) ; Annotation. + `(company-preview ((,class ,completion-inline))) + `(company-preview-common ((,class ,completion-inline))) + `(company-scrollbar-bg ((,class (:background "#372a2a")))) + `(company-scrollbar-fg ((,class (:background "#332525")))) ; Scrollbar (visible). + + `(compare-windows ((,class (:background "#0601ff")))) + ;; `(completions-common-part ((,class (:foreground "#06ffff" :weight bold)))) + ;; `(completions-first-difference ((,class (:foreground "#ff01ff" :weight bold)))) + `(compilation-error ((,class (:weight bold :foreground "#06ffff")))) ; Used for grep error messages. + `(compilation-info ((,class ,grep-file-name))) + `(compilation-line-number ((,class ,grep-line-number))) + `(compilation-warning ((,class (:weight bold :foreground "#065aff")))) + `(compilation-mode-line-exit ((,class (:weight bold :foreground "#ff01ff")))) ; :exit[matched] + `(compilation-mode-line-fail ((,class (:weight bold :foreground "#167d1b")))) ; :exit[no match] + `(compilation-mode-line-run ((,class (:weight bold :foreground "#065aff")))) ; :run + `(css-property ((,class (:foreground "#ff55ff")))) + `(css-selector ((,class (:weight bold :foreground "#ffff0b")))) + `(custom-button ((,class (:box (:line-width 2 :style released-button) :foreground "#ffffff" :background "lightgrey")))) + `(custom-button-mouse ((,class (:box (:line-width 2 :style released-button) :foreground "#ffffff" :background "#3d3842")))) + `(custom-button-pressed ((,class (:box (:line-width 2 :style pressed-button) :foreground "#ffffff" :background "#312c36")))) + `(custom-button-pressed-unraised ((,class (:underline t :foreground "#78ff7c")))) + `(custom-button-unraised ((,class (:underline t)))) + `(custom-changed ((,class (:foreground "#25202a" :background "#ffff0b")))) + `(custom-comment ((,class (:background "#2b2630")))) + `(custom-comment-tag ((,class (:foreground "#ffff7c")))) + `(custom-documentation ((,class (nil)))) + `(custom-face-tag ((,class (:family "Sans Serif" :height 1.2 :weight bold)))) + `(custom-group-tag ((,class (:height 1.2 :weight bold :foreground "#ffff0b")))) + `(custom-group-tag-1 ((,class (:family "Sans Serif" :height 1.2 :weight bold :foreground "#06ffff")))) + `(custom-invalid ((,class (:foreground "#0601ff" :background "#06ffff")))) + `(custom-link ((,class (:underline t :foreground "#ffff0b")))) + `(custom-modified ((,class (:foreground "#25202a" :background "#ffff0b")))) + `(custom-rogue ((,class (:foreground "#063f3e" :background "#ffffff")))) + `(custom-saved ((,class (:underline t)))) + `(custom-set ((,class (:foreground "#ffff0b" :background "#25202a")))) + `(custom-state ((,class (:foreground "#ff74ff")))) + `(custom-themed ((,class (:foreground "#25202a" :background "#ffff0b")))) + `(custom-variable-button ((,class (:weight bold :underline t)))) + `(custom-variable-tag ((,class (:family "Sans Serif" :height 1.2 :weight bold :foreground "#ffff0b")))) + `(custom-visibility ((,class ,link))) + `(diff-hl-change ((,class (:foreground "#ffff3c" :background "#46302a")))) + `(diff-hl-delete ((,class (:foreground "#37ffff" :background "#254046")))) + `(diff-hl-dired-change ((,class (:weight bold :foreground "#ffffff" :background "#065cd0")))) + `(diff-hl-dired-delete ((,class (:weight bold :foreground "#2dc6ef")))) + `(diff-hl-dired-ignored ((,class (:weight bold :foreground "#25202a" :background "#44445e")))) + `(diff-hl-dired-insert ((,class (:weight bold :foreground "#4b464f")))) + `(diff-hl-dired-unknown ((,class (:foreground "#25202a" :background "#c4c455")))) + `(diff-hl-insert ((,class (:foreground "#ff74ff" :background "#53204e")))) + `(diff-hl-unknown ((,class (:foreground "#25202a" :background "#c4c455")))) + `(diary-face ((,class (:foreground "#7c360d")))) + `(dircolors-face-asm ((,class (:foreground "#ffffff")))) + `(dircolors-face-backup ((,class (:foreground "#ffffff")))) + `(dircolors-face-compress ((,class (:foreground "#06ffff")))) + `(dircolors-face-dir ((,class ,directory))) + `(dircolors-face-doc ((,class (:foreground "#ffffff")))) + `(dircolors-face-dos ((,class (:foreground "#e074e3")))) + `(dircolors-face-emacs ((,class (:foreground "#ffffff")))) + `(dircolors-face-exec ((,class (:foreground "#e074e3")))) + `(dircolors-face-html ((,class (:foreground "#ffffff")))) + `(dircolors-face-img ((,class (:foreground "#37ff3c")))) + `(dircolors-face-lang ((,class (:foreground "#ffffff")))) + `(dircolors-face-lang-interface ((,class (:foreground "#ffffff")))) + `(dircolors-face-make ((,class (:foreground "#ffffff")))) + `(dircolors-face-objet ((,class (:foreground "#ffffff")))) + `(dircolors-face-package ((,class (:foreground "#ffffff")))) + `(dircolors-face-paddb ((,class (:foreground "#ffffff")))) + `(dircolors-face-ps ((,class (:foreground "#ffffff")))) + `(dircolors-face-sound ((,class (:foreground "#ff400b")))) + `(dircolors-face-tar ((,class (:foreground "#06ffff")))) + `(dircolors-face-text ((,class (:foreground "#ffffff")))) + `(dircolors-face-yacc ((,class (:foreground "#ffffff")))) + `(dired-directory ((,class ,directory))) + `(dired-header ((,class ,directory))) + `(dired-ignored ((,class (:strike-through t :foreground "#06ffff")))) + `(dired-mark ((,class ,marked-line))) + `(dired-marked ((,class ,marked-line))) + `(dired-symlink ((,class ,symlink))) + `(diredfl-compressed-file-suffix ((,class (:foreground "#ffffff" :background "#2526c0")))) + `(diredp-compressed-file-suffix ((,class (:foreground "#06ffff")))) + `(diredp-date-time ((,class (:foreground "#64df19")))) + `(diredp-dir-heading ((,class ,directory))) + `(diredp-dir-name ((,class ,directory))) + `(diredp-dir-priv ((,class ,directory))) + `(diredp-exec-priv ((,class (:background "#fd3fcb")))) + `(diredp-executable-tag ((,class (:foreground "#e074e3" :background "#25202a")))) + `(diredp-file-name ((,class ,file))) + `(diredp-file-suffix ((,class (:foreground "#443f49")))) + `(diredp-flag-mark-line ((,class ,marked-line))) + `(diredp-ignored-file-name ((,class ,shadow))) + `(diredp-read-priv ((,class (:background "#f7660b")))) + `(diredp-write-priv ((,class (:foreground "#25202a" :background "#06bfc7")))) + `(doom-modeline-panel ((,class (:foreground "#ffffff" :background "#2526c0")))) + `(eldoc-highlight-function-argument ((,class (:weight bold :foreground "#06ffff" :background "#25392a")))) + `(elfeed-search-filter-face ((,class (:foreground "#46414b")))) + ;; `(eww-form-checkbox ((,class ()))) + ;; `(eww-form-select ((,class ()))) + ;; `(eww-form-submit ((,class ()))) + `(eww-form-text ((,class (:weight bold :foreground "#c3a798" :background "#5d3218")))) + ;; `(eww-form-textarea ((,class ()))) + `(file-name-shadow ((,class ,shadow))) + `(flycheck-error ((,class (:underline (:color "#06dae7" :style wave) :weight bold :background "#253c46")))) + `(flycheck-error-list-line-number ((,class (:foreground "#5fca5b")))) + `(flycheck-fringe-error ((,class (:foreground "#06dae7")))) + `(flycheck-fringe-info ((,class (:foreground "#ed75ef")))) + `(flycheck-fringe-warning ((,class (:foreground "#1056cd")))) + `(flycheck-info ((,class (:underline (:color "#ed75ef" :style wave) :weight bold)))) + `(flycheck-warning ((,class (:underline (:color "#1056cd" :style wave) :weight bold :background "#252066")))) + `(font-latex-bold-face ((,class (:weight bold :foreground "#ffffff")))) + `(fancy-narrow-blocked-face ((,class (:foreground "#6b6765")))) + `(flycheck-color-mode-line-error-face ((, class (:background "#35a4b1")))) + `(flycheck-color-mode-line-warning-face ((, class (:background "#1938ff")))) + `(flycheck-color-mode-line-info-face ((, class (:background "#0601ff")))) + `(font-latex-italic-face ((,class (:slant italic :foreground "#e8e5eb")))) + `(font-latex-math-face ((,class (:foreground "#ffff0b")))) + `(font-latex-sectioning-1-face ((,class (:family "Sans Serif" :height 2.7 :weight bold :foreground "#9f6a1c")))) + `(font-latex-sectioning-2-face ((,class ,ol1))) + `(font-latex-sectioning-3-face ((,class ,ol2))) + `(font-latex-sectioning-4-face ((,class ,ol3))) + `(font-latex-sectioning-5-face ((,class ,ol4))) + `(font-latex-sedate-face ((,class (:foreground "#06aaff")))) + `(font-latex-string-face ((,class (:weight bold :foreground "#ff990b")))) + `(font-latex-verbatim-face ((,class (:foreground "#ffff7f" :background "#252046" :inherit nil)))) + `(git-commit-summary-face ((,class (:foreground "#ffffff")))) + `(git-commit-comment-face ((,class (:slant italic :foreground "#9a969e")))) + `(git-timemachine-commit ((,class ,diff-removed))) + `(git-timemachine-minibuffer-author-face ((,class ,diff-added))) + `(git-timemachine-minibuffer-detail-face ((,class ,diff-header))) + `(google-translate-text-face ((,class (:foreground "#8c8890" :background "#2e2933")))) + `(google-translate-phonetic-face ((,class (:inherit shadow)))) + `(google-translate-translation-face ((,class (:weight normal :foreground "#d2861c" :background "#3f3336")))) + `(google-translate-suggestion-label-face ((,class (:foreground "#06ffff")))) + `(google-translate-suggestion-face ((,class (:slant italic :underline t)))) + `(google-translate-listen-button-face ((,class (:height 0.8)))) + `(helm-action ((,class (:foreground "#ffffff")))) + `(helm-bookmark-file ((,class ,file))) + `(helm-bookmarks-su-face ((,class (:foreground "#06ffff")))) + `(helm-buffer-directory ((,class ,directory))) + ;; `(helm-non-file-buffer ((,class (:slant italic :foreground "#ffff0b")))) + ;; `(helm-buffer-file ((,class (:foreground "#cfccd2")))) + `(helm-buffer-modified ((,class (:slant italic :foreground "#4ac964")))) + `(helm-buffer-process ((,class (:foreground "#ff7dff")))) + `(helm-candidate-number ((,class (:foreground "#ffffff" :background "#0601a1")))) + `(helm-dir-heading ((,class (:foreground "#ffff0b" :background "#063f3e")))) + `(helm-dir-priv ((,class (:foreground "#78ffff" :background "#312c36")))) + `(helm-ff-directory ((,class ,directory))) + `(helm-ff-dotted-directory ((,class ,directory))) + `(helm-ff-executable ((,class (:foreground "#ff32ff" :background "#25202a")))) + `(helm-ff-file ((,class (:foreground "#ffffff")))) + `(helm-ff-invalid-symlink ((,class (:foreground "#0601ff" :background "#06ffff")))) + `(helm-ff-symlink ((,class ,symlink))) + `(helm-file-name ((,class (:foreground "#ffff0b")))) + `(helm-gentoo-match-face ((,class (:foreground "#06ffff")))) + `(helm-grep-file ((,class ,grep-file-name))) + `(helm-grep-lineno ((,class ,grep-line-number))) + `(helm-grep-match ((,class ,match))) + `(helm-grep-running ((,class (:weight bold :foreground "#25202a")))) + `(helm-isearch-match ((,class (:background "#38013d")))) + `(helm-lisp-show-completion ((,class ,volatile-highlight-supersize))) ; See `helm-dabbrev'. + ;; `(helm-ls-git-added-copied-face ((,class (:foreground "")))) + ;; `(helm-ls-git-added-modified-face ((,class (:foreground "")))) + ;; `(helm-ls-git-conflict-face ((,class (:foreground "")))) + ;; `(helm-ls-git-deleted-and-staged-face ((,class (:foreground "")))) + ;; `(helm-ls-git-deleted-not-staged-face ((,class (:foreground "")))) + ;; `(helm-ls-git-modified-and-staged-face ((,class (:foreground "")))) + `(helm-ls-git-modified-not-staged-face ((,class (:foreground "#4ac964")))) + ;; `(helm-ls-git-renamed-modified-face ((,class (:foreground "")))) + ;; `(helm-ls-git-untracked-face ((,class (:foreground "")))) + `(helm-match ((,class ,match))) + `(helm-moccur-buffer ((,class (:foreground "#ff993d")))) + `(helm-selection ((,class (:background "#cb8a33" :foreground "#25202a")))) + `(helm-selection-line ((,class ,highlight-gray))) ; ??? + `(helm-separator ((,class (:foreground "#06ffff")))) + `(helm-source-header ((,class (:weight bold :box (:line-width 1 :color "#3d3842") :background "#433e48" :foreground "#ffffff")))) + `(helm-swoop-target-line-block-face ((,class (:background "#3833ff" :foreground "#e0dde3")))) + `(helm-swoop-target-line-face ((,class (:background "#38330b")))) + `(helm-swoop-target-word-face ((,class (:weight bold :foreground nil :background "#0742d2")))) + `(helm-visible-mark ((,class ,marked-line))) + `(helm-w3m-bookmarks-face ((,class (:underline t :foreground "#ff010b")))) + `(highlight-changes ((,class (:foreground nil)))) ;; blue "#d4f754" + `(highlight-changes-delete ((,class (:strike-through nil :foreground nil)))) ;; red "#4ff7d7" + `(highlight-symbol-face ((,class (:background "#252080")))) + `(hl-line ((,class ,highlight-yellow))) ; Highlight current line. + `(hl-tags-face ((,class ,highlight-current-tag))) ; ~ Pair highlighting (matching tags). + `(holiday-face ((,class (:foreground "#8c8890" :background "#3e322a")))) + `(html-helper-bold-face ((,class (:weight bold :foreground "#ffffff")))) + `(html-helper-italic-face ((,class (:slant italic :foreground "#ffffff")))) + `(html-helper-underline-face ((,class (:underline t :foreground "#ffffff")))) + `(html-tag-face ((,class (:foreground "#ffff0b")))) + `(ilog-non-change-face ((,class (:height 2.0 :foreground "#9fcb66")))) + `(ilog-change-face ((,class (:height 2.0 :foreground "#ff7dff")))) + `(ilog-echo-face ((,class (:height 2.0 :foreground "#ff9029")))) + `(ilog-load-face ((,class (:foreground "#4ac964")))) + `(ilog-message-face ((,class (:foreground "#837f87")))) + `(indent-guide-face ((,class (:foreground "#312c36")))) + `(info-file ((,class (:family "Sans Serif" :height 1.8 :weight bold :box (:line-width 1 :color "#ffff3d") :foreground "#9f6a1c" :background "#563c2a")))) + `(info-header-node ((,class (:underline t :foreground "#065aff")))) ; nodes in header + `(info-header-xref ((,class (:underline t :foreground "#e46f0b")))) ; cross references in header + `(info-index-match ((,class (:weight bold :foreground nil :background "#0742d2")))) ; when using `i' + `(info-menu-header ((,class ,ol2))) ; menu titles (headers) -- major topics + `(info-menu-star ((,class (:foreground "#ffffff")))) ; every 3rd menu item + `(info-node ((,class (:underline t :foreground "#ffff0b")))) ; node names + `(info-quoted-name ((,class ,code-inline))) + `(info-string ((,class ,string))) + `(info-title-1 ((,class ,ol1))) + `(info-xref ((,class (:underline t :foreground "#ff925a")))) ; unvisited cross-references + `(info-xref-visited ((,class (:underline t :foreground "#78ff7c")))) ; previously visited cross-references + ;; js2-highlight-vars-face (~ auto-highlight-symbol) + `(js2-error ((,class (:box (:line-width 1 :color "#06c8cf") :background "#063741")))) ; DONE. + `(js2-external-variable ((,class (:foreground "#06ffff" :background "#252630")))) ; DONE. + `(js2-function-param ((,class ,function-param))) + `(js2-instance-member ((,class (:foreground "#6bcd3d")))) + `(js2-jsdoc-html-tag-delimiter ((,class (:foreground "#34c8d8")))) + `(js2-jsdoc-html-tag-name ((,class (:foreground "#34c8d8")))) + `(js2-jsdoc-tag ((,class (:weight normal :foreground "#9fcb66")))) + `(js2-jsdoc-type ((,class (:foreground "#bd7d55")))) + `(js2-jsdoc-value ((,class (:weight normal :foreground "#4ac964")))) ; #83ff87 + `(js2-magic-paren ((,class (:underline t)))) + `(js2-private-function-call ((,class (:foreground "#2a5ae5")))) + `(js2-private-member ((,class (:foreground "#375073")))) + `(js2-warning ((,class (:underline "#065aff")))) + + ;; Org non-standard faces. + `(leuven-dark-org-deadline-overdue ((,class (:foreground "#12d9ae")))) + `(leuven-dark-org-deadline-today ((,class (:weight bold :foreground "#b4b5ca" :background "#252059")))) + `(leuven-dark-org-deadline-tomorrow ((,class (:foreground "#c357f8")))) + `(leuven-dark-org-deadline-future ((,class (:foreground "#c357f8")))) + `(leuven-dark-gnus-unseen ((,class (:weight bold :foreground "#088dfd")))) + `(leuven-dark-gnus-date ((,class (:foreground "#067f4a")))) + `(leuven-dark-gnus-size ((,class (:foreground "#7440a7")))) + `(leuven-dark-todo-items-face ((,class (:weight bold :foreground "#06cee0" :background "#06017f")))) + + `(light-symbol-face ((,class (:background "#252080")))) + `(linum ((,class (:foreground "#6a656f" :background "#35303a")))) + `(log-view-file ((,class (:foreground "#ffff3d" :background "#382c33")))) + `(log-view-message ((,class (:foreground "#ffffff" :background "#171593")))) + `(lsp-modeline-code-actions-preferred-face ((,class (:foreground "#ffffff" :background "#2526c0")))) + `(lsp-ui-doc-background ((,class (:background "#2d2058")))) + `(lsp-ui-sideline-code-action ((,class (:foreground "#ffffff" :background "#2526c0")))) + `(lui-button-face ((,class ,link))) + `(lui-highlight-face ((,class (:box '(:line-width 1 :color "#38ffff") :foreground "#38ffff" :background "#06017f")))) ; my nickname + `(lui-time-stamp-face ((,class (:foreground "#64df19")))) + `(magit-blame-header ((,class (:inherit magit-diff-file-header)))) + `(magit-blame-heading ((,class (:overline "#5d5862" :foreground "#06ffff" :background "#3c3741")))) + `(magit-blame-hash ((,class (:overline "#5d5862" :foreground "#06ffff" :background "#3c3741")))) + `(magit-blame-name ((,class (:overline "#5d5862" :foreground "#fd95fa" :background "#3c3741")))) + `(magit-blame-date ((,class (:overline "#5d5862" :foreground "#ffff0b" :background "#3c3741")))) + `(magit-blame-summary ((,class (:overline "#5d5862" :weight bold :foreground "#938f97" :background "#3c3741")))) + `(magit-branch ((,class ,vc-branch))) + `(magit-diff-add ((,class ,diff-added))) + `(magit-diff-del ((,class ,diff-removed))) + `(magit-diff-file-header ((,class (:height 1.1 :weight bold :foreground "#c27c45")))) + `(magit-diff-hunk-header ((,class ,diff-hunk-header))) + `(magit-diff-none ((,class ,diff-none))) + `(magit-header ((,class (:foreground "#25202a" :background "#06bfc7")))) + `(magit-item-highlight ((,class (:background "#382c33")))) + `(magit-item-mark ((,class ,marked-line))) + `(magit-log-head-label ((,class (:box (:line-width 1 :color "#ffff0b" :style nil))))) + `(magit-log-tag-label ((,class (:box (:line-width 1 :color "#ff33ff" :style nil))))) + `(magit-section-highlight ((,class (:background "#2d2058")))) + `(magit-section-title ((,class (:family "Sans Serif" :height 1.8 :weight bold :foreground "#9f6a1c" :inherit nil)))) + `(makefile-space-face ((,class (:background "#069655")))) + `(makefile-targets ((,class (:weight bold :foreground "#ffff0b")))) + ;; `(markdown-blockquote-face ((,class ()))) + `(markdown-bold-face ((,class (:inherit bold)))) + ;; `(markdown-comment-face ((,class ()))) + ;; `(markdown-footnote-face ((,class ()))) + ;; `(markdown-header-delimiter-face ((,class ()))) + ;; `(markdown-header-face ((,class ()))) + `(markdown-header-face-1 ((,class ,ol1))) + `(markdown-header-face-2 ((,class ,ol2))) + `(markdown-header-face-3 ((,class ,ol3))) + `(markdown-header-face-4 ((,class ,ol4))) + `(markdown-header-face-5 ((,class ,ol5))) + `(markdown-header-face-6 ((,class ,ol6))) + ;; `(markdown-header-rule-face ((,class ()))) + `(markdown-inline-code-face ((,class ,code-inline))) + `(markdown-italic-face ((,class (:inherit italic)))) + `(markdown-language-keyword-face ((,class (:inherit org-block-begin-line)))) + ;; `(markdown-line-break-face ((,class ()))) + `(markdown-link-face ((,class ,link-no-underline))) + ;; `(markdown-link-title-face ((,class ()))) + ;; `(markdown-list-face ((,class ()))) + ;; `(markdown-math-face ((,class ()))) + ;; `(markdown-metadata-key-face ((,class ()))) + ;; `(markdown-metadata-value-face ((,class ()))) + ;; `(markdown-missing-link-face ((,class ()))) + `(markdown-pre-face ((,class (:inherit org-block-background)))) + ;; `(markdown-reference-face ((,class ()))) + ;; `(markdown-strike-through-face ((,class ()))) + `(markdown-url-face ((,class ,link))) + `(match ((,class ,match))) ; Used for grep matches. + `(mc/cursor-bar-face ((,class (:height 1.0 :foreground "#ec9b45" :background "#ec9b45")))) + `(mc/cursor-face ((,class (:inverse-video t)))) + `(mc/region-face ((,class (:inherit region)))) + `(mm-uu-extract ((,class ,code-block))) + `(moccur-current-line-face ((,class (:foreground "#ffffff" :background "#252059")))) + `(moccur-face ((,class (:foreground "#ffffff" :background "#06016f")))) + `(next-error ((,class ,volatile-highlight-supersize))) + `(nobreak-space ((,class (:background "#543532")))) + `(nxml-attribute-local-name-face ((,class ,xml-attribute))) + `(nxml-attribute-value-delimiter-face ((,class (:foreground "#ff74ff")))) + `(nxml-attribute-value-face ((,class (:foreground "#ff74ff")))) + `(nxml-comment-content-face ((,class (:slant italic :foreground "#06ffff")))) + `(nxml-comment-delimiter-face ((,class (:foreground "#06ffff")))) + `(nxml-element-local-name ((,class ,xml-tag))) + `(nxml-element-local-name-face ((,class (:foreground "#ffff0b")))) + `(nxml-processing-instruction-target-face ((,class (:foreground "#69cf0b")))) + `(nxml-tag-delimiter-face ((,class (:foreground "#ffff0b")))) + `(nxml-tag-slash-face ((,class (:foreground "#ffff0b")))) + `(org-agenda-block-count ((,class (:weight bold :foreground "#5f5a64")))) + `(org-agenda-calendar-event ((,class (:weight bold :foreground "#cc8b3d" :background "#3e322a")))) + `(org-agenda-calendar-sexp ((,class (:foreground "#d0853c" :background "#30272c")))) + `(org-agenda-clocking ((,class (:foreground "#ffffff" :background "#1636ff")))) + `(org-agenda-column-dateline ((,class ,column))) + `(org-agenda-current-time ((,class (:underline t :foreground "#ec9d5a")))) + `(org-agenda-date ((,class (,@(leuven-dark-scale-font leuven-dark-scale-org-agenda-structure 1.6) :weight bold :foreground "#ec9d5a")))) + `(org-agenda-date-today ((,class (,@(leuven-dark-scale-font leuven-dark-scale-org-agenda-structure 1.6) :weight bold :foreground "#b4b5ca" :background "#252059")))) + `(org-agenda-date-weekend ((,class (,@(leuven-dark-scale-font leuven-dark-scale-org-agenda-structure 1.6) :weight bold :foreground "#b5b1b9")))) + `(org-agenda-diary ((,class (:weight bold :foreground "#ff74ff" :background "#572723")))) + `(org-agenda-dimmed-todo-face ((,class (:foreground "#1636ff")))) + `(org-agenda-done ((,class (:foreground "#aeaab2")))) + `(org-agenda-filter-category ((,class (:weight bold :foreground "#065aff")))) + `(org-agenda-filter-effort ((,class (:weight bold :foreground "#065aff")))) + `(org-agenda-filter-regexp ((,class (:weight bold :foreground "#065aff")))) + `(org-agenda-filter-tags ((,class (:weight bold :foreground "#065aff")))) + `(org-agenda-restriction-lock ((,class (:background "#1d82a4")))) + `(org-agenda-structure ((,class (,@(leuven-dark-scale-font leuven-dark-scale-org-agenda-structure 1.6) :weight bold :foreground "#e37233")))) + `(org-archived ((,class (:foreground "#514c56")))) + `(org-beamer-tag ((,class (:box (:line-width 1 :color "#0a43ed") :foreground "#d6d3d9" :background "#252655")))) + `(org-block ((,class ,code-block))) + `(org-block-background ((,class (:background "#252046")))) ;; :inherit fixed-pitch)))) + `(org-block-begin-line ((,class (:underline "#5d595f" :foreground "#aeaab2" :background "#221e34")))) + `(org-block-end-line ((,class (:overline "#5d595f" :foreground "#aeaab2" :background "#221e34")))) + `(org-checkbox ((,class (:weight bold :box (:line-width 1 :style pressed-button) :foreground "#efcab2" :background "#615c66")))) + `(org-clock-overlay ((,class (:foreground "#25202a" :background "#b98f7c")))) + `(org-code ((,class ,code-inline))) + `(org-column ((,class ,column))) + `(org-column-title ((,class ,column))) + `(org-date ((,class (:underline t :foreground "#ffba6b")))) + `(org-default ((,class (:foreground "#cfccd2" :background "#25202a")))) + `(org-dim ((,class (:foreground "#5a555f")))) + `(org-document-info ((,class (:foreground "#bbb7bf")))) + `(org-document-info-keyword ((,class (:foreground "#ff7138" :background "#38332a")))) + `(org-document-title ((,class (,@(leuven-dark-scale-font leuven-dark-scale-org-document-title 1.8) :weight bold :foreground "#ffffff")))) + `(org-done ((,class (:weight bold :box (:line-width 1 :color "#49444e") :foreground "#49444e" :background "#322d37")))) + `(org-drawer ((,class (:weight bold :foreground "#ff44ff" :background "#38203d")))) + `(org-ellipsis ((,class (:underline nil :foreground "#6b666f")))) ; #0611a5 + `(org-example ((,class (:foreground "#ffff0b" :background "#38203d")))) + `(org-footnote ((,class (:underline t :foreground "#ff7138")))) + `(org-formula ((,class (:foreground "#0680e1")))) + ;; org-habit colours are thanks to zenburn + `(org-habit-ready-face ((t :background "#7F9F7F"))) ; ,zenburn-green + `(org-habit-alert-face ((t :background "#E0CF9F" :foreground "#3F3F3F"))) ; ,zenburn-yellow-1 fg ,zenburn-bg + `(org-habit-clear-face ((t :background "#5C888B"))) ; ,zenburn-blue-3 + `(org-habit-overdue-face ((t :background "#9C6363"))) ; ,zenburn-red-3 + `(org-habit-clear-future-face ((t :background "#4C7073"))) ; ,zenburn-blue-4 + `(org-habit-ready-future-face ((t :background "#5F7F5F"))) ; ,zenburn-green-2 + `(org-habit-alert-future-face ((t :background "#D0BF8F" :foreground "#3F3F3F"))) ; ,zenburn-yellow-2 fg ,zenburn-bg + `(org-habit-overdue-future-face ((t :background "#8C5353"))) ; ,zenburn-red-4 + `(org-headline-done ((,class (:height 1.0 :weight normal :foreground "#57525c")))) + `(org-hide ((,class (:foreground "#403b45")))) + `(org-inlinetask ((,class (:box (:line-width 1 :color "#37323c") :foreground "#8c8890" :background "#252050")))) + `(org-latex-and-related ((,class (:foreground "#cf996f" :background "#25202a")))) + `(org-level-1 ((,class ,ol1))) + `(org-level-2 ((,class ,ol2))) + `(org-level-3 ((,class ,ol3))) + `(org-level-4 ((,class ,ol4))) + `(org-level-5 ((,class ,ol5))) + `(org-level-6 ((,class ,ol6))) + `(org-level-7 ((,class ,ol7))) + `(org-level-8 ((,class ,ol8))) + `(org-link ((,class ,link))) + `(org-list-dt ((,class (:weight bold :foreground "#cfa161")))) + `(org-macro ((,class (:weight bold :foreground "#1747fd")))) + `(org-meta-line ((,class (:slant normal :foreground "#ff7138" :background "#38332a")))) + `(org-mode-line-clock ((,class (:box (:line-width 1 :color "#cfa161") :foreground "#ffffff" :background "#065cd0")))) + `(org-mode-line-clock-overrun ((,class (:weight bold :box (:line-width 1 :color "#cfa161") :foreground "#25202a" :background "#06bfc7")))) + `(org-number-of-items ((,class (:weight bold :foreground "#25202a" :background "#8a458e")))) + `(org-property-value ((,class (:foreground "#ff5fff")))) + `(org-quote ((,class (:slant italic :foreground "#9a969e" :background "#252046")))) + `(org-scheduled ((,class (:foreground "#cfccd2")))) + `(org-scheduled-previously ((,class (:foreground "#ed9943")))) + `(org-scheduled-today ((,class (:weight bold :foreground "#b4b5ca" :background "#252059")))) + `(org-sexp-date ((,class (:foreground "#cc8b3d")))) + `(org-special-keyword ((,class (:weight bold :foreground "#ff44ff" :background "#38203d")))) + `(org-table ((,class (:foreground "#ff9bff" :background "#38203d")))) ;; :inherit fixed-pitch)))) + `(org-tag ((,class (:weight normal :slant italic :foreground "#6a6065" :background "#25202a")))) + `(org-target ((,class (:foreground "#06925a")))) + `(org-time-grid ((,class (:foreground "#35303a")))) + `(org-todo ((,class (:weight bold :box (:line-width 1 :color "#2c5462") :foreground "#2c5462" :background "#253743")))) + `(org-upcoming-deadline ((,class (:foreground "#06aab2")))) + `(org-verbatim ((,class (:foreground "#ff993d" :background "#2c212a")))) + `(org-verse ((,class (:slant italic :foreground "#9a969e" :background "#342f39")))) + `(org-warning ((,class (:weight bold :foreground "#ffffff" :background "#54362a")))) + `(outline-1 ((,class ,ol1))) + `(outline-2 ((,class ,ol2))) + `(outline-3 ((,class ,ol3))) + `(outline-4 ((,class ,ol4))) + `(outline-5 ((,class ,ol5))) + `(outline-6 ((,class ,ol6))) + `(outline-7 ((,class ,ol7))) + `(outline-8 ((,class ,ol8))) + `(pabbrev-debug-display-label-face ((,class (:foreground "#25202a" :background "#5edeb3")))) + `(pabbrev-suggestions-face ((,class (:weight bold :foreground "#25202a" :background "#06ffff")))) + `(pabbrev-suggestions-label-face ((,class (:weight bold :foreground "#25202a" :background "#64df19")))) + `(paren-face-match ((,class ,paren-matched))) + `(paren-face-mismatch ((,class ,paren-unmatched))) + `(paren-face-no-match ((,class ,paren-unmatched))) + `(persp-selected-face ((,class (:weight bold :foreground "#34292a")))) + `(powerline-active1 ((,class (:foreground "#7e311e" :background "#cbc7ce" :inherit mode-line)))) + `(powerline-active2 ((,class (:foreground "#7e311e" :background "#c38f53" :inherit mode-line)))) + `(powerline-inactive1 ((,class (:foreground "#322d38" :background "#9b979f" :inherit mode-line-inactive)))) + `(powerline-inactive2 ((,class (:foreground "#322d38" :background "#5b5660" :inherit mode-line-inactive)))) + `(rainbow-delimiters-depth-1-face ((,class (:foreground "#938e84")))) + `(rainbow-delimiters-depth-2-face ((,class (:foreground "#907733")))) + `(rainbow-delimiters-depth-3-face ((,class (:foreground "#736e84")))) + `(rainbow-delimiters-depth-4-face ((,class (:foreground "#936797")))) + `(rainbow-delimiters-depth-5-face ((,class (:foreground "#738c94")))) + `(rainbow-delimiters-depth-6-face ((,class (:foreground "#a1894f")))) + `(rainbow-delimiters-depth-7-face ((,class (:foreground "#7e7a87")))) + `(rainbow-delimiters-depth-8-face ((,class (:foreground "#835787")))) + `(rainbow-delimiters-depth-9-face ((,class (:foreground "#7b8f97")))) + `(rainbow-delimiters-mismatched-face ((,class ,paren-unmatched))) + `(rainbow-delimiters-unmatched-face ((,class ,paren-unmatched))) + `(recover-this-file ((,class (:weight bold :background "#06c0c8")))) + `(rng-error ((,class (:weight bold :foreground "#06ffff" :background "#283a43")))) + `(sh-heredoc ((,class (:foreground "#ffff0b" :background "#34292a")))) + `(sh-quoted-exec ((,class (:foreground "#06eb74")))) + `(shadow ((,class ,shadow))) ; Used for grep context lines. + `(shell-option-face ((,class (:foreground "#e074e3")))) + `(shell-output-2-face ((,class (:foreground "#ffff0b")))) + `(shell-output-3-face ((,class (:foreground "#64df19")))) + `(shell-output-face ((,class (:foreground "#ffffff")))) + ;; `(shell-prompt-face ((,class (:weight bold :foreground "#0601ff")))) + `(shm-current-face ((,class (:background "#343551")))) + `(shm-quarantine-face ((,class (:background "lemonchiffon")))) + `(show-paren-match ((,class ,paren-matched))) + `(show-paren-mismatch ((,class ,paren-unmatched))) + `(sml-modeline-end-face ((,class (:background "#985213")))) ; #cfa161 + `(sml-modeline-vis-face ((,class (:background "#e9863f")))) + `(term ((,class (:foreground "#cfccd2" :background "#25202a")))) + + ;; `(sp-pair-overlay-face ((,class ()))) + ;; `(sp-show-pair-enclosing ((,class ()))) + ;; `(sp-show-pair-match-face ((,class ()))) ; ~ Pair highlighting (matching tags). + ;; `(sp-show-pair-mismatch-face ((,class ()))) + ;; `(sp-wrap-overlay-closing-pair ((,class ()))) + ;; `(sp-wrap-overlay-face ((,class ()))) + ;; `(sp-wrap-overlay-opening-pair ((,class ()))) + ;; `(sp-wrap-tag-overlay-face ((,class ()))) + + `(speedbar-button-face ((,class (:foreground "#ff74ff")))) + `(speedbar-directory-face ((,class (:foreground "#ffff7c")))) + `(speedbar-file-face ((,class (:foreground "#ff747c")))) + `(speedbar-highlight-face ((,class ,volatile-highlight))) + `(speedbar-selected-face ((,class (:underline t :foreground "#06ffff")))) + `(speedbar-tag-face ((,class (:foreground "#5fd5db")))) + `(svn-status-directory-face ((,class ,directory))) + `(svn-status-filename-face ((,class (:weight bold :foreground "#c27c45")))) + `(svn-status-locked-face ((,class (:weight bold :foreground "#06ffff")))) + `(svn-status-marked-face ((,class ,marked-line))) + `(svn-status-marked-popup-face ((,class (:weight bold :foreground "#ff32ff")))) + `(svn-status-switched-face ((,class (:slant italic :foreground "#77737b")))) + `(svn-status-symlink-face ((,class ,symlink))) + `(svn-status-update-available-face ((,class (:foreground "#065aff")))) + `(tex-verbatim ((,class (:foreground "#ffff0b")))) + `(tool-bar ((,class (:box (:line-width 1 :style released-button) :foreground "#ffffff" :background "#45404a")))) + `(tooltip ((,class (:foreground "#ffffff" :background "#252046")))) + `(traverse-match-face ((,class (:weight bold :foreground "#79d427")))) + `(vc-annotate-face-3F3FFF ((,class (:foreground "#c4c00b" :background "#ffffff")))) + `(vc-annotate-face-3F6CFF ((,class (:foreground "#c4c00b" :background "#ffffff")))) + `(vc-annotate-face-3F99FF ((,class (:foreground "#c4660b" :background "#ffffff")))) + `(vc-annotate-face-3FC6FF ((,class (:foreground "#c4660b" :background "#ffffff")))) + `(vc-annotate-face-3FF3FF ((,class (:foreground "#c40c0b" :background "#ffffff")))) + `(vc-annotate-face-3FFF56 ((,class (:foreground "#b801bc" :background "#ffffff")))) + `(vc-annotate-face-3FFF83 ((,class (:foreground "#c40159" :background "#ffffff")))) + `(vc-annotate-face-3FFFB0 ((,class (:foreground "#c40159" :background "#ffffff")))) + `(vc-annotate-face-3FFFDD ((,class (:foreground "#c40c0b" :background "#ffffff")))) + `(vc-annotate-face-56FF3F ((,class (:foreground "#b801bc" :background "#ffffff")))) + `(vc-annotate-face-83FF3F ((,class (:foreground "#5401c8" :background "#ffffff")))) + `(vc-annotate-face-B0FF3F ((,class (:foreground "#5401c8" :background "#ffffff")))) + `(vc-annotate-face-DDFF3F ((,class (:foreground "#060cc8" :background "#ffffff")))) + `(vc-annotate-face-F6FFCC ((,class (:foreground "#ffffff" :background "#252064")))) + `(vc-annotate-face-FF3F3F ((,class (:foreground "#06c0c8" :background "#ffffff")))) + `(vc-annotate-face-FF6C3F ((,class (:foreground "#06c0c8" :background "#ffffff")))) + `(vc-annotate-face-FF993F ((,class (:foreground "#0666c8" :background "#ffffff")))) + `(vc-annotate-face-FFC63F ((,class (:foreground "#0666c8" :background "#ffffff")))) + `(vc-annotate-face-FFF33F ((,class (:foreground "#060cc8" :background "#ffffff")))) + + ;; ;; vc + ;; (vc-up-to-date-state ((,c :foreground ,(gc 'green-1)))) + ;; (vc-edited-state ((,c :foreground ,(gc 'yellow+1)))) + ;; (vc-missing-state ((,c :foreground ,(gc 'red)))) + ;; (vc-conflict-state ((,c :foreground ,(gc 'red+2) :weight bold))) + ;; (vc-locked-state ((,c :foreground ,(gc 'cyan-1)))) + ;; (vc-locally-added-state ((,c :foreground ,(gc 'blue)))) + ;; (vc-needs-update-state ((,c :foreground ,(gc 'magenta)))) + ;; (vc-removed-state ((,c :foreground ,(gc 'red-1)))) + + `(vhl/default-face ((,class ,volatile-highlight))) ; `volatile-highlights.el' (for undo, yank). + `(w3m-anchor ((,class ,link))) + `(w3m-arrived-anchor ((,class (:foreground "#69cf0b")))) + `(w3m-bitmap-image-face ((,class (:foreground "#f7f5f9" :background "#ff01ff")))) + `(w3m-bold ((,class (:weight bold :foreground "#ffffff")))) + `(w3m-current-anchor ((,class (:weight bold :underline t :foreground "#ffff0b")))) + `(w3m-form ((,class (:underline t :foreground "#065ab8")))) + `(w3m-form-button-face ((,class (:weight bold :underline t :foreground "#f7f5f9" :background "#312c36")))) + `(w3m-form-button-mouse-face ((,class (:underline t :foreground "#312c36" :background "#d781db")))) + `(w3m-form-button-pressed-face ((,class (:weight bold :underline t :foreground "#f7f5f9" :background "#312c36")))) + `(w3m-header-line-location-content-face ((,class (:foreground "#848088":background "#2c2731")))) + `(w3m-header-line-location-title-face ((,class (:foreground "#d6aa58" :background "#2c2731")))) + `(w3m-history-current-url-face ((,class (:foreground "#252458")))) + `(w3m-image-face ((,class (:weight bold :foreground "#501155")))) + `(w3m-link-numbering ((,class (:foreground "#50381e")))) ; mouseless browsing + `(w3m-strike-through-face ((,class (:strike-through t)))) + `(w3m-underline-face ((,class (:underline t)))) + + ;; `(web-mode-block-attr-name-face ((,class ()))) + ;; `(web-mode-block-attr-value-face ((,class ()))) + ;; `(web-mode-block-comment-face ((,class ()))) + ;; `(web-mode-block-control-face ((,class ()))) + ;; `(web-mode-block-delimiter-face ((,class ()))) + ;; `(web-mode-block-face ((,class ()))) + ;; `(web-mode-block-string-face ((,class ()))) + ;; `(web-mode-bold-face ((,class ()))) + ;; `(web-mode-builtin-face ((,class ()))) + ;; `(web-mode-comment-face ((,class ()))) + ;; `(web-mode-comment-keyword-face ((,class ()))) + ;; `(web-mode-constant-face ((,class ()))) + ;; `(web-mode-css-at-rule-face ((,class ()))) + ;; `(web-mode-css-color-face ((,class ()))) + ;; `(web-mode-css-comment-face ((,class ()))) + ;; `(web-mode-css-function-face ((,class ()))) + ;; `(web-mode-css-priority-face ((,class ()))) + ;; `(web-mode-css-property-name-face ((,class ()))) + ;; `(web-mode-css-pseudo-class-face ((,class ()))) + ;; `(web-mode-css-selector-face ((,class ()))) + ;; `(web-mode-css-string-face ((,class ()))) + ;; `(web-mode-css-variable-face ((,class ()))) + ;; `(web-mode-current-column-highlight-face ((,class ()))) + `(web-mode-current-element-highlight-face ((,class (:background "#6b330b")))) ; #061187 + ;; `(web-mode-doctype-face ((,class ()))) + ;; `(web-mode-error-face ((,class ()))) + ;; `(web-mode-filter-face ((,class ()))) + `(web-mode-folded-face ((,class (:box (:line-width 1 :color "#8c8890") :foreground "#6a659d" :background "#110cbe")))) + ;; `(web-mode-function-call-face ((,class ()))) + ;; `(web-mode-function-name-face ((,class ()))) + ;; `(web-mode-html-attr-custom-face ((,class ()))) + ;; `(web-mode-html-attr-engine-face ((,class ()))) + ;; `(web-mode-html-attr-equal-face ((,class ()))) + `(web-mode-html-attr-name-face ((,class ,xml-attribute))) + ;; `(web-mode-html-attr-value-face ((,class ()))) + ;; `(web-mode-html-entity-face ((,class ()))) + `(web-mode-html-tag-bracket-face ((,class ,xml-tag))) + ;; `(web-mode-html-tag-custom-face ((,class ()))) + `(web-mode-html-tag-face ((,class ,xml-tag))) + ;; `(web-mode-html-tag-namespaced-face ((,class ()))) + ;; `(web-mode-inlay-face ((,class ()))) + ;; `(web-mode-italic-face ((,class ()))) + ;; `(web-mode-javascript-comment-face ((,class ()))) + ;; `(web-mode-javascript-string-face ((,class ()))) + ;; `(web-mode-json-comment-face ((,class ()))) + ;; `(web-mode-json-context-face ((,class ()))) + ;; `(web-mode-json-key-face ((,class ()))) + ;; `(web-mode-json-string-face ((,class ()))) + ;; `(web-mode-jsx-depth-1-face ((,class ()))) + ;; `(web-mode-jsx-depth-2-face ((,class ()))) + ;; `(web-mode-jsx-depth-3-face ((,class ()))) + ;; `(web-mode-jsx-depth-4-face ((,class ()))) + ;; `(web-mode-keyword-face ((,class ()))) + ;; `(web-mode-param-name-face ((,class ()))) + ;; `(web-mode-part-comment-face ((,class ()))) + `(web-mode-part-face ((,class (:background "#252046")))) + ;; `(web-mode-part-string-face ((,class ()))) + ;; `(web-mode-preprocessor-face ((,class ()))) + `(web-mode-script-face ((,class (:background "#332d37")))) + ;; `(web-mode-sql-keyword-face ((,class ()))) + ;; `(web-mode-string-face ((,class ()))) + ;; `(web-mode-style-face ((,class ()))) + ;; `(web-mode-symbol-face ((,class ()))) + ;; `(web-mode-type-face ((,class ()))) + ;; `(web-mode-underline-face ((,class ()))) + ;; `(web-mode-variable-name-face ((,class ()))) + ;; `(web-mode-warning-face ((,class ()))) + ;; `(web-mode-whitespace-face ((,class ()))) + + `(which-func ((,class (:weight bold :slant italic :foreground "#25202a")))) + ;; `(which-key-command-description-face) + ;; `(which-key-group-description-face) + ;; `(which-key-highlighted-command-face) + ;; `(which-key-key-face) + `(which-key-local-map-description-face ((,class (:weight bold :background "#30272c" :inherit which-key-command-description-face)))) + ;; `(which-key-note-face) + ;; `(which-key-separator-face) + ;; `(which-key-special-key-face) + `(widget-button ((,class ,link))) + `(widget-button-pressed ((,class (:foreground "#06ffff")))) + `(widget-documentation ((,class (:foreground "#ff74ff")))) + `(widget-field ((,class (:background "#2b2630")))) + `(widget-inactive ((,class (:foreground "#9a969e")))) + `(widget-single-line-field ((,class (:background "#2b2630")))) + `(woman-bold ((,class (:weight bold :foreground "#13c2ca")))) + `(woman-italic ((,class (:weight bold :slant italic :foreground "#bd41ea")))) + `(woman-symbol ((,class (:weight bold :foreground "#64df19")))) + `(yas-field-debug-face ((,class (:foreground "#25202a" :background "#5edeb3")))) + `(yas-field-highlight-face ((,class (:box (:line-width 1 :color "#807c84") :foreground "#ffffff" :background "#302331")))) + + ;; `(ztreep-arrow-face ((,class ()))) + ;; `(ztreep-diff-header-face ((,class ()))) + ;; `(ztreep-diff-header-small-face ((,class ()))) + `(ztreep-diff-model-add-face ((,class (:weight bold :foreground "#ff77ff")))) + `(ztreep-diff-model-diff-face ((,class (:weight bold :foreground "#ffbb2c")))) + `(ztreep-diff-model-ignored-face ((,class (:strike-through t :foreground "#66616b")))) + `(ztreep-diff-model-normal-face ((,class (:foreground "#ffffff")))) + ;; `(ztreep-expand-sign-face ((,class ()))) + ;; `(ztreep-header-face ((,class ()))) + ;; `(ztreep-leaf-face ((,class ()))) + ;; `(ztreep-node-face ((,class ()))) + + )) + +(custom-theme-set-variables 'leuven-dark + + ;; highlight-sexp-mode. + '(hl-sexp-background-color "#33323e") + + '(ansi-color-faces-vector + [default default default italic underline success warning error]) + + ;; Colors used in Shell mode. + '(ansi-color-names-vector + ["#ffffff" "#37ffff" "#e074e3" "#3732ff" "#ffff0b" "#37ff3c" "#ff400b" "#848088"]) + ) + +;;;###autoload +(when (and (boundp 'custom-theme-load-path) + load-file-name) + ;; Add theme folder to `custom-theme-load-path' when installing over MELPA. + (add-to-list 'custom-theme-load-path + (file-name-as-directory (file-name-directory load-file-name)))) + +(provide-theme 'leuven-dark) + +;; This is for the sake of Emacs. +;; Local Variables: +;; time-stamp-end: "$" +;; time-stamp-format: "%:y%02m%02d.%02H%02M" +;; time-stamp-start: "Version: " +;; End: + +;;; leuven-dark-theme.el ends here commit 4f7fe8b1d37098ba6afe4aae4710c982f5942a78 Author: Stefan Kangas Date: Wed Feb 2 01:41:13 2022 +0100 * test/lisp/cedet/semantic/bovine/gcc-tests.el (ert-x): Require. diff --git a/test/lisp/cedet/semantic/bovine/gcc-tests.el b/test/lisp/cedet/semantic/bovine/gcc-tests.el index 525843d996..041773a0c8 100644 --- a/test/lisp/cedet/semantic/bovine/gcc-tests.el +++ b/test/lisp/cedet/semantic/bovine/gcc-tests.el @@ -26,6 +26,7 @@ ;;; Code: (require 'ert) +(require 'ert-x) (require 'semantic/bovine/gcc) ;;; From bovine-gcc: commit 00a8e365b9138e79cc68079d870af9aaea629f7d Author: Lars Ingebrigtsen Date: Thu Feb 3 01:25:42 2022 +0100 Adjust test to adjusted code diff --git a/test/lisp/international/textsec-tests.el b/test/lisp/international/textsec-tests.el index ee0af66d99..5bf9a3dcfb 100644 --- a/test/lisp/international/textsec-tests.el +++ b/test/lisp/international/textsec-tests.el @@ -169,8 +169,8 @@ (textsec-email-address-header-suspicious-p "Lars Ingebrigtsen ")) - (should (textsec-email-address-header-suspicious-p - "דגבא ")) + (should-not (textsec-email-address-header-suspicious-p + "דגבא ")) (should (textsec-email-address-suspicious-p "Bob_Norbolwits@GCSsafetyACE.com​"))) commit c882b4ea02b705d866fbcdd886b577b9592479fe Author: Harald Jörg Date: Wed Feb 2 22:30:09 2022 +0100 ; cperl-mode.el: Detect prototypes in anonymous subroutines My commit 3d49ad73e5a from 2021-09-143 had a flaw causing bad fontification and indentation after anonymous subroutines with a prototype. * lisp/progmodes/cperl-mode.el (cperl-find-pods-heres): Correctly process prototypes in anonymous subroutines * test/lisp/progmodes/cperl-mode-tests.el (cperl-test-fontify-attrs-and-signatures): new tests for various combinations of attributes, prototypes, and signatures * test/lisp/progmodes/cperl-mode-resources/proto-and-attrs.pl: new test source diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el index 8f33b3e3b7..94ecc45b15 100644 --- a/lisp/progmodes/cperl-mode.el +++ b/lisp/progmodes/cperl-mode.el @@ -3834,7 +3834,7 @@ recursive calls in starting lines of here-documents." "\\<" cperl-sub-regexp "\\>" ; sub with proto/attr "\\(" cperl-white-and-comment-rex - (rx (group (eval cperl--normal-identifier-rx))) + (rx (opt (group (eval cperl--normal-identifier-rx)))) "\\)" "\\(" cperl-maybe-white-and-comment-rex diff --git a/test/lisp/progmodes/cperl-mode-resources/proto-and-attrs.pl b/test/lisp/progmodes/cperl-mode-resources/proto-and-attrs.pl new file mode 100644 index 0000000000..7138bf631d --- /dev/null +++ b/test/lisp/progmodes/cperl-mode-resources/proto-and-attrs.pl @@ -0,0 +1,50 @@ +# The next two lines are required as of 2022, but obsolescent +# as soon as signatures leave their "experimental" state +use feature 'signatures'; +no warnings 'experimental::signatures'; + +# Tests for subroutine prototypes, signatures and the like + +# Prototypes have syntactical properties different from "normal" Perl: +# Perl has a variable $), so ($)) is not an unbalanced parenthesis. +# On the other hand, in a prototype ($) is _not_ an open paren +# followed by the variable $), so the parens are balanced. Prototypes +# are somewhat frowned upon most of the times, but they are required +# for some Perl magic + +# FIXME: 2022-02-02 CPerl mode does not handle subroutine signatures. +# In simple cases it mistakes them as prototypes, when attributes are +# present, it doesn't handle them at all. Variables in signatures +# SHOULD be fontified like variable declarations. + +# Part 1: Named subroutines +# A prototype and a trivial subroutine attribute +{ + no feature 'signatures'; # that's a prototype, not a signature + sub sub_1 ($) :lvalue { local $); } +} + +# A prototype as an attribute (how it should be written these days) +sub sub_2 :prototype($) { ...; } + +# A signature (these will soon-ish leave the experimental state) +sub sub_3 ($foo,$bar) { ...; } + +# Attribute plus signature FIXME: Not yet supported +sub bad_sub_4 :prototype($$$) ($foo,$bar,$baz) { ...; } + +# Part 2: Same constructs for anonymous subs +# A prototype and a trivial subroutine attribute +{ + no feature 'signatures'; # that's a prototype, not a signature + my $subref_1 = sub ($) :lvalue { local $); }; +} + +# A prototype as an attribute (how it should be written these days) +my $subref_2 = sub :prototype($) { ...; }; + +# A signature (these will soon-ish leave the experimental state) +my $subref_3 = sub ($foo,$bar) { ...; }; + +# Attribute plus signature +my $subref_4 = sub :prototype($$$) ($foo,$bar,$baz) { ...; }; diff --git a/test/lisp/progmodes/cperl-mode-tests.el b/test/lisp/progmodes/cperl-mode-tests.el index 0124dad6f1..b8a3bd97d8 100644 --- a/test/lisp/progmodes/cperl-mode-tests.el +++ b/test/lisp/progmodes/cperl-mode-tests.el @@ -154,6 +154,55 @@ point in the distant past, and is still broken in perl-mode. " (should (equal (get-text-property (match-beginning 0) 'face) 'font-lock-keyword-face)))) +(ert-deftest cperl-test-fontify-attrs-and-signatures () + "Test fontification of the various combinations of subroutine +attributes, prototypes and signatures." + (skip-unless (eq cperl-test-mode #'cperl-mode)) + (let ((file (ert-resource-file "proto-and-attrs.pl"))) + (with-temp-buffer + (insert-file-contents file) + (goto-char (point-min)) + (funcall cperl-test-mode) + (font-lock-ensure) + + ;; Named subroutines + (while (search-forward-regexp "\\_ Date: Wed Feb 2 20:35:39 2022 +0000 New file lisp/emacs-lisp/debug-early.el for backtraces in early bootstrap This is also used in batch mode in general. * lisp/debug-early.el (debug-early-backtrace, debug-early): New functions. * lisp/loadup.el (top level): Load debug-early.el as first file. * src/eval.c (signal_or_quit): Remove the condition in the batch mode section of not being in dumping or bootstrap, since it is no longer needed. Test that 'debug-early's symbol-function is bound. Ensure there is enough working space in specpdl and eval_depth. (syms_of_eval): New DEFSYM for Qdebug_early. Initialise Vdebugger to Qdebug_early rather than Qnil. diff --git a/lisp/emacs-lisp/debug-early.el b/lisp/emacs-lisp/debug-early.el new file mode 100644 index 0000000000..718000bfa4 --- /dev/null +++ b/lisp/emacs-lisp/debug-early.el @@ -0,0 +1,77 @@ +;;; debug-early.el --- Dump a Lisp backtrace without frills -*- lexical-binding: t; -*- + +;; Copyright (C) 2022 Free Software Foundation, Inc. + +;; Author: Alan Mackenzie +;; Maintainer: emacs-devel@gnu.org +;; Keywords: internal, backtrace, bootstrap. +;; Package: emacs + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . + +;;; Commentary: + +;; This file dumps a backtrace on stderr when an error is thrown. +;; It has no dependencies on any Lisp libraries and is thus suitable +;; for generating backtraces in the early parts of bootstrapping. It +;; is also good for generating backtraces in batch mode in general. + +(defalias 'debug-early-backtrace + #'(lambda () + "Print a trace of Lisp function calls currently active. +The output stream used is the value of `standard-output'. + +This is a simplified version of the standard `backtrace' +function, intended for use in debugging the early parts +of the build process." + (princ "\n") + (mapbacktrace + #'(lambda (evald func args _flags) + (let ((args args)) + (if evald + (progn + (princ " ") + (prin1 func) + (princ "(") + (while args + (prin1 (car args)) + (setq args (cdr args)) + (if args + (princ " "))) + (princ ")\n")) + (while args + (princ " ") + (prin1 (car args)) + (princ "\n") + (setq args (cdr args))))))))) + +(defalias 'debug-early + #'(lambda (&rest args) + "Print a trace of Lisp function calls currently active. +The output stream used is the value of `standard-output'. + +There should be two ARGS, the symbol `error' and a cons of +the error symbol and its data. + +This is a simplified version of `debug', intended for use +in debugging the early parts of the build process." + (princ "\nError: ") + (prin1 (car (car (cdr args)))) ; The error symbol. + (princ " ") + (prin1 (cdr (car (cdr args)))) ; The error data. + (debug-early-backtrace))) + +;;; debug-early.el ends here. diff --git a/lisp/loadup.el b/lisp/loadup.el index 1be73a2090..81172c584d 100644 --- a/lisp/loadup.el +++ b/lisp/loadup.el @@ -128,6 +128,7 @@ (set-buffer "*scratch*") (setq buffer-undo-list t) +(load "emacs-lisp/debug-early") (load "emacs-lisp/byte-run") (load "emacs-lisp/backquote") (load "subr") diff --git a/src/eval.c b/src/eval.c index 3e648ed621..c87b1bc704 100644 --- a/src/eval.c +++ b/src/eval.c @@ -1873,18 +1873,19 @@ signal_or_quit (Lisp_Object error_symbol, Lisp_Object data, bool keyboard_quit) } /* If we're in batch mode, print a backtrace unconditionally to help - with debugging. Make sure to use `debug' unconditionally to not - interfere with ERT or other packages that install custom - debuggers. Don't try to call the debugger while dumping or - bootstrapping, it wouldn't work anyway. */ + with debugging. Make sure to use `debug-early' unconditionally + to not interfere with ERT or other packages that install custom + debuggers. */ if (!debugger_called && !NILP (error_symbol) && (NILP (clause) || EQ (h->tag_or_ch, Qerror)) && noninteractive && backtrace_on_error_noninteractive - && !will_dump_p () && !will_bootstrap_p () - && NILP (Vinhibit_debugger)) + && NILP (Vinhibit_debugger) + && !NILP (Ffboundp (Qdebug_early))) { + max_ensure_room (&max_lisp_eval_depth, lisp_eval_depth, 100); + max_ensure_room (&max_specpdl_size, SPECPDL_INDEX (), 200); ptrdiff_t count = SPECPDL_INDEX (); - specbind (Qdebugger, Qdebug); + specbind (Qdebugger, Qdebug_early); call_debugger (list2 (Qerror, Fcons (error_symbol, data))); unbind_to (count, Qnil); } @@ -4399,6 +4400,7 @@ before making `inhibit-quit' nil. */); DEFSYM (Qclosure, "closure"); DEFSYM (QCdocumentation, ":documentation"); DEFSYM (Qdebug, "debug"); + DEFSYM (Qdebug_early, "debug-early"); DEFVAR_LISP ("inhibit-debugger", Vinhibit_debugger, doc: /* Non-nil means never enter the debugger. @@ -4453,7 +4455,7 @@ If due to frame exit, args are `exit' and the value being returned; If due to error, args are `error' and a list of the args to `signal'. If due to `apply' or `funcall' entry, one arg, `lambda'. If due to `eval' entry, one arg, t. */); - Vdebugger = Qnil; + Vdebugger = Qdebug_early; DEFVAR_LISP ("signal-hook-function", Vsignal_hook_function, doc: /* If non-nil, this is a function for `signal' to call. commit b6a51e05c9714827737708ce7fb2068f285005ce Author: Juri Linkov Date: Wed Feb 2 21:50:41 2022 +0200 * lisp/replace.el (query-replace-read-from): Use default for empty input. Set 'default' from non-empty 'query-replace-read-from-default'. Use the default in non-regexp prompt and return it for empty input. https://lists.gnu.org/archive/html/emacs-devel/2022-02/msg00044.html diff --git a/lisp/replace.el b/lisp/replace.el index 91cd2b3420..23e6483809 100644 --- a/lisp/replace.el +++ b/lisp/replace.el @@ -239,10 +239,11 @@ wants to replace FROM with TO." query-replace-defaults)) (symbol-value query-replace-from-history-variable))) (minibuffer-allow-text-properties t) ; separator uses text-properties + (default (when (and query-replace-read-from-default (not regexp-flag)) + (funcall query-replace-read-from-default))) (prompt (cond ((and query-replace-read-from-regexp-default regexp-flag) prompt) - ((and query-replace-read-from-default (not regexp-flag)) - (format-prompt prompt (funcall query-replace-read-from-default))) + (default (format-prompt prompt default)) ((and query-replace-defaults separator) (format-prompt prompt (car minibuffer-history))) (query-replace-defaults @@ -272,17 +273,18 @@ wants to replace FROM with TO." 'minibuffer-history) (read-from-minibuffer prompt nil nil nil nil - (if query-replace-read-from-default - (cons (funcall query-replace-read-from-default) - (query-replace-read-from-suggestions)) + (if default + (delete-dups + (cons default (query-replace-read-from-suggestions))) (query-replace-read-from-suggestions)) t))))) (to)) - (if (and (zerop (length from)) query-replace-defaults) + (if (and (zerop (length from)) query-replace-defaults (not default)) (cons (caar query-replace-defaults) (query-replace-compile-replacement (cdar query-replace-defaults) regexp-flag)) - (setq from (query-replace--split-string from)) + (setq from (or (and (zerop (length from)) default) + (query-replace--split-string from))) (when (consp from) (setq to (cdr from) from (car from))) (add-to-history query-replace-from-history-variable from nil t) ;; Warn if user types \n or \t, but don't reject the input. commit 52af077d6a56e20cf7a85986bbc10621a9fc44d9 Author: Lars Ingebrigtsen Date: Wed Feb 2 20:16:04 2022 +0100 Improve the describe-key doc string * lisp/help.el (describe-key): Say something about prefix keys (bug#33320). diff --git a/lisp/help.el b/lisp/help.el index eb024373e4..975be497e7 100644 --- a/lisp/help.el +++ b/lisp/help.el @@ -907,6 +907,12 @@ While reading KEY-LIST interactively, this command temporarily enables menu items or tool-bar buttons that are disabled to allow getting help on them. +Interactively, this command can't describe prefix commands, but +will always wait for the user to type the complete key sequence. +For instance, entering \"C-x\" will wait until the command has +been completed, but `M-: (describe-key (kbd \"C-x\")) RET' will +tell you what this prefix command is bound to. + BUFFER is the buffer in which to lookup those keys; it defaults to the current buffer." (declare (advertised-calling-convention (key-list &optional buffer) "27.1")) commit 6fbf37a575e34a2313dfff059862a973c7bf512b Author: Lars Ingebrigtsen Date: Wed Feb 2 19:55:19 2022 +0100 Add some indexing for "compiler macro" * doc/lispref/functions.texi (Inline Functions): Add a link to where compiler macros are defined. (Declare Form): Add a concept index. diff --git a/doc/lispref/functions.texi b/doc/lispref/functions.texi index 2378e9efd7..207919ea64 100644 --- a/doc/lispref/functions.texi +++ b/doc/lispref/functions.texi @@ -2153,8 +2153,8 @@ worry about how many times the body uses the arguments, as you do for macros. Alternatively, you can define a function by providing the code which -will inline it as a compiler macro. The following macros make this -possible. +will inline it as a compiler macro (@pxref{Declare Form}). The +following macros make this possible. @c FIXME: Can define-inline use the interactive spec? @defmac define-inline name args [doc] [declare] body@dots{} @@ -2310,6 +2310,7 @@ which case the warning message gives no extra details). @var{when} should be a string indicating when the function or macro was first made obsolete. +@cindex compiler macro @item (compiler-macro @var{expander}) This can only be used for functions, and tells the compiler to use @var{expander} as an optimization function. When encountering a call to the commit c86e4b095018aed2de6a886b2a6a477f65ddced7 Author: Lars Ingebrigtsen Date: Wed Feb 2 19:40:48 2022 +0100 Mark vt-control and vc100-led obsolete since Emacs 29.1 diff --git a/lisp/obsolete/vt-control.el b/lisp/obsolete/vt-control.el index b80d3505b3..190ccbaa83 100644 --- a/lisp/obsolete/vt-control.el +++ b/lisp/obsolete/vt-control.el @@ -4,6 +4,7 @@ ;; Author: Rob Riepel ;; Keywords: terminals +;; Obsolete-since: 29.1 ;; This file is part of GNU Emacs. diff --git a/lisp/obsolete/vt100-led.el b/lisp/obsolete/vt100-led.el index a6a256a6a7..d741a112aa 100644 --- a/lisp/obsolete/vt100-led.el +++ b/lisp/obsolete/vt100-led.el @@ -5,6 +5,7 @@ ;; Author: Howard Gayle ;; Maintainer: emacs-devel@gnu.org ;; Keywords: hardware +;; Obsolete-since: 29.1 ;; This file is part of GNU Emacs. commit 0ef371cb12e4b2f42444afeaeb456665aad37e2b Author: Lars Ingebrigtsen Date: Wed Feb 2 19:39:29 2022 +0100 Move vt-control and vt100-led to obsolete (bug#37562) diff --git a/lisp/vt-control.el b/lisp/obsolete/vt-control.el similarity index 100% rename from lisp/vt-control.el rename to lisp/obsolete/vt-control.el diff --git a/lisp/vt100-led.el b/lisp/obsolete/vt100-led.el similarity index 100% rename from lisp/vt100-led.el rename to lisp/obsolete/vt100-led.el commit d34dd869d2223254bc5262ca1194eb2edaff029a Author: Lars Ingebrigtsen Date: Wed Feb 2 19:07:01 2022 +0100 Fix decoding error in ietf-drums-parse-address * lisp/mail/ietf-drums.el (ietf-drums-parse-address): Don't try to decode the name if there is no name (bug#53716). diff --git a/lisp/mail/ietf-drums.el b/lisp/mail/ietf-drums.el index 4a07959189..952707226f 100644 --- a/lisp/mail/ietf-drums.el +++ b/lisp/mail/ietf-drums.el @@ -240,7 +240,7 @@ If DECODE, the DISPLAY-NAME will have RFC2047 decoding performed (cons (mapconcat #'identity (nreverse display-name) "") (ietf-drums-get-comment string))) - (cons mailbox (if decode + (cons mailbox (if (and decode display-string) (rfc2047-decode-string display-string) display-string)))))) commit 27c93778ef15c887a9d26ba198fddbe322d58284 Author: Alan Mackenzie Date: Wed Feb 2 18:03:00 2022 +0000 Fix bug with M-x compile-defun in a defconst/defvar * lisp/emacs-lisp/bytecomp.el (compile-defun): Have symbols-with-pos-enabled bound to non-nil when the eval takes place. diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index 9c664ff8fe..ff372151e1 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el @@ -2198,20 +2198,20 @@ With argument ARG, insert value in current buffer after the form." (save-excursion (end-of-defun) (beginning-of-defun) - (let* ((print-symbols-bare t) + (let* ((print-symbols-bare t) ; For the final `message'. (byte-compile-current-file (current-buffer)) (byte-compile-current-buffer (current-buffer)) (start-read-position (point)) (byte-compile-last-warned-form 'nothing) + (symbols-with-pos-enabled t) (value (eval - (let ((symbols-with-pos-enabled t)) - (displaying-byte-compile-warnings - (byte-compile-sexp - (let ((form (read-positioning-symbols (current-buffer)))) - (push form byte-compile-form-stack) - (eval-sexp-add-defvars - form - start-read-position))))) + (displaying-byte-compile-warnings + (byte-compile-sexp + (let ((form (read-positioning-symbols (current-buffer)))) + (push form byte-compile-form-stack) + (eval-sexp-add-defvars + form + start-read-position)))) lexical-binding))) (cond (arg (message "Compiling from buffer... done.") commit ab2f27542210580ed6235fd7a721a5396a416492 (refs/remotes/origin/emacs-28) Author: Eli Zaretskii Date: Wed Feb 2 19:38:56 2022 +0200 Improve documentation of 'emacs-version' * doc/emacs/trouble.texi (Checklist): Mention the possibility of invoking 'emacs-version' with a prefix argument. * lisp/version.el (emacs-version): Improve doc string. (Bug#53720) diff --git a/doc/emacs/trouble.texi b/doc/emacs/trouble.texi index e966565f00..93f9c779db 100644 --- a/doc/emacs/trouble.texi +++ b/doc/emacs/trouble.texi @@ -782,10 +782,12 @@ Emacs, so you will have to report the bug somewhere else. @item The type of machine you are using, and the operating system name and -version number (again, automatically included by @kbd{M-x -report-emacs-bug}). @kbd{M-x emacs-version @key{RET}} provides this -information too. Copy its output from the @file{*Messages*} buffer, -so that you get it all and get it accurately. +version number (again, automatically included by @w{@kbd{M-x +report-emacs-bug}}). @w{@kbd{M-x emacs-version @key{RET}}} provides +this information too. Copy its output from the @file{*Messages*} +buffer, so that you get it all and get it accurately, or use +@w{@kbd{C-u M-x emacs-version @key{RET}}} to insert the version +information into the current buffer. @item The operands given to the @code{configure} command when Emacs was diff --git a/lisp/version.el b/lisp/version.el index e0b74d05cc..fa755c7867 100644 --- a/lisp/version.el +++ b/lisp/version.el @@ -54,8 +54,13 @@ developing Emacs.") (defvar cairo-version-string) (defun emacs-version (&optional here) - "Return string describing the version of Emacs that is running. -If optional argument HERE is non-nil, insert string at point. + "Display the version of Emacs that is running in this session. +With a prefix argument, insert the Emacs version string at point +instead of displaying it. +If called from Lisp, by default return the version string; but +if the optional argument HERE is non-nil, insert the string at +point instead. + Don't use this function in programs to choose actions according to the system configuration; look at `system-configuration' instead." (interactive "P") commit 8fa8d5310b524c08bfd70ac0ce531db58985e302 Author: Eli Zaretskii Date: Wed Feb 2 19:23:07 2022 +0200 ; * etc/NEWS: Fix wording of a recently-added entry. diff --git a/etc/NEWS b/etc/NEWS index c2975b783d..cb9f855a9c 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -1238,15 +1238,18 @@ inhibits 'isearch' matching the STRING parameter. It can be used to implement own regexp syntax for search/replace. --- -** New variable 'query-replace-read-from-default'. -It can be set to a function that returns the default value (such as -'find-tag-default') when 'query-replace' reads a string to replace. -Another new variable 'query-replace-read-from-regexp-default' -can be set to a function that returns the default value (such as -'find-tag-default-as-regexp') when 'query-replace-regexp' -reads a regexp to replace. When these variables are nil -(which is the default) then 'query-replace' uses the previous -replacement from-to pair as the default value. +** New variables to customize defaults of FROM for query-replace commands. +The new variable 'query-replace-read-from-default' can be set to a +function that returns the default value of FROM when 'query-replace' +prompts for a string to be replaced. An example of such a function is +'find-tag-default'. + +The new variable 'query-replace-read-from-regexp-default' can be set +to a function (such as 'find-tag-default-as-regexp') that returns the +default value of FROM when 'query-replace-regexp' prompts for a regexp +whose matches are to be replaced. If these variables are nil (which +is the default), 'query-replace' and 'query-replace-regexp' take the +default value from the previous FROM-TO pair. --- ** New user option 'pp-use-max-width'. commit 70a184b141862a495befb8c47c4f344002118703 Author: Po Lu Date: Wed Feb 2 19:05:54 2022 +0800 Improve correctness of generated xwidget events * src/xwidget.c (xw_maybe_synthesize_crossing): Add new parameters for controlling the crossing mode. Also improve the accuracy of generated crossing events when the mouse pointer moves outside the toplevel from an inferior of it. All callers changed. (xw_notify_virtual_upwards_until): (xw_notify_virtual_downwards_until): New parameters for crossing mode. All callers changed. diff --git a/src/xwidget.c b/src/xwidget.c index 9b08d47a8e..23031f9c93 100644 --- a/src/xwidget.c +++ b/src/xwidget.c @@ -265,10 +265,12 @@ xw_translate_x_modifiers (struct x_display_info *dpyinfo, static bool xw_maybe_synthesize_crossing (struct xwidget_view *, GdkWindow *, int, int, int, - Time, unsigned int); + Time, unsigned int, + GdkCrossingMode, GdkCrossingMode); static void xw_notify_virtual_upwards_until (struct xwidget_view *, GdkWindow *, GdkWindow *, GdkWindow *, unsigned int, - int, int, Time, GdkEventType, bool); + int, int, Time, GdkEventType, bool, + GdkCrossingMode); static void window_coords_from_toplevel (GdkWindow *, GdkWindow *, int, int, int *, int *); #endif @@ -1219,7 +1221,8 @@ xwidget_button_1 (struct xwidget_view *view, { xw_maybe_synthesize_crossing (view, gtk_widget_get_window (ungrab_target), view_x, view_y, XW_CROSSING_NONE, - time, modifier_state); + time, modifier_state, GDK_CROSSING_UNGRAB, + GDK_CROSSING_UNGRAB); } else { @@ -1243,7 +1246,8 @@ xwidget_button_1 (struct xwidget_view *view, xw_notify_virtual_upwards_until (view, target_window, toplevel, toplevel, modifier_state, view_x, view_y, time, - GDK_LEAVE_NOTIFY, false); + GDK_LEAVE_NOTIFY, false, + GDK_CROSSING_UNGRAB); if (target_window != toplevel) { @@ -1370,7 +1374,11 @@ xwidget_motion_notify (struct xwidget_view *view, } else if (xw_maybe_synthesize_crossing (view, gtk_widget_get_window (target), x + view->clip_left, y + view->clip_top, - XW_CROSSING_NONE, time, state)) + XW_CROSSING_NONE, time, state, + (view->passive_grab + ? GDK_CROSSING_GRAB + : GDK_CROSSING_NORMAL), + GDK_CROSSING_NORMAL)) return; xg_event = gdk_event_new (GDK_MOTION_NOTIFY); @@ -1605,7 +1613,8 @@ xw_notify_virtual_upwards_until (struct xwidget_view *xv, unsigned int state, int x, int y, Time time, GdkEventType type, - bool nonlinear_p) + bool nonlinear_p, + GdkCrossingMode crossing) { GdkEvent *xg_event; GdkWindow *tem; @@ -1626,7 +1635,7 @@ xw_notify_virtual_upwards_until (struct xwidget_view *xv, xg_event->crossing.detail = (nonlinear_p ? GDK_NOTIFY_NONLINEAR_VIRTUAL : GDK_NOTIFY_VIRTUAL); - xg_event->crossing.mode = GDK_CROSSING_NORMAL; + xg_event->crossing.mode = crossing; xg_event->crossing.window = g_object_ref (tem); gtk_main_do_event (xg_event); @@ -1642,7 +1651,8 @@ xw_notify_virtual_downwards_until (struct xwidget_view *xv, unsigned int state, int x, int y, Time time, GdkEventType type, - bool nonlinear_p) + bool nonlinear_p, + GdkCrossingMode crossing) { GdkEvent *xg_event; GdkWindow *tem; @@ -1671,7 +1681,7 @@ xw_notify_virtual_downwards_until (struct xwidget_view *xv, xg_event->crossing.detail = (nonlinear_p ? GDK_NOTIFY_NONLINEAR_VIRTUAL : GDK_NOTIFY_VIRTUAL); - xg_event->crossing.mode = GDK_CROSSING_NORMAL; + xg_event->crossing.mode = crossing; xg_event->crossing.window = g_object_ref (tem); gtk_main_do_event (xg_event); @@ -1716,14 +1726,18 @@ static bool xw_maybe_synthesize_crossing (struct xwidget_view *view, GdkWindow *current_window, int x, int y, int crossing, - Time time, unsigned int state) + Time time, unsigned int state, + GdkCrossingMode entry_crossing, + GdkCrossingMode exit_crossing) { GdkWindow *last_crossing, *toplevel, *ancestor; GdkEvent *xg_event; int cx, cy; bool nonlinear_p; + bool retention_flag; toplevel = gtk_widget_get_window (XXWIDGET (view->model)->widgetwindow_osr); + retention_flag = false; if (crossing == XW_CROSSING_LEFT && (view->last_crossing_window @@ -1732,13 +1746,40 @@ xw_maybe_synthesize_crossing (struct xwidget_view *view, xw_notify_virtual_upwards_until (view, view->last_crossing_window, toplevel, toplevel, state, x, y, time, - GDK_LEAVE_NOTIFY, false); + GDK_LEAVE_NOTIFY, false, + exit_crossing); } if (view->last_crossing_window && (gdk_window_is_destroyed (view->last_crossing_window) || crossing == XW_CROSSING_LEFT)) { + if (!gdk_window_is_destroyed (view->last_crossing_window) + && view->last_crossing_window != toplevel) + { + xg_event = gdk_event_new (GDK_LEAVE_NOTIFY); + window_coords_from_toplevel (view->last_crossing_window, + toplevel, x, y, &cx, &cy); + + xg_event->crossing.x = cx; + xg_event->crossing.y = cy; + xg_event->crossing.time = time; + xg_event->crossing.focus = FALSE; + xg_event->crossing.detail = GDK_NOTIFY_ANCESTOR; + xg_event->crossing.mode = exit_crossing; + xg_event->crossing.window = g_object_ref (view->last_crossing_window); + gdk_event_set_device (xg_event, find_suitable_pointer (view->frame)); + + gtk_main_do_event (xg_event); + gdk_event_free (xg_event); + + xw_notify_virtual_upwards_until (view, view->last_crossing_window, + gdk_window_get_parent (toplevel), + toplevel, state, x, y, time, + GDK_LEAVE_NOTIFY, false, exit_crossing); + retention_flag = true; + } + g_signal_handler_disconnect (view->last_crossing_window, view->last_crossing_cursor_signal); g_clear_pointer (&view->last_crossing_window, @@ -1760,9 +1801,9 @@ xw_maybe_synthesize_crossing (struct xwidget_view *view, toplevel, toplevel, state, x, y, time, GDK_ENTER_NOTIFY, - false); + false, entry_crossing); } - return false; + return retention_flag; } if (last_crossing != current_window) @@ -1787,7 +1828,8 @@ xw_maybe_synthesize_crossing (struct xwidget_view *view, ancestor, toplevel, state, x, y, time, GDK_LEAVE_NOTIFY, - nonlinear_p); + nonlinear_p, + exit_crossing); xg_event = gdk_event_new (GDK_LEAVE_NOTIFY); gdk_event_set_device (xg_event, find_suitable_pointer (view->frame)); @@ -1798,13 +1840,12 @@ xw_maybe_synthesize_crossing (struct xwidget_view *view, xg_event->crossing.time = time; xg_event->crossing.focus = FALSE; xg_event->crossing.state = state; - /* TODO: actually calculate the event mode. */ xg_event->crossing.detail = (nonlinear_p ? GDK_NOTIFY_NONLINEAR : (last_crossing == ancestor ? GDK_NOTIFY_INFERIOR : GDK_NOTIFY_ANCESTOR)); - xg_event->crossing.mode = GDK_CROSSING_NORMAL; + xg_event->crossing.mode = exit_crossing; xg_event->crossing.window = g_object_ref (last_crossing); gtk_main_do_event (xg_event); @@ -1815,7 +1856,8 @@ xw_maybe_synthesize_crossing (struct xwidget_view *view, ancestor, toplevel, state, x, y, time, GDK_ENTER_NOTIFY, - nonlinear_p); + nonlinear_p, + entry_crossing); xg_event = gdk_event_new (GDK_ENTER_NOTIFY); gdk_event_set_device (xg_event, find_suitable_pointer (view->frame)); @@ -1831,7 +1873,7 @@ xw_maybe_synthesize_crossing (struct xwidget_view *view, : (current_window == ancestor ? GDK_NOTIFY_INFERIOR : GDK_NOTIFY_ANCESTOR)); - xg_event->crossing.mode = GDK_CROSSING_NORMAL; + xg_event->crossing.mode = entry_crossing; xg_event->crossing.window = g_object_ref (current_window); gtk_main_do_event (xg_event); @@ -1909,7 +1951,11 @@ xwidget_motion_or_crossing (struct xwidget_view *view, const XEvent *event) if (!xw_maybe_synthesize_crossing (view, xg_event->any.window, toplevel_x, toplevel_y, XW_CROSSING_NONE, event->xmotion.time, - event->xmotion.state)) + event->xmotion.state, + (view->passive_grab + ? GDK_CROSSING_GRAB + : GDK_CROSSING_NORMAL), + GDK_CROSSING_NORMAL)) { xg_event->motion.x = x; xg_event->motion.y = y; @@ -1954,7 +2000,11 @@ xwidget_motion_or_crossing (struct xwidget_view *view, const XEvent *event) (xev->type == XI_Enter ? XW_CROSSING_ENTERED : XW_CROSSING_LEFT), - xev->time, xg_event->crossing.state)) + xev->time, xg_event->crossing.state, + (view->passive_grab + ? GDK_CROSSING_GRAB + : GDK_CROSSING_NORMAL), + GDK_CROSSING_NORMAL)) { gdk_event_free (xg_event); return; @@ -1972,7 +2022,11 @@ xwidget_motion_or_crossing (struct xwidget_view *view, const XEvent *event) ? XW_CROSSING_ENTERED : XW_CROSSING_LEFT), event->xcrossing.time, - event->xcrossing.state)) + event->xcrossing.state, + (view->passive_grab + ? GDK_CROSSING_GRAB + : GDK_CROSSING_NORMAL), + GDK_CROSSING_NORMAL)) { gdk_event_free (xg_event); return;