unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* Help on calling a function inside "ibuffer-formats"
@ 2021-01-26 22:35 doltes
  2021-01-27 22:53 ` Michael Heerdegen
  0 siblings, 1 reply; 3+ messages in thread
From: doltes @ 2021-01-26 22:35 UTC (permalink / raw)
  To: Emacs Help


I'm trying to make =ibuffer= don't truncate the =Name= column.

To accomplish this, I've defined the following function. This function
obtains the length of the longest buffer name.

#+begin_src elisp
(defun length-buffer-longest-name ()
  (interactive)
  (apply 'max (mapcar #'length (mapcar #'buffer-name (buffer-list)))))

(length-buffer-longest-name)
#+end_src

#+RESULTS:
#+begin_example
77
#+end_example

I want this function to be used as the =MIN-SIZE= and =MAX-SIZE= of
the =name= column. For documentation on =MIN-SIZE= and =MAX-SIZE=, see
the docstring of the variable =ibuffer-formats=.

I've tried the following.

#+begin_src elisp :results silent
(setq ibuffer-formats '((mark modified read-only locked " "
			      (name length-buffer-longest-name length-buffer-longest-name :left :elide)
			      " "
			      (size 9 -1 :right)
			      " "
			      (mode 16 16 :left :elide)
			      " " filename-and-process)
			(mark " "
			      (name 16 -1)
			      " " filename)))
#+end_src

However, when calling =ibuffer=, I get the following error

#+begin_example
mapcar: Wrong type argument: number-or-marker-p, length-buffer-longest-name
#+end_example

I've also tried the following. However, as expected, the function
=length-buffer-longest-name= is only called when the =setq= command is
executed which is something I don't want to occur because that doesn't
ensure that the rows of the =Name= column are always fully displayed.

#+begin_src elisp
(setq ibuffer-formats `((mark modified read-only locked " "
			      (name ,(length-buffer-longest-name) ,(length-buffer-longest-name) :left :elide)
			      " "
			      (size 9 -1 :right)
			      " "
			      (mode 16 16 :left :elide)
			      " " filename-and-process)
			(mark " "
			      (name 16 -1)
			      " " filename)))
#+end_src

My question is:

1. How can I make the =Name= column never be truncated? I know that I
   can set this value to a big number (e.g. 100, 200, 300) but I'd
   rather this value to be obtained through a function instead of
   hardcoding its value.

This is the [[https://en.wikipedia.org/wiki/XY_problem][XY question]]

2. How can I call a function inside =ibuffer-formats= in order to
   ensure that =MIN-SIZE= and =MAX-SIZE= is always set to the length
   of the buffer with the longest name?

-- 
Greetings,
doltes.



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

* Re: Help on calling a function inside "ibuffer-formats"
  2021-01-26 22:35 Help on calling a function inside "ibuffer-formats" doltes
@ 2021-01-27 22:53 ` Michael Heerdegen
  2021-01-28 13:36   ` doltes
  0 siblings, 1 reply; 3+ messages in thread
From: Michael Heerdegen @ 2021-01-27 22:53 UTC (permalink / raw)
  To: help-gnu-emacs

doltes <doltes512@gmail.com> writes:

> My question is:
>
> 1. How can I make the =Name= column never be truncated? I know that I
>    can set this value to a big number (e.g. 100, 200, 300) but I'd
>    rather this value to be obtained through a function instead of
>    hardcoding its value.

You could just elide :elide, but I assume you don't want that.  Then it
seems to me that this

> 2. How can I call a function inside =ibuffer-formats= in order to
>    ensure that =MIN-SIZE= and =MAX-SIZE= is always set to the length
>    of the buffer with the longest name?

is not possible without redefining `ibuffer-format' on the fly all the
time.

Are you sure you would like the result?  You can always toggle with key
` to see the full buffer names.  I find that more convenient than having
a potentially huge first column width.

Regards,

Michael.




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

* Re: Help on calling a function inside "ibuffer-formats"
  2021-01-27 22:53 ` Michael Heerdegen
@ 2021-01-28 13:36   ` doltes
  0 siblings, 0 replies; 3+ messages in thread
From: doltes @ 2021-01-28 13:36 UTC (permalink / raw)
  To: Michael Heerdegen; +Cc: help-gnu-emacs


Michael Heerdegen <michael_heerdegen@web.de> writes:

> Are you sure you would like the result?  You can always toggle with key
> ` to see the full buffer names.  I find that more convenient than having
> a potentially huge first column width.

You are right. I can use that binding whenever I feel the need to fully
display buffer names. Thanks for the information! Didn't know about that
keybinding.

-- 
Greetings,
doltes.



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

end of thread, other threads:[~2021-01-28 13:36 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-01-26 22:35 Help on calling a function inside "ibuffer-formats" doltes
2021-01-27 22:53 ` Michael Heerdegen
2021-01-28 13:36   ` doltes

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).