GNU bug report logs - #25228
25.1; GNU emacs 25.1: custom-set-faces from init file ~/.emacs ignored

Previous Next

Package: emacs;

Reported by: werner <at> suse.de (Dr. Werner Fink)

Date: Mon, 19 Dec 2016 11:57:01 UTC

Severity: normal

Tags: patch

Merged with 24482, 26340, 40419, 40461

Found in versions 25.1, 26.0.50, 26.3

Full log


View this message in rfc822 format

From: martin rudalics <rudalics <at> gmx.at>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: werner <at> suse.de, 25228 <at> debbugs.gnu.org
Subject: bug#25228: 25.1; GNU emacs 25.1: custom-set-faces from init file ~/.emacs ignored
Date: Tue, 20 Dec 2016 11:59:52 +0100
> Can you describe how that mechanism is triggered by the offending
> change?

Which one is "the offending change"?  If you reread the thread, you will
see that there are controversial opinions.  Anyway, here we go.

I use a file /home/martin/temp/default-face.el with the following
contents:

(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(default ((t (:inherit nil :stipple nil :background "grey92" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 98 :width normal :foundry "unknown" :family "Droid Sans Mono")))))

The ":height 98" entry in this form before the offending change did set
the "height of the default face in 1/10 pt" to 98.  After the offending
change it is set to 113.  I have no idea what a "pt" is (and I have no
idea what an "inch" is).  But from experience I know that the value of
`window-font-height' for the root window of the initial frame is 15 for
a default face height of 98 and 18 for a default face height of 113.

As a consequence of the offending change, the frame character height of
my initial frame is now 18 instead of the desired 15.  In the following
I will try to explain how this happened here.

[Werner - if you read this, please try to repeat it, maybe you get a
completely different behavior.  I gdb one of my current versions of a
GTK build of master, so the line numbers may be off wrt what you have
(unfortunately, debugging the release version freezes GNU/Linux
completely here and I have to turn off the power in order to restart
it).]

I first visit the file xsettings.c in the .src directory and start the
debugger via M-x gdb completing it to

gdb -i=mi /home/martin/emacs-git/quick/obj-gtk/src/emacs

which includes the path of my GTK executable.  Next in xsettings.c I
move to line 611 which reads as

  memset (&oldsettings, 0, sizeof (oldsettings));

and set a breakpoint there.  Then I run the executable via

run -Q --load /home/martin/temp/default-face.el

and wait till the breakpoint is hit.  In the function where I set the
breakpoint (apply_xft_settings) I now want to trigger the setting of the
variable

      changed = true;

I do this by stepping via "n" and find that it happens on line 675
because of oldsettings.dpi != settings->dpi: The old value was
96.281588447653434 while the new value is 96.  As a consequence, on line
701 a

      store_config_changed_event (Qfont_render,
				  XCAR (dpyinfo->name_list_element));

will store an event in my event queue whose execution will eventually
trigger the offending change.  The backtrace till here is:

#0  apply_xft_settings (dpyinfo=0xef1230, settings=0x7fffffffb280) at ../../src/xsettings.c:702
#1  0x000000000056bc31 in read_and_apply_settings (dpyinfo=0xef1230, send_event_p=false) at ../../src/xsettings.c:726
#2  0x000000000056c073 in init_xsettings (dpyinfo=0xef1230) at ../../src/xsettings.c:938
#3  0x000000000056c0ae in xsettings_initialize (dpyinfo=0xef1230) at ../../src/xsettings.c:948
#4  0x00000000005508f6 in x_term_init (display_name=..., xrm_option=0x0, resource_name=0xe38010 "emacs") at ../../src/xterm.c:12617
#5  0x000000000055b6bc in Fx_open_connection (display=..., xrm_string=..., must_succeed=...) at ../../src/xfns.c:5257
#6  0x000000000063500e in Ffuncall (nargs=4, args=0x7fffffffba50) at ../../src/eval.c:2722
#7  0x00000000006829ce in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=0, args=0x7fffffffc458) at ../../src/bytecode.c:639
#8  0x0000000000635993 in funcall_lambda (fun=..., nargs=0, arg_vector=0x7fffffffc458) at ../../src/eval.c:2879
#9  0x0000000000635215 in Ffuncall (nargs=1, args=0x7fffffffc450) at ../../src/eval.c:2764
#10 0x0000000000633c4a in Fapply (nargs=2, args=0x7fffffffc450) at ../../src/eval.c:2296
#11 0x0000000000634e71 in Ffuncall (nargs=3, args=0x7fffffffc448) at ../../src/eval.c:2695
#12 0x00000000006829ce in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=0, args=0x7fffffffcbf0) at ../../src/bytecode.c:639
#13 0x0000000000635993 in funcall_lambda (fun=..., nargs=0, arg_vector=0x7fffffffcbf0) at ../../src/eval.c:2879
#14 0x0000000000635215 in Ffuncall (nargs=1, args=0x7fffffffcbe8) at ../../src/eval.c:2764
#15 0x00000000006829ce in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=0, args=0x7fffffffda88) at ../../src/bytecode.c:639
#16 0x0000000000635993 in funcall_lambda (fun=..., nargs=0, arg_vector=0x7fffffffda88) at ../../src/eval.c:2879
#17 0x0000000000635215 in Ffuncall (nargs=1, args=0x7fffffffda80) at ../../src/eval.c:2764
#18 0x00000000006829ce in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=0, args=0x7fffffffe2c0) at ../../src/bytecode.c:639
#19 0x0000000000635993 in funcall_lambda (fun=..., nargs=0, arg_vector=0x7fffffffe2c0) at ../../src/eval.c:2879
#20 0x00000000006355dd in apply_lambda (fun=..., args=..., count=4) at ../../src/eval.c:2816
#21 0x000000000063391b in eval_sub (form=...) at ../../src/eval.c:2233
#22 0x0000000000632d15 in Feval (form=..., lexical=...) at ../../src/eval.c:2010
#23 0x0000000000582abe in top_level_2 () at ../../src/keyboard.c:1127
#24 0x000000000063126a in internal_condition_case (bfun=0x582aa1 <top_level_2>, handlers=..., hfun=0x5824c2 <cmd_error>) at ../../src/eval.c:1314
#25 0x0000000000582aff in top_level_1 (ignore=...) at ../../src/keyboard.c:1135
#26 0x00000000006307f8 in internal_catch (tag=..., func=0x582ac0 <top_level_1>, arg=...) at ../../src/eval.c:1080
#27 0x00000000005829f9 in command_loop () at ../../src/keyboard.c:1096
#28 0x0000000000581fd6 in recursive_edit_1 () at ../../src/keyboard.c:703
#29 0x00000000005821b5 in Frecursive_edit () at ../../src/keyboard.c:774
#30 0x000000000057ff33 in main (argc=4, argv=0x7fffffffe8a8) at ../../src/emacs.c:1659

Lisp Backtrace:
"x-open-connection" (0xffffba58)
0x13cc630 PVEC_COMPILED
"apply" (0xffffc450)
"window-system-initialization" (0xffffcbf0)
"command-line" (0xffffda88)
"normal-top-level" (0xffffe2c0)
(gdb)

Now I set a breakpoint in the function x_new_font of xterm.c at the
beginning of the line

FRAME_LINE_HEIGHT (f) = font_ascent + font_descent;

which is line 9829 here (yours will surely differ) and continue
debugging via "c".  After hitting the breakpoint I do

(gdb) p font_ascent + font_descent
$11 = 18

This is not the value I wanted via my customizations - I want a value of
15.  So I continue until I get the desired value via

(gdb) p font_ascent + font_descent
$13 = 15

The backtrace till here is

#0  x_new_font (f=0x1423860, font_object=..., fontset=21) at ../../src/xterm.c:9829
#1  0x0000000000430a53 in x_set_font (f=0x1423860, arg=..., oldval=...) at ../../src/frame.c:3749
#2  0x000000000042e809 in x_set_frame_parameters (f=0x1423860, alist=...) at ../../src/frame.c:3342
#3  0x000000000042d1b6 in Fmodify_frame_parameters (frame=..., alist=...) at ../../src/frame.c:2801
#4  0x000000000052fe9a in set_font_frame_param (frame=..., lface=...) at ../../src/xfaces.c:3328
#5  0x000000000052f65b in Finternal_set_lisp_face_attribute (face=..., attr=..., value=..., frame=...) at ../../src/xfaces.c:3142
#6  0x0000000000635051 in Ffuncall (nargs=5, args=0x7fffffff7ca0) at ../../src/eval.c:2726
#7  0x00000000006829ce in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=32, args=0x7fffffff84c8) at ../../src/bytecode.c:639
#8  0x0000000000635993 in funcall_lambda (fun=..., nargs=32, arg_vector=0x7fffffff84b8) at ../../src/eval.c:2879
#9  0x0000000000635215 in Ffuncall (nargs=33, args=0x7fffffff84b0) at ../../src/eval.c:2764
#10 0x0000000000634271 in Fapply (nargs=4, args=0x7fffffff87a0) at ../../src/eval.c:2343
#11 0x0000000000634e71 in Ffuncall (nargs=5, args=0x7fffffff8798) at ../../src/eval.c:2695
#12 0x00000000006829ce in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=3, args=0x7fffffff8f58) at ../../src/bytecode.c:639
#13 0x0000000000635993 in funcall_lambda (fun=..., nargs=3, arg_vector=0x7fffffff8f40) at ../../src/eval.c:2879
#14 0x0000000000635215 in Ffuncall (nargs=4, args=0x7fffffff8f38) at ../../src/eval.c:2764
#15 0x00000000006829ce in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=2, args=0x7fffffff9728) at ../../src/bytecode.c:639
#16 0x0000000000635993 in funcall_lambda (fun=..., nargs=2, arg_vector=0x7fffffff9718) at ../../src/eval.c:2879
#17 0x0000000000635215 in Ffuncall (nargs=3, args=0x7fffffff9710) at ../../src/eval.c:2764
#18 0x00000000006829ce in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=3, args=0x7fffffff9eb8) at ../../src/bytecode.c:639
#19 0x0000000000635993 in funcall_lambda (fun=..., nargs=3, arg_vector=0x7fffffff9ea0) at ../../src/eval.c:2879
#20 0x0000000000635215 in Ffuncall (nargs=4, args=0x7fffffff9e98) at ../../src/eval.c:2764
#21 0x00000000006829ce in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=0, args=0x0) at ../../src/bytecode.c:639
#22 0x0000000000635e3a in funcall_lambda (fun=..., nargs=2, arg_vector=0xa1a5d5) at ../../src/eval.c:2945
#23 0x0000000000635215 in Ffuncall (nargs=3, args=0x7fffffffa850) at ../../src/eval.c:2764
#24 0x0000000000633cc6 in Fapply (nargs=3, args=0x7fffffffa850) at ../../src/eval.c:2300
#25 0x0000000000634e71 in Ffuncall (nargs=4, args=0x7fffffffa848) at ../../src/eval.c:2695
#26 0x00000000006829ce in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=0, args=0x0) at ../../src/bytecode.c:639
#27 0x0000000000635e3a in funcall_lambda (fun=..., nargs=1, arg_vector=0xa1a47d) at ../../src/eval.c:2945
#28 0x00000000006355dd in apply_lambda (fun=..., args=..., count=37) at ../../src/eval.c:2816
#29 0x000000000063391b in eval_sub (form=...) at ../../src/eval.c:2233
#30 0x0000000000669c55 in readevalloop_eager_expand_eval (val=..., macroexpand=...) at ../../src/lread.c:1759
#31 0x000000000066a3ab in readevalloop (readcharfun=..., stream=0x0, sourcename=..., printflag=false, unibyte=..., readfun=..., start=..., end=...) at ../../src/lread.c:1927
#32 0x000000000066a715 in Feval_buffer (buffer=..., printflag=..., filename=..., unibyte=..., do_allow_print=...) at ../../src/lread.c:1993
#33 0x000000000063509f in Ffuncall (nargs=6, args=0x7fffffffb358) at ../../src/eval.c:2731
#34 0x00000000006829ce in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=0, args=0x0) at ../../src/bytecode.c:639
#35 0x0000000000635e3a in funcall_lambda (fun=..., nargs=4, arg_vector=0x9d2c5d) at ../../src/eval.c:2945
#36 0x0000000000635215 in Ffuncall (nargs=5, args=0x7fffffffbb90) at ../../src/eval.c:2764
#37 0x0000000000634a2f in call4 (fn=..., arg1=..., arg2=..., arg3=..., arg4=...) at ../../src/eval.c:2599
#38 0x0000000000668641 in Fload (file=..., noerror=..., nomessage=..., nosuffix=..., must_suffix=...) at ../../src/lread.c:1278
#39 0x000000000063509f in Ffuncall (nargs=4, args=0x7fffffffc000) at ../../src/eval.c:2731
#40 0x00000000006829ce in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=1, args=0x7fffffffcbf8) at ../../src/bytecode.c:639
#41 0x0000000000635993 in funcall_lambda (fun=..., nargs=1, arg_vector=0x7fffffffcbf0) at ../../src/eval.c:2879
#42 0x0000000000635215 in Ffuncall (nargs=2, args=0x7fffffffcbe8) at ../../src/eval.c:2764
#43 0x00000000006829ce in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=0, args=0x7fffffffda88) at ../../src/bytecode.c:639
#44 0x0000000000635993 in funcall_lambda (fun=..., nargs=0, arg_vector=0x7fffffffda88) at ../../src/eval.c:2879
#45 0x0000000000635215 in Ffuncall (nargs=1, args=0x7fffffffda80) at ../../src/eval.c:2764
#46 0x00000000006829ce in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=0, args=0x7fffffffe2c0) at ../../src/bytecode.c:639
#47 0x0000000000635993 in funcall_lambda (fun=..., nargs=0, arg_vector=0x7fffffffe2c0) at ../../src/eval.c:2879
#48 0x00000000006355dd in apply_lambda (fun=..., args=..., count=4) at ../../src/eval.c:2816
#49 0x000000000063391b in eval_sub (form=...) at ../../src/eval.c:2233
#50 0x0000000000632d15 in Feval (form=..., lexical=...) at ../../src/eval.c:2010
#51 0x0000000000582abe in top_level_2 () at ../../src/keyboard.c:1127
#52 0x000000000063126a in internal_condition_case (bfun=0x582aa1 <top_level_2>, handlers=..., hfun=0x5824c2 <cmd_error>) at ../../src/eval.c:1314
#53 0x0000000000582aff in top_level_1 (ignore=...) at ../../src/keyboard.c:1135
#54 0x00000000006307f8 in internal_catch (tag=..., func=0x582ac0 <top_level_1>, arg=...) at ../../src/eval.c:1080
#55 0x00000000005829f9 in command_loop () at ../../src/keyboard.c:1096
#56 0x0000000000581fd6 in recursive_edit_1 () at ../../src/keyboard.c:703
#57 0x00000000005821b5 in Frecursive_edit () at ../../src/keyboard.c:774
#58 0x000000000057ff33 in main (argc=4, argv=0x7fffffffe8a8) at ../../src/emacs.c:1659

Lisp Backtrace:
"internal-set-lisp-face-attribute" (0xffff7ca8)
"set-face-attribute" (0xffff84b8)
"apply" (0xffff87a0)
"face-spec-set-2" (0xffff8f40)
"face-spec-recalc" (0xffff9718)
"face-spec-set" (0xffff9ea0)
"custom-theme-set-faces" (0xffffa858)
"apply" (0xffffa850)
"custom-set-faces" (0xffffae90)
"eval-buffer" (0xffffb360)
"load-with-code-conversion" (0xffffbb98)
"load" (0xffffc008)
"command-line-1" (0xffffcbf0)
"command-line" (0xffffda88)
"normal-top-level" (0xffffe2c0)
(gdb)

So it's easy to see that my `custom-set-faces' got applied and I could
be happy.  However, typing "c" again will, unfortunately, reveal that my
customized settings get overruled by the earlier seen

(gdb) p font_ascent + font_descent
$14 = 18

The associated backtrace is now

#0  x_new_font (f=0x1423860, font_object=..., fontset=2) at ../../src/xterm.c:9829
#1  0x0000000000430a53 in x_set_font (f=0x1423860, arg=..., oldval=...) at ../../src/frame.c:3749
#2  0x000000000042e809 in x_set_frame_parameters (f=0x1423860, alist=...) at ../../src/frame.c:3342
#3  0x000000000042d1b6 in Fmodify_frame_parameters (frame=..., alist=...) at ../../src/frame.c:2801
#4  0x000000000052fe9a in set_font_frame_param (frame=..., lface=...) at ../../src/xfaces.c:3328
#5  0x000000000052f65b in Finternal_set_lisp_face_attribute (face=..., attr=..., value=..., frame=...) at ../../src/xfaces.c:3142
#6  0x0000000000635051 in Ffuncall (nargs=5, args=0x7fffffffb760) at ../../src/eval.c:2726
#7  0x00000000006829ce in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=10, args=0x7fffffffbf90) at ../../src/bytecode.c:639
#8  0x0000000000635993 in funcall_lambda (fun=..., nargs=10, arg_vector=0x7fffffffbf80) at ../../src/eval.c:2879
#9  0x0000000000635215 in Ffuncall (nargs=11, args=0x7fffffffbf78) at ../../src/eval.c:2764
#10 0x00000000006829ce in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=0, args=0x0) at ../../src/bytecode.c:639
#11 0x0000000000635e3a in funcall_lambda (fun=..., nargs=2, arg_vector=0xb4f7c5) at ../../src/eval.c:2945
#12 0x0000000000635215 in Ffuncall (nargs=3, args=0x7fffffffc748) at ../../src/eval.c:2764
#13 0x00000000006829ce in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=0, args=0x0) at ../../src/bytecode.c:639
#14 0x0000000000635e3a in funcall_lambda (fun=..., nargs=1, arg_vector=0xb4f93d) at ../../src/eval.c:2945
#15 0x0000000000635215 in Ffuncall (nargs=2, args=0x7fffffffcfd8) at ../../src/eval.c:2764
#16 0x000000000062afdd in Ffuncall_interactively (nargs=2, args=0x7fffffffcfd8) at ../../src/callint.c:252
#17 0x0000000000634e71 in Ffuncall (nargs=3, args=0x7fffffffcfd0) at ../../src/eval.c:2695
#18 0x000000000062d5a0 in Fcall_interactively (function=..., record_flag=..., keys=...) at ../../src/callint.c:843
#19 0x000000000063500e in Ffuncall (nargs=4, args=0x7fffffffd488) at ../../src/eval.c:2722
#20 0x00000000006829ce in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=4, args=0x7fffffffdce8) at ../../src/bytecode.c:639
#21 0x0000000000635993 in funcall_lambda (fun=..., nargs=4, arg_vector=0x7fffffffdcc8) at ../../src/eval.c:2879
#22 0x0000000000635215 in Ffuncall (nargs=5, args=0x7fffffffdcc0) at ../../src/eval.c:2764
#23 0x0000000000634a2f in call4 (fn=..., arg1=..., arg2=..., arg3=..., arg4=...) at ../../src/eval.c:2599
#24 0x000000000058775d in read_char (commandflag=1, map=..., prev_event=..., used_mouse_menu=0x7fffffffe21f, end_time=0x0) at ../../src/keyboard.c:2854
#25 0x00000000005975a7 in read_key_sequence (keybuf=0x7fffffffe3b0, bufsize=30, prompt=..., dont_downcase_last=false, can_return_switch_frame=true, fix_current_buffer=true, prevent_redisplay=false) at ../../src/keyboard.c:9155
#26 0x0000000000583286 in command_loop_1 () at ../../src/keyboard.c:1376
#27 0x000000000063126a in internal_condition_case (bfun=0x582e50 <command_loop_1>, handlers=..., hfun=0x5824c2 <cmd_error>) at ../../src/eval.c:1314
#28 0x0000000000582a7e in command_loop_2 (ignore=...) at ../../src/keyboard.c:1118
#29 0x00000000006307f8 in internal_catch (tag=..., func=0x582a55 <command_loop_2>, arg=...) at ../../src/eval.c:1080
#30 0x0000000000582a20 in command_loop () at ../../src/keyboard.c:1097
#31 0x0000000000581fd6 in recursive_edit_1 () at ../../src/keyboard.c:703
#32 0x00000000005821b5 in Frecursive_edit () at ../../src/keyboard.c:774
#33 0x000000000057ff33 in main (argc=4, argv=0x7fffffffe8a8) at ../../src/emacs.c:1659

Lisp Backtrace:
"internal-set-lisp-face-attribute" (0xffffb768)
"set-face-attribute" (0xffffbf80)
"font-setting-change-default-font" (0xffffc750)
"dynamic-setting-handle-config-changed-event" (0xffffcfe0)
"funcall-interactively" (0xffffcfd8)
"call-interactively" (0xffffd490)
"command-execute" (0xffffdcc8)
(gdb)

It's easy to spot `dynamic-setting-handle-config-changed-event' as the
source of this.

martin




This bug report was last modified 105 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.