From: doltes <doltes512@gmail.com>
To: Emacs Help <help-gnu-emacs@gnu.org>
Subject: Help on calling a function inside "ibuffer-formats"
Date: Tue, 26 Jan 2021 17:35:25 -0500 [thread overview]
Message-ID: <87bldbjphu.fsf@gmail.com> (raw)
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.
next reply other threads:[~2021-01-26 22:35 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-26 22:35 doltes [this message]
2021-01-27 22:53 ` Help on calling a function inside "ibuffer-formats" Michael Heerdegen
2021-01-28 13:36 ` doltes
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=87bldbjphu.fsf@gmail.com \
--to=doltes512@gmail.com \
--cc=help-gnu-emacs@gnu.org \
/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.
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).