annotate lisp/terminal.el @ 45079:bf76420e3297

(occur-mode-map): Bind "q" to `delete-window'. (occur-1): If one of the buffers we're searching is the *Occur* buffer itself, handle it by creating a temporary buffer. If any of the buffers being searched are killed, note that in the search result message. Also, set local variables before we possibly kill the buffer.
author Colin Walters <walters@gnu.org>
date Thu, 02 May 2002 21:22:47 +0000
parents 402411174ef9
children 695cf19ef79e d7ddb3e565de
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38412
253f761ad37b Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents: 31168
diff changeset
1 ;;; terminal.el --- terminal emulator for GNU Emacs
657
fec3f9a1e3e5 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 630
diff changeset
2
7300
cc7cd83ccf3f Update copyright.
Karl Heuer <kwzh@gnu.org>
parents: 7077
diff changeset
3 ;; Copyright (C) 1986,87,88,89,93,94 Free Software Foundation, Inc.
840
113281b361ec *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 807
diff changeset
4
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 751
diff changeset
5 ;; Author: Richard Mlynarik <mly@eddie.mit.edu>
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 751
diff changeset
6 ;; Maintainer: FSF
2247
2c7997f249eb Add or correct keywords
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2030
diff changeset
7 ;; Keywords: comm, terminals
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
8
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
10
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 751
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
14 ;; any later version.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
15
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
19 ;; GNU General Public License for more details.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
20
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13954
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13954
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13954
diff changeset
24 ;; Boston, MA 02111-1307, USA.
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
25
14641
4706508583bd Comments censored.
Karl Heuer <kwzh@gnu.org>
parents: 14333
diff changeset
26 ;;; Commentary:
4706508583bd Comments censored.
Karl Heuer <kwzh@gnu.org>
parents: 14333
diff changeset
27
4706508583bd Comments censored.
Karl Heuer <kwzh@gnu.org>
parents: 14333
diff changeset
28 ;;; This file has been censored by the Communications Decency Act.
4706508583bd Comments censored.
Karl Heuer <kwzh@gnu.org>
parents: 14333
diff changeset
29 ;;; That law was passed under the guise of a ban on pornography, but
4706508583bd Comments censored.
Karl Heuer <kwzh@gnu.org>
parents: 14333
diff changeset
30 ;;; it bans far more than that. This file did not contain pornography,
4706508583bd Comments censored.
Karl Heuer <kwzh@gnu.org>
parents: 14333
diff changeset
31 ;;; but it was censored nonetheless.
4706508583bd Comments censored.
Karl Heuer <kwzh@gnu.org>
parents: 14333
diff changeset
32
4706508583bd Comments censored.
Karl Heuer <kwzh@gnu.org>
parents: 14333
diff changeset
33 ;;; For information on US government censorship of the Internet, and
4706508583bd Comments censored.
Karl Heuer <kwzh@gnu.org>
parents: 14333
diff changeset
34 ;;; what you can do to bring back freedom of the press, see the web
4706508583bd Comments censored.
Karl Heuer <kwzh@gnu.org>
parents: 14333
diff changeset
35 ;;; site http://www.vtw.org/
4706508583bd Comments censored.
Karl Heuer <kwzh@gnu.org>
parents: 14333
diff changeset
36
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 751
diff changeset
37 ;;; Code:
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 751
diff changeset
38
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
39 ;;>>TODO
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
40 ;;>> ** Nothing can be done about emacs' meta-lossage **
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
41 ;;>> (without redoing keymaps `sanely' -- ask Mly for details)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
42
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
43 ;;>> One probably wants to do setenv MORE -c when running with
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
44 ;;>> more-processing enabled.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
45
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
46 (require 'ehelp)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
47
17926
8e3ea3086637 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14888
diff changeset
48 (defgroup terminal nil
8e3ea3086637 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14888
diff changeset
49 "Terminal emulator for Emacs."
8e3ea3086637 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14888
diff changeset
50 :group 'terminals)
8e3ea3086637 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14888
diff changeset
51
8e3ea3086637 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14888
diff changeset
52
8e3ea3086637 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14888
diff changeset
53 (defcustom terminal-escape-char ?\C-^
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
54 "*All characters except for this are passed verbatim through the
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
55 terminal-emulator. This character acts as a prefix for commands
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
56 to the emulator program itself. Type this character twice to send
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
57 it through the emulator. Type ? after typing it for a list of
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
58 possible commands.
17926
8e3ea3086637 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14888
diff changeset
59 This variable is local to each terminal-emulator buffer."
8e3ea3086637 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14888
diff changeset
60 :type 'character
8e3ea3086637 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14888
diff changeset
61 :group 'terminal)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
62
42206
0f4506820432 Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents: 38412
diff changeset
63 (defcustom terminal-scrolling t ;;>> Setting this to t sort-of defeats my whole aim in writing this package...
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
64 "*If non-nil, the terminal-emulator will losingly `scroll' when output occurs
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
65 past the bottom of the screen. If nil, output will win and `wrap' to the top
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
66 of the screen.
17926
8e3ea3086637 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14888
diff changeset
67 This variable is local to each terminal-emulator buffer."
8e3ea3086637 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14888
diff changeset
68 :type 'boolean
8e3ea3086637 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14888
diff changeset
69 :group 'terminal)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
70
17926
8e3ea3086637 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14888
diff changeset
71 (defcustom terminal-more-processing t
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
72 "*If non-nil, do more-processing.
17926
8e3ea3086637 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14888
diff changeset
73 This variable is local to each terminal-emulator buffer."
8e3ea3086637 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14888
diff changeset
74 :type 'boolean
8e3ea3086637 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14888
diff changeset
75 :group 'terminal)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
76
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
77 ;; If you are the sort of loser who uses scrolling without more breaks
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
78 ;; and expects to actually see anything, you should probably set this to
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
79 ;; around 400
17926
8e3ea3086637 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14888
diff changeset
80 (defcustom terminal-redisplay-interval 5000
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
81 "*Maximum number of characters which will be processed by the
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
82 terminal-emulator before a screen redisplay is forced.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
83 Set this to a large value for greater throughput,
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
84 set it smaller for more frequent updates but overall slower
17926
8e3ea3086637 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14888
diff changeset
85 performance."
8e3ea3086637 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14888
diff changeset
86 :type 'integer
8e3ea3086637 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14888
diff changeset
87 :group 'terminal)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
88
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
89 (defvar terminal-more-break-insertion
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
90 "*** More break -- Press space to continue ***")
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
91
2748
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
92 (defvar terminal-meta-map nil)
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
93 (if terminal-meta-map
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
94 nil
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
95 (let ((map (make-sparse-keymap)))
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
96 (define-key map [t] 'te-pass-through)
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
97 (setq terminal-meta-map map)))
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
98
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
99 (defvar terminal-map nil)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
100 (if terminal-map
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
101 nil
2748
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
102 (let ((map (make-sparse-keymap)))
43171
b9b20fd684a4 (terminal-map): Define [menu-bar] so global def is seen.
Richard M. Stallman <rms@gnu.org>
parents: 42206
diff changeset
103 ;; Prevent defining [menu-bar] as te-pass-through
b9b20fd684a4 (terminal-map): Define [menu-bar] so global def is seen.
Richard M. Stallman <rms@gnu.org>
parents: 42206
diff changeset
104 ;; so we allow the global menu bar to be visible.
b9b20fd684a4 (terminal-map): Define [menu-bar] so global def is seen.
Richard M. Stallman <rms@gnu.org>
parents: 42206
diff changeset
105 (define-key map [menu-bar] (make-sparse-keymap))
2748
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
106 (define-key map [t] 'te-pass-through)
8852
90a35a24cde1 (terminal-map): Define switch-frame.
Richard M. Stallman <rms@gnu.org>
parents: 7374
diff changeset
107 (define-key map [switch-frame] 'handle-switch-frame)
2748
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
108 (define-key map "\e" terminal-meta-map)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
109 ;(define-key map "\C-l"
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
110 ; '(lambda () (interactive) (te-pass-through) (redraw-display)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
111 (setq terminal-map map)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
112
2587
1cad2ff5ab80 I started to clean this up and make it work under System V, until I hit a wall.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
113 (defvar terminal-escape-map nil)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
114 (if terminal-escape-map
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
115 nil
2748
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
116 (let ((map (make-sparse-keymap)))
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
117 (define-key map [t] 'undefined)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
118 (let ((s "0"))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
119 (while (<= (aref s 0) ?9)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
120 (define-key map s 'digit-argument)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
121 (aset s 0 (1+ (aref s 0)))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
122 (define-key map "b" 'switch-to-buffer)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
123 (define-key map "o" 'other-window)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
124 (define-key map "e" 'te-set-escape-char)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
125 (define-key map "\C-l" 'redraw-display)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
126 (define-key map "\C-o" 'te-flush-pending-output)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
127 (define-key map "m" 'te-toggle-more-processing)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
128 (define-key map "x" 'te-escape-extended-command)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
129 ;;>> What use is this? Why is it in the default terminal-emulator map?
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
130 (define-key map "w" 'te-edit)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
131 (define-key map "?" 'te-escape-help)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
132 (define-key map (char-to-string help-char) 'te-escape-help)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
133 (setq terminal-escape-map map)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
134
2587
1cad2ff5ab80 I started to clean this up and make it work under System V, until I hit a wall.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
135 (defvar te-escape-command-alist nil)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
136 (if te-escape-command-alist
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
137 nil
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
138 (setq te-escape-command-alist
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
139 '(("Set Escape Character" . te-set-escape-char)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
140 ;;>> What use is this? Why is it in the default terminal-emulator map?
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
141 ("Edit" . te-edit)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
142 ("Refresh" . redraw-display)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
143 ("Record Output" . te-set-output-log)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
144 ("Photo" . te-set-output-log)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
145 ("Tofu" . te-tofu) ;; confuse the uninitiated
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
146 ("Stuff Input" . te-stuff-string)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
147 ("Flush Pending Output" . te-flush-pending-output)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
148 ("Enable More Processing" . te-enable-more-processing)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
149 ("Disable More Processing" . te-disable-more-processing)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
150 ("Scroll at end of page" . te-do-scrolling)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
151 ("Wrap at end of page" . te-do-wrapping)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
152 ("Switch To Buffer" . switch-to-buffer)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
153 ("Other Window" . other-window)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
154 ("Kill Buffer" . kill-buffer)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
155 ("Help" . te-escape-help)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
156 ("Set Redisplay Interval" . te-set-redisplay-interval)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
157 )))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
158
2587
1cad2ff5ab80 I started to clean this up and make it work under System V, until I hit a wall.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
159 (defvar terminal-more-break-map nil)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
160 (if terminal-more-break-map
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
161 nil
2748
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
162 (let ((map (make-sparse-keymap)))
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
163 (define-key map [t] 'te-more-break-unread)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
164 (define-key map (char-to-string help-char) 'te-more-break-help)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
165 (define-key map " " 'te-more-break-resume)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
166 (define-key map "\C-l" 'redraw-display)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
167 (define-key map "\C-o" 'te-more-break-flush-pending-output)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
168 ;;>>> this isn't right
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
169 ;(define-key map "\^?" 'te-more-break-flush-pending-output) ;DEL
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
170 (define-key map "\r" 'te-more-break-advance-one-line)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
171
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
172 (setq terminal-more-break-map map)))
13101
32381faf1489 (te-escape): Remove spurious partial duplicate definition.
Noah Friedman <friedman@splode.com>
parents: 13057
diff changeset
173
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
174
2587
1cad2ff5ab80 I started to clean this up and make it work under System V, until I hit a wall.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
175 ;;; Pacify the byte compiler
1cad2ff5ab80 I started to clean this up and make it work under System V, until I hit a wall.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
176 (defvar te-process nil)
1cad2ff5ab80 I started to clean this up and make it work under System V, until I hit a wall.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
177 (defvar te-log-buffer nil)
1cad2ff5ab80 I started to clean this up and make it work under System V, until I hit a wall.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
178 (defvar te-height nil)
1cad2ff5ab80 I started to clean this up and make it work under System V, until I hit a wall.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
179 (defvar te-width nil)
1cad2ff5ab80 I started to clean this up and make it work under System V, until I hit a wall.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
180 (defvar te-more-count nil)
1cad2ff5ab80 I started to clean this up and make it work under System V, until I hit a wall.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
181 (defvar te-redisplay-count nil)
1cad2ff5ab80 I started to clean this up and make it work under System V, until I hit a wall.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
182 (defvar te-pending-output nil)
1cad2ff5ab80 I started to clean this up and make it work under System V, until I hit a wall.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
183 (defvar te-saved-point)
1cad2ff5ab80 I started to clean this up and make it work under System V, until I hit a wall.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
184 (defvar te-more-old-point nil)
1cad2ff5ab80 I started to clean this up and make it work under System V, until I hit a wall.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
185 (defvar te-more-old-local-map nil)
1cad2ff5ab80 I started to clean this up and make it work under System V, until I hit a wall.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
186 (defvar te-more-old-filter nil)
1cad2ff5ab80 I started to clean this up and make it work under System V, until I hit a wall.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
187 (defvar te-more-old-mode-line-format nil)
1cad2ff5ab80 I started to clean this up and make it work under System V, until I hit a wall.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
188 (defvar te-pending-output-info nil)
1cad2ff5ab80 I started to clean this up and make it work under System V, until I hit a wall.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
189
10294
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
190 ;; Required to support terminfo systems
14888
b256ebb2110a (te-terminal-name-prefix): Change from
Richard M. Stallman <rms@gnu.org>
parents: 14641
diff changeset
191 (defconst te-terminal-name-prefix "emacs-em"
b256ebb2110a (te-terminal-name-prefix): Change from
Richard M. Stallman <rms@gnu.org>
parents: 14641
diff changeset
192 "Prefix used for terminal type names for Terminfo.")
25417
28211e20b0e4 (te-terminfo-directory): Use temporary-file-directory.
Richard M. Stallman <rms@gnu.org>
parents: 24253
diff changeset
193 (defconst te-terminfo-directory
28211e20b0e4 (te-terminfo-directory): Use temporary-file-directory.
Richard M. Stallman <rms@gnu.org>
parents: 24253
diff changeset
194 (file-name-as-directory
28211e20b0e4 (te-terminfo-directory): Use temporary-file-directory.
Richard M. Stallman <rms@gnu.org>
parents: 24253
diff changeset
195 (expand-file-name "emacs-terminfo" temporary-file-directory))
14888
b256ebb2110a (te-terminal-name-prefix): Change from
Richard M. Stallman <rms@gnu.org>
parents: 14641
diff changeset
196 "Directory used for run-time terminal definition files for Terminfo.")
10294
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
197 (defvar te-terminal-name nil)
2587
1cad2ff5ab80 I started to clean this up and make it work under System V, until I hit a wall.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2247
diff changeset
198
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
199 ;;;; escape map
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
200
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
201 (defun te-escape ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
202 (interactive)
13101
32381faf1489 (te-escape): Remove spurious partial duplicate definition.
Noah Friedman <friedman@splode.com>
parents: 13057
diff changeset
203 (let (s
13057
5c78211aa9e0 (te-escape, te-escape-help): Handle non-ASCII events.
Karl Heuer <kwzh@gnu.org>
parents: 11569
diff changeset
204 (local (current-local-map))
5c78211aa9e0 (te-escape, te-escape-help): Handle non-ASCII events.
Karl Heuer <kwzh@gnu.org>
parents: 11569
diff changeset
205 (global (current-global-map)))
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
206 (unwind-protect
13057
5c78211aa9e0 (te-escape, te-escape-help): Handle non-ASCII events.
Karl Heuer <kwzh@gnu.org>
parents: 11569
diff changeset
207 (progn
5c78211aa9e0 (te-escape, te-escape-help): Handle non-ASCII events.
Karl Heuer <kwzh@gnu.org>
parents: 11569
diff changeset
208 (use-global-map terminal-escape-map)
5c78211aa9e0 (te-escape, te-escape-help): Handle non-ASCII events.
Karl Heuer <kwzh@gnu.org>
parents: 11569
diff changeset
209 (use-local-map terminal-escape-map)
5c78211aa9e0 (te-escape, te-escape-help): Handle non-ASCII events.
Karl Heuer <kwzh@gnu.org>
parents: 11569
diff changeset
210 (setq s (read-key-sequence
5c78211aa9e0 (te-escape, te-escape-help): Handle non-ASCII events.
Karl Heuer <kwzh@gnu.org>
parents: 11569
diff changeset
211 (if current-prefix-arg
5c78211aa9e0 (te-escape, te-escape-help): Handle non-ASCII events.
Karl Heuer <kwzh@gnu.org>
parents: 11569
diff changeset
212 (format "Emacs Terminal escape> %d "
5c78211aa9e0 (te-escape, te-escape-help): Handle non-ASCII events.
Karl Heuer <kwzh@gnu.org>
parents: 11569
diff changeset
213 (prefix-numeric-value current-prefix-arg))
5c78211aa9e0 (te-escape, te-escape-help): Handle non-ASCII events.
Karl Heuer <kwzh@gnu.org>
parents: 11569
diff changeset
214 "Emacs Terminal escape> "))))
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
215 (use-global-map global)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
216 (use-local-map local))
13057
5c78211aa9e0 (te-escape, te-escape-help): Handle non-ASCII events.
Karl Heuer <kwzh@gnu.org>
parents: 11569
diff changeset
217
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
218 (message "")
13057
5c78211aa9e0 (te-escape, te-escape-help): Handle non-ASCII events.
Karl Heuer <kwzh@gnu.org>
parents: 11569
diff changeset
219
13101
32381faf1489 (te-escape): Remove spurious partial duplicate definition.
Noah Friedman <friedman@splode.com>
parents: 13057
diff changeset
220 (cond
13057
5c78211aa9e0 (te-escape, te-escape-help): Handle non-ASCII events.
Karl Heuer <kwzh@gnu.org>
parents: 11569
diff changeset
221 ;; Certain keys give vector notation, like [escape] when
5c78211aa9e0 (te-escape, te-escape-help): Handle non-ASCII events.
Karl Heuer <kwzh@gnu.org>
parents: 11569
diff changeset
222 ;; you hit esc key...
5c78211aa9e0 (te-escape, te-escape-help): Handle non-ASCII events.
Karl Heuer <kwzh@gnu.org>
parents: 11569
diff changeset
223 ((and (stringp s)
5c78211aa9e0 (te-escape, te-escape-help): Handle non-ASCII events.
Karl Heuer <kwzh@gnu.org>
parents: 11569
diff changeset
224 (string= s (make-string 1 terminal-escape-char)))
5c78211aa9e0 (te-escape, te-escape-help): Handle non-ASCII events.
Karl Heuer <kwzh@gnu.org>
parents: 11569
diff changeset
225 (setq last-command-char terminal-escape-char)
5c78211aa9e0 (te-escape, te-escape-help): Handle non-ASCII events.
Karl Heuer <kwzh@gnu.org>
parents: 11569
diff changeset
226 (let ((terminal-escape-char -259))
5c78211aa9e0 (te-escape, te-escape-help): Handle non-ASCII events.
Karl Heuer <kwzh@gnu.org>
parents: 11569
diff changeset
227 (te-pass-through)))
5c78211aa9e0 (te-escape, te-escape-help): Handle non-ASCII events.
Karl Heuer <kwzh@gnu.org>
parents: 11569
diff changeset
228
5c78211aa9e0 (te-escape, te-escape-help): Handle non-ASCII events.
Karl Heuer <kwzh@gnu.org>
parents: 11569
diff changeset
229 ((setq s (lookup-key terminal-escape-map s))
5c78211aa9e0 (te-escape, te-escape-help): Handle non-ASCII events.
Karl Heuer <kwzh@gnu.org>
parents: 11569
diff changeset
230 (call-interactively s)))
5c78211aa9e0 (te-escape, te-escape-help): Handle non-ASCII events.
Karl Heuer <kwzh@gnu.org>
parents: 11569
diff changeset
231
5c78211aa9e0 (te-escape, te-escape-help): Handle non-ASCII events.
Karl Heuer <kwzh@gnu.org>
parents: 11569
diff changeset
232 ))
5c78211aa9e0 (te-escape, te-escape-help): Handle non-ASCII events.
Karl Heuer <kwzh@gnu.org>
parents: 11569
diff changeset
233
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
234
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
235 (defun te-escape-help ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
236 "Provide help on commands available after terminal-escape-char is typed."
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
237 (interactive)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
238 (message "Terminal emulator escape help...")
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
239 (let ((char (single-key-description terminal-escape-char)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
240 (with-electric-help
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
241 (function (lambda ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
242 (princ (format "Terminal-emulator escape, invoked by \"%s\"
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
243 Type \"%s\" twice to send a single \"%s\" through.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
244
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
245 Other chars following \"%s\" are interpreted as follows:\n"
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
246 char char char char))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
247
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
248 (princ (substitute-command-keys "\\{terminal-escape-map}\n"))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
249 (princ (format "\nSubcommands of \"%s\" (%s)\n"
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
250 (where-is-internal 'te-escape-extended-command
5774
b57901dfbd40 (te-escape-help, te-more-break-help, terminal-emulator):
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
251 terminal-escape-map t)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
252 'te-escape-extended-command))
43171
b9b20fd684a4 (terminal-map): Define [menu-bar] so global def is seen.
Richard M. Stallman <rms@gnu.org>
parents: 42206
diff changeset
253 (let ((l (sort (copy-sequence te-escape-command-alist)
b9b20fd684a4 (terminal-map): Define [menu-bar] so global def is seen.
Richard M. Stallman <rms@gnu.org>
parents: 42206
diff changeset
254 (function (lambda (a b)
b9b20fd684a4 (terminal-map): Define [menu-bar] so global def is seen.
Richard M. Stallman <rms@gnu.org>
parents: 42206
diff changeset
255 (string< (car a) (car b)))))))
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
256 (while l
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
257 (let ((doc (or (documentation (cdr (car l)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
258 "Not documented")))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
259 (if (string-match "\n" doc)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
260 ;; just use first line of documentation
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
261 (setq doc (substring doc 0 (match-beginning 0))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
262 (princ " \"")
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
263 (princ (car (car l)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
264 (princ "\":\n ")
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
265 (princ doc)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
266 (write-char ?\n))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
267 (setq l (cdr l))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
268 nil)))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
269
13101
32381faf1489 (te-escape): Remove spurious partial duplicate definition.
Noah Friedman <friedman@splode.com>
parents: 13057
diff changeset
270
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
271
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
272 (defun te-escape-extended-command ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
273 (interactive)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
274 (let ((c (let ((completion-ignore-case t))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
275 (completing-read "terminal command: "
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
276 te-escape-command-alist
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
277 nil t))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
278 (if c
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
279 (catch 'foo
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
280 (setq c (downcase c))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
281 (let ((l te-escape-command-alist))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
282 (while l
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
283 (if (string= c (downcase (car (car l))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
284 (throw 'foo (call-interactively (cdr (car l))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
285 (setq l (cdr l)))))))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
286
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
287 ;; not used.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
288 (defun te-escape-extended-command-unread ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
289 (interactive)
2030
ffe1f05d5727 (te-escape-extended-command-unread): Handle any key sequence.
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
290 (setq unread-command-events (listify-key-sequence (this-command-keys)))
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
291 (te-escape-extended-command))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
292
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
293 (defun te-set-escape-char (c)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
294 "Change the terminal-emulator escape character."
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
295 (interactive "cSet escape character to: ")
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
296 (let ((o terminal-escape-char))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
297 (message (if (= o c)
751
db46eb163798 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 657
diff changeset
298 "\"%s\" is the escape char"
db46eb163798 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 657
diff changeset
299 "\"%s\" is now the escape; \"%s\" passes through")
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
300 (single-key-description c)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
301 (single-key-description o))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
302 (setq terminal-escape-char c)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
303
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
304
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
305 (defun te-stuff-string (string)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
306 "Read a string to send to through the terminal emulator
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
307 as though that string had been typed on the keyboard.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
308
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
309 Very poor man's file transfer protocol."
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
310 (interactive "sStuff string: ")
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
311 (process-send-string te-process string))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
312
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
313 (defun te-set-output-log (name)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
314 "Record output from the terminal emulator in a buffer."
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
315 (interactive (list (if te-log-buffer
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
316 nil
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
317 (read-buffer "Record output in buffer: "
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
318 (format "%s output-log"
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
319 (buffer-name (current-buffer)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
320 nil))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
321 (if (or (null name) (equal name ""))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
322 (progn (setq te-log-buffer nil)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
323 (message "Output logging off."))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
324 (if (get-buffer name)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
325 nil
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
326 (save-excursion
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
327 (set-buffer (get-buffer-create name))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
328 (fundamental-mode)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
329 (buffer-disable-undo (current-buffer))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
330 (erase-buffer)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
331 (setq te-log-buffer (get-buffer name))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
332 (message "Recording terminal emulator output into buffer \"%s\""
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
333 (buffer-name te-log-buffer))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
334
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
335 (defun te-tofu ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
336 "Discontinue output log."
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
337 (interactive)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
338 (te-set-output-log nil))
13101
32381faf1489 (te-escape): Remove spurious partial duplicate definition.
Noah Friedman <friedman@splode.com>
parents: 13057
diff changeset
339
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
340
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
341 (defun te-toggle (sym arg)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
342 (set sym (cond ((not (numberp arg)) arg)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
343 ((= arg 1) (not (symbol-value sym)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
344 ((< arg 0) nil)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
345 (t t))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
346
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
347 (defun te-toggle-more-processing (arg)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
348 (interactive "p")
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
349 (message (if (te-toggle 'terminal-more-processing arg)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
350 "More processing on" "More processing off"))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
351 (if terminal-more-processing (setq te-more-count -1)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
352
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
353 (defun te-toggle-scrolling (arg)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
354 (interactive "p")
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
355 (message (if (te-toggle 'terminal-scrolling arg)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
356 "Scroll at end of page" "Wrap at end of page")))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
357
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
358 (defun te-enable-more-processing ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
359 "Enable ** MORE ** processing"
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
360 (interactive)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
361 (te-toggle-more-processing t))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
362
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
363 (defun te-disable-more-processing ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
364 "Disable ** MORE ** processing"
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
365 (interactive)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
366 (te-toggle-more-processing nil))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
367
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
368 (defun te-do-scrolling ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
369 "Scroll at end of page (yuck)"
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
370 (interactive)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
371 (te-toggle-scrolling t))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
372
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
373 (defun te-do-wrapping ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
374 "Wrap to top of window at end of page"
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
375 (interactive)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
376 (te-toggle-scrolling nil))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
377
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
378
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
379 (defun te-set-redisplay-interval (arg)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
380 "Set the maximum interval (in output characters) between screen updates.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
381 Set this number to large value for greater throughput,
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
382 set it smaller for more frequent updates (but overall slower performance."
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
383 (interactive "NMax number of output chars between redisplay updates: ")
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
384 (setq arg (max arg 1))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
385 (setq terminal-redisplay-interval arg
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
386 te-redisplay-count 0))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
387
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
388 ;;;; more map
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
389
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
390 ;; every command -must- call te-more-break-unwind
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
391 ;; or grave lossage will result
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
392
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
393 (put 'te-more-break-unread 'suppress-keymap t)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
394 (defun te-more-break-unread ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
395 (interactive)
2748
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
396 (if (eq last-input-char terminal-escape-char)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
397 (call-interactively 'te-escape)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
398 (message "Continuing from more break (\"%s\" typed, %d chars output pending...)"
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
399 (single-key-description last-input-char)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
400 (te-pending-output-length))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
401 (setq te-more-count 259259)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
402 (te-more-break-unwind)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
403 (let ((terminal-more-processing nil))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
404 (te-pass-through))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
405
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
406 (defun te-more-break-resume ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
407 "Proceed past the **MORE** break,
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
408 allowing the next page of output to appear"
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
409 (interactive)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
410 (message "Continuing from more break")
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
411 (te-more-break-unwind))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
412
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
413 (defun te-more-break-help ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
414 "Provide help on commands available in a terminal-emulator **MORE** break"
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
415 (interactive)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
416 (message "Terminal-emulator more break help...")
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
417 (sit-for 0)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
418 (with-electric-help
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
419 (function (lambda ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
420 (princ "Terminal-emulator more break.\n\n")
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
421 (princ (format "Type \"%s\" (te-more-break-resume)\n%s\n"
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
422 (where-is-internal 'te-more-break-resume
5774
b57901dfbd40 (te-escape-help, te-more-break-help, terminal-emulator):
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
423 terminal-more-break-map t)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
424 (documentation 'te-more-break-resume)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
425 (princ (substitute-command-keys "\\{terminal-more-break-map}\n"))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
426 (princ "Any other key is passed through to the program
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
427 running under the terminal emulator and disables more processing until
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
428 all pending output has been dealt with.")
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
429 nil))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
430
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
431
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
432 (defun te-more-break-advance-one-line ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
433 "Allow one more line of text to be output before doing another more break."
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
434 (interactive)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
435 (setq te-more-count 1)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
436 (te-more-break-unwind))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
437
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
438 (defun te-more-break-flush-pending-output ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
439 "Discard any output which has been received by the terminal emulator but
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3387
diff changeset
440 not yet processed and then proceed from the more break."
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
441 (interactive)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
442 (te-more-break-unwind)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
443 (te-flush-pending-output))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
444
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
445 (defun te-flush-pending-output ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
446 "Discard any as-yet-unprocessed output which has been received by
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
447 the terminal emulator."
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
448 (interactive)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
449 ;; this could conceivably be confusing in the presence of
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
450 ;; escape-sequences spanning process-output chunks
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
451 (if (null (cdr te-pending-output))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
452 (message "(There is no output pending)")
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
453 (let ((length (te-pending-output-length)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
454 (message "Flushing %d chars of pending output" length)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
455 (setq te-pending-output
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
456 (list 0 (format "\n*** %d chars of pending output flushed ***\n"
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
457 length)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
458 (te-update-pending-output-display)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
459 (te-process-output nil)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
460 (sit-for 0))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
461
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
462
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
463 (defun te-pass-through ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
464 "Character is passed to the program running under the terminal emulator.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
465 One characters is treated specially:
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
466 the terminal escape character (normally C-^)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
467 lets you type a terminal emulator command."
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
468 (interactive)
2748
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
469 (cond ((eq last-input-char terminal-escape-char)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
470 (call-interactively 'te-escape))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
471 (t
13101
32381faf1489 (te-escape): Remove spurious partial duplicate definition.
Noah Friedman <friedman@splode.com>
parents: 13057
diff changeset
472 ;; Convert `return' to C-m, etc.
2748
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
473 (if (and (symbolp last-input-char)
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
474 (get last-input-char 'ascii-character))
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
475 (setq last-input-char (get last-input-char 'ascii-character)))
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
476 ;; Convert meta characters to 8-bit form for transmission.
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
477 (if (and (integerp last-input-char)
10694
75792481da0c (te-pass-through): Don't presume internal bit layout of non-ASCII keys.
Karl Heuer <kwzh@gnu.org>
parents: 10354
diff changeset
478 (not (zerop (logand last-input-char ?\M-\^@))))
2748
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
479 (setq last-input-char (+ 128 (logand last-input-char 127))))
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
480 ;; Now ignore all but actual characters.
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
481 ;; (It ought to be possible to send through function
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
482 ;; keys as character sequences if we add a description
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
483 ;; to our termcap entry of what they should look like.)
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
484 (if (integerp last-input-char)
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
485 (progn
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
486 (and terminal-more-processing (null (cdr te-pending-output))
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
487 (te-set-more-count nil))
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
488 (send-string te-process (make-string 1 last-input-char))
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
489 (te-process-output t))
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
490 (message "Function key `%s' ignored"
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
491 (single-key-description last-input-char))))))
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
492
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
493
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
494 (defun te-set-window-start ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
495 (let* ((w (get-buffer-window (current-buffer)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
496 (h (if w (window-height w))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
497 (cond ((not w)) ; buffer not displayed
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
498 ((>= h (/ (- (point) (point-min)) (1+ te-width)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
499 ;; this is the normal case
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
500 (set-window-start w (point-min)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
501 ;; this happens if some vandal shrinks our window.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
502 ((>= h (/ (- (point-max) (point)) (1+ te-width)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
503 (set-window-start w (- (point-max) (* h (1+ te-width)) -1)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
504 ;; I give up.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
505 (t nil))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
506
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
507 (defun te-pending-output-length ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
508 (let ((length (car te-pending-output))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
509 (tem (cdr te-pending-output)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
510 (while tem
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
511 (setq length (+ length (length (car tem))) tem (cdr tem)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
512 length))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
513
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
514 ;;>> What use is this terminal-edit stuff anyway?
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
515 ;;>> If nothing else, it was written by somebody who didn't
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
516 ;;>> competently understand the terminal-emulator...
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
517
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
518 (defvar terminal-edit-map nil)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
519 (if terminal-edit-map
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
520 nil
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
521 (setq terminal-edit-map (make-sparse-keymap))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
522 (define-key terminal-edit-map "\C-c\C-c" 'terminal-cease-edit))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
523
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
524 ;; Terminal Edit mode is suitable only for specially formatted data.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
525 (put 'terminal-edit-mode 'mode-class 'special)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
526
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
527 (defun terminal-edit-mode ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
528 "Major mode for editing the contents of a terminal-emulator buffer.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
529 The editing commands are the same as in Fundamental mode,
7374
e3cca19763ae (terminal-edit-mode): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 7300
diff changeset
530 together with a command \\<terminal-edit-map>to return to terminal emulation: \\[terminal-cease-edit]."
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
531 (use-local-map terminal-edit-map)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
532 (setq major-mode 'terminal-edit-mode)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
533 (setq mode-name "Terminal Edit")
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
534 (setq mode-line-modified (default-value 'mode-line-modified))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
535 (setq mode-line-process nil)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
536 (run-hooks 'terminal-edit-mode-hook))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
537
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
538 (defun te-edit ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
539 "Start editing the terminal emulator buffer with ordinary Emacs commands."
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
540 (interactive)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
541 (terminal-edit-mode)
11569
a2b107c4f2f1 (te-edit, te-more-break-unwind): Use force-mode-line-update.
Karl Heuer <kwzh@gnu.org>
parents: 10848
diff changeset
542 (force-mode-line-update)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
543 ;; Make mode line update.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
544 (if (eq (key-binding "\C-c\C-c") 'terminal-cease-edit)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
545 (message "Editing: Type C-c C-c to return to Terminal")
14333
b14697aa6929 (te-edit): Pass proper format string to message.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
546 (message "%s"
b14697aa6929 (te-edit): Pass proper format string to message.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
547 (substitute-command-keys
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
548 "Editing: Type \\[terminal-cease-edit] to return to Terminal"))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
549
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
550 (defun terminal-cease-edit ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
551 "Finish editing message; switch back to Terminal proper."
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
552 (interactive)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
553
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
554 ;;>> emulator will blow out if buffer isn't exactly te-width x te-height
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
555 (let ((buffer-read-only nil))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
556 (widen)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
557 (let ((opoint (point-marker))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
558 (width te-width)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
559 (h (1- te-height)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
560 (goto-char (point-min))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
561 (while (>= h 0)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
562 (let ((p (point)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
563 (cond ((search-forward "\n" (+ p width) 'move)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
564 (forward-char -1)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
565 (insert-char ?\ (- width (- (point) p)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
566 (forward-char 1))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
567 ((eobp)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
568 (insert-char ?\ (- width (- (point) p))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
569 ((= (following-char) ?\n)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
570 (forward-char 1))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
571 (t
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
572 (setq p (point))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
573 (if (search-forward "\n" nil t)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
574 (delete-region p (1- (point)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
575 (delete-region p (point-max))))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
576 (if (= h 0)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
577 (if (not (eobp)) (delete-region (point) (point-max)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
578 (if (eobp) (insert ?\n)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
579 (setq h (1- h)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
580 (goto-char opoint)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
581 (set-marker opoint nil nil)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
582 (setq te-saved-point (point))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
583 (setq te-redisplay-count 0)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
584 (setq te-more-count -1)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
585
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
586 (setq mode-line-modified (default-value 'mode-line-modified))
7374
e3cca19763ae (terminal-edit-mode): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 7300
diff changeset
587 (use-local-map terminal-map)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
588 (setq major-mode 'terminal-mode)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
589 (setq mode-name "terminal")
7077
4c0af7fbb42e (terminal-cease-edit, terminal-mode):
Richard M. Stallman <rms@gnu.org>
parents: 6423
diff changeset
590 (setq mode-line-process '(":%s")))
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
591
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
592 ;;;; more break hair
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
593
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
594 (defun te-more-break ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
595 (te-set-more-count t)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
596 (make-local-variable 'te-more-old-point)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
597 (setq te-more-old-point (point))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
598 (make-local-variable 'te-more-old-local-map)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
599 (setq te-more-old-local-map (current-local-map))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
600 (use-local-map terminal-more-break-map)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
601 (make-local-variable 'te-more-old-filter)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
602 (setq te-more-old-filter (process-filter te-process))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
603 (make-local-variable 'te-more-old-mode-line-format)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
604 (setq te-more-old-mode-line-format mode-line-format
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
605 mode-line-format (list "-- **MORE** "
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
606 mode-line-buffer-identification
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
607 "%-"))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
608 (set-process-filter te-process
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
609 (function (lambda (process string)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
610 (save-excursion
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
611 (set-buffer (process-buffer process))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
612 (setq te-pending-output (nconc te-pending-output
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
613 (list string))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
614 (te-update-pending-output-display))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
615 (te-update-pending-output-display)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
616 (if (eq (window-buffer (selected-window)) (current-buffer))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
617 (message "More break "))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
618 (or (eobp)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
619 (null terminal-more-break-insertion)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
620 (save-excursion
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
621 (forward-char 1)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
622 (delete-region (point) (+ (point) te-width))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
623 (insert terminal-more-break-insertion)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
624 (run-hooks 'terminal-more-break-hook)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
625 (sit-for 0) ;get display to update
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
626 (throw 'te-process-output t))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
627
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
628 (defun te-more-break-unwind ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
629 (use-local-map te-more-old-local-map)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
630 (set-process-filter te-process te-more-old-filter)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
631 (goto-char te-more-old-point)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
632 (setq mode-line-format te-more-old-mode-line-format)
11569
a2b107c4f2f1 (te-edit, te-more-break-unwind): Use force-mode-line-update.
Karl Heuer <kwzh@gnu.org>
parents: 10848
diff changeset
633 (force-mode-line-update)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
634 (let ((buffer-read-only nil))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
635 (cond ((eobp))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
636 (terminal-more-break-insertion
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
637 (forward-char 1)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
638 (delete-region (point)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
639 (+ (point) (length terminal-more-break-insertion)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
640 (insert-char ?\ te-width)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
641 (goto-char te-more-old-point)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
642 (setq te-more-old-point nil)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
643 (let ((te-more-count 259259))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
644 (te-newline)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
645 ;(sit-for 0)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
646 (te-process-output t))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
647
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
648 (defun te-set-more-count (newline)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
649 (let ((line (/ (- (point) (point-min)) (1+ te-width))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
650 (if newline (setq line (1+ line)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
651 (cond ((= line te-height)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
652 (setq te-more-count te-height))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
653 ;>>>> something is strange. Investigate this!
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
654 ((= line (1- te-height))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
655 (setq te-more-count te-height))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
656 ((or (< line (/ te-height 2))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
657 (> (- te-height line) 10))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
658 ;; break at end of this page
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
659 (setq te-more-count (- te-height line)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
660 (t
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
661 ;; migrate back towards top (ie bottom) of screen.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
662 (setq te-more-count (- te-height
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
663 (if (> te-height 10) 2 1)))))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
664
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
665
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
666 ;;;; More or less straight-forward terminal escapes
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
667
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
668 ;; ^j, meaning `newline' to non-display programs.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
669 ;; (Who would think of ever writing a system which doesn't understand
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
670 ;; display terminals natively? Un*x: The Operating System of the Future.)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
671 (defun te-newline ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
672 "Move down a line, optionally do more processing, perhaps wrap/scroll,
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
673 move to start of new line, clear to end of line."
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
674 (end-of-line)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
675 (cond ((not terminal-more-processing))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
676 ((< (setq te-more-count (1- te-more-count)) 0)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
677 (te-set-more-count t))
18932
aff82880eaf1 (te-newline): Change eql to eq.
Richard M. Stallman <rms@gnu.org>
parents: 17926
diff changeset
678 ((eq te-more-count 0)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
679 ;; this doesn't return
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
680 (te-more-break)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
681 (if (eobp)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
682 (progn
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
683 (delete-region (point-min) (+ (point-min) te-width))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
684 (goto-char (point-min))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
685 (if terminal-scrolling
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
686 (progn (delete-char 1)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
687 (goto-char (point-max))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
688 (insert ?\n))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
689 (forward-char 1)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
690 (delete-region (point) (+ (point) te-width)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
691 (insert-char ?\ te-width)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
692 (beginning-of-line)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
693 (te-set-window-start))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
694
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
695 ; ^p = x+32 y+32
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
696 (defun te-move-to-position ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
697 ;; must offset by #o40 since cretinous unix won't send a 004 char through
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
698 (let ((y (- (te-get-char) 32))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
699 (x (- (te-get-char) 32)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
700 (if (or (> x te-width)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
701 (> y te-height))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
702 ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
703 (goto-char (+ (point-min) x (* y (1+ te-width))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
704 ;(te-set-window-start?)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
705 ))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
706 (setq te-more-count -1))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
707
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
708
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
709
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
710 ;; ^p c
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
711 (defun te-clear-rest-of-line ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
712 (save-excursion
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
713 (let ((n (- (point) (progn (end-of-line) (point)))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
714 (delete-region (point) (+ (point) n))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
715 (insert-char ?\ (- n)))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
716
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
717
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
718 ;; ^p C
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
719 (defun te-clear-rest-of-screen ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
720 (save-excursion
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
721 (te-clear-rest-of-line)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
722 (while (progn (end-of-line) (not (eobp)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
723 (forward-char 1) (end-of-line)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
724 (delete-region (- (point) te-width) (point))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
725 (insert-char ?\ te-width))))
13101
32381faf1489 (te-escape): Remove spurious partial duplicate definition.
Noah Friedman <friedman@splode.com>
parents: 13057
diff changeset
726
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
727
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
728 ;; ^p ^l
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
729 (defun te-clear-screen ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
730 ;; regenerate buffer to compensate for (nonexistent!!) bugs.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
731 (erase-buffer)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
732 (let ((i 0))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
733 (while (< i te-height)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
734 (setq i (1+ i))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
735 (insert-char ?\ te-width)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
736 (insert ?\n)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
737 (delete-region (1- (point-max)) (point-max))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
738 (goto-char (point-min))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
739 (setq te-more-count -1))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
740
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
741
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
742 ;; ^p ^o count+32
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
743 (defun te-insert-lines ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
744 (if (not (bolp))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
745 ();(error "fooI")
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
746 (save-excursion
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
747 (let* ((line (- te-height (/ (- (point) (point-min)) (1+ te-width)) -1))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
748 (n (min (- (te-get-char) ?\ ) line))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
749 (i 0))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
750 (delete-region (- (point-max) (* n (1+ te-width))) (point-max))
18932
aff82880eaf1 (te-newline): Change eql to eq.
Richard M. Stallman <rms@gnu.org>
parents: 17926
diff changeset
751 (if (eq (point) (point-max)) (insert ?\n))
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
752 (while (< i n)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
753 (setq i (1+ i))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
754 (insert-char ?\ te-width)
18932
aff82880eaf1 (te-newline): Change eql to eq.
Richard M. Stallman <rms@gnu.org>
parents: 17926
diff changeset
755 (or (eq i line) (insert ?\n))))))
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
756 (setq te-more-count -1))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
757
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
758
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
759 ;; ^p ^k count+32
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
760 (defun te-delete-lines ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
761 (if (not (bolp))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
762 ();(error "fooD")
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
763 (let* ((line (- te-height (/ (- (point) (point-min)) (1+ te-width)) -1))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
764 (n (min (- (te-get-char) ?\ ) line))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
765 (i 0))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
766 (delete-region (point)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
767 (min (+ (point) (* n (1+ te-width))) (point-max)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
768 (save-excursion
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
769 (goto-char (point-max))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
770 (while (< i n)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
771 (setq i (1+ i))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
772 (insert-char ?\ te-width)
18932
aff82880eaf1 (te-newline): Change eql to eq.
Richard M. Stallman <rms@gnu.org>
parents: 17926
diff changeset
773 (or (eq i line) (insert ?\n))))))
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
774 (setq te-more-count -1))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
775
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
776 ;; ^p ^a
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
777 (defun te-beginning-of-line ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
778 (beginning-of-line))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
779
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
780 ;; ^p ^b
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
781 (defun te-backward-char ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
782 (if (not (bolp))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
783 (backward-char 1)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
784
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
785 ;; ^p ^f
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
786 (defun te-forward-char ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
787 (if (not (eolp))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
788 (forward-char 1)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
789
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
790
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
791 ;; 0177
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
792 (defun te-delete ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
793 (if (bolp)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
794 ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
795 (delete-region (1- (point)) (point))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
796 (insert ?\ )
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
797 (forward-char -1)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
798
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
799 ;; ^p ^g
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
800 (defun te-beep ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
801 (beep))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
802
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
803
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
804 ;; ^p _ count+32
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
805 (defun te-insert-spaces ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
806 (let* ((p (point))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
807 (n (min (- (te-get-char) 32)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
808 (- (progn (end-of-line) (point)) p))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
809 (if (<= n 0)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
810 nil
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
811 (delete-char (- n))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
812 (goto-char p)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
813 (insert-char ?\ n))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
814 (goto-char p)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
815
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
816 ;; ^p d count+32 (should be ^p ^d but cretinous un*x won't send ^d chars!!!)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
817 (defun te-delete-char ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
818 (let* ((p (point))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
819 (n (min (- (te-get-char) 32)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
820 (- (progn (end-of-line) (point)) p))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
821 (if (<= n 0)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
822 nil
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
823 (insert-char ?\ n)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
824 (goto-char p)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
825 (delete-char n))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
826 (goto-char p)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
827
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
828
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
829
14641
4706508583bd Comments censored.
Karl Heuer <kwzh@gnu.org>
parents: 14333
diff changeset
830 ;; disgusting unix-required excrement
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
831 ;; Are we living twenty years in the past yet?
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
832
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
833 (defun te-losing-unix ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
834 nil)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
835
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
836 ;; ^i
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
837 (defun te-output-tab ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
838 (let* ((p (point))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
839 (x (- p (progn (beginning-of-line) (point))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
840 (l (min (- 8 (logand x 7))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
841 (progn (end-of-line) (- (point) p)))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
842 (goto-char (+ p l))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
843
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
844 ;; ^p ^j
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
845 ;; Handle the `do' or `nl' termcap capability.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
846 ;;>> I am not sure why this broken, obsolete, capability is here.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
847 ;;>> Perhaps it is for VIle. No comment was made about why it
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
848 ;;>> was added (in "Sun Dec 6 01:22:27 1987 Richard Stallman")
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
849 (defun te-down-vertically-or-scroll ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
850 "Move down a line vertically, or scroll at bottom."
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
851 (let ((column (current-column)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
852 (end-of-line)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
853 (if (eobp)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
854 (progn
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
855 (delete-region (point-min) (+ (point-min) te-width))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
856 (goto-char (point-min))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
857 (delete-char 1)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
858 (goto-char (point-max))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
859 (insert ?\n)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
860 (insert-char ?\ te-width)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
861 (beginning-of-line))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
862 (forward-line 1))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
863 (move-to-column column))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
864 (te-set-window-start))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
865
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
866 ;; Also:
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
867 ;; ^m => beginning-of-line (for which it -should- be using ^p ^a, right?!!)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
868 ;; ^g => te-beep (for which it should use ^p ^g)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
869 ;; ^h => te-backward-char (for which it should use ^p ^b)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
870
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
871
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
872
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
873 (defun te-filter (process string)
2748
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
874 (let* ((obuf (current-buffer)))
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
875 ;; can't use save-excursion, as that preserves point, which we don't want
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
876 (unwind-protect
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
877 (progn
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
878 (set-buffer (process-buffer process))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
879 (goto-char te-saved-point)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
880 (and (bufferp te-log-buffer)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
881 (if (null (buffer-name te-log-buffer))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
882 ;; killed
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
883 (setq te-log-buffer nil)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
884 (set-buffer te-log-buffer)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
885 (goto-char (point-max))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
886 (insert-before-markers string)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
887 (set-buffer (process-buffer process))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
888 (setq te-pending-output (nconc te-pending-output (list string)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
889 (te-update-pending-output-display)
2748
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
890 (te-process-output (eq (current-buffer)
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
891 (window-buffer (selected-window))))
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
892 (set-buffer (process-buffer process))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
893 (setq te-saved-point (point)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
894 (set-buffer obuf))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
895
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
896 ;; (A version of the following comment which might be distractingly offensive
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
897 ;; to some readers has been moved to term-nasty.el.)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
898 ;; unix lacks ITS-style tty control...
13954
8fd57aba5a76 (te-process-output): Fix local var misspelling.
Karl Heuer <kwzh@gnu.org>
parents: 13101
diff changeset
899 (defun te-process-output (preemptible)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
900 ;;>> There seems no good reason to ever disallow preemption
13954
8fd57aba5a76 (te-process-output): Fix local var misspelling.
Karl Heuer <kwzh@gnu.org>
parents: 13101
diff changeset
901 (setq preemptible t)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
902 (catch 'te-process-output
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
903 (let ((buffer-read-only nil)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
904 (string nil) ostring start char (matchpos nil))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
905 (while (cdr te-pending-output)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
906 (setq ostring string
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
907 start (car te-pending-output)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
908 string (car (cdr te-pending-output))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
909 char (aref string start))
18932
aff82880eaf1 (te-newline): Change eql to eq.
Richard M. Stallman <rms@gnu.org>
parents: 17926
diff changeset
910 (if (eq (setq start (1+ start)) (length string))
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
911 (progn (setq te-pending-output
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
912 (cons 0 (cdr (cdr te-pending-output)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
913 start 0
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
914 string (car (cdr te-pending-output)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
915 (te-update-pending-output-display))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
916 (setcar te-pending-output start))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
917 (if (and (> char ?\037) (< char ?\377))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
918 (cond ((eolp)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
919 ;; unread char
18932
aff82880eaf1 (te-newline): Change eql to eq.
Richard M. Stallman <rms@gnu.org>
parents: 17926
diff changeset
920 (if (eq start 0)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
921 (setq te-pending-output
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
922 (cons 0 (cons (make-string 1 char)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
923 (cdr te-pending-output))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
924 (setcar te-pending-output (1- start)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
925 (te-newline))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
926 ((null string)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
927 (delete-char 1) (insert char)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
928 (te-redisplay-if-necessary 1))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
929 (t
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
930 (let ((end (or (and (eq ostring string) matchpos)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
931 (setq matchpos (string-match
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
932 "[\000-\037\177-\377]"
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
933 string start))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
934 (length string))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
935 (delete-char 1) (insert char)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
936 (setq char (point)) (end-of-line)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
937 (setq end (min end (+ start (- (point) char))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
938 (goto-char char)
18932
aff82880eaf1 (te-newline): Change eql to eq.
Richard M. Stallman <rms@gnu.org>
parents: 17926
diff changeset
939 (if (eq end matchpos) (setq matchpos nil))
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
940 (delete-region (point) (+ (point) (- end start)))
18932
aff82880eaf1 (te-newline): Change eql to eq.
Richard M. Stallman <rms@gnu.org>
parents: 17926
diff changeset
941 (insert (if (and (eq start 0)
aff82880eaf1 (te-newline): Change eql to eq.
Richard M. Stallman <rms@gnu.org>
parents: 17926
diff changeset
942 (eq end (length string)))
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
943 string
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
944 (substring string start end)))
18932
aff82880eaf1 (te-newline): Change eql to eq.
Richard M. Stallman <rms@gnu.org>
parents: 17926
diff changeset
945 (if (eq end (length string))
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
946 (setq te-pending-output
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
947 (cons 0 (cdr (cdr te-pending-output))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
948 (setcar te-pending-output end))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
949 (te-redisplay-if-necessary (1+ (- end start))))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
950 ;; I suppose if I split the guts of this out into a separate
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
951 ;; function we could trivially emulate different terminals
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
952 ;; Who cares in any case? (Apart from stupid losers using rlogin)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
953 (funcall
18932
aff82880eaf1 (te-newline): Change eql to eq.
Richard M. Stallman <rms@gnu.org>
parents: 17926
diff changeset
954 (if (eq char ?\^p)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
955 (or (cdr (assq (te-get-char)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
956 '((?= . te-move-to-position)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
957 (?c . te-clear-rest-of-line)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
958 (?C . te-clear-rest-of-screen)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
959 (?\C-o . te-insert-lines)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
960 (?\C-k . te-delete-lines)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
961 ;; not necessary, but help sometimes.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
962 (?\C-a . te-beginning-of-line)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
963 (?\C-b . te-backward-char)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
964 ;; should be C-d, but un*x
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
965 ;; pty's won't send \004 through!
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
966 ;; Can you believe this?
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
967 (?d . te-delete-char)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
968 (?_ . te-insert-spaces)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
969 ;; random
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
970 (?\C-f . te-forward-char)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
971 (?\C-g . te-beep)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
972 (?\C-j . te-down-vertically-or-scroll)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
973 (?\C-l . te-clear-screen)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
974 )))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
975 'te-losing-unix)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
976 (or (cdr (assq char
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
977 '((?\C-j . te-newline)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
978 (?\177 . te-delete)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
979 ;; Did I ask to be sent these characters?
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
980 ;; I don't remember doing so, either.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
981 ;; (Perhaps some operating system or
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
982 ;; other is completely incompetent...)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
983 (?\C-m . te-beginning-of-line)
13101
32381faf1489 (te-escape): Remove spurious partial duplicate definition.
Noah Friedman <friedman@splode.com>
parents: 13057
diff changeset
984 (?\C-g . te-beep)
32381faf1489 (te-escape): Remove spurious partial duplicate definition.
Noah Friedman <friedman@splode.com>
parents: 13057
diff changeset
985 (?\C-h . te-backward-char)
32381faf1489 (te-escape): Remove spurious partial duplicate definition.
Noah Friedman <friedman@splode.com>
parents: 13057
diff changeset
986 (?\C-i . te-output-tab))))
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
987 'te-losing-unix)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
988 (te-redisplay-if-necessary 1))
13954
8fd57aba5a76 (te-process-output): Fix local var misspelling.
Karl Heuer <kwzh@gnu.org>
parents: 13101
diff changeset
989 (and preemptible
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
990 (input-pending-p)
13954
8fd57aba5a76 (te-process-output): Fix local var misspelling.
Karl Heuer <kwzh@gnu.org>
parents: 13101
diff changeset
991 ;; preemptible output! Oh my!!
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
992 (throw 'te-process-output t)))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
993 ;; We must update window-point in every window displaying our buffer
30003
29a64f84d736 (te-process-output): Use walk-windows instead of
Gerd Moellmann <gerd@gnu.org>
parents: 25417
diff changeset
994 (walk-windows (lambda (w)
29a64f84d736 (te-process-output): Use walk-windows instead of
Gerd Moellmann <gerd@gnu.org>
parents: 25417
diff changeset
995 (when (and (not (eq w (selected-window)))
29a64f84d736 (te-process-output): Use walk-windows instead of
Gerd Moellmann <gerd@gnu.org>
parents: 25417
diff changeset
996 (eq (window-buffer w) (current-buffer)))
29a64f84d736 (te-process-output): Use walk-windows instead of
Gerd Moellmann <gerd@gnu.org>
parents: 25417
diff changeset
997 (set-window-point w (point))))))
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
998
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
999 (defun te-get-char ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1000 (if (cdr te-pending-output)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1001 (let ((start (car te-pending-output))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1002 (string (car (cdr te-pending-output))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1003 (prog1 (aref string start)
18932
aff82880eaf1 (te-newline): Change eql to eq.
Richard M. Stallman <rms@gnu.org>
parents: 17926
diff changeset
1004 (if (eq (setq start (1+ start)) (length string))
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1005 (setq te-pending-output (cons 0 (cdr (cdr te-pending-output))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1006 (setcar te-pending-output start))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1007 (catch 'char
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1008 (let ((filter (process-filter te-process)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1009 (unwind-protect
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1010 (progn
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1011 (set-process-filter te-process
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1012 (function (lambda (p s)
18932
aff82880eaf1 (te-newline): Change eql to eq.
Richard M. Stallman <rms@gnu.org>
parents: 17926
diff changeset
1013 (or (eq (length s) 1)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1014 (setq te-pending-output (list 1 s)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1015 (throw 'char (aref s 0)))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1016 (accept-process-output te-process))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1017 (set-process-filter te-process filter))))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1018
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1019
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1020 (defun te-redisplay-if-necessary (length)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1021 (and (<= (setq te-redisplay-count (- te-redisplay-count length)) 0)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1022 (eq (current-buffer) (window-buffer (selected-window)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1023 (waiting-for-user-input-p)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1024 (progn (te-update-pending-output-display)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1025 (sit-for 0)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1026 (setq te-redisplay-count terminal-redisplay-interval))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1027
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1028 (defun te-update-pending-output-display ()
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1029 (if (null (cdr te-pending-output))
13101
32381faf1489 (te-escape): Remove spurious partial duplicate definition.
Noah Friedman <friedman@splode.com>
parents: 13057
diff changeset
1030 (setq te-pending-output-info "")
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1031 (let ((length (te-pending-output-length)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1032 (if (< length 1500)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1033 (setq te-pending-output-info "")
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1034 (setq te-pending-output-info (format "(%dK chars output pending) "
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1035 (/ (+ length 512) 1024))))))
11569
a2b107c4f2f1 (te-edit, te-more-break-unwind): Use force-mode-line-update.
Karl Heuer <kwzh@gnu.org>
parents: 10848
diff changeset
1036 (force-mode-line-update))
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1037
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1038
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1039 (defun te-sentinel (process message)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1040 (cond ((eq (process-status process) 'run))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1041 ((null (buffer-name (process-buffer process)))) ;deleted
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1042 (t (let ((b (current-buffer)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1043 (save-excursion
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1044 (set-buffer (process-buffer process))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1045 (setq buffer-read-only nil)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1046 (fundamental-mode)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1047 (goto-char (point-max))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1048 (delete-blank-lines)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1049 (delete-horizontal-space)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1050 (insert "\n*******\n" message "*******\n"))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1051 (if (and (eq b (process-buffer process))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1052 (waiting-for-user-input-p))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1053 (progn (goto-char (point-max))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1054 (recenter -1)))))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1055
2748
fef642d4f5c0 (te-pass-through): Handle meta chars and non-char events.
Richard M. Stallman <rms@gnu.org>
parents: 2587
diff changeset
1056 (defvar te-stty-string "stty -nl erase '^?' kill '^u' intr '^c' echo pass8"
357
1ad871406b12 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 256
diff changeset
1057 "Shell command to set terminal modes for terminal emulator.")
1ad871406b12 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 256
diff changeset
1058 ;; This used to have `new' in it, but that loses outside BSD
1ad871406b12 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 256
diff changeset
1059 ;; and it's apparently not needed in BSD.
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1060
17926
8e3ea3086637 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14888
diff changeset
1061 (defcustom explicit-shell-file-name nil
8e3ea3086637 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14888
diff changeset
1062 "*If non-nil, is file name to use for explicitly requested inferior shell."
8e3ea3086637 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14888
diff changeset
1063 :type '(choice (const :tag "None" nil)
8e3ea3086637 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14888
diff changeset
1064 file)
8e3ea3086637 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 14888
diff changeset
1065 :group 'terminal)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1066
256
7e4c7ef44243 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 161
diff changeset
1067 ;;;###autoload
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1068 (defun terminal-emulator (buffer program args &optional width height)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1069 "Under a display-terminal emulator in BUFFER, run PROGRAM on arguments ARGS.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1070 ARGS is a list of argument-strings. Remaining arguments are WIDTH and HEIGHT.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1071 BUFFER's contents are made an image of the display generated by that program,
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1072 and any input typed when BUFFER is the current Emacs buffer is sent to that
24253
39d5ef228cae (terminal-emulator): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 18932
diff changeset
1073 program as keyboard input.
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1074
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1075 Interactively, BUFFER defaults to \"*terminal*\" and PROGRAM and ARGS
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1076 are parsed from an input-string using your usual shell.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1077 WIDTH and HEIGHT are determined from the size of the current window
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1078 -- WIDTH will be one less than the window's width, HEIGHT will be its height.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1079
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1080 To switch buffers and leave the emulator, or to give commands
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1081 to the emulator itself (as opposed to the program running under it),
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1082 type Control-^. The following character is an emulator command.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1083 Type Control-^ twice to send it to the subprogram.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1084 This escape character may be changed using the variable `terminal-escape-char'.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1085
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1086 `Meta' characters may not currently be sent through the terminal emulator.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1087
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1088 Here is a list of some of the variables which control the behaviour
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1089 of the emulator -- see their documentation for more information:
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1090 terminal-escape-char, terminal-scrolling, terminal-more-processing,
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1091 terminal-redisplay-interval.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1092
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1093 This function calls the value of terminal-mode-hook if that exists
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1094 and is non-nil after the terminal buffer has been set up and the
10294
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1095 subprocess started."
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1096 (interactive
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1097 (cons (save-excursion
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1098 (set-buffer (get-buffer-create "*terminal*"))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1099 (buffer-name (if (or (not (boundp 'te-process))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1100 (null te-process)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1101 (not (eq (process-status te-process)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1102 'run)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1103 (current-buffer)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1104 (generate-new-buffer "*terminal*"))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1105 (append
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1106 (let* ((default-s
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1107 ;; Default shell is same thing M-x shell uses.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1108 (or explicit-shell-file-name
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1109 (getenv "ESHELL")
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1110 (getenv "SHELL")
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1111 "/bin/sh"))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1112 (s (read-string
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1113 (format "Run program in emulator: (default %s) "
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1114 default-s))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1115 (if (equal s "")
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1116 (list default-s '())
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1117 (te-parse-program-and-args s))))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1118 (switch-to-buffer buffer)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1119 (if (null width) (setq width (- (window-width (selected-window)) 1)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1120 (if (null height) (setq height (- (window-height (selected-window)) 1)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1121 (terminal-mode)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1122 (setq te-width width te-height height)
31168
e54aee254198 (terminal-emulator): Fix args to `concat'. Now concat doesn't accept
Kenichi Handa <handa@m17n.org>
parents: 30003
diff changeset
1123 (setq te-terminal-name (concat te-terminal-name-prefix
e54aee254198 (terminal-emulator): Fix args to `concat'. Now concat doesn't accept
Kenichi Handa <handa@m17n.org>
parents: 30003
diff changeset
1124 (number-to-string te-width)
e54aee254198 (terminal-emulator): Fix args to `concat'. Now concat doesn't accept
Kenichi Handa <handa@m17n.org>
parents: 30003
diff changeset
1125 (number-to-string te-height)))
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1126 (setq mode-line-buffer-identification
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1127 (list (format "Emacs terminal %dx%d: %%b " te-width te-height)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1128 'te-pending-output-info))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1129 (let ((buffer-read-only nil))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1130 (te-clear-screen))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1131 (let (process)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1132 (while (setq process (get-buffer-process (current-buffer)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1133 (if (y-or-n-p (format "Kill process %s? " (process-name process)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1134 (delete-process process)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1135 (error "Process %s not killed" (process-name process)))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1136 (condition-case err
10294
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1137 (let ((process-environment
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1138 (cons (concat "TERM=" te-terminal-name)
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1139 (cons (concat "TERMCAP=" (te-create-termcap))
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1140 (cons (concat "TERMINFO=" (te-create-terminfo))
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1141 process-environment)))))
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1142 (setq te-process
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1143 (start-process "terminal-emulator" (current-buffer)
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1144 "/bin/sh" "-c"
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1145 ;; Yuck!!! Start a shell to set some terminal
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1146 ;; control characteristics. Then start the
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1147 ;; "env" program to setup the terminal type
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1148 ;; Then finally start the program we wanted.
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1149 (format "%s; exec %s"
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1150 te-stty-string
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1151 (mapconcat 'te-quote-arg-for-sh
13101
32381faf1489 (te-escape): Remove spurious partial duplicate definition.
Noah Friedman <friedman@splode.com>
parents: 13057
diff changeset
1152 (cons program args) " "))))
630
a904e831b60f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 584
diff changeset
1153 (set-process-filter te-process 'te-filter)
a904e831b60f *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 584
diff changeset
1154 (set-process-sentinel te-process 'te-sentinel))
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1155 (error (fundamental-mode)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1156 (signal (car err) (cdr err))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1157 (setq inhibit-quit t) ;sport death
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1158 (use-local-map terminal-map)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1159 (run-hooks 'terminal-mode-hook)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1160 (message "Entering emacs terminal-emulator... Type %s %s for help"
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1161 (single-key-description terminal-escape-char)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1162 (mapconcat 'single-key-description
5774
b57901dfbd40 (te-escape-help, te-more-break-help, terminal-emulator):
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
1163 (where-is-internal 'te-escape-help terminal-escape-map t)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1164 " ")))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1165
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1166
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1167 (defun te-parse-program-and-args (s)
6310
c40e283c262b Put hyphen in a safer place in the character class.
Karl Heuer <kwzh@gnu.org>
parents: 5774
diff changeset
1168 (cond ((string-match "\\`\\([-a-zA-Z0-9+=_.@/:]+[ \t]*\\)+\\'" s)
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1169 (let ((l ()) (p 0))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1170 (while p
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1171 (setq l (cons (if (string-match
6310
c40e283c262b Put hyphen in a safer place in the character class.
Karl Heuer <kwzh@gnu.org>
parents: 5774
diff changeset
1172 "\\([-a-zA-Z0-9+=_.@/:]+\\)\\([ \t]+\\)*"
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1173 s p)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1174 (prog1 (substring s p (match-end 1))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1175 (setq p (match-end 0))
18932
aff82880eaf1 (te-newline): Change eql to eq.
Richard M. Stallman <rms@gnu.org>
parents: 17926
diff changeset
1176 (if (eq p (length s)) (setq p nil)))
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1177 (prog1 (substring s p)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1178 (setq p nil)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1179 l)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1180 (setq l (nreverse l))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1181 (list (car l) (cdr l))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1182 ((and (string-match "[ \t]" s) (not (file-exists-p s)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1183 (list shell-file-name (list "-c" (concat "exec " s))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1184 (t (list s ()))))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1185
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1186 (put 'terminal-mode 'mode-class 'special)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1187 ;; This is only separated out from function terminal-emulator
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3387
diff changeset
1188 ;; to keep the latter a little more manageable.
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1189 (defun terminal-mode ()
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3387
diff changeset
1190 "Set up variables for use with the terminal-emulator.
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1191 One should not call this -- it is an internal function
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1192 of the terminal-emulator"
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1193 (kill-all-local-variables)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1194 (buffer-disable-undo (current-buffer))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1195 (setq major-mode 'terminal-mode)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1196 (setq mode-name "terminal")
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1197 ; (make-local-variable 'Helper-return-blurb)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1198 ; (setq Helper-return-blurb "return to terminal simulator")
7077
4c0af7fbb42e (terminal-cease-edit, terminal-mode):
Richard M. Stallman <rms@gnu.org>
parents: 6423
diff changeset
1199 (setq mode-line-process '(":%s"))
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1200 (setq buffer-read-only t)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1201 (setq truncate-lines t)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1202 (make-local-variable 'terminal-escape-char)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1203 (setq terminal-escape-char (default-value 'terminal-escape-char))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1204 (make-local-variable 'terminal-scrolling)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1205 (setq terminal-scrolling (default-value 'terminal-scrolling))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1206 (make-local-variable 'terminal-more-processing)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1207 (setq terminal-more-processing (default-value 'terminal-more-processing))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1208 (make-local-variable 'terminal-redisplay-interval)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1209 (setq terminal-redisplay-interval (default-value 'terminal-redisplay-interval))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1210 (make-local-variable 'te-width)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1211 (make-local-variable 'te-height)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1212 (make-local-variable 'te-process)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1213 (make-local-variable 'te-pending-output)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1214 (setq te-pending-output (list 0))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1215 (make-local-variable 'te-saved-point)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1216 (setq te-saved-point (point-min))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1217 (make-local-variable 'te-pending-output-info) ;for the mode line
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1218 (setq te-pending-output-info "")
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1219 (make-local-variable 'inhibit-quit)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1220 ;(setq inhibit-quit t)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1221 (make-local-variable 'te-log-buffer)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1222 (setq te-log-buffer nil)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1223 (make-local-variable 'te-more-count)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1224 (setq te-more-count -1)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1225 (make-local-variable 'te-redisplay-count)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1226 (setq te-redisplay-count terminal-redisplay-interval)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1227 ;(use-local-map terminal-mode-map)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1228 ;; terminal-mode-hook is called above in function terminal-emulator
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1229 )
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1230
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1231 ;;;; what a complete loss
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1232
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1233 (defun te-quote-arg-for-sh (string)
6310
c40e283c262b Put hyphen in a safer place in the character class.
Karl Heuer <kwzh@gnu.org>
parents: 5774
diff changeset
1234 (cond ((string-match "\\`[-a-zA-Z0-9+=_.@/:]+\\'"
161
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1235 string)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1236 string)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1237 ((not (string-match "[$]" string))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1238 ;; "[\"\\]" are special to sh and the lisp reader in the same way
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1239 (prin1-to-string string))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1240 (t
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1241 (let ((harder "")
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1242 (start 0)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1243 (end 0))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1244 (while (cond ((>= start (length string))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1245 nil)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1246 ;; this is the set of chars magic with "..." in `sh'
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1247 ((setq end (string-match "[\"\\$]"
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1248 string start))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1249 t)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1250 (t (setq harder (concat harder
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1251 (substring string start)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1252 nil))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1253 (setq harder (concat harder (substring string start end)
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1254 ;; Can't use ?\\ since `concat'
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1255 ;; unfortunately does prin1-to-string
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1256 ;; on fixna. Amazing.
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1257 "\\"
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1258 (substring string
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1259 end
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1260 (1+ end)))
0037df22a9f6 Initial revision
root <root>
parents:
diff changeset
1261 start (1+ end)))
256
7e4c7ef44243 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 161
diff changeset
1262 (concat "\"" harder "\"")))))
584
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 357
diff changeset
1263
10294
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1264 (defun te-create-terminfo ()
13101
32381faf1489 (te-escape): Remove spurious partial duplicate definition.
Noah Friedman <friedman@splode.com>
parents: 13057
diff changeset
1265 "Create and compile a terminfo entry for the virtual terminal. This is kept
14888
b256ebb2110a (te-terminal-name-prefix): Change from
Richard M. Stallman <rms@gnu.org>
parents: 14641
diff changeset
1266 in the directory specified by `te-terminfo-directory'."
43678
402411174ef9 (te-create-terminfo): Use make-temp-file
Richard M. Stallman <rms@gnu.org>
parents: 43171
diff changeset
1267 (when (and system-uses-terminfo
402411174ef9 (te-create-terminfo): Use make-temp-file
Richard M. Stallman <rms@gnu.org>
parents: 43171
diff changeset
1268 (not (file-exists-p (concat te-terminfo-directory
402411174ef9 (te-create-terminfo): Use make-temp-file
Richard M. Stallman <rms@gnu.org>
parents: 43171
diff changeset
1269 (substring te-terminal-name-prefix 0 1)
402411174ef9 (te-create-terminfo): Use make-temp-file
Richard M. Stallman <rms@gnu.org>
parents: 43171
diff changeset
1270 "/" te-terminal-name))))
13101
32381faf1489 (te-escape): Remove spurious partial duplicate definition.
Noah Friedman <friedman@splode.com>
parents: 13057
diff changeset
1271 (let ( (terminfo
32381faf1489 (te-escape): Remove spurious partial duplicate definition.
Noah Friedman <friedman@splode.com>
parents: 13057
diff changeset
1272 (concat
14888
b256ebb2110a (te-terminal-name-prefix): Change from
Richard M. Stallman <rms@gnu.org>
parents: 14641
diff changeset
1273 ;; The first newline avoids trouble with ncurses.
b256ebb2110a (te-terminal-name-prefix): Change from
Richard M. Stallman <rms@gnu.org>
parents: 14641
diff changeset
1274 (format "%s,\n\tmir, xon,cols#%d, lines#%d,"
10294
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1275 te-terminal-name te-width te-height)
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1276 "bel=^P^G, clear=^P\\f, cr=^P^A, cub1=^P^B, cud1=^P\\n,"
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1277 "cuf1=^P^F, cup=^P=%p1%'\\s'%+%c%p2%'\\s'%+%c,"
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1278 "dch=^Pd%p1%'\\s'%+%c, dch1=^Pd!, dl=^P^K%p1%'\\s'%+%c,"
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1279 "dl1=^P^K!, ed=^PC, el=^Pc, home=^P=\\s\\s,"
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1280 "ich=^P_%p1%'\\s'%+%c, ich1=^P_!, il=^P^O%p1%'\\s'%+%c,"
43678
402411174ef9 (te-create-terminfo): Use make-temp-file
Richard M. Stallman <rms@gnu.org>
parents: 43171
diff changeset
1281 ;; The last newline avoids trouble with ncurses.
14888
b256ebb2110a (te-terminal-name-prefix): Change from
Richard M. Stallman <rms@gnu.org>
parents: 14641
diff changeset
1282 "il1=^P^O!, ind=^P\\n, nel=\\n,\n"))
43678
402411174ef9 (te-create-terminfo): Use make-temp-file
Richard M. Stallman <rms@gnu.org>
parents: 43171
diff changeset
1283 ;; This is the desired name for the source file.
14888
b256ebb2110a (te-terminal-name-prefix): Change from
Richard M. Stallman <rms@gnu.org>
parents: 14641
diff changeset
1284 (file-name (concat te-terminfo-directory te-terminal-name ".tif")) )
b256ebb2110a (te-terminal-name-prefix): Change from
Richard M. Stallman <rms@gnu.org>
parents: 14641
diff changeset
1285 (make-directory te-terminfo-directory t)
43678
402411174ef9 (te-create-terminfo): Use make-temp-file
Richard M. Stallman <rms@gnu.org>
parents: 43171
diff changeset
1286 (let ((temp-file
402411174ef9 (te-create-terminfo): Use make-temp-file
Richard M. Stallman <rms@gnu.org>
parents: 43171
diff changeset
1287 (make-temp-file (expand-file-name "tif" te-terminfo-directory))))
402411174ef9 (te-create-terminfo): Use make-temp-file
Richard M. Stallman <rms@gnu.org>
parents: 43171
diff changeset
1288 ;; Store the source file under a random temp name.
402411174ef9 (te-create-terminfo): Use make-temp-file
Richard M. Stallman <rms@gnu.org>
parents: 43171
diff changeset
1289 (with-temp-file temp-file
402411174ef9 (te-create-terminfo): Use make-temp-file
Richard M. Stallman <rms@gnu.org>
parents: 43171
diff changeset
1290 (insert terminfo))
402411174ef9 (te-create-terminfo): Use make-temp-file
Richard M. Stallman <rms@gnu.org>
parents: 43171
diff changeset
1291 ;; Rename it to the desired name.
402411174ef9 (te-create-terminfo): Use make-temp-file
Richard M. Stallman <rms@gnu.org>
parents: 43171
diff changeset
1292 ;; We use this roundabout approach
402411174ef9 (te-create-terminfo): Use make-temp-file
Richard M. Stallman <rms@gnu.org>
parents: 43171
diff changeset
1293 ;; to avoid any risk of writing a name that
402411174ef9 (te-create-terminfo): Use make-temp-file
Richard M. Stallman <rms@gnu.org>
parents: 43171
diff changeset
1294 ;; was michievouslyt set up as a symlink.
402411174ef9 (te-create-terminfo): Use make-temp-file
Richard M. Stallman <rms@gnu.org>
parents: 43171
diff changeset
1295 (rename-file temp-file file-name))
402411174ef9 (te-create-terminfo): Use make-temp-file
Richard M. Stallman <rms@gnu.org>
parents: 43171
diff changeset
1296 ;; Now compile that source to make the binary that the
402411174ef9 (te-create-terminfo): Use make-temp-file
Richard M. Stallman <rms@gnu.org>
parents: 43171
diff changeset
1297 ;; programs actually use.
402411174ef9 (te-create-terminfo): Use make-temp-file
Richard M. Stallman <rms@gnu.org>
parents: 43171
diff changeset
1298 (let ((process-environment
402411174ef9 (te-create-terminfo): Use make-temp-file
Richard M. Stallman <rms@gnu.org>
parents: 43171
diff changeset
1299 (cons (concat "TERMINFO="
402411174ef9 (te-create-terminfo): Use make-temp-file
Richard M. Stallman <rms@gnu.org>
parents: 43171
diff changeset
1300 (directory-file-name te-terminfo-directory))
402411174ef9 (te-create-terminfo): Use make-temp-file
Richard M. Stallman <rms@gnu.org>
parents: 43171
diff changeset
1301 process-environment)))
10294
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1302 (set-process-sentinel (start-process "tic" nil "tic" file-name)
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1303 'te-tic-sentinel))))
43678
402411174ef9 (te-create-terminfo): Use make-temp-file
Richard M. Stallman <rms@gnu.org>
parents: 43171
diff changeset
1304 (directory-file-name te-terminfo-directory))
10294
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1305
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1306 (defun te-create-termcap ()
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1307 "Create a termcap entry for the virtual terminal"
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1308 ;; Because of Unix Brain Death(tm), we can't change
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1309 ;; the terminal type of a running process, and so
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1310 ;; terminal size and scrollability are wired-down
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1311 ;; at this point. ("Detach? What's that?")
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1312 (concat (format "%s:co#%d:li#%d:%s"
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1313 ;; Sigh. These can't be dynamically changed.
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1314 te-terminal-name te-width te-height (if terminal-scrolling
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1315 "" "ns:"))
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1316 ;;-- Basic things
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1317 ;; cursor-motion, bol, forward/backward char
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1318 "cm=^p=%+ %+ :cr=^p^a:le=^p^b:nd=^p^f:"
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1319 ;; newline, clear eof/eof, audible bell
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1320 "nw=^j:ce=^pc:cd=^pC:cl=^p^l:bl=^p^g:"
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1321 ;; insert/delete char/line
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1322 "IC=^p_%+ :DC=^pd%+ :AL=^p^o%+ :DL=^p^k%+ :"
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1323 ;;-- Not-widely-known (ie nonstandard) flags, which mean
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1324 ;; o writing in the last column of the last line
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1325 ;; doesn't cause idiotic scrolling, and
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1326 ;; o don't use idiotische c-s/c-q sogenannte
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1327 ;; ``flow control'' auf keinen Fall.
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1328 "LP:NF:"
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1329 ;;-- For stupid or obsolete programs
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1330 "ic=^p_!:dc=^pd!:al=^p^o!:dl=^p^k!:ho=^p= :"
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1331 ;;-- For disgusting programs.
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1332 ;; (VI? What losers need these, I wonder?)
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1333 "im=:ei=:dm=:ed=:mi:do=^p^j:nl=^p^j:bs:")
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1334 )
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1335
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1336 (defun te-tic-sentinel (proc state-change)
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1337 "If tic has finished, delete the .tif file"
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1338 (if (equal state-change "finished
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1339 ")
14888
b256ebb2110a (te-terminal-name-prefix): Change from
Richard M. Stallman <rms@gnu.org>
parents: 14641
diff changeset
1340 (delete-file (concat te-terminfo-directory te-terminal-name ".tif"))))
10294
23dee56d9ee4 Added terminfo support.
Richard M. Stallman <rms@gnu.org>
parents: 8852
diff changeset
1341
584
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 357
diff changeset
1342 (provide 'terminal)
657
fec3f9a1e3e5 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 630
diff changeset
1343
fec3f9a1e3e5 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 630
diff changeset
1344 ;;; terminal.el ends here