+(defvar mdw-terminal-title-alist nil)
+(defun mdw-update-terminal-title ()
+ (when (let ((term (frame-parameter nil 'tty-type)))
+ (and term (string-match "^xterm" term)))
+ (let* ((tty (frame-parameter nil 'tty))
+ (old (assoc tty mdw-terminal-title-alist))
+ (new (format-mode-line frame-title-format)))
+ (unless (and old (equal (cdr old) new))
+ (if old (rplacd old new)
+ (setq mdw-terminal-title-alist
+ (cons (cons tty new) mdw-terminal-title-alist)))
+ (send-string-to-terminal (concat "\e]2;" new "\e\\"))))))
+
+(add-hook 'post-command-hook 'mdw-update-terminal-title)
+