emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master 3a09343: Teach Emacs to set XTerm window titles


From: Mark Oteiza
Subject: [Emacs-diffs] master 3a09343: Teach Emacs to set XTerm window titles
Date: Wed, 20 Sep 2017 11:41:55 -0400 (EDT)

branch: master
commit 3a09343eabaa751e7d40f0a21af5c63427d9a850
Author: Mark Oteiza <address@hidden>
Commit: Mark Oteiza <address@hidden>

    Teach Emacs to set XTerm window titles
    
    * lisp/term/xterm.el (terminal-init-xterm): Add initialization.
    (xterm--init-frame-title, xterm-set-window-title-flag):
    (xterm-unset-window-title-flag, xterm-set-window-title): New functions.
    (xterm-window-title-flag): New variable.
    (xterm-set-window-title): New custom variable.
    * etc/NEWS: Mention it.
---
 etc/NEWS           |  5 +++++
 lisp/term/xterm.el | 35 +++++++++++++++++++++++++++++++++++
 2 files changed, 40 insertions(+)

diff --git a/etc/NEWS b/etc/NEWS
index 371cdf6..0e62a2b 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -37,6 +37,11 @@ When you add a new item, use the appropriate mark if you are 
sure it applies,
 
 * Changes in Specialized Modes and Packages in Emacs 27.1
 
+** Enhanced xterm support
+
+*** New variable 'xterm-set-window-title' controls whether Emacs
+sets the XTerm window title.  The default is to set the window title.
+
 
 * New Modes and Packages in Emacs 27.1
 
diff --git a/lisp/term/xterm.el b/lisp/term/xterm.el
index 4f79703..6a17d38 100644
--- a/lisp/term/xterm.el
+++ b/lisp/term/xterm.el
@@ -68,6 +68,11 @@ string bytes that can be copied is 3/4 of this value."
   :version "25.1"
   :type 'integer)
 
+(defcustom xterm-set-window-title t
+  "Whether Emacs should set window titles to an Emacs frame in an XTerm."
+  :version "27.1"
+  :type 'boolean)
+
 (defconst xterm-paste-ending-sequence "\e[201~"
   "Characters send by the terminal to end a bracketed paste.")
 
@@ -802,6 +807,8 @@ We run the first FUNCTION whose STRING matches the input 
events."
     (when (memq 'setSelection xterm-extra-capabilities)
       (xterm--init-activate-set-selection)))
 
+  (when xterm-set-window-title
+    (xterm--init-frame-title))
   ;; Unconditionally enable bracketed paste mode: terminals that don't
   ;; support it just ignore the sequence.
   (xterm--init-bracketed-paste-mode)
@@ -828,6 +835,34 @@ We run the first FUNCTION whose STRING matches the input 
events."
   "Terminal initialization for `gui-set-selection'."
   (set-terminal-parameter nil 'xterm--set-selection t))
 
+(defun xterm--init-frame-title ()
+  "Terminal initialization for XTerm frame titles."
+  (xterm-set-window-title)
+  (add-hook 'after-make-frame-functions 'xterm-set-window-title-flag)
+  (add-hook 'window-configuration-change-hook 'xterm-unset-window-title-flag)
+  (add-hook 'post-command-hook 'xterm-set-window-title)
+  (add-hook 'minibuffer-exit-hook 'xterm-set-window-title))
+
+(defvar xterm-window-title-flag nil
+  "Whether a new frame has been created, calling for a title update.")
+
+(defun xterm-set-window-title-flag (_frame)
+  "Set `xterm-window-title-flag'.
+See `xterm--init-frame-title'"
+  (setq xterm-window-title-flag t))
+
+(defun xterm-unset-window-title-flag ()
+  (when xterm-window-title-flag
+    (setq xterm-window-title-flag nil)
+    (xterm-set-window-title)))
+
+(defun xterm-set-window-title (&optional terminal)
+  "Set the window title of the Xterm TERMINAL.
+The title is constructed from `frame-title-format'."
+  (send-string-to-terminal
+   (format "\e]2;%s\a" (format-mode-line frame-title-format))
+   terminal))
+
 (defun xterm--selection-char (type)
   (pcase type
     ('PRIMARY "p")



reply via email to

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