From: Kevin Rodgers <ihs_4664@yahoo.com>
Subject: Re: cc-mode adds newlines
Date: Mon, 22 Nov 2004 12:16:07 -0700 [thread overview]
Message-ID: <cntdtp$d2o$1@sea.gmane.org> (raw)
In-Reply-To: <jwv8y8tnbxh.fsf-monnier+emacs@gnu.org>
Stefan Monnier wrote:
>>I think we should add a variable require-final-newline-modes which
>>would be a list of mode names. run-mode-hook could see if the current
>>mode is in require-final-newline-modes, and if so, set
>>require-final-newline to require-final-newline-mode-value. The
>>default for require-final-newline-mode-value would be :ask, but if a
>>user sets it to t, then all the appriate modes would set
>>require-final-newline to t.
>
>
> I think that would be silly. Tons of variable might want to be set
> differently in different modes. Do we really want to add all the
> corresponding foo-modes side-variables?
> I think we'd be better off with a more generic solution.
I agree, but I would like to see it implemented outside of customize.
Custom would of course provide an interface to it, but wouldn't be the
only way to specify a mode-specific value.
For example, what if you just stored those values in each variable's
property list? E.g.
(put 'require-final-newline 'c-mode t)
would be equivalent to
(add-hook 'c-mode-hook
(lambda ()
(set (make-local-variable 'require-final-newline) t))
> I.e. we should aim for a way to specify per-mode settings in custom.
> That would be a lot more useful and wouldn't require adding any
> new variable.
>
> Here is one way it could work:
>
> - instead of `:type foo' use `:type (per-mode foo)' where (per-mode foo)
> stands for something like (repeat (cons mode foo)) where the list
of modes
> can be obtained doing
>
> (let ((modes nil) mode)
> (mapatoms (lambda (s)
> (if (and (string-match "-mode-hook\\'" (symbol-name s))
> (fboundp (intern (concat (setq mode
(substring (symbol-name s) 0 (match-beginning 0))) "-mode"))))
> (push mode modes))))
> modes)
Minor improvement (eliminate concat):
(when (and (string-match "\\(-mode\\)-hook\\'"
(symbol-name s))
(fboundp (intern (setq mode (substring
(symbol-name s) 0 (match-end 1))))))
(push mode modes))))
Why is it better to look for -mode-hook variables and derive the -mode
function, than to just look for -mode functions?
> - set custom-get and custom-set functions could look like:
>
> (defun custom-set-per-mode (var vals)
> (put var 'custom-per-mode vals)
> (dolist (setting vals)
> (let ((mode (car setting))
> (value (cdr setting)))
> (if (eq t mode)
> (set-default var value)
> (let ((fun (intern (concat "custom-set-" mode "-"
(symbol-name var)))))
> (unless (fboundp fun)
> (fset fun
> `(lambda ()
> (let ((val (assoc ',mode (get ',var
'custom-per-mode))))
> (if val (set (make-local-variable ',var) (cdr
val)))))))
> (add-hook (intern (concat mode "-mode-hook")) fun))))))
>
> (defun custom-get-per-mode (var)
> (let* ((val (get var 'custom-per-mode))
> (defval (assq t val)))
> (unless (eq (cdr defval) (default-value var))
> ;; It was changed somehow...
> (setcdr defval (default-value var)))
> val))
Ah, we're talking about almost exactly the same thing. You've collected
all the mode-specific values into an association list keyed by the mode
symbol, and put that on the variable's custom-per-mode property; whereas
I put each value on a separate property.
But the main difference is that I imagined the mode-specific value being
set by normal-mode instead of the mode's hook (which would be preserved
as a user option, not a system variable).
> Ideally we should even provide such per-mode settings for *all* custom
> variables, without having to change the `defcustom'.
--
Kevin Rodgers
next prev parent reply other threads:[~2004-11-22 19:16 UTC|newest]
Thread overview: 89+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <mailman.3671.1100818498.8225.bug-gnu-emacs@gnu.org>
2004-11-18 23:31 ` cc-mode adds newlines Jari Aalto
2004-11-19 20:27 ` Alan Mackenzie
2004-11-19 23:13 ` Andries Brouwer
2004-11-20 0:13 ` Miles Bader
2004-11-20 15:14 ` Alan Mackenzie
2004-11-21 2:08 ` Andries Brouwer
2004-11-21 10:00 ` Miles Bader
2004-11-21 11:38 ` Andries Brouwer
2004-11-21 12:08 ` Alfred M. Szmidt
2004-11-21 12:45 ` Andries Brouwer
2004-11-21 12:58 ` Alfred M. Szmidt
2004-11-21 13:03 ` Andries Brouwer
2004-11-21 13:09 ` Alfred M. Szmidt
2004-11-25 15:59 ` cc-mode adds newlines version=2.64 Jari Aalto
2004-11-22 0:03 ` cc-mode adds newlines Stefan Monnier
2004-11-21 12:53 ` Miles Bader
2004-11-21 13:00 ` Andries Brouwer
2004-11-21 13:14 ` David Kastrup
2004-11-21 13:35 ` Andries Brouwer
2004-11-21 13:41 ` David Kastrup
2004-11-21 13:54 ` Andries Brouwer
2004-11-21 15:54 ` Thien-Thi Nguyen
2004-11-21 11:06 ` David Kastrup
2004-11-21 11:45 ` Andries Brouwer
2004-11-21 12:08 ` David Kastrup
2004-11-21 11:41 ` Alan Mackenzie
2004-11-21 12:26 ` Andries Brouwer
2004-11-21 12:34 ` David Kastrup
2004-11-21 12:49 ` Andries Brouwer
2004-11-21 13:08 ` David Kastrup
2004-11-21 13:28 ` Andries Brouwer
2004-11-21 13:37 ` David Kastrup
2004-11-21 13:43 ` Andries Brouwer
2004-11-21 13:51 ` David Kastrup
2004-11-21 14:03 ` Andries Brouwer
2004-11-21 15:01 ` David Kastrup
2004-11-21 15:08 ` Andries Brouwer
2004-11-22 19:21 ` Kevin Rodgers
2004-11-21 15:18 ` Andreas Schwab
2004-11-21 15:36 ` Andries Brouwer
[not found] ` <01c4d003$Blat.v2.2.2$3d9a05c0@zahav.net.il>
2004-11-21 21:28 ` Andries Brouwer
2004-11-22 4:35 ` Eli Zaretskii
2004-11-22 9:04 ` David Kastrup
2004-11-21 13:52 ` Alan Mackenzie
2004-11-21 14:29 ` Andries Brouwer
2004-11-21 15:07 ` David Kastrup
2004-11-21 15:20 ` Andries Brouwer
2004-11-21 19:03 ` Alfred M. Szmidt
2004-11-21 21:19 ` Andries Brouwer
2004-11-21 21:46 ` Alfred M. Szmidt
2004-11-21 22:19 ` Andries Brouwer
2004-11-22 11:54 ` Benjamin Riefenstahl
2004-11-22 15:54 ` Andries Brouwer
2004-11-22 16:56 ` Andreas Schwab
2004-11-21 15:50 ` Kai Grossjohann
2004-11-22 19:20 ` Kevin Rodgers
2004-11-24 10:12 ` Kai Grossjohann
[not found] ` <01c4d002$Blat.v2.2.2$50b57dc0@zahav.net.il>
2004-11-21 21:21 ` Andries Brouwer
2004-11-22 4:31 ` Eli Zaretskii
2004-11-22 0:12 ` Stefan Monnier
2004-11-22 14:07 ` Richard Stallman
2004-11-22 15:52 ` Stefan Monnier
2004-11-22 19:16 ` Kevin Rodgers [this message]
2004-11-22 20:06 ` Stefan Monnier
2004-11-24 2:27 ` Richard Stallman
2004-11-24 4:27 ` Stefan Monnier
2004-11-28 14:45 ` Martin Stjernholm
2004-11-29 6:11 ` Richard Stallman
2004-11-30 10:51 ` Martin Stjernholm
2004-12-01 2:56 ` Richard Stallman
2004-11-21 14:47 ` Andreas Schwab
2004-11-21 15:03 ` Andries Brouwer
2004-11-21 15:39 ` Richard Stallman
2004-11-21 21:47 ` Alan Mackenzie
2004-11-23 16:30 ` Richard Stallman
2004-11-25 2:21 ` Richard Stallman
2004-11-25 20:35 ` Alan Mackenzie
2004-11-28 16:56 Andries.Brouwer
[not found] ` <Andries.Brouwer@cwi.nl>
2004-11-28 17:17 ` Martin Stjernholm
2004-11-28 20:20 ` Andries Brouwer
2004-11-29 0:14 ` Kim F. Storm
2004-11-30 7:01 ` Richard Stallman
2004-12-31 15:26 ` Richard Stallman
2004-12-31 16:56 ` Andries Brouwer
2005-01-02 16:05 ` Richard Stallman
2005-01-02 18:02 ` Andries Brouwer
2004-11-30 7:01 ` Richard Stallman
2004-11-30 8:11 ` David Kastrup
2004-12-01 2:56 ` Richard Stallman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='cntdtp$d2o$1@sea.gmane.org' \
--to=ihs_4664@yahoo.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).