|
|
1.1 ! root 1: BABYL OPTIONS: ! 2: Version: 5 ! 3: Labels: ! 4: Note: This is the header of an rmail file. ! 5: Note: If you are seeing it in rmail, ! 6: Note: it means the file has no messages in it. ! 7: ! 8: 1,, ! 9: Received: from ATHENA (ATHENA.MIT.EDU) by prep; Thu, 19 Dec 85 23:09:34 est ! 10: Received: from PARIS (PARIS.MIT.EDU) by ATHENA (4.12/4.7) ! 11: id AA02786; Thu, 19 Dec 85 23:07:35 est ! 12: From: [email protected] (Yakim Martillo) ! 13: Received: by PARIS (5.15/4.7) ! 14: id AA24170; Thu, 19 Dec 85 23:07:36 EST ! 15: Date: Thu, 19 Dec 85 23:07:36 EST ! 16: Message-Id: <8512200407.AA24170@PARIS> ! 17: To: rms@prep ! 18: Cc: lbm ! 19: Subject: Gnu Emacs + X documentation ! 20: ! 21: *** EOOH *** ! 22: From: [email protected] (Yakim Martillo) ! 23: Date: Thu, 19 Dec 85 23:07:36 EST ! 24: To: rms@prep ! 25: Cc: lbm ! 26: Subject: Gnu Emacs + X documentation ! 27: ! 28: ! 29: This is the start of my X documentation. ! 30: ! 31: I have not finished the last five sections yet. Please give me some ! 32: suggestions. ! 33: ! 34: Joachim ! 35: ! 36: ! 37: Special Terminal Interfaces ! 38: ! 39: Some terminals provide special capabilities which can be more ! 40: effectively used via specially written C functions rather than normal ! 41: termcap processing. To ease the use of these capabilities and aid the ! 42: integration of these C functions, special terminal hooks are provided. ! 43: ! 44: The hooks are all externed in the source header file termhooks.h. ! 45: To determine the arguments, the interested user who wishes to develop ! 46: a special terminal interface should consult term.c. ! 47: For proper functioning of the user defined C termhook functions, the ! 48: user should make certain that the terminal characteristics as externed ! 49: in termchar.h are properly set. ! 50: ! 51: Examples of how to use the termhooks can be found in xterm.c which ! 52: contains the Gnu Emacs to X interface. ! 53: ! 54: Gnu Emacs to X Interface ! 55: ! 56: The termhooks feature has enough power that termhooks need not be ! 57: restricted merely to the employment of special terminal capabilities. ! 58: Termhooks can be used to interface Gnu Emacs to special graphics ! 59: devices or window systems. Gnu Emacs interfaces with not a great deal ! 60: of difficulty to the MIT/Project Athena X Window system. With not too ! 61: much effort, a competent hacker should be able to interface Gnu Emacs ! 62: to the Sun, Apollo, or Blit Window systems. ! 63: ! 64: What is X? ! 65: ! 66: X is a network transparent window system developed at MIT by Bob ! 67: Scheiffler, Jim Gettys, Tony della Fera, Ron Newman and others. X is ! 68: a descendent of the Stanford V kernal system and Gosling's rectangle ! 69: management system. X has a standard protocol for communication with ! 70: an X server which talks to the high resolution graphics device driver. ! 71: The X developers have supplied a library libX.a which provides library ! 72: routines to handle typical graphics/window system commands. X is ! 73: network transparent in that a process running on a machine which wants ! 74: to make use of a high resolution graphics device will establish a ! 75: network connection to the X server which talks to the driver for that ! 76: device. The process will be a client of the X server. Since LAN's ! 77: typically can move data at megabit rates, running a window system in ! 78: this fashion has many advantages. For more information about X, ! 79: hackers are directed to "Xlib - C Language X Interface Version (?)" ! 80: written by Jim Gettys (DEC/MIT) and Ron Newman (MIT). ! 81: ! 82: New Functionality of Gnu Emacs + X ! 83: ! 84: Gnu Emacs running as a client of X provides very rapid line insertion ! 85: and deletion because bit blit commands are sent to the server and the ! 86: driver simply tells the device to move the pixels on the screen ! 87: directly. In fact, Gnu Emacs running under the xterm terminal ! 88: emulator can also cause bit blts to take place but bit blits via the ! 89: terminal emulator are rather slow because of escape sequence parsing ! 90: overhead in the terminal emulator and because of context switching ! 91: overhead as the bits take a merry trip through the pty interfaces and ! 92: drivers. ! 93: ! 94: Gnu Emacs runs in its own X window and therefore no information is ! 95: lost from the xterm session from which the user invoked Gnu Emacs. ! 96: Gnu Emacs should probably be run in background from the parent X ! 97: session because then the user may continue to do more work in the ! 98: parent xterm session. As Gnu Emacs should be run in background, the ! 99: lisp form ! 100: (put 'suspend-emacs 'disabled t) ! 101: is passed to the Gnu Emacs lisp interpreter when Gnu Emacs is invoked ! 102: from an xterm terminal emulator. Should the user accidently type the ! 103: key sequence for suspend-emacs (initially C-z or C-XC-z), he will be ! 104: queried whether he truly wishes to suspend emacs. Unless the user is ! 105: confident he should reply n (= no). ! 106: ! 107: If the user has an X window manager running, the user can resize the ! 108: Gnu Emacs window using the usual mouse sequences which have been ! 109: grabbed by the window manager. Gnu Emacs then automatically resizes ! 110: itself and updates the display. ! 111: ! 112: By using the mouse window manager commands, the user can cause ! 113: formerly obscured sections of the Gnu Emacs window to be uncovered. ! 114: These sections have to be repainted. Since Gnu Emacs creates the Gnu ! 115: Emacs window by its lonesome, Gnu Emacs must repaint these sections of ! 116: the window all by itself. If Gnu Emacs is chugging away on some ! 117: global regexp replacement, Gnu Emacs may take its time in repainting ! 118: the display. (Similar repainting may take place on bit blits.) ! 119: ! 120: With the Gnu Emacs to X interface the mouse becomes even more ! 121: powerful. Some mouse events (basically the ones not grabbed by the ! 122: window manager) are passed to Gnu Emacs. Gnu Emacs is informed of the ! 123: reception of such events because it receives the key sequence C-cC-m. ! 124: Therefore a user who wishes to use the Gnu Emacs to X interface should ! 125: not rebind this key sequence to any function. ! 126: ! 127: This key sequence is bound to the lisp function x-mouse-mode which ! 128: goes and checks the special X Mouse Queue for mouse events. Each ! 129: control/shift/meta-mouse button sequence is associated with a defined ! 130: constant in the lisp file x-mouse.el. The constants are defined as ! 131: follows: ! 132: ! 133: (defconst x-button-right (char-to-string 0)) ! 134: (defconst x-button-middle (char-to-string 1)) ! 135: (defconst x-button-left (char-to-string 2)) ! 136: ! 137: (defconst x-button-s-right (char-to-string 16)) ! 138: (defconst x-button-s-middle (char-to-string 17)) ! 139: (defconst x-button-s-left (char-to-string 18)) ! 140: ! 141: (defconst x-button-m-right (char-to-string 32)) ! 142: (defconst x-button-m-middle (char-to-string 33)) ! 143: (defconst x-button-m-left (char-to-string 34)) ! 144: ! 145: (defconst x-button-c-right (char-to-string 64)) ! 146: (defconst x-button-c-middle (char-to-string 65)) ! 147: (defconst x-button-c-left (char-to-string 66)) ! 148: ! 149: (defconst x-button-m-s-right (char-to-string 48)) ! 150: (defconst x-button-m-s-middle (char-to-string 49)) ! 151: (defconst x-button-m-s-left (char-to-string 50)) ! 152: ! 153: (defconst x-button-c-s-right (char-to-string 80)) ! 154: (defconst x-button-c-s-middle (char-to-string 81)) ! 155: (defconst x-button-c-s-left (char-to-string 82)) ! 156: ! 157: (defconst x-button-c-m-right (char-to-string 96)) ! 158: (defconst x-button-c-m-middle (char-to-string 97)) ! 159: (defconst x-button-c-m-left (char-to-string 98)) ! 160: ! 161: (defconst x-button-c-m-s-right (char-to-string 112)) ! 162: (defconst x-button-c-m-s-middle (char-to-string 113)) ! 163: (defconst x-button-c-m-s-left (char-to-string 114)). ! 164: ! 165: To understand why these constants are so defined, the user should ! 166: check out the (C) definition of the lisp function x-mouse-mode in the ! 167: src file xfns.c. (I, Joachim Martillo not RMS, do not claim ! 168: this code handles mouse events in the best way possible, and all ! 169: involved with maintaining the Gnu Emacs to X interface would be open ! 170: to suggestions for improvement.) ! 171: ! 172: Anyway, using these defined constants, the user may bind his own ! 173: defined functions to mouse sequences using the define-key command as ! 174: below: ! 175: ! 176: (define-key mouse-map x-button-right 'x-mouse-select). ! 177: ! 178: Mouse functions are defined like any of the other lisp functions in ! 179: Gnu Emacs. ! 180: ! 181: Here, exempli gratia, is the lisp definition of x-mouse-select: ! 182: ! 183: (defun x-mouse-select (arg) ! 184: "Select Emacs window the mouse is on." ! 185: (let ((start-w (selected-window)) ! 186: (done nil) ! 187: (w (selected-window)) ! 188: (rel-coordinate nil)) ! 189: (while (and (not done) ! 190: (null (setq rel-coordinate ! 191: (coordinates-in-window-p arg w)))) ! 192: (setq w (next-window w)) ! 193: (if (eq w start-w) ! 194: (setq done t))) ! 195: (select-window w) ! 196: rel-coordinate)). ! 197: ! 198: When the mouse sequence is received, x-mouse-mode checks out the mouse ! 199: queue, sees the defined constant associated with that button event, ! 200: looks up that defined constants binding in the mouse-map and then ! 201: invokes this lisp function with arg which is a list of the x and y ! 202: coordinates of the mouse when the mouse event under question took ! 203: place. The lisp symbol arg is bound to (x-coordinate y-coordinate). ! 204: ! 205: The supplied mouse-functions and bindings are: ! 206: ! 207: x-cut-and-wipe-text ! 208: Function: Kill text between point and mouse; also copy to ! 209: window system cut buffer. ! 210: Binding: C-Middle Button. ! 211: ! 212: x-cut-text ! 213: Function: Copy text between point and mouse position into ! 214: window system cut buffer. ! 215: Binding: S-Middle Button (i.e. Shift-Middle Button). ! 216: ! 217: x-mouse-keep-one-window ! 218: Function: Select Emacs window mouse is on, then kill all other Emacs ! 219: windows. ! 220: Binding: C-S-Right Button. ! 221: ! 222: x-mouse-select ! 223: Function: Select Emacs window the mouse is on. ! 224: Binding: Right Button. ! 225: ! 226: x-mouse-select-and-split ! 227: Function: Select Emacs window mouse is on, then split it vertically ! 228: in half. ! 229: Binding: C-Right Button. ! 230: ! 231: x-mouse-set-mark ! 232: Function: Select Emacs window mouse is on, and set mark at mouse ! 233: position. ! 234: Binding: Left Button. ! 235: x-mouse-set-point ! 236: Function: Select Emacs window mouse is on, and move point to mouse ! 237: position. ! 238: Binding: Middle Button. ! 239: ! 240: x-paste-text ! 241: Function: Move point to mouse position and insert window system cut ! 242: buffer contents. ! 243: Binding: S-Right Button. ! 244: ! 245: These functions are invoked simply by positioning the mouse and then ! 246: pressing the correct key/button combination. ! 247: ! 248: The cut and paste functions deserve special remark. The X server ! 249: maintains special buffers where data may be salted away. One client ! 250: may salt data away in a cut buffer. Then another client could request ! 251: this data. In emacs, data is salted away, by setting the point (you ! 252: could use the mouse to set the point) then moving the mouse to the end ! 253: (or beginning) of the text to be salted away and pressing shift ! 254: middle. If the text should be wiped out of the buffer as well as ! 255: salted away, C-Middle Button should be used instead of S-Middle ! 256: Button. To get the text back into this emacs or another emacs, move ! 257: the mouse to where the text should be inserted and invoke x-paste-text ! 258: via S-Right Button. The text can be pasted into any client of the ! 259: current X server from the current cut buffer using that client's paste ! 260: command. For xterm the paste command is also S-Right Button. ! 261: ! 262: Other Gnu Emacs Lisp Functions ! 263: ! 264: Command Line Arguments ! 265: ! 266: .emacs File ! 267: ! 268: x-switches ! 269: ! 270: .Xdefaults ! 271: ! 272: ! 273: 1,, ! 274: Summary-line: 19-Dec [email protected] #GNU Emacs under X Writeup for Manual ! 275: Received: from ATHENA (ATHENA.MIT.EDU) by prep; Thu, 19 Dec 85 15:57:34 est ! 276: Received: from JASON (JASON.MIT.EDU) by ATHENA (4.12/4.7) ! 277: id AA12646; Thu, 19 Dec 85 15:55:53 est ! 278: Received: by JASON (5.15/4.7) ! 279: id AA20416; Thu, 19 Dec 85 15:55:40 EST ! 280: Message-Id: <8512192055.AA20416@JASON> ! 281: To: rms@prep ! 282: Cc: tower@prep ! 283: Subject: GNU Emacs under X Writeup for Manual ! 284: Date: 19 Dec 85 15:55:33 EST (Thu) ! 285: From: Linda B. Merims <[email protected]> ! 286: ! 287: *** EOOH *** ! 288: To: rms@prep ! 289: Cc: tower@prep ! 290: Subject: GNU Emacs under X Writeup for Manual ! 291: Date: 19 Dec 85 15:55:33 EST (Thu) ! 292: From: Linda B. Merims <[email protected]> ! 293: ! 294: ! 295: Here's something you can put in the V17 manual to describe GNU Emacs under ! 296: X. I've added a couple of notes to you about things that didn't work ! 297: when I tried them. It has no formatting commands in it. I ! 298: don't know if we followed your naming conventions. It is important ! 299: for us to distinguish between "gnuemacs" and "emacs" for the next ! 300: six months while we convert our 2000+ users over from CCA, so I mention ! 301: that at MIT's Project Athena, things are a little different for ! 302: a short while. ! 303: ! 304: I didn't put in anything about X-specific variables. I don't know ! 305: anything about them. I'm also a bit colloquial in places, to make ! 306: my point better with novices (who, for example, understand "cursor" better ! 307: than "point".) I also didn't document the -d display command option. ! 308: Nor are there any credits to, for example, Joachim Martillo. Up to you. ! 309: ! 310: Hope this does you good. ! 311: ! 312: Linda Merims ! 313: ! 314: ! 315: ---------------------------------------------------------------- ! 316: GNU Emacs on X Window System Displays ! 317: ! 318: ! 319: GNU Emacs works with the X window system. It starts ! 320: by "popping up" a new window on the screen. This can be a bit ! 321: disconcerting if you're not used to it. If you're on one of these ! 322: terminals, the easiest way to start up GNU Emacs is to type the same command ! 323: you would before, but to follow it with a &, as in: ! 324: ! 325: emacs paper.mss & ! 326: ! 327: The "&" runs GNU Emacs in the "background," freeing your original ! 328: window for other uses. (There are X-specific options to the Gnuemacs ! 329: commands that will be listed later.) ! 330: ! 331: NOTE: GNU Emacs may be invoked by ! 332: different names at different sites. It is sometimes known ! 333: as xemacs. At MIT's Project Athena where GNU Emacs was first ! 334: adapted to X, the correct command is: gnuemacs until summer ! 335: 1986, when it will become just: emacs. ! 336: ! 337: Soon, you will see a small black box in the upper left hand corner of your ! 338: screen that reads, "emacs: 10 x 10". (This number represents ! 339: columns x rows.) You'll also see a small outline of a window with ! 340: a cross in the upper left hand corner of it. This is where the upper ! 341: left hand corner of your window will be. You can move this cross with ! 342: the mouse to any spot on the screen. You can then do one of three ! 343: things: ! 344: ! 345: make an 80 column by 24 row emacs window -- click the left mouse button ! 346: ! 347: make an 80 column by 65 row emacs window -- click the right mouse button ! 348: (the length will actually be however many lines long your screen ! 349: can hold. 80 by 66 is about the size of an 8 1/2 x 11 piece of paper.) ! 350: ! 351: make any size emacs window you want -- hold down the middle mouse button ! 352: and move the mouse to create a window of any size. As you move the ! 353: mouse, the numbers in the upper left hand corner of the screen and ! 354: the rubber-band outline will expand or contract. Just release the ! 355: button when the window is the size you want. ! 356: ! 357: Unless you make the window in any area that does not overlap any other ! 358: windows, you may have problems when you want to get back to a window ! 359: obscured by the GNU Emacs window. You need to know how to use the X ! 360: window manager, xwm, to move and shuffle these windows around. For ! 361: more information on the window manager, you can type man xwm, on ! 362: any Berkeley 4.3 Unix system with this user-contributed (/usr/new) ! 363: utility available. ! 364: ! 365: Note that you cannot suspend (C-Z) a GNU emacs X window. ! 366: ! 367: ! 368: ! 369: GNU Emacs and the X Mouse ! 370: ! 371: When using GNU Emacs on an X terminal, you can take advantage of the ! 372: convenient, quick commands for moving point, setting the mark, and ! 373: cutting and pasting text. You issue these commands by pressing ! 374: the mouse's buttons alone or in concert with the SHIFT, CTRL, or ! 375: SHIFT-CTRL keys as follows: ! 376: ! 377: left set mark ('x-mouse-set-mark) (RMS, this blinked cursor but didn't ! 378: actually set anything...lbm) ! 379: ! 380: middle move the cursor (point) to where the mouse is. This is ! 381: like moving the cursor with C-F or C-N or the arrow keys, ! 382: only immediate. ('x-mouse-set-point) ! 383: ! 384: right move to the window where the mouse is. Point is in the same ! 385: place as it was the last time you were in the window. ! 386: ('x-mouse-select) ! 387: ! 388: ! 389: SHIFT-left ! 390: undefined ! 391: ! 392: SHIFT-middle ! 393: take the text between point and mark and put it into the ! 394: X cut buffer. The text does NOT disappear from the screen. ! 395: It does NOT go into the emacs kill right. Used for copying ! 396: text. Recall text with SHIFT-right below. ('x-cut-text) ! 397: ! 398: SHIFT-right ! 399: paste text from the X cut buffer to before point. ('x-paste-text) ! 400: ! 401: ! 402: CTRL-left ! 403: undefined ! 404: ! 405: CTRL-middle ! 406: take the text between point and mark and put it into the ! 407: X cut buffer, AND the emacs kill ring. Text is deleted ! 408: from the screen. Used for moving text. Recall text with ! 409: SHIFT-right above, or any emacs kill ring command. ! 410: ('x-cut-and-wipe-text) ! 411: ! 412: CTRL-right ! 413: divide current window in two. ('x-mouse-select-and-split) ! 414: ! 415: ! 416: CTRL-SHIFT-middle ! 417: return to one-window mode, keeping the window the mouse is ! 418: in. ('x-mouse-keep-one-window)(RMS, this didn't always work...lbm) ! 419: ! 420: ! 421: ! 422: Emacs Command X Window Options ! 423: ! 424: These command options have meaning to the X window system: ! 425: ! 426: -r use reverse video (white characters on black background) ! 427: ! 428: -i use GNU emacs's bitmap icon (a kitchen sink) if the emacs ! 429: window is iconized instead of the xwm window manager default. ! 430: ! 431: -font fontname ! 432: use fontname instead of the default vtsingle ! 433: ! 434: -b borderwidth ! 435: make the window border borderwidth pixels wide. Default is 1. ! 436: ! 437: -w windowsize ! 438: instead of relying on the mouse buttons to determine size and ! 439: placement of the GNU emacs window, make it this size. Size ! 440: is specified as: ! 441: ! 442: =[WIDTH][xHEIGHT][{+-}XOFF[{+-}YOFF]] ! 443: ! 444: The []'s denote optional stuff, the {}'s surround ! 445: alternatives. WIDTH and HEIGHT are in number of ! 446: characters, XOFF and YOFF are in pixels. X and YOFF are ! 447: the xy offsets from the upper left corner origin for the ! 448: upper left corner of the window. ! 449: ! 450: ! 451: GNU Emacs will check in the .Xdefaults file for default values for ! 452: these variables. (RMS, we're not sure what program name it's ! 453: going to be looking for...lbm) ! 454: ! 455: ! 456: GNU Emacs under X Variables ! 457: ! 458: I don't know what these are. Sorry. ! 459: ! 460: ! 461:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.