X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/142e26a72e9b8bbbec23c6bf7234e9f2544b5f89..ef62b23df5a7007c3d8c74dbca87ba83e9da682e:/lisp/terminal.el diff --git a/lisp/terminal.el b/lisp/terminal.el index e584cc4a24..7aaac26f1b 100644 --- a/lisp/terminal.el +++ b/lisp/terminal.el @@ -1,7 +1,7 @@ ;;; terminal.el --- terminal emulator for GNU Emacs -;; Copyright (C) 1986, 1987, 1988, 1989, 1993, 1994, 2001, 2002, 2003, -;; 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +;; Copyright (C) 1986-1989, 1993-1994, 2001-2012 +;; Free Software Foundation, Inc. ;; Author: Richard Mlynarik ;; Maintainer: FSF @@ -50,7 +50,7 @@ (defcustom terminal-escape-char ?\C-^ - "*All characters except for this are passed verbatim through the + "All characters except for this are passed verbatim through the terminal-emulator. This character acts as a prefix for commands to the emulator program itself. Type this character twice to send it through the emulator. Type ? after typing it for a list of @@ -60,7 +60,7 @@ This variable is local to each terminal-emulator buffer." :group 'terminal) (defcustom terminal-scrolling t ;;>> Setting this to t sort-of defeats my whole aim in writing this package... - "*If non-nil, the terminal-emulator will losingly `scroll' when output occurs + "If non-nil, the terminal-emulator will losingly `scroll' when output occurs past the bottom of the screen. If nil, output will win and `wrap' to the top of the screen. This variable is local to each terminal-emulator buffer." @@ -68,7 +68,7 @@ This variable is local to each terminal-emulator buffer." :group 'terminal) (defcustom terminal-more-processing t - "*If non-nil, do more-processing. + "If non-nil, do more-processing. This variable is local to each terminal-emulator buffer." :type 'boolean :group 'terminal) @@ -77,7 +77,7 @@ This variable is local to each terminal-emulator buffer." ;; and expects to actually see anything, you should probably set this to ;; around 400 (defcustom terminal-redisplay-interval 5000 - "*Maximum number of characters which will be processed by the + "Maximum number of characters which will be processed by the terminal-emulator before a screen redisplay is forced. Set this to a large value for greater throughput, set it smaller for more frequent updates but overall slower @@ -105,8 +105,8 @@ performance." (define-key map [t] 'te-pass-through) (define-key map [switch-frame] 'handle-switch-frame) (define-key map "\e" terminal-meta-map) - ;(define-key map "\C-l" - ; '(lambda () (interactive) (te-pass-through) (redraw-display))) + ;;(define-key map "\C-l" + ;; (lambda () (interactive) (te-pass-through) (redraw-display))) (setq terminal-map map))) (defvar terminal-escape-map nil) @@ -225,7 +225,7 @@ performance." ;; you hit esc key... ((and (stringp s) (string= s (make-string 1 terminal-escape-char))) - (setq last-command-char terminal-escape-char) + (setq last-command-event terminal-escape-char) (let ((terminal-escape-char -259)) (te-pass-through))) @@ -326,8 +326,7 @@ Very poor man's file transfer protocol." (message "Output logging off.")) (if (get-buffer name) nil - (save-excursion - (set-buffer (get-buffer-create name)) + (with-current-buffer (get-buffer-create name) (fundamental-mode) (buffer-disable-undo (current-buffer)) (erase-buffer))) @@ -396,10 +395,10 @@ set it smaller for more frequent updates (but overall slower performance." (put 'te-more-break-unread 'suppress-keymap t) (defun te-more-break-unread () (interactive) - (if (eq last-input-char terminal-escape-char) + (if (eq last-input-event terminal-escape-char) (call-interactively 'te-escape) (message "Continuing from more break (\"%s\" typed, %d chars output pending...)" - (single-key-description last-input-char) + (single-key-description last-input-event) (te-pending-output-length)) (setq te-more-count 259259) (te-more-break-unwind) @@ -469,29 +468,29 @@ One characters is treated specially: the terminal escape character (normally C-^) lets you type a terminal emulator command." (interactive) - (cond ((eq last-input-char terminal-escape-char) + (cond ((eq last-input-event terminal-escape-char) (call-interactively 'te-escape)) (t ;; Convert `return' to C-m, etc. - (if (and (symbolp last-input-char) - (get last-input-char 'ascii-character)) - (setq last-input-char (get last-input-char 'ascii-character))) + (if (and (symbolp last-input-event) + (get last-input-event 'ascii-character)) + (setq last-input-event (get last-input-event 'ascii-character))) ;; Convert meta characters to 8-bit form for transmission. - (if (and (integerp last-input-char) - (not (zerop (logand last-input-char ?\M-\^@)))) - (setq last-input-char (+ 128 (logand last-input-char 127)))) + (if (and (integerp last-input-event) + (not (zerop (logand last-input-event ?\M-\^@)))) + (setq last-input-event (+ 128 (logand last-input-event 127)))) ;; Now ignore all but actual characters. ;; (It ought to be possible to send through function ;; keys as character sequences if we add a description ;; to our termcap entry of what they should look like.) - (if (integerp last-input-char) + (if (integerp last-input-event) (progn (and terminal-more-processing (null (cdr te-pending-output)) (te-set-more-count nil)) - (process-send-string te-process (make-string 1 last-input-char)) + (process-send-string te-process (make-string 1 last-input-event)) (te-process-output t)) (message "Function key `%s' ignored" - (single-key-description last-input-char)))))) + (single-key-description last-input-event)))))) (defun te-set-window-start () @@ -610,8 +609,7 @@ together with a command \\to return to terminal emulation: \\ "%-")) (set-process-filter te-process (function (lambda (process string) - (save-excursion - (set-buffer (process-buffer process)) + (with-current-buffer (process-buffer process) (setq te-pending-output (nconc te-pending-output (list string)))) (te-update-pending-output-display)))) @@ -874,27 +872,22 @@ move to start of new line, clear to end of line." (defun te-filter (process string) - (let* ((obuf (current-buffer))) - ;; can't use save-excursion, as that preserves point, which we don't want - (unwind-protect - (progn - (set-buffer (process-buffer process)) - (goto-char te-saved-point) - (and (bufferp te-log-buffer) - (if (null (buffer-name te-log-buffer)) - ;; killed - (setq te-log-buffer nil) - (set-buffer te-log-buffer) - (goto-char (point-max)) - (insert-before-markers string) - (set-buffer (process-buffer process)))) - (setq te-pending-output (nconc te-pending-output (list string))) - (te-update-pending-output-display) - (te-process-output (eq (current-buffer) - (window-buffer (selected-window)))) - (set-buffer (process-buffer process)) - (setq te-saved-point (point))) - (set-buffer obuf)))) + (with-current-buffer (process-buffer process) + (goto-char te-saved-point) + (and (bufferp te-log-buffer) + (if (null (buffer-name te-log-buffer)) + ;; killed + (setq te-log-buffer nil) + (set-buffer te-log-buffer) + (goto-char (point-max)) + (insert-before-markers string) + (set-buffer (process-buffer process)))) + (setq te-pending-output (nconc te-pending-output (list string))) + (te-update-pending-output-display) + (te-process-output (eq (current-buffer) + (window-buffer (selected-window)))) + (set-buffer (process-buffer process)) + (setq te-saved-point (point)))) ;; (A version of the following comment which might be distractingly offensive ;; to some readers has been moved to term-nasty.el.) @@ -1012,7 +1005,7 @@ move to start of new line, clear to end of line." (unwind-protect (progn (set-process-filter te-process - (function (lambda (p s) + (function (lambda (_p s) (or (eq (length s) 1) (setq te-pending-output (list 1 s))) (throw 'char (aref s 0))))) @@ -1043,8 +1036,7 @@ move to start of new line, clear to end of line." (cond ((eq (process-status process) 'run)) ((null (buffer-name (process-buffer process)))) ;deleted (t (let ((b (current-buffer))) - (save-excursion - (set-buffer (process-buffer process)) + (with-current-buffer (process-buffer process) (setq buffer-read-only nil) (fundamental-mode) (goto-char (point-max)) @@ -1062,7 +1054,7 @@ move to start of new line, clear to end of line." ;; and it's apparently not needed in BSD. (defcustom explicit-shell-file-name nil - "*If non-nil, is file name to use for explicitly requested inferior shell." + "If non-nil, is file name to use for explicitly requested inferior shell." :type '(choice (const :tag "None" nil) file) :group 'terminal) @@ -1097,27 +1089,26 @@ This function calls the value of terminal-mode-hook if that exists and is non-nil after the terminal buffer has been set up and the subprocess started." (interactive - (cons (save-excursion - (set-buffer (get-buffer-create "*terminal*")) - (buffer-name (if (or (not (boundp 'te-process)) - (null te-process) - (not (eq (process-status te-process) - 'run))) - (current-buffer) - (generate-new-buffer "*terminal*")))) - (append - (let* ((default-s - ;; Default shell is same thing M-x shell uses. - (or explicit-shell-file-name - (getenv "ESHELL") - (getenv "SHELL") - "/bin/sh")) - (s (read-string - (format "Run program in emulator (default %s): " - default-s)))) - (if (equal s "") - (list default-s '()) - (te-parse-program-and-args s)))))) + (cons (with-current-buffer (get-buffer-create "*terminal*") + (buffer-name (if (or (not (boundp 'te-process)) + (null te-process) + (not (eq (process-status te-process) + 'run))) + (current-buffer) + (generate-new-buffer "*terminal*")))) + (append + (let* ((default-s + ;; Default shell is same thing M-x shell uses. + (or explicit-shell-file-name + (getenv "ESHELL") + (getenv "SHELL") + "/bin/sh")) + (s (read-string + (format "Run program in emulator (default %s): " + default-s)))) + (if (equal s "") + (list default-s '()) + (te-parse-program-and-args s)))))) (switch-to-buffer buffer) (if (null width) (setq width (- (window-width (selected-window)) 1))) (if (null height) (setq height (- (window-height (selected-window)) 1))) @@ -1294,7 +1285,7 @@ in the directory specified by `te-terminfo-directory'." ;; Rename it to the desired name. ;; We use this roundabout approach ;; to avoid any risk of writing a name that - ;; was michievouslyt set up as a symlink. + ;; was mischievously set up as a symlink. (rename-file temp-file file-name)) ;; Now compile that source to make the binary that the ;; programs actually use. @@ -1336,7 +1327,7 @@ in the directory specified by `te-terminfo-directory'." "im=:ei=:dm=:ed=:mi:do=^p^j:nl=^p^j:bs:") ) -(defun te-tic-sentinel (proc state-change) +(defun te-tic-sentinel (_proc state-change) "If tic has finished, delete the .tif file" (if (equal state-change "finished ") @@ -1344,5 +1335,4 @@ in the directory specified by `te-terminfo-directory'." (provide 'terminal) -;; arch-tag: 0ae1d7d7-90ef-4566-a531-6e7ff8c79b2f ;;; terminal.el ends here