diff options
| author | Richard M. Stallman | 1995-01-22 02:21:32 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1995-01-22 02:21:32 +0000 |
| commit | 7fee19128471fd594baac54c7ccee54b48d9ff32 (patch) | |
| tree | 2cc6efde7ea52fc4224eed6b6dc49ba0c1985ab2 | |
| parent | 3e6eef952574d43b6eb6004a30ba02234bd4c13b (diff) | |
| download | emacs-7fee19128471fd594baac54c7ccee54b48d9ff32.tar.gz emacs-7fee19128471fd594baac54c7ccee54b48d9ff32.zip | |
(term-version): Increased to 0.94.
(term-if-emacs19, term-if-xemacs, term-ifnot-xemacs): New macros
to conditionalize at compile-time for different emacs versions.
(various places): Use them (instead of term-is-XXXX).
(term-is-emacs19): Removed, no longer needed.
Change keybindings to not use C-c LETTER, for
term-char-mode, term-line-mode. Keybindings for term-pager-enable
and term-pager-disable replaced by one for term-pager-toggle.
(term-pager-toggle): New function.
(term-fake-pager-enable, term-fake-pager-disable):
Define as aliases, so that menubar code will find proper keybindings.
(term-char-mode): Make no-op if already in char mode.
(term-line-mode): Make no-op if already in line mode.
(term-mode-map): Add keybinding for no-op term-line-mode, so
code to display menubar keybindings doesn't lose it. (Needed
as long as char-mode and line-mode share term-terminal-menu.)
(term-raw-escape-map): Likewise for term-char-mode.
(term-char-mode, term-line-mode): Better documentation strings.
Added menubar for pager sub-mode.
(term-command-hook): Disabled the feature that allowed
inferior to send a lisp command to emacs - too big a security hole.
| -rw-r--r-- | lisp/term.el | 206 |
1 files changed, 125 insertions, 81 deletions
diff --git a/lisp/term.el b/lisp/term.el index c672fca95f2..275c3b2b7da 100644 --- a/lisp/term.el +++ b/lisp/term.el | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | ;; term.el --- general command interpreter in a window stuff | 1 | ;; term.el --- general command interpreter in a window stuff |
| 2 | ;; Copyright (C) 1988, 1990, 1992, 1992, 1994 Free Software Foundation, Inc. | 2 | ;; Copyright (C) 1988, 1990, 1992, 1994, 1995 Free Software Foundation, Inc. |
| 3 | 3 | ||
| 4 | ;; Author: Per Bothner <bothner@cygnus.com> | 4 | ;; Author: Per Bothner <bothner@cygnus.com> |
| 5 | ;; Based on comint mode written by: Olin Shivers <shivers@cs.cmu.edu> | 5 | ;; Based on comint mode written by: Olin Shivers <shivers@cs.cmu.edu> |
| @@ -82,7 +82,7 @@ | |||
| 82 | 82 | ||
| 83 | ;;; This is passed to the inferior in the EMACS environment variable, | 83 | ;;; This is passed to the inferior in the EMACS environment variable, |
| 84 | ;;; so it is important to increase it if there are protocol-relevant changes. | 84 | ;;; so it is important to increase it if there are protocol-relevant changes. |
| 85 | (defconst term-version "0.93") | 85 | (defconst term-version "0.94") |
| 86 | 86 | ||
| 87 | (require 'ring) | 87 | (require 'ring) |
| 88 | (require 'ehelp) | 88 | (require 'ehelp) |
| @@ -268,26 +268,28 @@ Buffer local variable.") | |||
| 268 | (put 'term-scroll-show-maximum-output 'permanent-local t) | 268 | (put 'term-scroll-show-maximum-output 'permanent-local t) |
| 269 | (put 'term-ptyp 'permanent-local t) | 269 | (put 'term-ptyp 'permanent-local t) |
| 270 | 270 | ||
| 271 | (defmacro term-is-emacs19 () '(string-match "^19" emacs-version)) | 271 | ;; Do FORMS if running under Emacs-19. |
| 272 | ;; True if running under XEmacs (perviously Lucid emacs). | 272 | (defmacro term-if-emacs19 (&rest forms) |
| 273 | (if (string-match "^19" emacs-version) (cons 'progn forms))) | ||
| 274 | ;; True if running under XEmacs (previously Lucid emacs). | ||
| 273 | (defmacro term-is-xemacs () '(string-match "Lucid" emacs-version)) | 275 | (defmacro term-is-xemacs () '(string-match "Lucid" emacs-version)) |
| 276 | ;; Do FORM if running under XEmacs (previously Lucid emacs). | ||
| 277 | (defmacro term-if-xemacs (&rest forms) | ||
| 278 | (if (term-is-xemacs) (cons 'progn forms))) | ||
| 279 | ;; Do FORM if NOT running under XEmacs (previously Lucid emacs). | ||
| 280 | (defmacro term-ifnot-xemacs (&rest forms) | ||
| 281 | (if (not (term-is-xemacs)) (cons 'progn forms))) | ||
| 274 | 282 | ||
| 275 | (defmacro term-in-char-mode () '(eq (current-local-map) term-raw-map)) | 283 | (defmacro term-in-char-mode () '(eq (current-local-map) term-raw-map)) |
| 276 | (defmacro term-in-line-mode () '(not (term-in-char-mode))) | 284 | (defmacro term-in-line-mode () '(not (term-in-char-mode))) |
| 277 | 285 | ||
| 278 | (if (term-is-xemacs) | 286 | (term-if-xemacs |
| 279 | (defvar term-terminal-menu | 287 | (defvar term-terminal-menu |
| 280 | '("Terminal" | 288 | '("Terminal" |
| 281 | [ "Character mode" term-char-mode (term-in-line-mode)] | 289 | [ "Character mode" term-char-mode (term-in-line-mode)] |
| 282 | [ "Line mode" term-line-mode (term-in-char-mode)] | 290 | [ "Line mode" term-line-mode (term-in-char-mode)] |
| 283 | [ "Enable paging" term-pager-enable (not term-pager-count)] | 291 | [ "Enable paging" term-pager-toggle (not term-pager-count)] |
| 284 | [ "Disable paging" term-pager-disable term-pager-count])) | 292 | [ "Disable paging" term-pager-toggle term-pager-count]))) |
| 285 | ) | ||
| 286 | |||
| 287 | (put 'term-char-mode 'menu-enable '(term-in-line-mode)) | ||
| 288 | (put 'term-line-mode 'menu-enable '(term-in-char-mode)) | ||
| 289 | (put 'term-pager-enable 'menu-enable '(not term-pager-count)) | ||
| 290 | (put 'term-pager-disable 'menu-enable 'term-pager-count) | ||
| 291 | 293 | ||
| 292 | (defun term-mode () | 294 | (defun term-mode () |
| 293 | "Major mode for interacting with an inferior interpreter. | 295 | "Major mode for interacting with an inferior interpreter. |
| @@ -429,9 +431,9 @@ Entry to this mode runs the hooks on term-mode-hook" | |||
| 429 | (make-local-variable 'term-chars-mode) | 431 | (make-local-variable 'term-chars-mode) |
| 430 | (setq term-chars-mode nil) | 432 | (setq term-chars-mode nil) |
| 431 | (run-hooks 'term-mode-hook) | 433 | (run-hooks 'term-mode-hook) |
| 432 | (if (term-is-xemacs) | 434 | (term-if-xemacs |
| 433 | (set-buffer-menubar | 435 | (set-buffer-menubar |
| 434 | (append current-menubar (list term-terminal-menu)))) | 436 | (append current-menubar (list term-terminal-menu)))) |
| 435 | (or term-input-ring | 437 | (or term-input-ring |
| 436 | (setq term-input-ring (make-ring term-input-ring-size)))) | 438 | (setq term-input-ring (make-ring term-input-ring-size)))) |
| 437 | 439 | ||
| @@ -442,10 +444,9 @@ Entry to this mode runs the hooks on term-mode-hook" | |||
| 442 | (define-key term-mode-map "\en" 'term-next-input) | 444 | (define-key term-mode-map "\en" 'term-next-input) |
| 443 | (define-key term-mode-map "\er" 'term-previous-matching-input) | 445 | (define-key term-mode-map "\er" 'term-previous-matching-input) |
| 444 | (define-key term-mode-map "\es" 'term-next-matching-input) | 446 | (define-key term-mode-map "\es" 'term-next-matching-input) |
| 445 | (if (term-is-xemacs) | 447 | (term-ifnot-xemacs |
| 446 | t | 448 | (define-key term-mode-map [?\A-\M-r] 'term-previous-matching-input-from-input) |
| 447 | (define-key term-mode-map [?\A-\M-r] 'term-previous-matching-input-from-input) | 449 | (define-key term-mode-map [?\A-\M-s] 'term-next-matching-input-from-input)) |
| 448 | (define-key term-mode-map [?\A-\M-s] 'term-next-matching-input-from-input)) | ||
| 449 | (define-key term-mode-map "\e\C-l" 'term-show-output) | 450 | (define-key term-mode-map "\e\C-l" 'term-show-output) |
| 450 | (define-key term-mode-map "\C-m" 'term-send-input) | 451 | (define-key term-mode-map "\C-m" 'term-send-input) |
| 451 | (define-key term-mode-map "\C-d" 'term-delchar-or-maybe-eof) | 452 | (define-key term-mode-map "\C-d" 'term-delchar-or-maybe-eof) |
| @@ -463,9 +464,9 @@ Entry to this mode runs the hooks on term-mode-hook" | |||
| 463 | (define-key term-mode-map "\C-c\C-n" 'term-next-prompt) | 464 | (define-key term-mode-map "\C-c\C-n" 'term-next-prompt) |
| 464 | (define-key term-mode-map "\C-c\C-p" 'term-previous-prompt) | 465 | (define-key term-mode-map "\C-c\C-p" 'term-previous-prompt) |
| 465 | (define-key term-mode-map "\C-c\C-d" 'term-send-eof) | 466 | (define-key term-mode-map "\C-c\C-d" 'term-send-eof) |
| 466 | (define-key term-mode-map "\C-cc" 'term-char-mode) | 467 | (define-key term-mode-map "\C-c\C-k" 'term-char-mode) |
| 467 | (define-key term-mode-map "\C-cp" 'term-pager-enable) | 468 | (define-key term-mode-map "\C-c\C-j" 'term-line-mode) |
| 468 | (define-key term-mode-map "\C-cD" 'term-pager-disable) | 469 | (define-key term-mode-map "\C-c\C-q" 'term-pager-toggle) |
| 469 | 470 | ||
| 470 | (copy-face 'default 'term-underline-face) | 471 | (copy-face 'default 'term-underline-face) |
| 471 | (set-face-underline-p 'term-underline-face t) | 472 | (set-face-underline-p 'term-underline-face t) |
| @@ -487,21 +488,20 @@ Entry to this mode runs the hooks on term-mode-hook" | |||
| 487 | ) | 488 | ) |
| 488 | 489 | ||
| 489 | ;; Menu bars: | 490 | ;; Menu bars: |
| 490 | (if (and (not (boundp 'term-terminal-menu)) | 491 | (term-ifnot-xemacs |
| 491 | (term-is-emacs19) (not (term-is-xemacs))) | 492 | (term-if-emacs19 |
| 492 | (progn | ||
| 493 | ;; terminal: | 493 | ;; terminal: |
| 494 | (defvar term-terminal-menu (make-sparse-keymap "Terminal")) | 494 | (defvar term-terminal-menu (make-sparse-keymap "Terminal")) |
| 495 | (define-key term-mode-map [menu-bar terminal] | 495 | (define-key term-terminal-menu [terminal-pager-enable] |
| 496 | (cons "Terminal" term-terminal-menu)) | 496 | '("Enable paging" . term-fake-pager-enable)) |
| 497 | (define-key term-terminal-menu [terminal-pager-disable] | ||
| 498 | '("Disable paging" . term-fake-pager-disable)) | ||
| 497 | (define-key term-terminal-menu [terminal-char-mode] | 499 | (define-key term-terminal-menu [terminal-char-mode] |
| 498 | '("Character mode" . term-char-mode)) | 500 | '("Character mode" . term-char-mode)) |
| 499 | (define-key term-terminal-menu [terminal-line-mode] | 501 | (define-key term-terminal-menu [terminal-line-mode] |
| 500 | '("Line mode" . term-line-mode)) | 502 | '("Line mode" . term-line-mode)) |
| 501 | (define-key term-terminal-menu [terminal-pager-enable] | 503 | (define-key term-mode-map [menu-bar terminal] |
| 502 | '("Enable paging" . term-pager-enable)) | 504 | (setq term-terminal-menu (cons "Terminal" term-terminal-menu))) |
| 503 | (define-key term-terminal-menu [terminal-pager-disable] | ||
| 504 | '("Disable paging" . term-pager-disable)) | ||
| 505 | 505 | ||
| 506 | ;; completion: (line mode only) | 506 | ;; completion: (line mode only) |
| 507 | (defvar term-completion-menu (make-sparse-keymap "Complete")) | 507 | (defvar term-completion-menu (make-sparse-keymap "Complete")) |
| @@ -557,14 +557,14 @@ Entry to this mode runs the hooks on term-mode-hook" | |||
| 557 | 557 | ||
| 558 | ;; Signals | 558 | ;; Signals |
| 559 | (defvar term-signals-menu (make-sparse-keymap "Signals")) | 559 | (defvar term-signals-menu (make-sparse-keymap "Signals")) |
| 560 | (define-key term-mode-map [menu-bar signals] | ||
| 561 | (cons "Signals" term-signals-menu)) | ||
| 562 | (define-key term-signals-menu [eof] '("EOF" . term-send-eof)) | 560 | (define-key term-signals-menu [eof] '("EOF" . term-send-eof)) |
| 563 | (define-key term-signals-menu [kill] '("KILL" . term-kill-subjob)) | 561 | (define-key term-signals-menu [kill] '("KILL" . term-kill-subjob)) |
| 564 | (define-key term-signals-menu [quit] '("QUIT" . term-quit-subjob)) | 562 | (define-key term-signals-menu [quit] '("QUIT" . term-quit-subjob)) |
| 565 | (define-key term-signals-menu [cont] '("CONT" . term-continue-subjob)) | 563 | (define-key term-signals-menu [cont] '("CONT" . term-continue-subjob)) |
| 566 | (define-key term-signals-menu [stop] '("STOP" . term-stop-subjob)) | 564 | (define-key term-signals-menu [stop] '("STOP" . term-stop-subjob)) |
| 567 | (define-key term-signals-menu [] '("BREAK" . term-interrupt-subjob)) | 565 | (define-key term-signals-menu [] '("BREAK" . term-interrupt-subjob)) |
| 566 | (define-key term-mode-map [menu-bar signals] | ||
| 567 | (setq term-signals-menu (cons "Signals" term-signals-menu))) | ||
| 568 | )) | 568 | )) |
| 569 | 569 | ||
| 570 | (defun term-reset-size (height width) | 570 | (defun term-reset-size (height width) |
| @@ -670,13 +670,15 @@ without any interpretation." | |||
| 670 | (define-key term-raw-escape-map "\C-u" | 670 | (define-key term-raw-escape-map "\C-u" |
| 671 | (lookup-key (current-global-map) "\C-u")) | 671 | (lookup-key (current-global-map) "\C-u")) |
| 672 | (define-key term-raw-escape-map c 'term-send-raw) | 672 | (define-key term-raw-escape-map c 'term-send-raw) |
| 673 | (define-key term-raw-escape-map "p" 'term-pager-enable) | 673 | (define-key term-raw-escape-map "\C-q" 'term-pager-toggle) |
| 674 | (define-key term-raw-escape-map "D" 'term-pager-disable) | 674 | ;; The keybinding for term-char-mode is needed by the menubar code. |
| 675 | (define-key term-raw-escape-map "l" 'term-line-mode)) | 675 | (define-key term-raw-escape-map "\C-k" 'term-char-mode) |
| 676 | (define-key term-raw-escape-map "\C-j" 'term-line-mode)) | ||
| 676 | 677 | ||
| 677 | (defun term-char-mode () | 678 | (defun term-char-mode () |
| 678 | "Start using raw keyboard mode to send each character | 679 | "Switch to char (\"raw\") sub-mode of term mode. |
| 679 | to inferior process until a key bound to term-line-mode is encountered." | 680 | Each character you type is sent directly to the inferior without |
| 681 | intervention from emacs, except for the escape character (usually C-c)." | ||
| 680 | (interactive) | 682 | (interactive) |
| 681 | (if (not term-raw-map) | 683 | (if (not term-raw-map) |
| 682 | (let* ((map (make-keymap)) | 684 | (let* ((map (make-keymap)) |
| @@ -690,44 +692,49 @@ to inferior process until a key bound to term-line-mode is encountered." | |||
| 690 | (setq term-raw-map map) | 692 | (setq term-raw-map map) |
| 691 | (setq term-raw-escape-map | 693 | (setq term-raw-escape-map |
| 692 | (copy-keymap (lookup-key (current-global-map) "\C-x"))) | 694 | (copy-keymap (lookup-key (current-global-map) "\C-x"))) |
| 693 | (if (term-is-emacs19) | 695 | (term-if-emacs19 |
| 694 | (progn | 696 | (term-if-xemacs |
| 695 | (if (term-is-xemacs) | 697 | (define-key term-raw-map [(button2)] 'term-mouse-paste)) |
| 696 | (define-key term-raw-map [(button2)] 'term-mouse-paste) | 698 | (term-ifnot-xemacs |
| 697 | (progn | 699 | (define-key term-raw-map [mouse-2] 'term-mouse-paste) |
| 698 | (define-key term-raw-map [mouse-2] 'term-mouse-paste) | 700 | (define-key term-raw-map [menu-bar terminal] term-terminal-menu) |
| 699 | (define-key term-raw-map [menu-bar terminal] | 701 | (define-key term-raw-map [menu-bar signals] term-signals-menu) |
| 700 | (cons "Terminal" term-terminal-menu)) | 702 | (define-key term-raw-map [up] 'term-send-up) |
| 701 | (define-key term-raw-map [menu-bar signals] | 703 | (define-key term-raw-map [down] 'term-send-down) |
| 702 | (cons "Signals" term-signals-menu)) )) | 704 | (define-key term-raw-map [right] 'term-send-right) |
| 703 | (define-key term-raw-map [up] 'term-send-up) | 705 | (define-key term-raw-map [left] 'term-send-left)) |
| 704 | (define-key term-raw-map [down] 'term-send-down) | 706 | (term-set-escape-char ?\C-c)))) |
| 705 | (define-key term-raw-map [right] 'term-send-right) | ||
| 706 | (define-key term-raw-map [left] 'term-send-left))) | ||
| 707 | (term-set-escape-char ?\C-c))) | ||
| 708 | ;; FIXME: Emit message? Cfr ilisp-raw-message | 707 | ;; FIXME: Emit message? Cfr ilisp-raw-message |
| 709 | (setq term-old-mode-map (current-local-map)) | 708 | (if (term-in-line-mode) |
| 710 | (use-local-map term-raw-map) | 709 | (progn |
| 711 | 710 | (setq term-old-mode-map (current-local-map)) | |
| 712 | ;; Send existing partial line to inferior (without newline). | 711 | (use-local-map term-raw-map) |
| 713 | (let ((pmark (process-mark (get-buffer-process (current-buffer)))) | 712 | |
| 714 | (save-input-sender term-input-sender)) | 713 | ;; Send existing partial line to inferior (without newline). |
| 715 | (if (> (point) pmark) | 714 | (let ((pmark (process-mark (get-buffer-process (current-buffer)))) |
| 716 | (unwind-protect | 715 | (save-input-sender term-input-sender)) |
| 717 | (progn | 716 | (if (> (point) pmark) |
| 718 | (setq term-input-sender (symbol-function 'term-send-string)) | 717 | (unwind-protect |
| 719 | (end-of-line) | 718 | (progn |
| 720 | (term-send-input)) | 719 | (setq term-input-sender |
| 721 | (setq term-input-sender save-input-sender)))) | 720 | (symbol-function 'term-send-string)) |
| 722 | 721 | (end-of-line) | |
| 723 | (setq mode-line-process '(": char %s")) | 722 | (term-send-input)) |
| 724 | (set-buffer-modified-p (buffer-modified-p))) ;;No-op, but updates mode line. | 723 | (setq term-input-sender save-input-sender)))) |
| 724 | |||
| 725 | (setq mode-line-process '(": char %s")) | ||
| 726 | (set-buffer-modified-p (buffer-modified-p))))) ;; Updates mode line. | ||
| 725 | 727 | ||
| 726 | (defun term-line-mode () | 728 | (defun term-line-mode () |
| 729 | "Switch to line (\"cooked\") sub-mode of term mode. | ||
| 730 | This means that emacs editing commands work as normally, until | ||
| 731 | you type \\[term-send-input] which sends the current line to the inferior." | ||
| 727 | (interactive) | 732 | (interactive) |
| 728 | (use-local-map term-old-mode-map) | 733 | (if (term-in-char-mode) |
| 729 | (setq mode-line-process '(": line %s")) | 734 | (progn |
| 730 | (set-buffer-modified-p (buffer-modified-p))) ;;No-op, but updates mode line. | 735 | (use-local-map term-old-mode-map) |
| 736 | (setq mode-line-process '(": line %s")) | ||
| 737 | (set-buffer-modified-p (buffer-modified-p))))) ;; Updates mode line. | ||
| 731 | 738 | ||
| 732 | (defun term-check-proc (buffer) | 739 | (defun term-check-proc (buffer) |
| 733 | "True if there is a process associated w/buffer BUFFER, and | 740 | "True if there is a process associated w/buffer BUFFER, and |
| @@ -2387,8 +2394,10 @@ The top-most line is line 0." | |||
| 2387 | (setq term-pending-frame (cons filename fileline)))) | 2394 | (setq term-pending-frame (cons filename fileline)))) |
| 2388 | ((= (aref string 0) ?/) | 2395 | ((= (aref string 0) ?/) |
| 2389 | (cd (substring string 1))) | 2396 | (cd (substring string 1))) |
| 2390 | ((= (aref string 0) ?!) | 2397 | ;; Allowing the inferior to call functions in emacs is |
| 2391 | (eval (car (read-from-string string 1)))) | 2398 | ;; probably too big a security hole. |
| 2399 | ;; ((= (aref string 0) ?!) | ||
| 2400 | ;; (eval (car (read-from-string string 1)))) | ||
| 2392 | (t)));; Otherwise ignore it | 2401 | (t)));; Otherwise ignore it |
| 2393 | 2402 | ||
| 2394 | ;; Make sure the file named TRUE-FILE is in a buffer that appears on the screen | 2403 | ;; Make sure the file named TRUE-FILE is in a buffer that appears on the screen |
| @@ -2437,7 +2446,7 @@ The top-most line is line 0." | |||
| 2437 | (defun term-process-pager () | 2446 | (defun term-process-pager () |
| 2438 | (if (not term-pager-break-map) | 2447 | (if (not term-pager-break-map) |
| 2439 | (let* ((map (make-keymap)) | 2448 | (let* ((map (make-keymap)) |
| 2440 | (i 0)) | 2449 | (i 0) tmp) |
| 2441 | ; (while (< i 128) | 2450 | ; (while (< i 128) |
| 2442 | ; (define-key map (make-string 1 i) 'term-send-raw) | 2451 | ; (define-key map (make-string 1 i) 'term-send-raw) |
| 2443 | ; (setq i (1+ i))) | 2452 | ; (setq i (1+ i))) |
| @@ -2457,6 +2466,27 @@ The top-most line is line 0." | |||
| 2457 | (define-key map "D" 'term-pager-disable) | 2466 | (define-key map "D" 'term-pager-disable) |
| 2458 | (define-key map "<" 'term-pager-bob) | 2467 | (define-key map "<" 'term-pager-bob) |
| 2459 | (define-key map ">" 'term-pager-eob) | 2468 | (define-key map ">" 'term-pager-eob) |
| 2469 | |||
| 2470 | ;; Add menu bar. | ||
| 2471 | (term-if-emacs19 | ||
| 2472 | (term-ifnot-xemacs | ||
| 2473 | (define-key map [menu-bar terminal] term-terminal-menu) | ||
| 2474 | (define-key map [menu-bar signals] term-signals-menu) | ||
| 2475 | (setq tmp (make-sparse-keymap "More pages?")) | ||
| 2476 | (define-key tmp [help] '("Help" . term-pager-help)) | ||
| 2477 | (define-key tmp [disable] | ||
| 2478 | '("Diable paging" . term-fake-pager-disable)) | ||
| 2479 | (define-key tmp [discard] | ||
| 2480 | '("Discard remaining output" . term-pager-discard)) | ||
| 2481 | (define-key tmp [eob] '("Goto to end" . term-pager-eob)) | ||
| 2482 | (define-key tmp [bob] '("Goto to beginning" . term-pager-bob)) | ||
| 2483 | (define-key tmp [line] '("1 line forwards" . term-pager-line)) | ||
| 2484 | (define-key tmp [bline] '("1 line backwards" . term-pager-back-line)) | ||
| 2485 | (define-key tmp [back] '("1 page backwards" . term-pager-back-page)) | ||
| 2486 | (define-key tmp [page] '("1 page forwards" . term-pager-page)) | ||
| 2487 | (define-key map [menu-bar page] (cons "More pages?" tmp)) | ||
| 2488 | )) | ||
| 2489 | |||
| 2460 | (setq term-pager-break-map map))) | 2490 | (setq term-pager-break-map map))) |
| 2461 | ; (let ((process (get-buffer-process (current-buffer)))) | 2491 | ; (let ((process (get-buffer-process (current-buffer)))) |
| 2462 | ; (stop-process process)) | 2492 | ; (stop-process process)) |
| @@ -2468,7 +2498,8 @@ The top-most line is line 0." | |||
| 2468 | (list "-- **MORE** " | 2498 | (list "-- **MORE** " |
| 2469 | mode-line-buffer-identification | 2499 | mode-line-buffer-identification |
| 2470 | " [Type ? for help] " | 2500 | " [Type ? for help] " |
| 2471 | "%-"))) | 2501 | "%-")) |
| 2502 | (set-buffer-modified-p (buffer-modified-p))) ;;No-op, but updates mode line. | ||
| 2472 | 2503 | ||
| 2473 | (defun term-pager-line (lines) | 2504 | (defun term-pager-line (lines) |
| 2474 | (interactive "p") | 2505 | (interactive "p") |
| @@ -2535,6 +2566,18 @@ The top-most line is line 0." | |||
| 2535 | (or term-pager-count | 2566 | (or term-pager-count |
| 2536 | (setq term-pager-count 0))) ;; Or maybe set to (term-current-row) ?? | 2567 | (setq term-pager-count 0))) ;; Or maybe set to (term-current-row) ?? |
| 2537 | 2568 | ||
| 2569 | (defun term-pager-toggle () | ||
| 2570 | (interactive) | ||
| 2571 | (if term-pager-count (term-pager-disable) (term-pager-enable))) | ||
| 2572 | |||
| 2573 | (term-ifnot-xemacs | ||
| 2574 | (defalias 'term-fake-pager-enable 'term-pager-toggle) | ||
| 2575 | (defalias 'term-fake-pager-disable 'term-pager-toggle) | ||
| 2576 | (put 'term-char-mode 'menu-enable '(term-in-line-mode)) | ||
| 2577 | (put 'term-line-mode 'menu-enable '(term-in-char-mode)) | ||
| 2578 | (put 'term-fake-pager-enable 'menu-enable '(not term-pager-count)) | ||
| 2579 | (put 'term-fake-pager-disable 'menu-enable 'term-pager-count)) | ||
| 2580 | |||
| 2538 | (defun term-pager-help () | 2581 | (defun term-pager-help () |
| 2539 | "Provide help on commands available in a terminal-emulator **MORE** break" | 2582 | "Provide help on commands available in a terminal-emulator **MORE** break" |
| 2540 | (interactive) | 2583 | (interactive) |
| @@ -2567,6 +2610,7 @@ all pending output has been dealt with.")) | |||
| 2567 | (use-local-map term-pager-old-local-map) | 2610 | (use-local-map term-pager-old-local-map) |
| 2568 | (setq term-pager-old-local-map nil) | 2611 | (setq term-pager-old-local-map nil) |
| 2569 | (setq mode-line-format term-old-mode-line-format) | 2612 | (setq mode-line-format term-old-mode-line-format) |
| 2613 | (set-buffer-modified-p (buffer-modified-p)) ;; Updates mode line. | ||
| 2570 | (setq term-pager-count new-count) | 2614 | (setq term-pager-count new-count) |
| 2571 | (set-process-filter process term-pager-old-filter) | 2615 | (set-process-filter process term-pager-old-filter) |
| 2572 | (funcall term-pager-old-filter process "") | 2616 | (funcall term-pager-old-filter process "") |