Annotation of 43BSD/contrib/emacs/etc/XDOC, revision 1.1

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: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.