1858
|
1 This file describes various problems that have been encountered
|
|
2 in compiling, installing and running GNU Emacs.
|
|
3
|
1950
|
4 * `Pid xxx killed due to text modification or page I/O error'
|
|
5
|
|
6 On HP/UX, you can get that error when the Emacs executable is on an NFS
|
|
7 file system. HP/UX responds this way if it tries to swap in a page and
|
|
8 does not get a response from the server within a timeout whose default
|
|
9 value is just ten seconds.
|
|
10
|
|
11 If this happens to you, extend the timeout period.
|
|
12
|
1949
|
13 * `expand-file-name' fails to work on any but the machine you dumped Emacs on.
|
|
14
|
|
15 On some systems, if you use any of the functions which look up
|
|
16 information in the passwd database before dumping Emacs (say, by using
|
|
17 expand-file-name in site-init.el), then those functions will not work
|
|
18 in the dumped Emacs on any host but the one Emacs was dumped on.
|
|
19
|
|
20 Apparently, the Yellow Pages (or Network Information Service)
|
|
21 functions cache information the first time they are called in the
|
|
22 undumped emacs, this information gets included in the dumped
|
|
23 executable, and it is then inaccurate if the executable is used on
|
|
24 another host.
|
|
25
|
|
26 The solution? Don't use expand-file-name in site-init.el, or in
|
|
27 anything it loads. Yuck.
|
|
28
|
1858
|
29 * On some variants of SVR4, Emacs does not work at all with X.
|
|
30
|
|
31 Try defining BROKEN_FIONREAD in your config.h file. If this solves
|
|
32 the problem, please send a bug report to tell us this is needed; be
|
|
33 sure to say exactly what type of machine and system you are using.
|
|
34
|
|
35 * Linking says that the functions insque and remque are undefined.
|
|
36
|
|
37 Change oldXMenu/Makefile by adding insque.o to the variable OBJS.
|
|
38
|
|
39 * Emacs fails to understand most Internet host names, even though
|
|
40 the names work properly with other programs on the same system.
|
|
41
|
|
42 This typically happens on Suns and other systems that use shared
|
|
43 libraries. The cause is that the site has installed a version of the
|
|
44 shared library which uses a name server--but has not installed a
|
|
45 similiar version of the unshared library which Emacs uses.
|
|
46
|
|
47 The result is that most programs, using the shared library, work with
|
|
48 the nameserver, but Emacs does not.
|
|
49
|
|
50 The fix is to install an unshared library that corresponds to what you
|
|
51 installed in the shared library, and then relink Emacs.
|
|
52
|
|
53 * On a Sun running SunOS 4.1.1, you get this error message from GNU ld:
|
|
54
|
|
55 /lib/libc.a(_Q_sub.o): Undefined symbol __Q_get_rp_rd referenced from text segment
|
|
56
|
|
57 The problem is in the Sun shared C library, not in GNU ld.
|
|
58
|
|
59 The solution is to install Patch-ID# 100267-03 from Sun.
|
|
60
|
|
61 * Self documentation messages are garbled.
|
|
62
|
|
63 This means that the file `etc/DOC-...' doesn't properly correspond
|
|
64 with the Emacs executable. Redumping Emacs and then installing the
|
|
65 corresponding pair of files should fix the problem.
|
|
66
|
|
67 * M-x shell immediately responds "Process shell exited abnormally with code 1".
|
|
68
|
|
69 This is often due to inability to run the program `env'.
|
|
70 This should be in the `etc' subdirectory of the directory
|
|
71 where Emacs is installed, and it should be marked executable.
|
|
72
|
|
73 * Trouble using ptys on AIX.
|
|
74
|
|
75 People often instll the pty devices on AIX incorrectly.
|
|
76 Use `smit pty' to reinstall them properly.
|
|
77
|
|
78 * Shell mode on HP/UX gives the message, "`tty`: Ambiguous".
|
|
79
|
|
80 christos@theory.tn.cornell.edu says:
|
|
81
|
|
82 The problem is that in your .cshrc you have something that tries to
|
|
83 execute `tty`. If you are not running the shell on a real tty then
|
|
84 tty will print "not a tty". Csh expects one word in some places,
|
|
85 but tty is giving it back 3.
|
|
86
|
|
87 The solution is to add a pair of quotes around `tty` to make it a single
|
|
88 word:
|
|
89
|
|
90 if (`tty` == "/dev/console")
|
|
91
|
|
92 should be changed to:
|
|
93
|
|
94 if ("`tty`" == "/dev/console")
|
|
95
|
|
96 Even better, move things that set up terminal sections out of .cshrc
|
|
97 and into .login.
|
|
98
|
|
99 * Using X Windows, control-shift-leftbutton makes Emacs hang.
|
|
100
|
|
101 Use the shell command `xset bc' to make the old X Menu package work.
|
|
102
|
|
103 * Emacs running under X Windows does not handle mouse clicks.
|
|
104 * `emacs -geometry 80x20' finds a file named `80x20'.
|
|
105
|
|
106 One cause of such problems is having (setq term-file-prefix nil) in
|
|
107 your .emacs file. Another cause is a bad value of EMACSLOADPATH in
|
|
108 the environment.
|
|
109
|
|
110 * Emacs starts in a directory other than the one that is current in the shell.
|
|
111
|
|
112 If the PWD environment variable exists, Emacs uses this variable as
|
|
113 the initial working directory.
|
|
114
|
|
115 Some shells automatically update this variable, while other shells fail
|
|
116 to do so. If you use two such shells in combination, the variable can
|
|
117 end up wrong. This confuses Emacs.
|
|
118
|
|
119 The solution is to put something in the start-up file for the shell
|
|
120 that does not update PWD, to get rid of that environment variable.
|
|
121 For example, in csh, use `unsetenv PWD'.
|
|
122
|
|
123 * Emacs gets error message from linker on Sun.
|
|
124
|
|
125 If the error message says that a symbol such as `f68881_used' or
|
|
126 `ffpa_used' or `start_float' is undefined, this probably indicates
|
|
127 that you have compiled some libraries, such as the X libraries,
|
|
128 with a floating point option other than the default.
|
|
129
|
|
130 It's not terribly hard to make this work with small changes in
|
|
131 crt0.c together with linking with Fcrt1.o, Wcrt1.o or Mcrt1.o.
|
|
132 However, the easiest approach is to build Xlib with the default
|
1949
|
133 floating point option: -fsoft.
|
1858
|
134
|
|
135 * Emacs fails to get default settings from X Windows server.
|
|
136
|
|
137 The X library in X11R4 has a bug; it interchanges the 2nd and 3rd
|
|
138 arguments to XGetDefaults. Define the macro XBACKWARDS in config.h to
|
|
139 tell Emacs to compensate for this.
|
|
140
|
|
141 I don't believe there is any way Emacs can determine for itself
|
|
142 whether this problem is present on a given system.
|
|
143
|
|
144 * Keyboard input gets confused after a beep when using a DECserver
|
|
145 as a concentrator.
|
|
146
|
|
147 This problem seems to be a matter of configuring the DECserver to use
|
|
148 7 bit characters rather than 8 bit characters.
|
|
149
|
|
150 * M-x shell persistently reports "Process shell exited abnormally with code 1".
|
|
151
|
|
152 This happened on Suns as a result of what is said to be a bug in Sunos
|
|
153 version 4.0.x. The only fix was to reboot the machine.
|
|
154
|
|
155 * Programs running under terminal emulator do not recognize `emacs'
|
|
156 terminal type.
|
|
157
|
|
158 The cause of this is a shell startup file that sets the TERMCAP
|
|
159 environment variable. The terminal emulator uses that variable to
|
|
160 provide the information on the special terminal type that Emacs
|
|
161 emulates.
|
|
162
|
|
163 Rewrite your shell startup file so that it does not change TERMCAP
|
|
164 in such a case. You could use the following conditional which sets
|
|
165 it only if it is undefined.
|
|
166
|
|
167 if ( ! ${?TERMCAP} ) setenv TERMCAP ~/my-termcap-file
|
|
168
|
|
169 Or you could set TERMCAP only when you set TERM--which should not
|
|
170 happen in a non-login shell.
|
|
171
|
|
172 * Error compiling sysdep.c, "sioctl.h: no such file or directory".
|
|
173
|
|
174 Among USG systems with TIOCGWINSZ, some require sysdep.c to include
|
|
175 the file sioctl.h; on others, sioctl.h does not exist. We don't know
|
|
176 how to distinguish these two kind of systems, so currently we try to
|
|
177 include sioctl.h on all of them. If this #include gets an error, just
|
|
178 delete it.
|
|
179
|
|
180 * X Windows doesn't work if DISPLAY uses a hostname.
|
|
181
|
|
182 People have reported kernel bugs in certain systems that cause Emacs
|
|
183 not to work with X Windows if DISPLAY is set using a host name. But
|
|
184 the problem does not occur if DISPLAY is set to `unix:0.0'. I think
|
|
185 the bug has to do with SIGIO or FIONREAD.
|
|
186
|
|
187 You may be able to compensate for the bug by doing (set-input-mode nil nil).
|
|
188 However, that has the disadvantage of turning off interrupts, so that
|
|
189 you are unable to quit out of a Lisp program by typing C-g.
|
|
190
|
|
191 The easy way to do this is to put
|
|
192
|
|
193 (setq x-sigio-bug t)
|
|
194
|
|
195 in your site-init.el file.
|
|
196
|
|
197 * Problem with remote X server on Suns.
|
|
198
|
|
199 On a Sun, running Emacs on one machine with the X server on another
|
|
200 may not work if you have used the unshared system libraries. This
|
|
201 is because the unshared libraries fail to use YP for host name lookup.
|
|
202 As a result, the host name you specify may not be recognized.
|
|
203
|
|
204 * Watch out for .emacs files and EMACSLOADPATH environment vars
|
|
205
|
|
206 These control the actions of Emacs.
|
|
207 ~/.emacs is your Emacs init file.
|
|
208 EMACSLOADPATH overrides which directories the function
|
|
209 "load" will search.
|
|
210
|
|
211 If you observe strange problems, check for these and get rid
|
|
212 of them, then try again.
|
|
213
|
|
214 * Shell mode ignores interrupts on Apollo Domain
|
|
215
|
|
216 You may find that M-x shell prints the following message:
|
|
217
|
|
218 Warning: no access to tty; thus no job control in this shell...
|
|
219
|
|
220 This can happen if there are not enough ptys on your system.
|
|
221 Here is how to make more of them.
|
|
222
|
|
223 % cd /dev
|
|
224 % ls pty*
|
|
225 # shows how many pty's you have. I had 8, named pty0 to pty7)
|
|
226 % /etc/crpty 8
|
|
227 # creates eight new pty's
|
|
228
|
|
229 * Fatal signal in the command temacs -l loadup inc dump
|
|
230
|
|
231 This command is the final stage of building Emacs. It is run by the
|
|
232 Makefile in the src subdirectory, or by build.com on VMS.
|
|
233
|
|
234 It has been known to get fatal errors due to insufficient swapping
|
|
235 space available on the machine.
|
|
236
|
|
237 On 68000's, it has also happened because of bugs in the
|
|
238 subroutine `alloca'. Verify that `alloca' works right, even
|
|
239 for large blocks (many pages).
|
|
240
|
|
241 * test-distrib says that the distribution has been clobbered
|
|
242 * or, temacs prints "Command key out of range 0-127"
|
|
243 * or, temacs runs and dumps xemacs, but xemacs totally fails to work.
|
|
244 * or, temacs gets errors dumping xemacs
|
|
245
|
|
246 This can be because the .elc files have been garbled. Do not be
|
|
247 fooled by the fact that most of a .elc file is text: these are
|
|
248 binary files and can contain all 256 byte values.
|
|
249
|
|
250 In particular `shar' cannot be used for transmitting GNU Emacs.
|
|
251 It typically truncates "lines". What appear to be "lines" in
|
|
252 a binary file can of course be of any length. Even once `shar'
|
|
253 itself is made to work correctly, `sh' discards null characters
|
|
254 when unpacking the shell archive.
|
|
255
|
|
256 I have also seen character \177 changed into \377. I do not know
|
|
257 what transfer means caused this problem. Various network
|
|
258 file transfer programs are suspected of clobbering the high bit.
|
|
259
|
|
260 The only verified ways to transfer GNU Emacs are `tar', kermit (in
|
|
261 binary mode on Unix), and rcp or internet ftp between two Unix systems,
|
|
262 or chaosnet cftp using raw mode.
|
|
263
|
|
264 If you have a copy of Emacs that has been damaged in its
|
|
265 nonprinting characters, you can fix them:
|
|
266
|
|
267 1) Record the names of all the .elc files.
|
|
268 2) Delete all the .elc files.
|
|
269 3) Recompile alloc.c with a value of PURESIZE twice as large.
|
|
270 You might as well save the old alloc.o.
|
|
271 4) Remake xemacs. It should work now.
|
|
272 5) Running xemacs, do Meta-x byte-compile-file repeatedly
|
|
273 to recreate all the .elc files that used to exist.
|
|
274 You may need to increase the value of the variable
|
|
275 max-lisp-eval-depth to succeed in running the compiler interpreted
|
|
276 on certain .el files. 400 was sufficient as of last report.
|
|
277 6) Reinstall the old alloc.o (undoing changes to alloc.c if any)
|
|
278 and remake temacs.
|
|
279 7) Remake xemacs. It should work now, with valid .elc files.
|
|
280
|
|
281 * temacs prints "Pure Lisp storage exhausted"
|
|
282
|
|
283 This means that the Lisp code loaded from the .elc and .el
|
|
284 files during temacs -l loadup inc dump took up more
|
|
285 space than was allocated.
|
|
286
|
|
287 This could be caused by
|
|
288 1) adding code to the preloaded Lisp files
|
|
289 2) adding more preloaded files in loadup.el
|
|
290 3) having a site-init.el or site-load.el which loads files.
|
|
291 Note that ANY site-init.el or site-load.el is nonstandard;
|
|
292 if you have received Emacs from some other site
|
|
293 and it contains a site-init.el or site-load.el file, consider
|
|
294 deleting that file.
|
|
295 4) getting the wrong .el or .elc files
|
|
296 (not from the directory you expected).
|
|
297 5) deleting some .elc files that are supposed to exist.
|
|
298 This would cause the source files (.el files) to be
|
|
299 loaded instead. They take up more room, so you lose.
|
|
300 6) a bug in the Emacs distribution which underestimates
|
|
301 the space required.
|
|
302
|
|
303 If the need for more space is legitimate, change the definition
|
|
304 of PURESIZE in puresize.h.
|
|
305
|
|
306 But in some of the cases listed above, this problem is a consequence
|
|
307 of something else that is wrong. Be sure to check and fix the real
|
|
308 problem.
|
|
309
|
|
310 * Changes made to .el files do not take effect.
|
|
311
|
|
312 You may have forgotten to recompile them into .elc files.
|
|
313 Then the old .elc files will be loaded, and your changes
|
|
314 will not be seen. To fix this, do M-x byte-recompile-directory
|
|
315 and specify the directory that contains the Lisp files.
|
|
316
|
|
317 * The dumped Emacs (xemacs) crashes when run, trying to write pure data.
|
|
318
|
|
319 Two causes have been seen for such problems.
|
|
320
|
|
321 1) On a system where getpagesize is not a system call, it is defined
|
|
322 as a macro. If the definition (in both unexec.c and malloc.c) is wrong,
|
|
323 it can cause problems like this. You might be able to find the correct
|
|
324 value in the man page for a.out (5).
|
|
325
|
|
326 2) Some systems allocate variables declared static among the
|
|
327 initialized variables. Emacs makes all initialized variables in most
|
|
328 of its files pure after dumping, but the variables declared static and
|
|
329 not initialized are not supposed to be pure. On these systems you
|
|
330 may need to add "#define static" to the m- or the s- file.
|
|
331
|
|
332 * Compilation errors on VMS.
|
|
333
|
|
334 You will get warnings when compiling on VMS because there are
|
|
335 variable names longer than 32 (or whatever it is) characters.
|
|
336 This is not an error. Ignore it.
|
|
337
|
|
338 VAX C does not support #if defined(foo). Uses of this construct
|
|
339 were removed, but some may have crept back in. They must be rewritten.
|
|
340
|
|
341 There is a bug in the C compiler which fails to sign extend characters
|
|
342 in conditional expressions. The bug is:
|
|
343 char c = -1, d = 1;
|
|
344 int i;
|
|
345
|
|
346 i = d ? c : d;
|
|
347 The result is i == 255; the fix is to typecast the char in the
|
|
348 conditional expression as an (int). Known occurrences of such
|
|
349 constructs in Emacs have been fixed.
|
|
350
|
|
351 * rmail gets error getting new mail
|
|
352
|
|
353 rmail gets new mail from /usr/spool/mail/$USER using a program
|
|
354 called `movemail'. This program interlocks with /bin/mail using
|
|
355 the protocol defined by /bin/mail.
|
|
356
|
|
357 There are two different protocols in general use. One of them uses
|
|
358 the `flock' system call. The other involves creating a lock file;
|
|
359 `movemail' must be able to write in /usr/spool/mail in order to do
|
|
360 this. You control which one is used by defining, or not defining,
|
|
361 the macro MAIL_USE_FLOCK in config.h or the m- or s- file it includes.
|
|
362 IF YOU DON'T USE THE FORM OF INTERLOCKING THAT IS NORMAL ON YOUR
|
|
363 SYSTEM, YOU CAN LOSE MAIL!
|
|
364
|
|
365 If your system uses the lock file protocol, and fascist restrictions
|
|
366 prevent ordinary users from writing the lock files in /usr/spool/mail,
|
|
367 you may need to make `movemail' setgid to a suitable group such as
|
|
368 `mail'. You can use these commands (as root):
|
|
369
|
|
370 chgrp mail movemail
|
|
371 chmod 2755 movemail
|
|
372
|
|
373 * Emacs won't work with X-windows if the value of DISPLAY is HOSTNAME:0.
|
|
374 * GNUs can't make contact with the specified host for nntp.
|
|
375
|
|
376 Some people have found that Emacs was unable to connect to the local
|
|
377 host by name, as in DISPLAY=prep:0 if you are running on prep, but
|
|
378 could handle DISPLAY=unix:0. Here is what tale@rpi.edu said:
|
|
379
|
|
380 Seems as
|
|
381 though gethostbyname was bombing somewhere along the way. Well, we
|
|
382 had just upgrade from SunOS 3.5 (which X11 was built under) to SunOS
|
|
383 4.0.1. Any new X applications which tried to be built with the pre
|
|
384 OS-upgrade libraries had the same problems which Emacs was having.
|
|
385 Missing /etc/resolv.conf for a little while (when one of the libraries
|
|
386 was built?) also might have had a hand in it.
|
|
387
|
|
388 The result of all of this (with some speculation) was that we rebuilt
|
|
389 X and then rebuilt Emacs with the new libraries. Works as it should
|
|
390 now. Hoorah.
|
|
391
|
|
392 If you have already installed the name resolver in the file libresolv.a,
|
|
393 then you need to compile Emacs to use that library. The easiest way to
|
|
394 do this is to add to config.h a definition of LIBS_SYSTEM, LIBS_MACHINE
|
|
395 or LIB_STANDARD which uses -lresolv. Watch out! If you redefine a macro
|
|
396 that is already in use in your configuration to supply some other libraries,
|
|
397 be careful not to lose the others.
|
|
398
|
|
399 Thus, you could start by adding this to config.h:
|
|
400
|
|
401 #define LIBS_SYSTEM -lresolv
|
|
402
|
|
403 Then if this gives you an error for redefining a macro, and you see that
|
|
404 the s- file defines LIBS_SYSTEM as -lfoo -lbar, you could change config.h
|
|
405 again to say this:
|
|
406
|
|
407 #define LIBS_SYSTEM -lresolv -lfoo -lbar
|
|
408
|
|
409 * Emacs spontaneously displays "I-search: " at the bottom of the screen.
|
|
410
|
|
411 This means that Control-S/Control-Q "flow control" is being used.
|
|
412 C-s/C-q flow control is bad for Emacs editors because it takes away
|
|
413 C-s and C-q as user commands. Since editors do not output long streams
|
|
414 of text without user commands, there is no need for a user-issuable
|
|
415 "stop output" command in an editor; therefore, a properly designed
|
|
416 flow control mechanism would transmit all possible input characters
|
|
417 without interference. Designing such a mechanism is easy, for a person
|
|
418 with at least half a brain.
|
|
419
|
|
420 There are three possible reasons why flow control could be taking place:
|
|
421
|
|
422 1) Terminal has not been told to disable flow control
|
|
423 2) Insufficient padding for the terminal in use
|
|
424 3) Some sort of terminal concentrator or line switch is responsible
|
|
425
|
|
426 First of all, many terminals have a set-up mode which controls
|
|
427 whether they generate flow control characters. This must be
|
|
428 set to "no flow control" in order for Emacs to work. Sometimes
|
|
429 there is an escape sequence that the computer can send to turn
|
|
430 flow control off and on. If so, perhaps the termcap `ti' string
|
|
431 should turn flow control off, and the `te' string should turn it on.
|
|
432
|
|
433 Once the terminal has been told "no flow control", you may find it
|
|
434 needs more padding. The amount of padding Emacs sends is controlled
|
|
435 by the termcap entry for the terminal in use, and by the output baud
|
|
436 rate as known by the kernel. The shell command `stty' will print
|
|
437 your output baud rate; `stty' with suitable arguments will set it if
|
|
438 it is wrong. Setting to a higher speed causes increased padding. If
|
|
439 the results are wrong for the correct speed, there is probably a
|
|
440 problem in the termcap entry. You must speak to a local Unix wizard
|
|
441 to fix this. Perhaps you are just using the wrong terminal type.
|
|
442
|
|
443 For terminals that lack a "no flow control" mode, sometimes just
|
|
444 giving lots of padding will prevent actual generation of flow control
|
|
445 codes. You might as well try it.
|
|
446
|
|
447 If you are really unlucky, your terminal is connected to the computer
|
|
448 through a concentrator which sends flow control to the computer, or it
|
|
449 insists on sending flow control itself no matter how much padding you
|
|
450 give it. You are screwed! You should replace the terminal or
|
|
451 concentrator with a properly designed one. In the mean time,
|
|
452 some drastic measures can make Emacs semi-work.
|
|
453
|
|
454 One drastic measure to ignore C-s and C-q, while sending enough
|
|
455 padding that the terminal will not really lose any output.
|
|
456 Ignoring C-s and C-q can be done by using keyboard-translate-table
|
|
457 to map them into an undefined character such as C-^ or C-\. Sending
|
|
458 lots of padding is done by changing the termcap entry. Here is how
|
|
459 to make such a keyboard-translate-table:
|
|
460
|
|
461 (let ((the-table (make-string 128 0)))
|
|
462 ;; Default is to translate each character into itself.
|
|
463 (let ((i 0))
|
|
464 (while (< i 128)
|
|
465 (aset the-table i i)
|
|
466 (setq i (1+ i))))
|
|
467 ;; Swap C-s with C-\
|
|
468 (aset the-table ?\C-\\ ?\C-s)
|
|
469 (aset the-table ?\C-s ?\C-\\)
|
|
470 ;; Swap C-q with C-^
|
|
471 (aset the-table ?\C-^ ?\C-q)
|
|
472 (aset the-table ?\C-q ?\C-^)
|
|
473 (setq keyboard-translate-table the-table))
|
|
474
|
|
475 An even more drastic measure is to make Emacs use flow control.
|
|
476 To do this, evaluate the Lisp expression (set-input-mode nil t).
|
|
477 Emacs will then interpret C-s and C-q as flow control commands. (More
|
|
478 precisely, it will allow the kernel to do so as it usually does.) You
|
|
479 will lose the ability to use them for Emacs commands. Also, as a
|
|
480 consequence of using CBREAK mode, the terminal's Meta-key, if any,
|
|
481 will not work, and C-g will be liable to cause a loss of output which
|
|
482 will produce garbage on the screen. (These problems apply to 4.2BSD;
|
|
483 they may not happen in 4.3 or VMS, and I don't know what would happen
|
|
484 in sysV.) You can use keyboard-translate-table, as shown above,
|
|
485 to map two other input characters (such as C-^ and C-\) into C-s and
|
|
486 C-q, so that you can still search and quote.
|
|
487
|
|
488 I have no intention of ever redisigning the Emacs command set for
|
|
489 the assumption that terminals use C-s/C-q flow control. This
|
|
490 flow control technique is a bad design, and terminals that need
|
|
491 it are bad merchandise and should not be purchased. If you can
|
|
492 get some use out of GNU Emacs on inferior terminals, I am glad,
|
|
493 but I will not make Emacs worse for properly designed systems
|
|
494 for the sake of inferior systems.
|
|
495
|
|
496 * Control-S and Control-Q commands are ignored completely.
|
|
497
|
|
498 For some reason, your system is using brain-damaged C-s/C-q flow
|
|
499 control despite Emacs's attempts to turn it off. Perhaps your
|
|
500 terminal is connected to the computer through a concentrator
|
|
501 that wants to use flow control.
|
|
502
|
|
503 You should first try to tell the concentrator not to use flow control.
|
|
504 If you succeed in this, try making the terminal work without
|
|
505 flow control, as described in the preceding section.
|
|
506
|
|
507 If that line of approach is not successful, map some other characters
|
|
508 into C-s and C-q using keyboard-translate-table. The example above
|
|
509 shows how to do this with C-^ and C-\.
|
|
510
|
|
511 * Control-S and Control-Q commands are ignored completely on a net connection.
|
|
512
|
|
513 Some versions of rlogin (and possibly telnet) do not pass flow
|
|
514 control characters to the remote system to which they connect.
|
|
515 On such systems, emacs on the remote system cannot disable flow
|
|
516 control on the local system.
|
|
517
|
|
518 One way to cure this is to disable flow control on the local host
|
|
519 (the one running rlogin, not the one running rlogind) using the
|
|
520 stty command, before starting the rlogin process. On many systems,
|
|
521 "stty start u stop u" will do this.
|
|
522
|
|
523 Some versions of tcsh will prevent even this from working. One way
|
|
524 around this is to start another shell before starting rlogin, and
|
|
525 issue the stty command to disable flow control from that shell.
|
|
526
|
|
527 * Screen is updated wrong, but only on one kind of terminal.
|
|
528
|
|
529 This could mean that the termcap entry you are using for that
|
|
530 terminal is wrong, or it could mean that Emacs has a bug handing
|
|
531 the combination of features specified for that terminal.
|
|
532
|
|
533 The first step in tracking this down is to record what characters
|
|
534 Emacs is sending to the terminal. Execute the Lisp expression
|
|
535 (open-termscript "./emacs-script") to make Emacs write all
|
|
536 terminal output into the file ~/emacs-script as well; then do
|
|
537 what makes the screen update wrong, and look at the file
|
|
538 and decode the characters using the manual for the terminal.
|
|
539 There are several possibilities:
|
|
540
|
|
541 1) The characters sent are correct, according to the terminal manual.
|
|
542
|
|
543 In this case, there is no obvious bug in Emacs, and most likely you
|
|
544 need more padding, or possibly the terminal manual is wrong.
|
|
545
|
|
546 2) The characters sent are incorrect, due to an obscure aspect
|
|
547 of the terminal behavior not described in an obvious way
|
|
548 by termcap.
|
|
549
|
|
550 This case is hard. It will be necessary to think of a way for
|
|
551 Emacs to distinguish between terminals with this kind of behavior
|
|
552 and other terminals that behave subtly differently but are
|
|
553 classified the same by termcap; or else find an algorithm for
|
|
554 Emacs to use that avoids the difference. Such changes must be
|
|
555 tested on many kinds of terminals.
|
|
556
|
|
557 3) The termcap entry is wrong.
|
|
558
|
|
559 See the file etc/TERMS for information on changes
|
|
560 that are known to be needed in commonly used termcap entries
|
|
561 for certain terminals.
|
|
562
|
|
563 4) The characters sent are incorrect, and clearly cannot be
|
|
564 right for any terminal with the termcap entry you were using.
|
|
565
|
|
566 This is unambiguously an Emacs bug, and can probably be fixed
|
|
567 in termcap.c, tparam.c, term.c, scroll.c, cm.c or dispnew.c.
|
|
568
|
|
569 * Output from Control-V is slow.
|
|
570
|
|
571 On many bit-map terminals, scrolling operations are fairly slow.
|
|
572 Often the termcap entry for the type of terminal in use fails
|
|
573 to inform Emacs of this. The two lines at the bottom of the screen
|
|
574 before a Control-V command are supposed to appear at the top after
|
|
575 the Control-V command. If Emacs thinks scrolling the lines is fast,
|
|
576 it will scroll them to the top of the screen.
|
|
577
|
|
578 If scrolling is slow but Emacs thinks it is fast, the usual reason is
|
|
579 that the termcap entry for the terminal you are using does not
|
|
580 specify any padding time for the `al' and `dl' strings. Emacs
|
|
581 concludes that these operations take only as much time as it takes to
|
|
582 send the commands at whatever line speed you are using. You must
|
|
583 fix the termcap entry to specify, for the `al' and `dl', as much
|
|
584 time as the operations really take.
|
|
585
|
|
586 Currently Emacs thinks in terms of serial lines which send characters
|
|
587 at a fixed rate, so that any operation which takes time for the
|
|
588 terminal to execute must also be padded. With bit-map terminals
|
|
589 operated across networks, often the network provides some sort of
|
|
590 flow control so that padding is never needed no matter how slow
|
|
591 an operation is. You must still specify a padding time if you want
|
|
592 Emacs to realize that the operation takes a long time. This will
|
|
593 cause padding characters to be sent unnecessarily, but they do
|
|
594 not really cost much. They will be transmitted while the scrolling
|
|
595 is happening and then discarded quickly by the terminal.
|
|
596
|
|
597 Most bit-map terminals provide commands for inserting or deleting
|
|
598 multiple lines at once. Define the `AL' and `DL' strings in the
|
|
599 termcap entry to say how to do these things, and you will have
|
|
600 fast output without wasted padding characters. These strings should
|
|
601 each contain a single %-spec saying how to send the number of lines
|
|
602 to be scrolled. These %-specs are like those in the termcap
|
|
603 `cm' string.
|
|
604
|
|
605 You should also define the `IC' and `DC' strings if your terminal
|
|
606 has a command to insert or delete multiple characters. These
|
|
607 take the number of positions to insert or delete as an argument.
|
|
608
|
|
609 A `cs' string to set the scrolling region will reduce the amount
|
|
610 of motion you see on the screen when part of the screen is scrolled.
|
|
611
|
|
612 * Your Delete key sends a Backspace to the terminal, using an AIXterm.
|
|
613
|
|
614 The solution is to include in your .Xdefaults the lines:
|
|
615
|
|
616 *aixterm.Translations: #override <Key>BackSpace: string(0x7f)
|
|
617 aixterm*ttyModes: erase ^?
|
|
618
|
|
619 This makes your Backspace key send DEL (ASCII 127).
|
|
620
|
|
621 * You type Control-H (Backspace) expecting to delete characters.
|
|
622
|
|
623 Put `stty dec' in your .login file and your problems will disappear
|
|
624 after a day or two.
|
|
625
|
|
626 The choice of Backspace for erasure was based on confusion, caused by
|
|
627 the fact that backspacing causes erasure (later, when you type another
|
|
628 character) on most display terminals. But it is a mistake. Deletion
|
|
629 of text is not the same thing as backspacing followed by failure to
|
|
630 overprint. I do not wish to propagate this confusion by conforming
|
|
631 to it.
|
|
632
|
|
633 For this reason, I believe `stty dec' is the right mode to use,
|
|
634 and I have designed Emacs to go with that. If there were a thousand
|
|
635 other control characters, I would define Control-h to delete as well;
|
|
636 but there are not very many other control characters, and I think
|
|
637 that providing the most mnemonic possible Help character is more
|
|
638 important than adapting to people who don't use `stty dec'.
|
|
639
|
|
640 If you are obstinate about confusing buggy overprinting with deletion,
|
|
641 you can redefine Backspace in your .emacs file:
|
|
642 (global-set-key "\b" 'delete-backward-char)
|
|
643 You may then wish to put the function help-command on some
|
|
644 other key. I leave to you the task of deciding which key.
|
|
645
|
|
646 * Editing files through RFS gives spurious "file has changed" warnings.
|
|
647 It is possible that a change in Emacs 18.37 gets around this problem,
|
|
648 but in case not, here is a description of how to fix the RFS bug that
|
|
649 causes it.
|
|
650
|
|
651 There was a serious pair of bugs in the handling of the fsync() system
|
|
652 call in the RFS server.
|
|
653
|
|
654 The first is that the fsync() call is handled as another name for the
|
|
655 close() system call (!!). It appears that fsync() is not used by very
|
|
656 many programs; Emacs version 18 does an fsync() before closing files
|
|
657 to make sure that the bits are on the disk.
|
|
658
|
|
659 This is fixed by the enclosed patch to the RFS server.
|
|
660
|
|
661 The second, more serious problem, is that fsync() is treated as a
|
|
662 non-blocking system call (i.e., it's implemented as a message that
|
|
663 gets sent to the remote system without waiting for a reply). Fsync is
|
|
664 a useful tool for building atomic file transactions. Implementing it
|
|
665 as a non-blocking RPC call (when the local call blocks until the sync
|
|
666 is done) is a bad idea; unfortunately, changing it will break the RFS
|
|
667 protocol. No fix was supplied for this problem.
|
|
668
|
|
669 (as always, your line numbers may vary)
|
|
670
|
|
671 % rcsdiff -c -r1.2 serversyscall.c
|
|
672 RCS file: RCS/serversyscall.c,v
|
|
673 retrieving revision 1.2
|
|
674 diff -c -r1.2 serversyscall.c
|
|
675 *** /tmp/,RCSt1003677 Wed Jan 28 15:15:02 1987
|
|
676 --- serversyscall.c Wed Jan 28 15:14:48 1987
|
|
677 ***************
|
|
678 *** 163,169 ****
|
|
679 /*
|
|
680 * No return sent for close or fsync!
|
|
681 */
|
|
682 ! if (syscall == RSYS_close || syscall == RSYS_fsync)
|
|
683 proc->p_returnval = deallocate_fd(proc, msg->m_args[0]);
|
|
684 else
|
|
685 {
|
|
686 --- 166,172 ----
|
|
687 /*
|
|
688 * No return sent for close or fsync!
|
|
689 */
|
|
690 ! if (syscall == RSYS_close)
|
|
691 proc->p_returnval = deallocate_fd(proc, msg->m_args[0]);
|
|
692 else
|
|
693 {
|
|
694
|
|
695 * ld complains because `alloca' is not defined on your system.
|
|
696
|
|
697 Alloca is a library function in 4.2bsd, which is used very heavily by
|
|
698 GNU Emacs. Use of malloc instead is very difficult, as you would have
|
|
699 to arrange for the storage to be freed, and do so even in the case of
|
|
700 a longjmp happening inside a subroutine. Many subroutines in Emacs
|
|
701 can do longjmp.
|
|
702
|
|
703 If your system does not support alloca, try defining the symbol
|
|
704 C_ALLOCA in the m-...h file for that machine. This will enable the use
|
|
705 in Emacs of a portable simulation for alloca. But you will find that
|
|
706 Emacs's performance and memory use improve if you write a true
|
|
707 alloca in assembler language.
|
|
708
|
|
709 alloca (N) should return the address of an N-byte block of memory
|
|
710 added dynamically to the current stack frame.
|
|
711
|
|
712 * Vax C compiler bugs affecting Emacs.
|
|
713
|
|
714 You may get one of these problems compiling Emacs:
|
|
715
|
|
716 foo.c line nnn: compiler error: no table entry for op STASG
|
|
717 foo.c: fatal error in /lib/ccom
|
|
718
|
|
719 These are due to bugs in the C compiler; the code is valid C.
|
|
720 Unfortunately, the bugs are unpredictable: the same construct
|
|
721 may compile properly or trigger one of these bugs, depending
|
|
722 on what else is in the source file being compiled. Even changes
|
|
723 in header files that should not affect the file being compiled
|
|
724 can affect whether the bug happens. In addition, sometimes files
|
|
725 that compile correctly on one machine get this bug on another machine.
|
|
726
|
|
727 As a result, it is hard for me to make sure this bug will not affect
|
|
728 you. I have attempted to find and alter these constructs, but more
|
|
729 can always appear. However, I can tell you how to deal with it if it
|
|
730 should happen. The bug comes from having an indexed reference to an
|
|
731 array of Lisp_Objects, as an argument in a function call:
|
|
732 Lisp_Object *args;
|
|
733 ...
|
|
734 ... foo (5, args[i], ...)...
|
|
735 putting the argument into a temporary variable first, as in
|
|
736 Lisp_Object *args;
|
|
737 Lisp_Object tem;
|
|
738 ...
|
|
739 tem = args[i];
|
|
740 ... foo (r, tem, ...)...
|
|
741 causes the problem to go away.
|
|
742 The `contents' field of a Lisp vector is an array of Lisp_Objects,
|
|
743 so you may see the problem happening with indexed references to that.
|
|
744
|
|
745 * 68000 C compiler problems
|
|
746
|
|
747 Various 68000 compilers have different problems.
|
|
748 These are some that have been observed.
|
|
749
|
|
750 ** Using value of assignment expression on union type loses.
|
|
751 This means that x = y = z; or foo (x = z); does not work
|
|
752 if x is of type Lisp_Object.
|
|
753
|
|
754 ** "cannot reclaim" error.
|
|
755
|
|
756 This means that an expression is too complicated. You get the correct
|
|
757 line number in the error message. The code must be rewritten with
|
|
758 simpler expressions.
|
|
759
|
|
760 ** XCONS, XSTRING, etc macros produce incorrect code.
|
|
761
|
|
762 If temacs fails to run at all, this may be the cause.
|
|
763 Compile this test program and look at the assembler code:
|
|
764
|
|
765 struct foo { char x; unsigned int y : 24; };
|
|
766
|
|
767 lose (arg)
|
|
768 struct foo arg;
|
|
769 {
|
|
770 test ((int *) arg.y);
|
|
771 }
|
|
772
|
|
773 If the code is incorrect, your compiler has this problem.
|
|
774 In the XCONS, etc., macros in lisp.h you must replace (a).u.val with
|
|
775 ((a).u.val + coercedummy) where coercedummy is declared as int.
|
|
776
|
|
777 This problem will not happen if the m-...h file for your type
|
|
778 of machine defines NO_UNION_TYPE. That is the recommended setting now.
|
|
779
|
|
780 * C compilers lose on returning unions
|
|
781
|
|
782 I hear that some C compilers cannot handle returning
|
|
783 a union type. Most of the functions in GNU Emacs return
|
|
784 type Lisp_Object, which is currently defined as a union.
|
|
785
|
|
786 This problem will not happen if the m-...h file for your type
|
|
787 of machine defines NO_UNION_TYPE. That is the recommended setting now.
|
|
788
|