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