Annotation of GNUtools/emacs/etc/SUN-SUPPORT, revision 1.1

1.1     ! root        1: NOTE: the Free Software Foundation agreed to put this file, and the
        !             2: programs it describes, into the Emacs distribution ONLY on the
        !             3: condition that we would not lift a finger to maintain them!  We are
        !             4: willing to *pass along* support for Sun windows, but we are not
        !             5: willing to let it distract us from what we are trying to do.  If you
        !             6: have complaints or suggestions about Sun windows support, send them to
        !             7: [email protected], who is the maintainer.
        !             8: 
        !             9: 
        !            10: The interface between GNU Emacs and Sun windows consists of the program
        !            11: etc/emacstool, the Lisp programs lisp/sun-*.el and lisp/term/sun.el,
        !            12: and the C source file src/sunfns.c.  It is documented with a man page,
        !            13: etc/emacstool.1.
        !            14: 
        !            15: To enable use of these files and programs, define the configuration
        !            16: switch HAVE_SUN_WINDOWS in src/config.h before compiling Emacs.
        !            17: The definition of HAVE_SUN_WINDOWS must precede the #include m-sun3.h
        !            18: or #include m-sun4.h.
        !            19: If you must change PURESIZE, do so after the #include m-sun3.h
        !            20: 
        !            21: This software is based on SunView for Sun UNIX 4.2 Release 3.2,
        !            22: and will not work "as is" on previous releases, eg 3.0 or 3.1.
        !            23: 
        !            24: Using Emacstool with GNU Emacs:
        !            25: 
        !            26:    The GNU Emacs files lisp/term/sun.el, lisp/sun-mouse.el,
        !            27: lisp/sun-fns.el, and src/sunfns.c provide emacs support for the
        !            28: Emacstool and function keys.  If your terminal type is SUN (that is,
        !            29: if your environment variable TERM is set to SUN), then Emacs will
        !            30: automatically load the file lisp/term/sun.el.  This, in turn, will
        !            31: ensure that sun-mouse.el is autoloaded when any mouse events are
        !            32: detected.  It is suggested that sun-mouse and sun-fns be
        !            33: included in your site-init.el file, so that they will always be loaded
        !            34: when running on a Sun workstation.  [Increase PURESIZE to 154000].
        !            35: 
        !            36:    Support for the Sun function keys requires disconnecting the standard
        !            37: Emacs command Meta-[.  Therefore, the function keys are supported only
        !            38: if you do (setq sun-esc-bracket t) in your .emacs file.
        !            39: 
        !            40:    The file src/sunfns.c defines several useful functions for emacs on
        !            41: the Sun.  Among these are procedures to pop-up SunView menus, put and
        !            42: get from the SunView selection [STUFF] buffer, and a procedure for
        !            43: changing the cursor icon.  If you want to define cursor icons, try
        !            44: using the functions in lisp/sun-cursors.el.
        !            45: 
        !            46:    The file lisp/sun-mouse.el includes a mass of software for defining
        !            47: bindings for mouse events.  Any function can be called or any form
        !            48: evaluated as a result of a mouse event.  If you want a pop-up menu,
        !            49: your function can call sun-menu-evaluate.  This will bring up a
        !            50: SunView walking menu of your choice.
        !            51: 
        !            52:    Use the macro (defmenu menu-name &rest menu-items) to define menu
        !            53: objects.  Each menu item is a cons of ("string" . VALUE), VALUE is
        !            54: evaluated when the string item is picked.  If VALUE is a menu, then a
        !            55: pullright item is created.  
        !            56: 
        !            57:    This version also includes support for copying to and from the
        !            58: sun-windows "stuff" selection.  The keyboard bindings defined in 
        !            59: lisp/sun-fns.el let you move the current region to the "STUFF"
        !            60: selection and vice versa.  Just set point with the left button, set
        !            61: mark with the middle button, (the region is automatically copied to
        !            62: "STUFF") then switch to a shelltool, and "Stuff" will work.  Going the
        !            63: other way, the main right button menu contains a "Stuff Selection"
        !            64: command that works just like in shelltool.  [The Get and Put function
        !            65: keys are also assigned to these functions, so you don't need the mouse
        !            66: or even emacstool to make this work.]
        !            67: 
        !            68:    Until someone write code to read the textsw "Selection Shelf", it is
        !            69: not possible to copy directly from a textsw to emacs, you must go through
        !            70: the textsw "STUFF" selection.
        !            71: 
        !            72:    The Scroll-bar region is not a SunView scrollbar.  It really should
        !            73: be called the "Right-Margin" region.  The scroll bar region is basically
        !            74: the rightmost five columns (see documentation on variable scrollbar-width).
        !            75: Mouse hits in this region can have special bindings, currently those binding
        !            76: effect scrolling of the window, and so are refered to as the "Scroll-bar"
        !            77: region.
        !            78: 
        !            79:    For information on what mouse bindings are in effect, use the command
        !            80: M-x Describe-mouse-bindings, or the quick pop-up menu item "Mouse-Help".
        !            81: 
        !            82: 
        !            83: GNU Emacs EXAMPLES:
        !            84:    See definitions in lisp/sun-fns.el for examples.
        !            85: 
        !            86:    You can redefine the cursor that is displayed in the emacs window.
        !            87: On initialization, it is set to a right arrow.  See lisp/sun-cursors.el
        !            88: for additional cursors, how to define them, how to edit them.
        !            89: 
        !            90: BUGS:
        !            91:     It takes a few milliseconds to create a menu before it pops up.
        !            92: Someone who understands the GNU Garbage Collector might see if it
        !            93: is possible for defmenu to create a SunView menu struct that does
        !            94: not get destroyed by Garbage Collection.
        !            95: 
        !            96:    An outline of the files used to support Sun Windows and the mouse.
        !            97: 
        !            98: etc/SUN-SUPPORT.
        !            99:     This document.
        !           100: 
        !           101: etc/emacstool.1:
        !           102:     Added: an nroff'able man page for emacstool.
        !           103: 
        !           104: etc/emacstool.c:
        !           105:     Encodes all the function keys internally, and passes non-window 
        !           106: system arguments to emacs.
        !           107: 
        !           108: etc/emacs.icon:
        !           109:     The "Kitchen Sink" GNU Emacs icon.
        !           110: 
        !           111: src/sunfns.c:
        !           112:     This contains the auxilary functions that allow elisp code to interact
        !           113: with the sunwindows, selection, and menu functions.
        !           114: 
        !           115: lisp/sun-mouse.el:
        !           116:     Defines the lisp function which is called when a mouse hit is found
        !           117: in the input queue.  This handler decodes the mouse hit via a keymap-like
        !           118: structure sensitive to a particular window and where in the window the
        !           119: hit occured (text-region, right-margin, mode-line).  Three variables
        !           120: are bound (*mouse-window* *mouse-x* *mouse-y*) and the selected function
        !           121: is called. 
        !           122:     See documentation on "define-mouse" or look at lisp/sun-fns.el
        !           123: to see how this is done.
        !           124:     Defines two functions to pass between region and sun-selection
        !           125:     Defines functions for interfacing with the Menu.
        !           126: During menu evaluation, the variables *menu-window* *menu-x* *menu-y* are bound.
        !           127: 
        !           128: lisp/sun-fns.el
        !           129:     The definition of the default menu and mouse function bindings.
        !           130: 
        !           131: lisp/sun-cursors.el
        !           132:     Defines a number of alternate cursors, and an editor for them.
        !           133:     The editor is also a demonstration of mouse/menu utilization.
        !           134: 
        !           135: lisp/term/sun.el
        !           136:     Sets up the keymap to make the sun function keys do useful things.
        !           137: Also includes the setup/initialization code for running under emacstool,
        !           138: which makes "\C-Z" just close the emacstool window (-WI emacs.icon).
        !           139: 
        !           140:        Jeff Peck, Sun Microsystems, Inc                <[email protected]>
        !           141: 
        !           142: 
        !           143: Subject: Making multi-line scrolling really work:
        !           144: 
        !           145: In your .defaults file, include the line:
        !           146: /Tty/Retained  "Yes"
        !           147: That way, the terminal emulator can do text moves using bitblt, 
        !           148: instead of repaint.
        !           149: 
        !           150: If that's not enough for you, then tell unix and emacs that 
        !           151: the sun terminal supports multi-line and multi-character insert/delete.  
        !           152: Add this patch to your /etc/termcap file:
        !           153: 
        !           154: *** /etc/termcap.~1~    Mon Sep 15 12:34:23 1986
        !           155: --- /etc/termcap        Mon Feb  9 17:34:08 1987
        !           156: ***************
        !           157: *** 32,39 ****
        !           158: --- 32,40 ----
        !           159:   Mu|sun|Sun Microsystems Workstation console:\
        !           160:         :am:bs:km:mi:ms:pt:li#34:co#80:cl=^L:cm=\E[%i%d;%dH:\
        !           161:         :ce=\E[K:cd=\E[J:so=\E[7m:se=\E[m:rs=\E[s:\
        !           162:         :al=\E[L:dl=\E[M:im=:ei=:ic=\E[@:dc=\E[P:\
        !           163: +       :AL=\E[%dL:DL=\E[%dM:IC=\E[%d@:DC=\E[%dP:\
        !           164:         :up=\E[A:nd=\E[C:ku=\E[A:kd=\E[B:kr=\E[C:kl=\E[D:\
        !           165:         :k1=\E[224z:k2=\E[225z:k3=\E[226z:k4=\E[227z:k5=\E[228z:\
        !           166:         :k6=\E[229z:k7=\E[230z:k8=\E[231z:k9=\E[232z:
        !           167:   M-|sun-nic|sune|Sun Microsystems Workstation console without insert character:\
        !           168: 
        !           169: 
        !           170: If you don't have the program "patch", just add the line:
        !           171:         :AL=\E[%dL:DL=\E[%dM:IC=\E[%d@:DC=\E[%dP:\
        !           172: 
        !           173: [email protected] says:
        !           174: 
        !           175: Those of you using GNU Emacs on Sun workstations under
        !           176: 3.2 may be interested in reducing memory utilization in
        !           177: the emacstool via the Sun toolmerge facility.  The technique
        !           178: is described in the Release 3.2 Manual starting on page
        !           179: 71.  The following is a summary of how it would apply
        !           180: to merging emacstool into the basetools.
        !           181: 
        !           182: 1) Change the main procedure declaration in emacstool.c to:
        !           183: 
        !           184:    #ifdef SUN_TOOLMERGE
        !           185:    emacstool_main (argc, argv);
        !           186:    #else
        !           187:    main (argc, argv)
        !           188:    #endif
        !           189: 
        !           190:    This will allow creation of either standard or toolmerge
        !           191:    versions.
        !           192: 
        !           193: 2) Copy emacstool.o into directory /usr/src/sun/suntool.
        !           194: 3) make CFLAGS="-g -DSUN_TOOLMERGE" emacstool.o
        !           195: 4) Add the following line to basetools.h
        !           196: 
        !           197:   "emacstool",emacstool_main,
        !           198: 
        !           199: 5) Add the following line to toolmerge.c.
        !           200: 
        !           201:    extern emacstool_main();
        !           202: 
        !           203: 6) make basetools MOREOBJS="emacstool.o"
        !           204: 7) make install_bins
        !           205: 
        !           206: To invoke the toolmerged version, you must exit suntools and
        !           207: re-start it.  Make sure that /usr/bin occurs before the directory
        !           208: in which you installed the standard (non-toolmerged) version.
        !           209: 
        !           210: 
        !           211: Subject: Moving selections between OW and Emacstool/xvetool
        !           212: Date: Wed, 26 Jun 91 18:58:24 PDT
        !           213: From: Jeff Peck <peck>
        !           214: 
        !           215: The short answer is that we can Cut and Paste between Emacstool
        !           216: and TTYSW (shelltool) and we can Paste between Emacstool and TEXTSW(cmdtool)
        !           217: and somewhat more slowly move from TEXTSW to Emacstool.
        !           218: 
        !           219: **** This interaction with the TTYSW selection is a HACK! ****
        !           220: 
        !           221: At end of this message is the code that should be in your sun-mouse.el or .emacs
        !           222: 
        !           223: Here's the restrictions on using it:
        !           224: 
        !           225: 1. from Shelltool to Emacstool:
        !           226:    select text in shelltool and hit COPY.
        !           227:    move to Emacstool, hit PASTE.               (simple, eh?)
        !           228: 
        !           229: For any other movement, you must remember this:
        !           230:    "The window system must believe that a shelltool has the current selection."
        !           231:    If you do that, then this will all work painlessly.
        !           232:    [that will also explain why you can not make a selection in a cmdtool
        !           233:     and then directly PASTE it into Emacstool]
        !           234: 
        !           235: 2. from Emacstool to Shelltool
        !           236:     ensure that a shelltool has the selection: (select something and hit COPY)
        !           237:     in emacstool select a region and hit COPY
        !           238:     in shelltool hit PASTE.                    (not too bad, yet)
        !           239: 
        !           240: 3. from Emacstool to Cmdtool
        !           241:     ensure that a shelltool has the selection:
        !           242:        (in a *shelltool* select something and hit COPY)
        !           243:     in emacstool select a region and hit COPY
        !           244:     in shelltool hit PASTE.                    (ok, its getting crufty)
        !           245: 
        !           246: 4. from Cmdtool to Emacstool
        !           247:     select in Cmdtool, hit COPY
        !           248:     in a shelltool, % cat > /dev/null   
        !           249:        then hit PASTE
        !           250:     Select the text again, from the shelltool this time. hit COPY
        !           251:     in emacstool, hit PASTE
        !           252: 
        !           253: 4a. from Cmdtool (or shelltool) to Emacstool
        !           254:     the function "sunview-yank-any-selection" should be bound to Meta-PASTE
        !           255:     If so, then just:
        !           256:        select in Cmdtool
        !           257:        in emacstool, hit Meta-PASTE
        !           258: 
        !           259:     This uses the function "sunview-yank-current-selection"
        !           260:        which relies one the (supported) utility "get_selection"
        !           261:        As such, it is *not* a hack, but it *IS* SLOW (or slower) 
        !           262: 
        !           263: 
        !           264: If you know that a shelltool *still* has the selection 
        !           265: (note: nothing you do with Emacstool or the PASTE key will affect that) 
        !           266: then the "ensure..." line is a NO-OP.
        !           267: 
        !           268: Note that using COPY in emacstool will change the *value* of the selection
        !           269: behind the window systems back:
        !           270:     the holder of the selection doesn't know of this,
        !           271:     the window system doesn't know of this, 
        !           272:     and the highlighted text *WILL NOT CHANGE*
        !           273: 
        !           274: Turns out the selection value is written into a /tmp/ttyselection file
        !           275: and emacs just rewrites that file, clever, eh?
        !           276: 
        !           277: 
        !           278: Your version of sun-mouse.el should include these functions
        !           279:  (or put them into your .emacs)
        !           280: 
        !           281: 
        !           282: ;;; define the selection file used by this emacs
        !           283: ;;; if not local machine, then automounter must find /net/<host>/tmp
        !           284: (defconst owselectionfile
        !           285:   (let ((display (getenv "DISPLAY")))
        !           286:     (if (null display)
        !           287:        nil ; no DISPLAY variable -- return nil
        !           288:       (let ((colon_at (string-match ":" display)))
        !           289:        (if (null colon_at)
        !           290:            nil ; no colon in environment variable -- return nil
        !           291:          (if (zerop colon_at)
        !           292:              "/tmp/ttyselection" ; colon is first character
        !           293:            (concat "/net/" (substring display 0 colon_at) "/tmp/ttyselection")
        !           294:            )))))
        !           295:   )
        !           296: 
        !           297: (defun xv-yank-selection ()
        !           298:   "Set mark and yank the contents of the current Xview selection
        !           299: into the current buffer at point.  The STUFF selection contains the currently
        !           300: or previously highlighted text from a TTYSW."
        !           301:   (interactive "*")
        !           302:   (insert-file owselectionfile)
        !           303:   (exchange-point-and-mark)
        !           304:   )
        !           305: 
        !           306: (defun xv-select-region (beg end)
        !           307:   "Set the TTYSW selection to the region in the current buffer."
        !           308:   (interactive "r")
        !           309:   (write-region beg end owselectionfile nil 'noprint)
        !           310:   )
        !           311: 
        !           312: You can then bind these to Copy and Paste in your .emacs
        !           313: 
        !           314: (setq suntool-map-hooks '(                     ; not your usual hook list
        !           315:   (define-key suntool-map "fl" 'xv-select-region)      ; L6 Copy 
        !           316:   (define-key suntool-map "hl" 'xv-yank-selection)     ; L8 Paste
        !           317:   )
        !           318: )

unix.superglobalmegacorp.com

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