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