* Re: Number of open buffers? [not found] <bpilkc$pq1$0@pita.alt.net> @ 2003-11-20 16:19 ` Eli Zaretskii [not found] ` <mailman.342.1069348789.399.help-gnu-emacs@gnu.org> 1 sibling, 0 replies; 12+ messages in thread From: Eli Zaretskii @ 2003-11-20 16:19 UTC (permalink / raw) > From: Ignoramus1904 <ignoramus1904@NOSPAM.1904.invalid> > Newsgroups: gnu.emacs.help > Date: 20 Nov 2003 15:12:12 GMT > > Sometimes though I have just one file open for quick editing. Then I > do want to exit on \C-x\C-c. > > I want to modify it so that if the # of open file buffers is more than > one, emacs would ask YES/NO, if less, I exit. I am a very bad lisp > programmer, any suggestions? The expression (length (buffer-list)) will return the number of buffers in your Emacs session. You will need to make allowances for the minubuffer and buffers like *Messages* and *scratch* that are always present. There are usually 6 such buffers, so subtract 6 from what the expression above returns and compare it with 1. For a more bullet-proof code, walk the buffer list returned by the function buffer-list, and filter out any buffer which doesn't have a file associated with it (its buffer-file-name will be nil). What is left are the buffers which visit files. HTH ^ permalink raw reply [flat|nested] 12+ messages in thread
[parent not found: <mailman.342.1069348789.399.help-gnu-emacs@gnu.org>]
[parent not found: <bpirf4$8ee$2@pita.alt.net>]
* Re: Number of open buffers? [not found] ` <bpirf4$8ee$2@pita.alt.net> @ 2003-11-20 18:10 ` Micah Cowan [not found] ` <bpja4e$89m$1@pita.alt.net> 0 siblings, 1 reply; 12+ messages in thread From: Micah Cowan @ 2003-11-20 18:10 UTC (permalink / raw) Ignoramus1904 <ignoramus1904@NOSPAM.1904.invalid> writes: > In article <mailman.342.1069348789.399.help-gnu-emacs@gnu.org>, Eli Zaretskii wrote: > >> From: Ignoramus1904 <ignoramus1904@NOSPAM.1904.invalid> > >> Newsgroups: gnu.emacs.help > >> Date: 20 Nov 2003 15:12:12 GMT > >> > >> Sometimes though I have just one file open for quick editing. Then I > >> do want to exit on \C-x\C-c. > >> > >> I want to modify it so that if the # of open file buffers is more than > >> one, emacs would ask YES/NO, if less, I exit. I am a very bad lisp > >> programmer, any suggestions? > > > > The expression (length (buffer-list)) will return the number of > > buffers in your Emacs session. You will need to make allowances for > > the minubuffer and buffers like *Messages* and *scratch* that are > > always present. There are usually 6 such buffers, so subtract 6 from > > what the expression above returns and compare it with 1. I seem to get more than 6. YMMV, I think, so it can't be relied upon. > > > > For a more bullet-proof code, walk the buffer list returned by the > > function buffer-list, and filter out any buffer which doesn't have a > > file associated with it (its buffer-file-name will be nil). What is > > left are the buffers which visit files. > > > > HTH > > > > > > > > Thanks Eli, sounds a little bit above my head to be honest. I do C++ > and Perl and do not know Lisp well. I just thought that there was a > function like get-number-of-file-buffers, or something like that. The following is what he's talking about, I think: (defun get-number-of-file-buffers () (interactive) (let (num) (setq num 0) (dolist (buf (buffer-list)) (when (buffer-file-name buf) (setq num (+ num 1)) )) num ) ) Another possibility would be to have an alias to one or other emacs that invokes emacs in the way you want (with or without the "are you sure?" stuff): then just use one name for emacs when you don't want to be asked, and another for when you do. -- Micah J. Cowan micah@cowan.name ^ permalink raw reply [flat|nested] 12+ messages in thread
[parent not found: <bpja4e$89m$1@pita.alt.net>]
* Re: Number of open buffers? [not found] ` <bpja4e$89m$1@pita.alt.net> @ 2003-11-20 21:15 ` David Kastrup 2003-11-20 21:50 ` lawrence mitchell 2003-11-20 22:42 ` Johan Bockgård 2003-11-20 21:43 ` Lucas [not found] ` <mailman.369.1069368465.399.help-gnu-emacs@gnu.org> 2 siblings, 2 replies; 12+ messages in thread From: David Kastrup @ 2003-11-20 21:15 UTC (permalink / raw) Ignoramus1904 <ignoramus1904@NOSPAM.1904.invalid> writes: > In article <m31xs2c3na.fsf@localhost.localdomain>, Micah Cowan wrote: > > Ignoramus1904 <ignoramus1904@NOSPAM.1904.invalid> writes: > > > >> Eli Zaretskii wrote: > >> >> From: Ignoramus1904 <ignoramus1904@NOSPAM.1904.invalid> > >> >> > >> >> I want to modify it so that if the # of open file buffers is more than > >> >> one, emacs would ask YES/NO, if less, I exit. I am a very bad lisp > >> >> programmer, any suggestions? > >> > > >> > > >> > For a more bullet-proof code, walk the buffer list returned by the > >> > function buffer-list, and filter out any buffer which doesn't have a > >> > file associated with it (its buffer-file-name will be nil). What is > >> > left are the buffers which visit files. > >> > > >> > >> Thanks Eli, sounds a little bit above my head to be honest. I do C++ > >> and Perl and do not know Lisp well. I just thought that there was a > >> function like get-number-of-file-buffers, or something like that. > > > > The following is what he's talking about, I think: > > > > (defun get-number-of-file-buffers () > > (interactive) > > (let (num) > > (setq num 0) > > (dolist (buf (buffer-list)) > > (when (buffer-file-name buf) > > (setq num (+ num 1)) > > )) > > num > > ) > > ) Somewhat shorter: (defun get-number-of-file-buffers () (interactive) (let ((num 0)) (dolist (buf (buffer-list) num) (when (buffer-file-name buf) (setq num (1+ num)))))) > Thanks. When I try to run it via eval-expr, saying > > (insert get-number-of-file-buffers) > > It says: Error: void-variable. Data: get-number-of-file-buffers Yes. One calls a function by putting it after an opening parenthesis. The way you tried to "call" it, just a variable of that name got referenced, and there is no such variable. In addition, the function returns a numeric expression, and `insert' expects a string. -- David Kastrup, Kriemhildstr. 15, 44793 Bochum ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Number of open buffers? 2003-11-20 21:15 ` David Kastrup @ 2003-11-20 21:50 ` lawrence mitchell 2003-11-20 22:14 ` David Kastrup 2003-11-20 22:42 ` Johan Bockgård 1 sibling, 1 reply; 12+ messages in thread From: lawrence mitchell @ 2003-11-20 21:50 UTC (permalink / raw) David Kastrup wrote: [...] > (defun get-number-of-file-buffers () > (interactive) > (let ((num 0)) > (dolist (buf (buffer-list) num) > (when (buffer-file-name buf) > (setq num (1+ num)))))) Assuming cl is loaded: (defun get-number-of-file-buffers () (loop for b in (buffer-list) count (buffer-file-name b))) :) >> Thanks. When I try to run it via eval-expr, saying >> (insert get-number-of-file-buffers) >> It says: Error: void-variable. Data: get-number-of-file-buffers > Yes. One calls a function by putting it after an opening > parenthesis. The way you tried to "call" it, just a variable of that > name got referenced, and there is no such variable. In addition, the > function returns a numeric expression, and `insert' expects a string. The OP may find reading the Emacs Lisp Introduction a useful exercise, it's not that long, and, I think, explains the basics of emacs lisp quite nicely. -- lawrence mitchell <wence@gmx.li> ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Number of open buffers? 2003-11-20 21:50 ` lawrence mitchell @ 2003-11-20 22:14 ` David Kastrup 2003-11-20 22:46 ` lawrence mitchell 0 siblings, 1 reply; 12+ messages in thread From: David Kastrup @ 2003-11-20 22:14 UTC (permalink / raw) lawrence mitchell <wence@gmx.li> writes: > David Kastrup wrote: > > [...] > > > (defun get-number-of-file-buffers () > > (interactive) > > (let ((num 0)) > > (dolist (buf (buffer-list) num) > > (when (buffer-file-name buf) > > (setq num (1+ num)))))) > > Assuming cl is loaded: > > (defun get-number-of-file-buffers () > (loop for b in (buffer-list) count (buffer-file-name b))) > Wel, if we want to squeeze characters of source, we can do so without cl, too. (defun get-number-of-file-buffers () (apply '+ (mapcar (lambda(x)(if(buffer-file-name x)1 0)) (buffer-list)))) -- David Kastrup, Kriemhildstr. 15, 44793 Bochum ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Number of open buffers? 2003-11-20 22:14 ` David Kastrup @ 2003-11-20 22:46 ` lawrence mitchell 2003-11-20 23:40 ` David Kastrup 0 siblings, 1 reply; 12+ messages in thread From: lawrence mitchell @ 2003-11-20 22:46 UTC (permalink / raw) David Kastrup wrote: [...] > Wel, if we want to squeeze characters of source, we can do so without > cl, too. > (defun get-number-of-file-buffers () > (apply '+ (mapcar (lambda(x)(if(buffer-file-name x)1 0)) (buffer-list)))) I see your apply and raise you a: (defun get-number-of-file-buffers () (length (delq nil (mapcar 'buffer-file-name (buffer-list))))) :P -- lawrence mitchell <wence@gmx.li> ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Number of open buffers? 2003-11-20 22:46 ` lawrence mitchell @ 2003-11-20 23:40 ` David Kastrup 0 siblings, 0 replies; 12+ messages in thread From: David Kastrup @ 2003-11-20 23:40 UTC (permalink / raw) lawrence mitchell <wence@gmx.li> writes: > David Kastrup wrote: > > [...] > > > Wel, if we want to squeeze characters of source, we can do so without > > cl, too. > > > (defun get-number-of-file-buffers () > > (apply '+ (mapcar (lambda(x)(if(buffer-file-name x)1 0)) (buffer-list)))) > > I see your apply and raise you a: > > (defun get-number-of-file-buffers () > (length (delq nil (mapcar 'buffer-file-name (buffer-list))))) I was looking for something like that, but the delq escaped me. -- David Kastrup, Kriemhildstr. 15, 44793 Bochum ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Number of open buffers? 2003-11-20 21:15 ` David Kastrup 2003-11-20 21:50 ` lawrence mitchell @ 2003-11-20 22:42 ` Johan Bockgård 1 sibling, 0 replies; 12+ messages in thread From: Johan Bockgård @ 2003-11-20 22:42 UTC (permalink / raw) David Kastrup <dak@gnu.org> writes: > Somewhat shorter: > > (defun get-number-of-file-buffers () > (interactive) > (let ((num 0)) > (dolist (buf (buffer-list) num) > (when (buffer-file-name buf) > (setq num (1+ num)))))) If you are allowed to use `cl': ... (count-if 'buffer-file-name (buffer-list)) -- Johan Bockgård ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Number of open buffers? [not found] ` <bpja4e$89m$1@pita.alt.net> 2003-11-20 21:15 ` David Kastrup @ 2003-11-20 21:43 ` Lucas [not found] ` <mailman.369.1069368465.399.help-gnu-emacs@gnu.org> 2 siblings, 0 replies; 12+ messages in thread From: Lucas @ 2003-11-20 21:43 UTC (permalink / raw) Un beau jour, Ignoramus1904 <ignoramus1904@NOSPAM.1904.invalid> nous a dit: > > Thanks. When I try to run it via eval-expr, saying > > (insert get-number-of-file-buffers) (insert (get-number-of-file-buffers)) should do the trick, the functions are surrounded by parens :) -- Lucas ^ permalink raw reply [flat|nested] 12+ messages in thread
[parent not found: <mailman.369.1069368465.399.help-gnu-emacs@gnu.org>]
[parent not found: <bplam3$nrj$1@pita.alt.net>]
* Re: Number of open buffers? [not found] ` <bplam3$nrj$1@pita.alt.net> @ 2003-11-21 15:36 ` David Kastrup 0 siblings, 0 replies; 12+ messages in thread From: David Kastrup @ 2003-11-21 15:36 UTC (permalink / raw) Ignoramus15351 <ignoramus15351@NOSPAM.15351.invalid> writes: > people, thank you, you are all beautiful. > > The following works like a charm: > > (defun get-number-of-file-buffers () > (interactive) Delete the (interactive) line: the function does nothing useful when called interactively and thus should not clutter up command completion. > (let (num) > (setq num 0) > (dolist (buf (buffer-list)) > (when (buffer-file-name buf) > (setq num (+ num 1)) > )) > num > ) > ) Pffft. The most verbose version. -- David Kastrup, Kriemhildstr. 15, 44793 Bochum ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Number of open buffers? [not found] ` <mailman.369.1069368465.399.help-gnu-emacs@gnu.org> [not found] ` <bplam3$nrj$1@pita.alt.net> @ 2003-11-21 15:52 ` Stefan Monnier 2003-11-21 20:21 ` Lucas 1 sibling, 1 reply; 12+ messages in thread From: Stefan Monnier @ 2003-11-21 15:52 UTC (permalink / raw) > (insert (get-number-of-file-buffers)) > should do the trick, the functions are surrounded by parens :) Not the functions: the function *calls*. Stefan ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Number of open buffers? 2003-11-21 15:52 ` Stefan Monnier @ 2003-11-21 20:21 ` Lucas 0 siblings, 0 replies; 12+ messages in thread From: Lucas @ 2003-11-21 20:21 UTC (permalink / raw) > Not the functions: the function *calls*. Yeah, that's what i wanted to say. -- Lucas ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2003-11-21 20:21 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <bpilkc$pq1$0@pita.alt.net> 2003-11-20 16:19 ` Number of open buffers? Eli Zaretskii [not found] ` <mailman.342.1069348789.399.help-gnu-emacs@gnu.org> [not found] ` <bpirf4$8ee$2@pita.alt.net> 2003-11-20 18:10 ` Micah Cowan [not found] ` <bpja4e$89m$1@pita.alt.net> 2003-11-20 21:15 ` David Kastrup 2003-11-20 21:50 ` lawrence mitchell 2003-11-20 22:14 ` David Kastrup 2003-11-20 22:46 ` lawrence mitchell 2003-11-20 23:40 ` David Kastrup 2003-11-20 22:42 ` Johan Bockgård 2003-11-20 21:43 ` Lucas [not found] ` <mailman.369.1069368465.399.help-gnu-emacs@gnu.org> [not found] ` <bplam3$nrj$1@pita.alt.net> 2003-11-21 15:36 ` David Kastrup 2003-11-21 15:52 ` Stefan Monnier 2003-11-21 20:21 ` Lucas
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).