unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* theme and a question about creating them
@ 2010-12-31 15:52 Dirk-Jan C. Binnema
  2011-01-02 14:16 ` Chong Yidong
  0 siblings, 1 reply; 16+ messages in thread
From: Dirk-Jan C. Binnema @ 2010-12-31 15:52 UTC (permalink / raw)
  To: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 1130 bytes --]

Hi all,

Find attached a theme inspired by zenburn-theme[1]; it's only the things I
could generate with the nice GNU Emacs Theme Creator. To adapt the complete
theme (which was written for color-theme.el) to the new system, it'd be nice
if some abstraction were possible i.e., define a handful of base colors, and
re-use them; the original zenburn-theme is /huge/, so it's a bit cumbersome to
work with literals everywhere.

I tried to use defvar/defconst and :inherit do this (as the old theme did),
but it does not seem to work in the new system, i.e.. I tried something like:

(defconst mycolor "#123456")
(deftheme mytheme)
(custom-theme-set-faces 'mytheme
     `(default ((t (:background ,mycolor))))) 

but it seems the defconst is not picked up. And for :inherit, it seems you
cannot refer to the faces defined in the same 'custom-theme-set-faces' form.
I could define theme elsewhere of course, but obviously it'd be nice if my
theme file would be self-contained.

Is there some way to use constants like this, either with defconst/defvar
or :inherit?

Thanks,
Dirk.

[1] http://www.emacswiki.org/emacs/ColorThemeZenburn


[-- Attachment #2: zenburn-theme.el --]
[-- Type: text/plain, Size: 2338 bytes --]

;;; zenburn-theme.el --- Custom face theme for Emacs

;; Copyright (C) 2010 Dirk-Jan C. Binnema.

;; This file 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.

;; This file 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 <http://www.gnu.org/licenses/>.

;;; Code:

(deftheme zenburn
  "Based on the Zenburn theme.")

(custom-theme-set-faces
 'zenburn
 '(default ((t (:background "#3f3f3f" :foreground "#dcdccc"))))
 '(cursor ((t (:background "#e0cf9f" :foreground "#ffffff"))))
 '(region ((t (:background "#5f5f5f"))))
 '(mode-line ((t (:background "#1e2320" :foreground "#acbc90"))))
 '(mode-line-inactive ((t (:background "#2e3330" :foreground "#88b090"))))
 '(fringe ((t (:background "#464646"))))
 '(minibuffer-prompt ((t (:foreground "#e0cf9f" :weight bold))))
 '(font-lock-builtin-face ((t (:foreground "#8cd0d3" :weight bold))))
 '(font-lock-comment-face ((t (:slant italic :foreground "#999999"))))
 '(font-lock-constant-face ((t (:foreground "#dca3a3" :weight bold))))
 '(font-lock-function-name-face ((t (:foreground "#8cd0d3"))))
 '(font-lock-keyword-face ((t (:foreground "#e0cf9f" :weight bold))))
 '(font-lock-string-face ((t (:foreground "#cc9393"))))
 '(font-lock-type-face ((t (:foreground "#dfdfbf" :weight bold))))
 '(font-lock-variable-name-face ((t (:foreground "#e0cf9f"))))
 '(font-lock-warning-face ((t (:background "#332323" :foreground "#e37170" :weight bold))))
 '(isearch ((t (:background "#506070" :weight bold))))
 '(lazy-highlight ((t (:background "#1e2320"))))
 '(link ((t (:foreground "#e0cf9f" :underline t))))
 '(link-visited ((t (:foreground "#dfaf8f" :underline t))))
 '(button ((t (:background "#506070" :foreground "#e0cf9f" :weight bold))))
 '(header-line ((t (:background "#2e3330" :foreground "#88b090")))))

(provide-theme 'zenburn)

;; Local Variables:
;; no-byte-compile: t
;; End:

;;; zenburn-theme.el  ends here

[-- Attachment #3: Type: text/plain, Size: 170 bytes --]


-- 
Dirk-Jan C. Binnema                  Helsinki, Finland
e:djcb@djcbsoftware.nl           w:www.djcbsoftware.nl
pgp: D09C E664 897D 7D39 5047 A178 E96A C7A1 017D DA3C

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: theme and a question about creating them
  2010-12-31 15:52 theme and a question about creating them Dirk-Jan C. Binnema
@ 2011-01-02 14:16 ` Chong Yidong
  2011-01-02 17:38   ` Yavuz
                     ` (2 more replies)
  0 siblings, 3 replies; 16+ messages in thread
From: Chong Yidong @ 2011-01-02 14:16 UTC (permalink / raw)
  To: djcb; +Cc: emacs-devel

Dirk-Jan C. Binnema <djcb.bulk@gmail.com> writes:

> I tried to use defvar/defconst and :inherit do this (as the old theme did),
> but it does not seem to work in the new system, i.e.. I tried something like:
>
> (defconst mycolor "#123456")
> (deftheme mytheme)
> (custom-theme-set-faces 'mytheme
>      `(default ((t (:background ,mycolor)))))
>
> but it seems the defconst is not picked up. And for :inherit, it seems you
> cannot refer to the faces defined in the same 'custom-theme-set-faces' form.
> I could define theme elsewhere of course, but obviously it'd be nice if my
> theme file would be self-contained.
>
> Is there some way to use constants like this, either with defconst/defvar
> or :inherit?

Currently, the theme loading code is too strict about the forms in the
theme file that it will evaluate.  It uses `unsafep' to check the forms,
and (defconst mycolor "#123456") is considered unsafe under the criteria
used by `unsafep'.

I am not sure what's the best way of handling this.  Maybe we should
just go back to unconditionally loading theme files, since it's unlikely
we can make evaluating Elisp code truly safe.  Any objections or
alternative ideas?



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: theme and a question about creating them
  2011-01-02 14:16 ` Chong Yidong
@ 2011-01-02 17:38   ` Yavuz
  2011-01-05 19:26   ` Dirk-Jan C. Binnema
  2011-01-05 21:05   ` Stefan Monnier
  2 siblings, 0 replies; 16+ messages in thread
From: Yavuz @ 2011-01-02 17:38 UTC (permalink / raw)
  To: emacs-devel

Chong Yidong <cyd <at> stupidchicken.com> writes:

> I am not sure what's the best way of handling this.  Maybe we should
> just go back to unconditionally loading theme files, since it's unlikely
> we can make evaluating Elisp code truly safe.  Any objections or
> alternative ideas?
> 

I had run into the same security 'features' a few months back when creating (yet
another) version of zenburn. As a user and designer of color themes, I would
prefer not to have any restrictions, which seem out of place in an editor whose
raison d'être is letting its users do what they want. All .el files are code
(and data) and should be treated equally.

In any case, I have stumbled on a 'solution'; I explicitly load the theme file
in my init file:

(load-file (concat dotfiles-dir "themes/zendust-theme.el"))

Then the defvars for defining colors and :inherit stuff seem to work. I have no
idea if this has unwanted side effects.

My theme is at https://github.com/yarkun/zendust





^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: theme and a question about creating them
  2011-01-02 14:16 ` Chong Yidong
  2011-01-02 17:38   ` Yavuz
@ 2011-01-05 19:26   ` Dirk-Jan C. Binnema
  2011-01-05 21:05   ` Stefan Monnier
  2 siblings, 0 replies; 16+ messages in thread
From: Dirk-Jan C. Binnema @ 2011-01-05 19:26 UTC (permalink / raw)
  To: Chong Yidong; +Cc: emacs-devel

Hi,

>>>>> On Sun, 2 Jan 2011 09:16:38 -0500, Chong Yidong ("CYD") wrote:

  >> Dirk-Jan C. Binnema <djcb.bulk@gmail.com> writes: I tried to use
  >> defvar/defconst and :inherit do this (as the old theme did), but it does
  >> not seem to work in the new system, i.e.. I tried something like:
  >> 
  >> (defconst mycolor "#123456")
  >> (deftheme mytheme)
  >> (custom-theme-set-faces 'mytheme
  >> `(default ((t (:background ,mycolor)))))
  >> 
  >> but it seems the defconst is not picked up. And for :inherit, it seems
  >> you cannot refer to the faces defined in the same
  >> 'custom-theme-set-faces' form.  I could define theme elsewhere of course,
  >> but obviously it'd be nice if my theme file would be self-contained.
  >> 
  >> Is there some way to use constants like this, either with defconst/defvar
  >> or :inherit?

  CYD> Currently, the theme loading code is too strict about the forms in the
  CYD> theme file that it will evaluate.  It uses `unsafep' to check the
  CYD> forms, and (defconst mycolor "#123456") is considered unsafe under the
  CYD> criteria used by `unsafep'.

  CYD> I am not sure what's the best way of handling this.  Maybe we should
  CYD> just go back to unconditionally loading theme files, since it's
  CYD> unlikely we can make evaluating Elisp code truly safe.  Any objections
  CYD> or alternative ideas?

I'm fine with that, but I'm hardly qualified to see the implications of
this.

Somewhat related, I think that emacs should promote the use of :inherit; many
modes have their own faces which require way to many customizations (look
e.g.. at zenburn which has hundreds of lines).

Finally, load-theme seems like a convenient mechanism to set/unset any set of
values. I wonder if it could be used (if unconditional loading is enabled) to
ship a theme with sets up things in a way that many new users expect, i.e..,
with delete-selection-mode, column-number-mode and a couple of other things.

Best wishes,
Dirk.

-- 
Dirk-Jan C. Binnema                  Helsinki, Finland
e:djcb@djcbsoftware.nl           w:www.djcbsoftware.nl
pgp: D09C E664 897D 7D39 5047 A178 E96A C7A1 017D DA3C



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: theme and a question about creating them
  2011-01-02 14:16 ` Chong Yidong
  2011-01-02 17:38   ` Yavuz
  2011-01-05 19:26   ` Dirk-Jan C. Binnema
@ 2011-01-05 21:05   ` Stefan Monnier
  2011-01-05 22:30     ` Johan Bockgård
                       ` (2 more replies)
  2 siblings, 3 replies; 16+ messages in thread
From: Stefan Monnier @ 2011-01-05 21:05 UTC (permalink / raw)
  To: Chong Yidong; +Cc: djcb, emacs-devel

>> (defconst mycolor "#123456")
>> (deftheme mytheme)
>> (custom-theme-set-faces 'mytheme
>> `(default ((t (:background ,mycolor)))))

> Currently, the theme loading code is too strict about the forms in the
> theme file that it will evaluate.  It uses `unsafep' to check the forms,
> and (defconst mycolor "#123456") is considered unsafe under the criteria
> used by `unsafep'.

> I am not sure what's the best way of handling this.

How 'bout:

   (deftheme mytheme)
   (let ((mycolor "#123456"))
     (custom-theme-set-faces 'mytheme
     `(default ((t (:background ,mycolor))))))

> Maybe we should just go back to unconditionally loading theme files,
> since it's unlikely we can make evaluating Elisp code truly safe.
> Any objections or alternative ideas?

IIUC the problem is that users tend to expect themes to be "just data",
without any possible risks, so they may try themes they download from
random places on the web.
So, I think it's OK to use unsafep to weed out the "safe" themes, and
prompt users for the remaining themes.  But the prompt should make it
clear that we have no determined the theme to be dangerous, just that
Emacs did not recognize it as obviously safe and is unable to assess
whether it's dangerous or not.


        Stefan



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: theme and a question about creating them
  2011-01-05 21:05   ` Stefan Monnier
@ 2011-01-05 22:30     ` Johan Bockgård
  2011-01-07  3:36       ` Stefan Monnier
  2011-01-06  0:49     ` Chong Yidong
  2011-01-08 19:28     ` Chong Yidong
  2 siblings, 1 reply; 16+ messages in thread
From: Johan Bockgård @ 2011-01-05 22:30 UTC (permalink / raw)
  To: emacs-devel

Stefan Monnier <monnier@IRO.UMontreal.CA> writes:

>>> (defconst mycolor "#123456")
>>> (deftheme mytheme)
>>> (custom-theme-set-faces 'mytheme
>>> `(default ((t (:background ,mycolor)))))
>
>> Currently, the theme loading code is too strict about the forms in the
>> theme file that it will evaluate.  It uses `unsafep' to check the forms,
>> and (defconst mycolor "#123456") is considered unsafe under the criteria
>> used by `unsafep'.
>
>> I am not sure what's the best way of handling this.
>
> How 'bout:
>
>    (deftheme mytheme)
>    (let ((mycolor "#123456"))
>      (custom-theme-set-faces 'mytheme
>      `(default ((t (:background ,mycolor))))))

unsafep does not allow \`



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: theme and a question about creating them
  2011-01-05 21:05   ` Stefan Monnier
  2011-01-05 22:30     ` Johan Bockgård
@ 2011-01-06  0:49     ` Chong Yidong
  2011-01-08 19:28     ` Chong Yidong
  2 siblings, 0 replies; 16+ messages in thread
From: Chong Yidong @ 2011-01-06  0:49 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: djcb, emacs-devel

Stefan Monnier <monnier@IRO.UMontreal.CA> writes:

>> Maybe we should just go back to unconditionally loading theme files,
>> since it's unlikely we can make evaluating Elisp code truly safe.
>> Any objections or alternative ideas?
>
> IIUC the problem is that users tend to expect themes to be "just data",
> without any possible risks, so they may try themes they download from
> random places on the web.
>
> So, I think it's OK to use unsafep to weed out the "safe" themes, and
> prompt users for the remaining themes.  But the prompt should make it
> clear that we have no determined the theme to be dangerous, just that
> Emacs did not recognize it as obviously safe and is unable to assess
> whether it's dangerous or not.

Sounds reasonable.



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: theme and a question about creating them
  2011-01-05 22:30     ` Johan Bockgård
@ 2011-01-07  3:36       ` Stefan Monnier
  2011-01-08  3:12         ` Johan Bockgård
  0 siblings, 1 reply; 16+ messages in thread
From: Stefan Monnier @ 2011-01-07  3:36 UTC (permalink / raw)
  To: emacs-devel

>>>> (defconst mycolor "#123456")
>>>> (deftheme mytheme)
>>>> (custom-theme-set-faces 'mytheme
>>>> `(default ((t (:background ,mycolor)))))
>> 
>>> Currently, the theme loading code is too strict about the forms in the
>>> theme file that it will evaluate.  It uses `unsafep' to check the forms,
>>> and (defconst mycolor "#123456") is considered unsafe under the criteria
>>> used by `unsafep'.
>> 
>>> I am not sure what's the best way of handling this.
>> 
>> How 'bout:
>> 
>> (deftheme mytheme)
>> (let ((mycolor "#123456"))
>> (custom-theme-set-faces 'mytheme
>> `(default ((t (:background ,mycolor))))))

> unsafep does not allow \`

I can't think of a reason why backquote wouldn't be safe, so it sounds
like it's just missing from the list of safe forms.  Or maybe it's the
general handling of macros which is at stake, but in any case it
shouldn't be unsolvable.


        Stefan



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: theme and a question about creating them
  2011-01-07  3:36       ` Stefan Monnier
@ 2011-01-08  3:12         ` Johan Bockgård
  2011-01-08  5:26           ` Stefan Monnier
  0 siblings, 1 reply; 16+ messages in thread
From: Johan Bockgård @ 2011-01-08  3:12 UTC (permalink / raw)
  To: emacs-devel

Stefan Monnier <monnier@iro.umontreal.ca> writes:

>> unsafep does not allow \`
>
> I can't think of a reason why backquote wouldn't be safe, so it sounds
> like it's just missing from the list of safe forms.  Or maybe it's the
> general handling of macros which is at stake, but in any case it
> shouldn't be unsolvable.

Something like


2011-01-07  Johan Bockgård  <bojohan@gnu.org>

	* emacs-lisp/unsafep.el (unsafep): Handle backquoted forms.


diff --git a/lisp/emacs-lisp/unsafep.el b/lisp/emacs-lisp/unsafep.el
index a62f8de..5dee2af 100644
--- a/lisp/emacs-lisp/unsafep.el
+++ b/lisp/emacs-lisp/unsafep.el
@@ -202,6 +202,9 @@ UNSAFEP-VARS is a list of symbols with local bindings."
 	      (dolist (x (nthcdr 3 form))
 		(setq reason (unsafep-progn (cdr x)))
 		(if reason (throw 'unsafep reason))))))
+       ((eq fun '\`)
+	;; Backquoted form - safe if its expansion is.
+	(unsafep (cdr (backquote-process (cadr form)))))
        (t
 	;;First unsafep-function call above wasn't nil, no special case applies
 	reason)))))




^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: theme and a question about creating them
  2011-01-08  3:12         ` Johan Bockgård
@ 2011-01-08  5:26           ` Stefan Monnier
  2011-01-11 18:57             ` Johan Bockgård
  0 siblings, 1 reply; 16+ messages in thread
From: Stefan Monnier @ 2011-01-08  5:26 UTC (permalink / raw)
  To: emacs-devel

>>> unsafep does not allow \`
>> I can't think of a reason why backquote wouldn't be safe, so it sounds
>> like it's just missing from the list of safe forms.  Or maybe it's the
>> general handling of macros which is at stake, but in any case it
>> shouldn't be unsolvable.
> 2011-01-07  Johan Bockgård  <bojohan@gnu.org>
> 	* emacs-lisp/unsafep.el (unsafep): Handle backquoted forms.

> diff --git a/lisp/emacs-lisp/unsafep.el b/lisp/emacs-lisp/unsafep.el
> index a62f8de..5dee2af 100644
> --- a/lisp/emacs-lisp/unsafep.el
> +++ b/lisp/emacs-lisp/unsafep.el
> @@ -202,6 +202,9 @@ UNSAFEP-VARS is a list of symbols with local bindings."
>  	      (dolist (x (nthcdr 3 form))
>  		(setq reason (unsafep-progn (cdr x)))
>  		(if reason (throw 'unsafep reason))))))
> +       ((eq fun '\`)
> +	;; Backquoted form - safe if its expansion is.
> +	(unsafep (cdr (backquote-process (cadr form)))))

Yes, that looks fine.  Feel free to install this patch, thanks.


        Stefan



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: theme and a question about creating them
  2011-01-05 21:05   ` Stefan Monnier
  2011-01-05 22:30     ` Johan Bockgård
  2011-01-06  0:49     ` Chong Yidong
@ 2011-01-08 19:28     ` Chong Yidong
  2011-01-15  0:48       ` Johan Bockgård
  2 siblings, 1 reply; 16+ messages in thread
From: Chong Yidong @ 2011-01-08 19:28 UTC (permalink / raw)
  To: djcb; +Cc: Stefan Monnier, emacs-devel

Stefan Monnier <monnier@IRO.UMontreal.CA> writes:

> So, I think it's OK to use unsafep to weed out the "safe" themes, and
> prompt users for the remaining themes.

This is now implemented.  It should now be possible to put arbitrary
elisp in theme files; if Emacs can't determine that the file is safe,
the user is queried.  The new variable `custom-safe-theme-files' stores
a list of known-safe themes.



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: theme and a question about creating them
  2011-01-08  5:26           ` Stefan Monnier
@ 2011-01-11 18:57             ` Johan Bockgård
  0 siblings, 0 replies; 16+ messages in thread
From: Johan Bockgård @ 2011-01-11 18:57 UTC (permalink / raw)
  To: emacs-devel

Stefan Monnier <monnier@iro.umontreal.ca> writes:

> Yes, that looks fine.  Feel free to install this patch, thanks.

Done.



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: theme and a question about creating them
  2011-01-08 19:28     ` Chong Yidong
@ 2011-01-15  0:48       ` Johan Bockgård
  2011-01-19 22:42         ` Johan Bockgård
  0 siblings, 1 reply; 16+ messages in thread
From: Johan Bockgård @ 2011-01-15  0:48 UTC (permalink / raw)
  To: emacs-devel

Chong Yidong <cyd@stupidchicken.com> writes:

> Stefan Monnier <monnier@IRO.UMontreal.CA> writes:
>
>> So, I think it's OK to use unsafep to weed out the "safe" themes, and
>> prompt users for the remaining themes.
>
> This is now implemented.  It should now be possible to put arbitrary
> elisp in theme files; if Emacs can't determine that the file is safe,
> the user is queried.

But custom-theme-set-variables and custom-theme-set-faces are actually
not safe functions.



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: theme and a question about creating them
  2011-01-15  0:48       ` Johan Bockgård
@ 2011-01-19 22:42         ` Johan Bockgård
  2011-01-20  3:04           ` Chong Yidong
  0 siblings, 1 reply; 16+ messages in thread
From: Johan Bockgård @ 2011-01-19 22:42 UTC (permalink / raw)
  To: emacs-devel; +Cc: Chong Yidong


Ping?

It doesn't make much sense to run the theme through `unsafep' while
marking `custom-theme-set-variables' and `custom-theme-set-faces' as
"safe functions" (which they aren't).


Johan Bockgård <bojohan@gnu.org> writes:

> Chong Yidong <cyd@stupidchicken.com> writes:
>
>> Stefan Monnier <monnier@IRO.UMontreal.CA> writes:
>>
>>> So, I think it's OK to use unsafep to weed out the "safe" themes, and
>>> prompt users for the remaining themes.
>>
>> This is now implemented.  It should now be possible to put arbitrary
>> elisp in theme files; if Emacs can't determine that the file is safe,
>> the user is queried.
>
> But custom-theme-set-variables and custom-theme-set-faces are actually
> not safe functions.



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: theme and a question about creating them
  2011-01-19 22:42         ` Johan Bockgård
@ 2011-01-20  3:04           ` Chong Yidong
  2011-01-20 15:46             ` Stefan Monnier
  0 siblings, 1 reply; 16+ messages in thread
From: Chong Yidong @ 2011-01-20  3:04 UTC (permalink / raw)
  To: emacs-devel

Johan Bockgård <bojohan@gnu.org> writes:

> It doesn't make much sense to run the theme through `unsafep' while
> marking `custom-theme-set-variables' and `custom-theme-set-faces' as
> "safe functions" (which they aren't).

A user who loads a theme would expects it to do *something*, so I'd
argue that those two functions should not be considered unsafe while
performing such an operation.

If this really is a concern, how bout marking only
custom-theme-set-faces as safe?  Then the user can be prompted for any
(non-built-in) theme that changes variables, but themes that only fiddle
with faces will be accepted.



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: theme and a question about creating them
  2011-01-20  3:04           ` Chong Yidong
@ 2011-01-20 15:46             ` Stefan Monnier
  0 siblings, 0 replies; 16+ messages in thread
From: Stefan Monnier @ 2011-01-20 15:46 UTC (permalink / raw)
  To: Chong Yidong; +Cc: emacs-devel

>> It doesn't make much sense to run the theme through `unsafep' while
>> marking `custom-theme-set-variables' and `custom-theme-set-faces' as
>> "safe functions" (which they aren't).
> A user who loads a theme would expects it to do *something*, so I'd
> argue that those two functions should not be considered unsafe while
> performing such an operation.

But if it sets a hook to trigger a nuclear explosion, the user might
be in for a nasty surprise.

> If this really is a concern, how bout marking only
> custom-theme-set-faces as safe?  Then the user can be prompted for any
> (non-built-in) theme that changes variables, but themes that only
> fiddle with faces will be accepted.

I guess that one could be safe, tho IIRC we can set :height to
a function, so there's still a risk.


        Stefan



^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2011-01-20 15:46 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-12-31 15:52 theme and a question about creating them Dirk-Jan C. Binnema
2011-01-02 14:16 ` Chong Yidong
2011-01-02 17:38   ` Yavuz
2011-01-05 19:26   ` Dirk-Jan C. Binnema
2011-01-05 21:05   ` Stefan Monnier
2011-01-05 22:30     ` Johan Bockgård
2011-01-07  3:36       ` Stefan Monnier
2011-01-08  3:12         ` Johan Bockgård
2011-01-08  5:26           ` Stefan Monnier
2011-01-11 18:57             ` Johan Bockgård
2011-01-06  0:49     ` Chong Yidong
2011-01-08 19:28     ` Chong Yidong
2011-01-15  0:48       ` Johan Bockgård
2011-01-19 22:42         ` Johan Bockgård
2011-01-20  3:04           ` Chong Yidong
2011-01-20 15:46             ` Stefan Monnier

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).