emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 5d9432e: xterm and OSC 52: Add NEWS entry, and twea


From: Stefan Monnier
Subject: [Emacs-diffs] master 5d9432e: xterm and OSC 52: Add NEWS entry, and tweak the code
Date: Mon, 13 Apr 2015 15:36:35 +0000

branch: master
commit 5d9432e6491f63fe4859a46737516c9510643626
Author: Stefan Monnier <address@hidden>
Commit: Stefan Monnier <address@hidden>

    xterm and OSC 52: Add NEWS entry, and tweak the code
    
    * lisp/term/xterm.el (gui-set-selection) <nil>: Move method definition to
    top-level.
    (terminal-init-xterm-activate-set-selection): Set a terminal property.
    (xterm--set-selection): Use it instead of checking the value of
    `terminal-initted'.  Don't use string-bytes.
---
 etc/NEWS           |    3 +++
 lisp/term/xterm.el |   28 +++++++++++++---------------
 2 files changed, 16 insertions(+), 15 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index e78a591..03d4ced 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -227,6 +227,9 @@ Unicode standards.
 
 
 * Changes in Specialized Modes and Packages in Emacs 25.1
+** In xterms, killing text now also sets the CLIPBOARD/PRIMARY selection
+in the surrounding GUI (using the OSC-52 escape sequence).
+
 ** xterm-mouse-mode now supports mouse-tracking (if your xterm supports it).
 
 ** package.el
diff --git a/lisp/term/xterm.el b/lisp/term/xterm.el
index f4d1a84..726ecf9 100644
--- a/lisp/term/xterm.el
+++ b/lisp/term/xterm.el
@@ -40,7 +40,6 @@ The relevant features are:
   reportBackground -- if supported, Xterm reports its background color
   setSelection     -- if supported, Xterm saves yanked text to the X selection"
   :version "24.1"
-  :group 'xterm
   :type '(choice (const :tag "No" nil)
                  (const :tag "Check" check)
                  ;; NOTE: If you add entries here, make sure to update
@@ -62,7 +61,6 @@ using the OSC 52 sequence.
 If you select a region larger than this size, it won't be copied to your system
 clipboard.  Since clipboard data is base 64 encoded, the actual number of
 string bytes that can be copied is 3/4 of this value."
-  :group 'xterm
   :type 'integer)
 
 (defconst xterm-paste-ending-sequence "\e[201~"
@@ -748,10 +746,11 @@ We run the first FUNCTION whose STRING matches the input 
events."
 
 (defun terminal-init-xterm-activate-set-selection ()
   "Terminal initialization for `gui-set-selection'."
-  ;; All text terminals are represented by the nil GUI type.  We need
-  ;; to detect XTerm again in `xterm--set-selection' using the
-  ;; terminal parameters.
-  (gui-method-define gui-set-selection nil #'xterm--set-selection))
+  (set-terminal-parameter nil 'xterm--set-selection t))
+
+;; FIXME: This defines the gui method for all terminals, even tho it only
+;; supports a subset of them.
+(gui-method-define gui-set-selection nil #'xterm--set-selection)
 
 (defun xterm--set-selection (type data)
   "Copy DATA to the X selection using the OSC 52 escape sequence.
@@ -773,12 +772,11 @@ on a bare terminal emulators as well as inside the screen
 program.  When inside the screen program, this function also
 chops long DCS sequences into multiple smaller ones to avoid
 hitting screen's max DCS length."
-  (let* ((init-function (terminal-parameter nil 'terminal-initted))
-         (xterm (eq init-function 'terminal-init-xterm))
-         (screen (eq init-function 'terminal-init-screen)))
+  (let* ((screen (eq (terminal-parameter nil 'terminal-initted)
+                     'terminal-init-screen)))
     ;; Only do something if the current terminal is actually an XTerm
     ;; or screen.
-    (when (or xterm screen)
+    (when (terminal-parameter nil 'xterm--set-selection)
       (let* ((bytes (encode-coding-string data 'utf-8-unix))
              (base-64 (if screen
                           (replace-regexp-in-string
@@ -786,7 +784,7 @@ hitting screen's max DCS length."
                            (base64-encode-string bytes)
                            :fixedcase :literal)
                         (base64-encode-string bytes :no-line-break)))
-             (length (string-bytes base-64)))
+             (length (length base-64)))
         (if (> length xterm-max-cut-length)
             (progn
               (warn "Selection too long to send to terminal: %d bytes" length)
@@ -795,10 +793,10 @@ hitting screen's max DCS length."
            (concat
             (when screen "\eP")
             "\e]52;"
-            (cond
-             ((eq type 'PRIMARY) "p")
-             ((eq type 'CLIPBOARD) "c")
-             (t (error "Invalid type %S" type)))
+            (pcase type
+              ('PRIMARY "p")
+              ('CLIPBOARD "c")
+              (_ (error "Invalid selection type: %S" type)))
             ";"
             base-64
             "\a"



reply via email to

[Prev in Thread] Current Thread [Next in Thread]