[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
"Final" version of tty child frames
From: |
Gerd Möllmann |
Subject: |
"Final" version of tty child frames |
Date: |
Tue, 22 Oct 2024 06:46:15 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) |
I have (re-)created the scratch/tty-child-frames branch today, which
contains the code for child frames on ttys, based on a recent master.
I'm a happy user of this for a while now with corfu, vertico +
vertico-posframe + consult, transient + transient-posframe,
which-key + which-key-posframe. And my current todo list is now empty,
so here it is.
To use it, redefine these two functions:
#+begin_src emacs-lisp
(defun posframe-workable-p ()
"Test posframe workable status."
(and (>= emacs-major-version 26)
(not (or noninteractive
emacs-basic-display
(or (featurep 'tty-child-frames)
(not (display-graphic-p)))
(eq (frame-parameter (selected-frame) 'minibuffer) 'only)))))))
(cl-defgeneric corfu--popup-support-p ()
"Return non-nil if child frames are supported."
(or (display-graphic-p)
(featurep 'tty-child-frames)))
#+end_src
To make things look nicer you might also want to
#+begin_src emacs-lisp
(push '(tty-non-selected-cursor . t) vertico-posframe-parameters)
(push '(undecorated . nil) vertico-posframe-parameters))
(push '(undecorated . nil) transient-posframe-parameters))
#+end_src
The 'undecorated' frame parameter lets Emacs draw a border around the
child frame (default is no border). The tty-non-selected-cursor
parameter makes redisplay put the terminal cursor in a non-selected
frame which I find nice for things like consult-buffer. Which is why I
added it :-).
What's there fits my personal needs entirely. I am not interested in
full support of child frames as they exist on window systems because I
don't see child frames being used except for things like posframe and
corfu and similar. And, TBH, I don't find the tty frame code fun to
work with.
Other things not contained:
- Support for anything but termcap frames. I bet I broke MSDOS.
- Mouse support except with xterm-mouse-mode (no GPM).
- Drawing borders like it is normally done (internal border and so
on). Tried that once, git reset --hard, won't happen.
- Tooltips. I think tooltips could relatively easily be implemented
with child frames by copying or extracting the non-native tooltip
code from x-show-tip or some such. From my POV, that would be best
done by refactoring the tooltip code across window systems which I
can't do.
- Documentation. Would only make sense to write if this goes into GNU,
which might or might not happen, depending on, from my side, how
much work that is.
Disclaimer: As I mentioned already in other contexts, I don't want to
be the maintainer of anything, for personal reasons.
Have fun!
- "Final" version of tty child frames,
Gerd Möllmann <=
- Re: "Final" version of tty child frames, Eli Zaretskii, 2024/10/22
- Re: "Final" version of tty child frames, Gerd Möllmann, 2024/10/22
- Re: "Final" version of tty child frames, Po Lu, 2024/10/22
- Re: "Final" version of tty child frames, Eli Zaretskii, 2024/10/22
- Re: "Final" version of tty child frames, Gerd Möllmann, 2024/10/22
- Re: "Final" version of tty child frames, martin rudalics, 2024/10/22