unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Po Lu <luangruo@yahoo.com>
To: Duncan Findlay <duncf@google.com>
Cc: emacs-devel@gnu.org
Subject: Re: Set X primary selection with Emacs in xterm
Date: Fri, 03 Jun 2022 13:33:54 +0800	[thread overview]
Message-ID: <8735gm71kt.fsf@yahoo.com> (raw)
In-Reply-To: <CAPANw+MJ_wKTkSLXQOWMptEi1qiMWMKWXEyhTE_VbGBbik+YcQ@mail.gmail.com> (Duncan Findlay's message of "Thu, 2 Jun 2022 21:03:49 -0700")

(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?



  reply	other threads:[~2022-06-03  5:33 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-03  4:03 Set X primary selection with Emacs in xterm Duncan Findlay
2022-06-03  5:33 ` Po Lu [this message]
2022-06-03 12:27   ` Stefan Monnier
2022-06-10  6:36   ` Duncan Findlay
2022-06-03  6:57 ` Eli Zaretskii
2022-06-10 18:10   ` Duncan Findlay
2022-06-10 19:38     ` Eli Zaretskii
2022-06-11  2:03       ` Duncan Findlay
2022-06-03  9:55 ` Jean Louis
2022-06-10  5:49   ` Duncan Findlay
2022-06-10  8:50     ` James Cloos
2022-06-11  6:56     ` Jean Louis
2022-06-15  2:43       ` Duncan Findlay

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=8735gm71kt.fsf@yahoo.com \
    --to=luangruo@yahoo.com \
    --cc=duncf@google.com \
    --cc=emacs-devel@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.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

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