From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Duncan Findlay Newsgroups: gmane.emacs.devel Subject: Set X primary selection with Emacs in xterm Date: Thu, 2 Jun 2022 21:03:49 -0700 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="00000000000014135005e08338d2" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="21924"; mail-complaints-to="usenet@ciao.gmane.io" To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Fri Jun 03 07:24:27 2022 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nwznO-0005Wh-Ce for ged-emacs-devel@m.gmane-mx.org; Fri, 03 Jun 2022 07:24:26 +0200 Original-Received: from localhost ([::1]:45766 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nwznN-0004pS-Ap for ged-emacs-devel@m.gmane-mx.org; Fri, 03 Jun 2022 01:24:25 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:35864) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nwyY7-0001n3-BZ for emacs-devel@gnu.org; Fri, 03 Jun 2022 00:04:35 -0400 Original-Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]:42795) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nwyY5-0000nf-EQ for emacs-devel@gnu.org; Fri, 03 Jun 2022 00:04:35 -0400 Original-Received: by mail-wr1-x42d.google.com with SMTP id t13so8801955wrg.9 for ; Thu, 02 Jun 2022 21:04:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:from:date:message-id:subject:to; bh=/8fHAS/llJF4IYO08/LN70OJcH/0nN00/tCkjiNk1CM=; b=FVCDJAmC2ENfnxscfiDzf2KmeNCwOwscuwXqcH6oqgvIxJAI9vyjJszxq8+b0xAP3b R7a7i44FxwO+/UtUkaIWnjrAaMQ+hV7fqr6ED9gLc8WrCV79UuDP9s4DF7lW7PuGEynm 6/8c+ZsAjyKeNJdFaeOGc3n70da9R6aT6nkoZeI1XHqadaXdMpSSD2Ys1rRiX/En3hhA snupidpGypl5s52gO3vNScxHIahupcO8Ne5evdehZCqLWZ4ijJHNtyB2rtibT+psEaEQ Vzp+EWnXuShP2x7WgP5wHSy/gZl/yhg1wzLtIzFjUI2uGxyemMoX/9MZCEaSQq+RQSvE 2NIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=/8fHAS/llJF4IYO08/LN70OJcH/0nN00/tCkjiNk1CM=; b=teBtOJ9+XtNBr7uVfvjHP4UjdTK6zGIeIouRvlFOcGy/ay33nX/pTSlZuD1FCbrDVm sMb8sKlmrRNEo3Vp9iauNF3X1nJ+Y8tn5suEGQbls8oNTQsusNlHBgxRW60sfCSUTYge hQ82KBOc2csQ89+n6YHB285yxHhzyKC/VhLGOL9koQzGx9njMINC1qKIIxE8Xe5X1WbL ohabmYGYcWGZbSn/ySAEUmqujGKIzrVjV5IIja9DzeJueMdVd8Z+YhJx5jGZx4J72M6x xtLDmzyzbBjsD4XLP4Cbkjij4t8HB5IsWrWQLX3xtCVnh7tXUVZKPkg60pqz8O78xgF2 3pYg== X-Gm-Message-State: AOAM53137jiudgqkeOXjp+wBeJjWKqEK4W7PPBl0ysSLFJRKQxHgdXEz dQCiZLXNJEF3O1VYbpAJlle2TJKQ3tabRX8Tps4ahZauk9PBhA== X-Google-Smtp-Source: ABdhPJwxdsCeAN5H4iMgYVWIGeWhREs9uG3N8CAJGjW2DfGisqWcOij9UctWHViFx3PzRlPppzggyqexSydJ4RplWjo= X-Received: by 2002:a5d:4d07:0:b0:20e:5aa1:3acd with SMTP id z7-20020a5d4d07000000b0020e5aa13acdmr6142423wrt.186.1654229069662; Thu, 02 Jun 2022 21:04:29 -0700 (PDT) Received-SPF: pass client-ip=2a00:1450:4864:20::42d; envelope-from=duncf@google.com; helo=mail-wr1-x42d.google.com X-Spam_score_int: -175 X-Spam_score: -17.6 X-Spam_bar: ----------------- X-Spam_report: (-17.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, ENV_AND_HDR_SPF_MATCH=-0.5, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, USER_IN_DEF_DKIM_WL=-7.5, USER_IN_DEF_SPF_WL=-7.5 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Fri, 03 Jun 2022 01:23:25 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:290590 Archived-At: --00000000000014135005e08338d2 Content-Type: text/plain; charset="UTF-8" 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. I don't know if this second patch can be submitted as is. It may break existing users. tmux, for example, removes the selection indicator from OSC 52 codes, so if emacs writes to both CLIPBOARD and PRIMARY selections, both updates will go to the same buffer on the user's side. I've filed https://github.com/tmux/tmux/issues/3192 with tmux. I haven't tested GNU screen. This patch will also lead to extra data being sent to the user's terminal which they may not need or want. It might be wise to only send OSC 52 codes for primary selection if the user actually has a primary selection buffer, but I'm not sure the best way to do that. I'd appreciate some guidance here, or if somebody more experienced wants to take this on, that'd be most appreciated. Thanks Duncan --00000000000014135005e08338d2 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Use-display-selections-p-when-deciding-to-update-pri.patch" Content-Disposition: attachment; filename="0001-Use-display-selections-p-when-deciding-to-update-pri.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l3xwuwnn0 RnJvbSA1YzdlMTExNjliNDA0MzE1MGEwNDYyMzYwOGRlNzk4ZTZlZGQ4MjFiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEdW5jYW4gRmluZGxheSA8ZHVuY2ZAZ29vZ2xlLmNvbT4KRGF0 ZTogRnJpLCAyMCBNYXkgMjAyMiAwMDoxNzo1MSAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggMS8yXSBV c2UgYGRpc3BsYXktc2VsZWN0aW9ucy1wJyB3aGVuIGRlY2lkaW5nIHRvIHVwZGF0ZQogcHJpbWFy eSBzZWxlY3Rpb24KCmBkaXNwbGF5LXNlbGVjdGlvbnMtcCcgaXMgZG9jdW1lbnRlZCBhcyB0aGUg cHJlZmVycmVkIHdheSB0byBkZXRlcm1pbmUKY2FwYWJpbGl0aWVzLCBvdmVyIGB3aW5kb3ctc3lz dGVtYC4KClRoaXMgY2hhbmdlIG1vdmVzIHRoZSBkZWNpc2lvbiBpbnRvIGxpc3AsIHdoZXJlIHVz ZXJzIGNhbiBhZHZpc2UKY2hhbmdlcy4KCiAqIHNyYy9rZXlib2FyZC5jIChjb21tYW5kX2xvb3Bf MSk6IFJlcGxhY2UgY2FsbCB0byBgd2luZG93LXN5c3RlbScKIHdpdGggYGRpc3BsYXktc2VsZWN0 aW9ucy1wJyB3aGVuIGRlY2lkaW5nIHdoZXRoZXIgdG8gdXBkYXRlIHByaW1hcnkKIHNlbGVjdGlv bi4KLS0tCiBzcmMva2V5Ym9hcmQuYyB8IDMgKystCiAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRp b25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2tleWJvYXJkLmMgYi9zcmMv a2V5Ym9hcmQuYwppbmRleCAyNzRjN2IzZmE4Li5mZDQ0YTFhNzM5IDEwMDY0NAotLS0gYS9zcmMv a2V5Ym9hcmQuYworKysgYi9zcmMva2V5Ym9hcmQuYwpAQCAtMTU3Nyw3ICsxNTc3LDcgQEAgY29t bWFuZF9sb29wXzEgKHZvaWQpCiAJICAgIHsKIAkgICAgICAvKiBFdmVuIGlmIG5vdCBkZWFjdGl2 YXRpbmcgdGhlIG1hcmssIHNldCBQUklNQVJZIGlmCiAJCSBgc2VsZWN0LWFjdGl2ZS1yZWdpb25z JyBpcyBub24tbmlsLiAgKi8KLQkgICAgICBpZiAoIU5JTFAgKEZ3aW5kb3dfc3lzdGVtIChRbmls KSkKKwkgICAgICBpZiAoIU5JTFAgKGNhbGwwIChRZGlzcGxheV9zZWxlY3Rpb25zX3ApKQogCQkg IC8qIEV2ZW4gaWYgbWFya19hY3RpdmUgaXMgbm9uLW5pbCwgdGhlIGFjdHVhbCBidWZmZXIKIAkJ ICAgICBtYXJrZXIgbWF5IG5vdCBoYXZlIGJlZW4gc2V0IHlldCAoQnVnIzcwNDQpLiAgKi8KIAkJ ICAmJiBYTUFSS0VSIChCVkFSIChjdXJyZW50X2J1ZmZlciwgbWFyaykpLT5idWZmZXIKQEAgLTEy MTU0LDYgKzEyMTU0LDcgQEAgc3ltc19vZl9rZXlib2FyZCAodm9pZCkKIAogICBERUZTWU0gKFFw b2xsaW5nX3BlcmlvZCwgInBvbGxpbmctcGVyaW9kIik7CiAKKyAgREVGU1lNIChRZGlzcGxheV9z ZWxlY3Rpb25zX3AsICJkaXNwbGF5LXNlbGVjdGlvbnMtcCIpOwogICBERUZTWU0gKFFndWlfc2V0 X3NlbGVjdGlvbiwgImd1aS1zZXQtc2VsZWN0aW9uIik7CiAKICAgLyogVGhlIHByaW1hcnkgc2Vs ZWN0aW9uLiAgKi8KLS0gCjIuMzYuMS4yNTUuZ2U0Njc1MWU5NmYtZ29vZwoK --00000000000014135005e08338d2 Content-Type: text/x-patch; charset="US-ASCII"; name="0002-Support-setting-primary-selection-with-xterm-setSele.patch" Content-Disposition: attachment; filename="0002-Support-setting-primary-selection-with-xterm-setSele.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l3xwuzip1 RnJvbSA5YzJmZmM3NzE4Mzg3NjVlYzlmNmIxNjIxZWM5YzA1NjE3NjY4YWVlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEdW5jYW4gRmluZGxheSA8ZHVuY2ZAZ29vZ2xlLmNvbT4KRGF0 ZTogVGh1LCAyIEp1biAyMDIyIDIwOjIzOjQ0IC0wNzAwClN1YmplY3Q6IFtQQVRDSCAyLzJdIFN1 cHBvcnQgc2V0dGluZyBwcmltYXJ5IHNlbGVjdGlvbiB3aXRoIHh0ZXJtIHNldFNlbGVjdGlvbgog bW9kZS4KClRoaXMgd2lsbCBjYXVzZSB0aGUgeHRlcm0gdXNlcidzIFggcHJpbWFyeSBzZWxlY3Rp b24gYnVmZmVyIHRvIGJlCnVwZGF0ZWQgd2hlbiBhIHNlbGVjdGlvbiBpcyBtYWRlIGluIEVtYWNz LgoKICogbGlzcC9mcmFtZS5lbCAoZGlzcGxheS1zZWxlY3Rpb25zLXApOiBSZXR1cm4gYHQnIHdo ZW4geHRlcm0ncwogc2V0U2VsZWN0aW9uIG1vZGUgaXMgZW5hYmxlZC4KLS0tCiBsaXNwL2ZyYW1l LmVsIHwgMyArKysKIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQg YS9saXNwL2ZyYW1lLmVsIGIvbGlzcC9mcmFtZS5lbAppbmRleCAyN2Y5OWZiN2QyLi5lYjhhZTFj MjdkIDEwMDY0NAotLS0gYS9saXNwL2ZyYW1lLmVsCisrKyBiL2xpc3AvZnJhbWUuZWwKQEAgLTIx NjQsNiArMjE2NCw5IEBAIGRpc3BsYXktc2VsZWN0aW9ucy1wCiAgICAgICAgKG5vdCAobnVsbCBk b3Mtd2luZG93cy12ZXJzaW9uKSkpKQogICAgICAoKG1lbXEgZnJhbWUtdHlwZSAnKHggdzMyIG5z IHBndGspKQogICAgICAgdCkKKyAgICAgKChhbmQgKG1lbXEgZnJhbWUtdHlwZSAnKHQpKQorICAg ICAgICAgICAoZXEgKHRlcm1pbmFsLXBhcmFtZXRlciBuaWwgJ3h0ZXJtLS1zZXQtc2VsZWN0aW9u KSB0KSkKKyAgICAgIHQpCiAgICAgICh0CiAgICAgICBuaWwpKSkpCiAKLS0gCjIuMzYuMS4yNTUu Z2U0Njc1MWU5NmYtZ29vZwoK --00000000000014135005e08338d2--