[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Set X primary selection with Emacs in xterm
From: |
Po Lu |
Subject: |
Re: Set X primary selection with Emacs in xterm |
Date: |
Fri, 03 Jun 2022 13:33:54 +0800 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.0.91 (gnu/linux) |
(Patches should ideally be sent to bug-gnu-emacs@gnu.org, and not
here.)
Duncan Findlay <duncf@google.com> writes:
> I frequently use Emacs over ssh and I'd really like to get both
> primary and clipboard selections to work as close as possible to
> running Emacs on X natively. I'd like to kill text in Emacs and have
> that show up in my system clipboard so I can paste into other
> applications. Similarly, if I select text with mark and keyboard (or
> mouse with xterm-mouse-mode), I'd like it to update my local X's
> primary selection so I can middle-click to paste it elsewhere. I have
> two patches attached that got this working for me.
>
> Without changes, with `(setq xterm-extra-capabilities
> '(setSelection))', when I kill text, Emacs generates OSC 52 terminal
> escape codes and xterm updates my clipboard. This works great! Emacs
> also has support for updating the primary selection with this same
> mechanism, e.g. `(gui-set-selection 'PRIMARY "primary")'. This, too,
> works fine with xterm.
>
> The bit that's missing is that when I select text with keyboard or
> mouse (with xterm-mouse-mode), the primary selection is not updated.
> It appears that the primary selection is only updated when
> `(window-system)' is not nil.
>
> I've attached a patch below to replace the `window-system' check with
> `display-selections-p', as that's documented as the preferred way to
> do this type of check. It also moves the check to lisp where we can
> advise it.
>
> The second patch changes `(display-selections-p)' to return true
> under xterm with the setSelection feature enabled.
Thanks. That mostly looks good to me, some minor comments below:
> * src/keyboard.c (command_loop_1): Replace call to `window-system'
> with `display-selections-p' when deciding whether to update primary
> selection.
> * lisp/frame.el (display-selections-p): Return `t' when xterm's
> setSelection mode is enabled.
We don't indent each line of a ChangeLog entry to line up with the
asterisk, so this should be written:
* src/keyboard.c (command_loop_1): Replace call to
`window-system' with `display-selections-p' when deciding
whether to update primary selection.
instead. Please also make sure that each line of the commit message
takes no more than 64 columns on-screen.
> lisp/frame.el | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/lisp/frame.el b/lisp/frame.el
> index 27f99fb7d2..eb8ae1c27d 100644
> --- a/lisp/frame.el
> +++ b/lisp/frame.el
> @@ -2164,6 +2164,9 @@ display-selections-p
> (not (null dos-windows-version))))
> ((memq frame-type '(x w32 ns pgtk))
> t)
> + ((and (memq frame-type '(t))
This `memq' is redundant: why not (eq frame-type t) instead?
> + (eq (terminal-parameter nil 'xterm--set-selection) t))
> + t)
This doesn't look very clean... I wonder if there is a cleaner way to
check for this support.
Also, have you signed copyright papers? And if not, how many lines of
code have you previously contributed to Emacs?