annotate lisp/terminal.el @ 110410:f2e111723c3a

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