X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/2fe99fe682fc945ab4511eca090ba0c837e3aee0..8e735883f4696be337577300537480fe64f11fdf:/lisp/terminal.el diff --git a/lisp/terminal.el b/lisp/terminal.el index 618172a2b9..6ce6824281 100644 --- a/lisp/terminal.el +++ b/lisp/terminal.el @@ -142,7 +142,7 @@ performance.") (define-key map "\r" 'te-more-break-advance-one-line) (setq terminal-more-break-map map))) - + ;;; Pacify the byte compiler (defvar te-process nil) @@ -167,27 +167,37 @@ performance.") (defun te-escape () (interactive) - (let (s - (local (current-local-map)) - (global (current-global-map))) + (let (s + (local (current-local-map)) + (global (current-global-map))) (unwind-protect - (progn - (use-global-map terminal-escape-map) - (use-local-map terminal-escape-map) - (setq s (read-key-sequence - (if prefix-arg - (format "Emacs Terminal escape> %d " - (prefix-numeric-value prefix-arg)) - "Emacs Terminal escape> ")))) + (progn + (use-global-map terminal-escape-map) + (use-local-map terminal-escape-map) + (setq s (read-key-sequence + (if current-prefix-arg + (format "Emacs Terminal escape> %d " + (prefix-numeric-value current-prefix-arg)) + "Emacs Terminal escape> ")))) (use-global-map global) (use-local-map local)) + (message "") - (cond ((string= s (make-string 1 terminal-escape-char)) - (setq last-command-char terminal-escape-char) - (let ((terminal-escape-char -259)) - (te-pass-through))) - ((setq s (lookup-key terminal-escape-map s)) - (call-interactively s))))) + + (cond + ;; Certain keys give vector notation, like [escape] when + ;; you hit esc key... + ((and (stringp s) + (string= s (make-string 1 terminal-escape-char))) + (setq last-command-char terminal-escape-char) + (let ((terminal-escape-char -259)) + (te-pass-through))) + + ((setq s (lookup-key terminal-escape-map s)) + (call-interactively s))) + + )) + (defun te-escape-help () "Provide help on commands available after terminal-escape-char is typed." @@ -227,7 +237,7 @@ Other chars following \"%s\" are interpreted as follows:\n" (setq l (cdr l)))) nil))))) - + (defun te-escape-extended-command () (interactive) @@ -296,7 +306,7 @@ Very poor man's file transfer protocol." "Discontinue output log." (interactive) (te-set-output-log nil)) - + (defun te-toggle (sym arg) (set sym (cond ((not (numberp arg)) arg) @@ -429,13 +439,13 @@ lets you type a terminal emulator command." (cond ((eq last-input-char terminal-escape-char) (call-interactively 'te-escape)) (t - ;; Convert `return' to C-m, etc. + ;; 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))) ;; Convert meta characters to 8-bit form for transmission. (if (and (integerp last-input-char) - (not (zerop (logand last-input-char (lsh 1 23))))) + (not (zerop (logand last-input-char ?\M-\^@)))) (setq last-input-char (+ 128 (logand last-input-char 127)))) ;; Now ignore all but actual characters. ;; (It ought to be possible to send through function @@ -499,7 +509,7 @@ together with a command \\to return to terminal emulation: \\ "Start editing the terminal emulator buffer with ordinary Emacs commands." (interactive) (terminal-edit-mode) - (set-buffer-modified-p (buffer-modified-p)) + (force-mode-line-update) ;; Make mode line update. (if (eq (key-binding "\C-c\C-c") 'terminal-cease-edit) (message "Editing: Type C-c C-c to return to Terminal") @@ -589,7 +599,7 @@ together with a command \\to return to terminal emulation: \\ (set-process-filter te-process te-more-old-filter) (goto-char te-more-old-point) (setq mode-line-format te-more-old-mode-line-format) - (set-buffer-modified-p (buffer-modified-p)) + (force-mode-line-update) (let ((buffer-read-only nil)) (cond ((eobp)) (terminal-more-break-insertion @@ -682,7 +692,7 @@ move to start of new line, clear to end of line." (forward-char 1) (end-of-line) (delete-region (- (point) te-width) (point)) (insert-char ?\ te-width)))) - + ;; ^p ^l (defun te-clear-screen () @@ -855,9 +865,9 @@ move to start of new line, clear to end of line." ;; (A version of the following comment which might be distractingly offensive ;; to some readers has been moved to term-nasty.el.) ;; unix lacks ITS-style tty control... -(defun te-process-output (preemptable) +(defun te-process-output (preemptible) ;;>> There seems no good reason to ever disallow preemption - (setq preemptable t) + (setq preemptible t) (catch 'te-process-output (let ((buffer-read-only nil) (string nil) ostring start char (matchpos nil)) @@ -940,14 +950,14 @@ move to start of new line, clear to end of line." ;; (Perhaps some operating system or ;; other is completely incompetent...) (?\C-m . te-beginning-of-line) - (?\C-g . te-beep) - (?\C-h . te-backward-char) - (?\C-i . te-output-tab)))) + (?\C-g . te-beep) + (?\C-h . te-backward-char) + (?\C-i . te-output-tab)))) 'te-losing-unix))) (te-redisplay-if-necessary 1)) - (and preemptable + (and preemptible (input-pending-p) - ;; preemptable output! Oh my!! + ;; preemptible output! Oh my!! (throw 'te-process-output t))))) ;; We must update window-point in every window displaying our buffer (let* ((s (selected-window)) @@ -987,14 +997,13 @@ move to start of new line, clear to end of line." (defun te-update-pending-output-display () (if (null (cdr te-pending-output)) - (setq te-pending-output-info "") + (setq te-pending-output-info "") (let ((length (te-pending-output-length))) (if (< length 1500) (setq te-pending-output-info "") (setq te-pending-output-info (format "(%dK chars output pending) " (/ (+ length 512) 1024)))))) - ;; update mode line - (set-buffer-modified-p (buffer-modified-p))) + (force-mode-line-update)) (defun te-sentinel (process message) @@ -1078,7 +1087,7 @@ subprocess started." (if (null height) (setq height (- (window-height (selected-window)) 1))) (terminal-mode) (setq te-width width te-height height) - (setq te-terminal-name (concat te-terminal-name-prefix "-" te-width + (setq te-terminal-name (concat te-terminal-name-prefix "-" te-width te-height)) (setq mode-line-buffer-identification (list (format "Emacs terminal %dx%d: %%b " te-width te-height) @@ -1106,7 +1115,7 @@ subprocess started." (format "%s; exec %s" te-stty-string (mapconcat 'te-quote-arg-for-sh - (cons program args) " ")))) + (cons program args) " ")))) (set-process-filter te-process 'te-filter) (set-process-sentinel te-process 'te-sentinel)) (error (fundamental-mode) @@ -1219,14 +1228,14 @@ of the terminal-emulator" (concat "\"" harder "\""))))) (defun te-create-terminfo () - "Create and compile a terminfo entry for the virtual terminal. This is kept + "Create and compile a terminfo entry for the virtual terminal. This is kept in the /tmp directory" (if (and system-uses-terminfo - (not (file-exists-p (concat "/tmp/" + (not (file-exists-p (concat "/tmp/" (substring te-terminal-name-prefix 0 1) "/" te-terminal-name)))) - (let ( (terminfo - (concat + (let ( (terminfo + (concat (format "%s,mir, xon,cols#%d, lines#%d," te-terminal-name te-width te-height) "bel=^P^G, clear=^P\\f, cr=^P^A, cub1=^P^B, cud1=^P\\n," @@ -1242,7 +1251,7 @@ in the /tmp directory" (write-file file-name) (kill-buffer nil) ) - (let ( (process-environment + (let ( (process-environment (cons (concat "TERMINFO=" "/tmp") process-environment)) ) (set-process-sentinel (start-process "tic" nil "tic" file-name)