emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Condider adding buffer-mode


From: Bozhidar Batsov
Subject: Re: Condider adding buffer-mode
Date: Tue, 29 Oct 2013 19:28:50 +0200

Here's some real examples:

(defun cider-util--clojure-buffers ()
  "Return a list of all existing `clojure-mode' buffers."
  (-filter
   (lambda (buffer) (eq 'clojure-mode (buffer-local-value 'major-mode buffer)))
   (buffer-list)))

vs

(defun cider-util--clojure-buffers ()
  "Return a list of all existing `clojure-mode' buffers."
  (-filter
   (lambda (buffer) (eq 'clojure-mode (buffer-mode buffer)))
   (buffer-list)))

===

(defun cider-remember-clojure-buffer (buffer)
  "Try to remember the BUFFER from which the user jumps.
The BUFFER needs to be a Clojure buffer and current major mode needs
to be `cider-repl-mode'.  The user can use `cider-switch-to-last-clojure-buffer'
to jump back to the last Clojure source buffer."
  (when (and buffer
             (eq 'clojure-mode (with-current-buffer buffer major-mode))
             (eq 'cider-repl-mode major-mode))
    (setq cider-last-clojure-buffer buffer)))

vs

(defun cider-remember-clojure-buffer (buffer)
  "Try to remember the BUFFER from which the user jumps.
The BUFFER needs to be a Clojure buffer and current major mode needs
to be `cider-repl-mode'.  The user can use `cider-switch-to-last-clojure-buffer'
to jump back to the last Clojure source buffer."
  (when (and buffer
             (eq 'clojure-mode (buffer-mode buffer))
             (eq 'cider-repl-mode major-mode))
    (setq cider-last-clojure-buffer buffer)))

Seems to me `buffer-mode' makes the code clearer, but that's subjective (as most things in life :-) )




On 29 October 2013 18:36, Stefan Monnier <address@hidden> wrote:
>> > I’ve seen the following code used hundreds of times:
>> > (buffer-local-value 'major-mode buffer)
>> > or
>> > (with-current-buffer buffer ‘major-mode)
>> Where?
> One example would be packages like SLIME and CIDER which feature commands
> that operate in a different manner when invoked in a REPL or a lisp buffer.
> Obviously one could have written different commands for the different
> modes, but that doesn't change the fact that people write code like this.

This sounds like they check `major-mode', but in the current buffer, so
they wouldn't need something like `buffer-mode'.

> Another example would be selecting all buffers that have some major mode -
> maybe you want to enable something in all active elisp buffers, etc.

Can you point out actual code?
I'm not saying it doesn't exist, I'm just failing to understand why
`buffer-mode' would be useful for those cases.

E.g. using buffer-mode, I guess I'd write a loop like:

   (dolist (buf (cl-remove-if-not (lambda (x) (eq 'foo-mode (buffer-mode x)))
                                  (buffer-list)))
     (with-current-buffer buf
       <do-something))

or maybe

   (dolist (buf (buffer-list))
     (when (eq 'foo-mode (buffer-mode buf))
       (with-current-buffer buf
         <do-something)))

neither of which seems any better than:

   (dolist (buf (buffer-list))
     (with-current-buffer buf
       (when (derived-mode-p 'foo-mode)
         <do-something)))

> I don't see how having something like `buffer-mode' would be a bad
> thing for Emacs hackers.

I'm not saying it's bad, but I'd like to see compelling use cases first.

BTW, when I said:
> I don't think we just want to provide `buffer-mode'.

I really meant "just buffer-mode", as opposed to "something like
buffer-mode".


        Stefan



--
Best Regards,
Bozhidar Batsov

http://www.batsov.com

reply via email to

[Prev in Thread] Current Thread [Next in Thread]