home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Geek Gadgets 1
/
ADE-1.bin
/
ade-dist
/
emacs-18.59-bin.lha
/
lib
/
emacs
/
18.59
/
etc
/
SUN-SUPPORT
< prev
next >
Wrap
Lisp/Scheme
|
1992-10-21
|
12KB
|
319 lines
NOTE: the Free Software Foundation agreed to put this file, and the
programs it describes, into the Emacs distribution ONLY on the
condition that we would not lift a finger to maintain them! We are
willing to *pass along* support for Sun windows, but we are not
willing to let it distract us from what we are trying to do. If you
have complaints or suggestions about Sun windows support, send them to
peck@sun.com, who is the maintainer.
The interface between GNU Emacs and Sun windows consists of the program
etc/emacstool, the Lisp programs lisp/sun-*.el and lisp/term/sun.el,
and the C source file src/sunfns.c. It is documented with a man page,
etc/emacstool.1.
To enable use of these files and programs, define the configuration
switch HAVE_SUN_WINDOWS in src/config.h before compiling Emacs.
The definition of HAVE_SUN_WINDOWS must precede the #include m-sun3.h
or #include m-sun4.h.
If you must change PURESIZE, do so after the #include m-sun3.h
This software is based on SunView for Sun UNIX 4.2 Release 3.2,
and will not work "as is" on previous releases, eg 3.0 or 3.1.
Using Emacstool with GNU Emacs:
The GNU Emacs files lisp/term/sun.el, lisp/sun-mouse.el,
lisp/sun-fns.el, and src/sunfns.c provide emacs support for the
Emacstool and function keys. If your terminal type is SUN (that is,
if your environment variable TERM is set to SUN), then Emacs will
automatically load the file lisp/term/sun.el. This, in turn, will
ensure that sun-mouse.el is autoloaded when any mouse events are
detected. It is suggested that sun-mouse and sun-fns be
included in your site-init.el file, so that they will always be loaded
when running on a Sun workstation. [Increase PURESIZE to 154000].
Support for the Sun function keys requires disconnecting the standard
Emacs command Meta-[. Therefore, the function keys are supported only
if you do (setq sun-esc-bracket t) in your .emacs file.
The file src/sunfns.c defines several useful functions for emacs on
the Sun. Among these are procedures to pop-up SunView menus, put and
get from the SunView selection [STUFF] buffer, and a procedure for
changing the cursor icon. If you want to define cursor icons, try
using the functions in lisp/sun-cursors.el.
The file lisp/sun-mouse.el includes a mass of software for defining
bindings for mouse events. Any function can be called or any form
evaluated as a result of a mouse event. If you want a pop-up menu,
your function can call sun-menu-evaluate. This will bring up a
SunView walking menu of your choice.
Use the macro (defmenu menu-name &rest menu-items) to define menu
objects. Each menu item is a cons of ("string" . VALUE), VALUE is
evaluated when the string item is picked. If VALUE is a menu, then a
pullright item is created.
This version also includes support for copying to and from the
sun-windows "stuff" selection. The keyboard bindings defined in
lisp/sun-fns.el let you move the current region to the "STUFF"
selection and vice versa. Just set point with the left button, set
mark with the middle button, (the region is automatically copied to
"STUFF") then switch to a shelltool, and "Stuff" will work. Going the
other way, the main right button menu contains a "Stuff Selection"
command that works just like in shelltool. [The Get and Put function
keys are also assigned to these functions, so you don't need the mouse
or even emacstool to make this work.]
Until someone write code to read the textsw "Selection Shelf", it is
not possible to copy directly from a textsw to emacs, you must go through
the textsw "STUFF" selection.
The Scroll-bar region is not a SunView scrollbar. It really should
be called the "Right-Margin" region. The scroll bar region is basically
the rightmost five columns (see documentation on variable scrollbar-width).
Mouse hits in this region can have special bindings, currently those binding
effect scrolling of the window, and so are refered to as the "Scroll-bar"
region.
For information on what mouse bindings are in effect, use the command
M-x Describe-mouse-bindings, or the quick pop-up menu item "Mouse-Help".
GNU Emacs EXAMPLES:
See definitions in lisp/sun-fns.el for examples.
You can redefine the cursor that is displayed in the emacs window.
On initialization, it is set to a right arrow. See lisp/sun-cursors.el
for additional cursors, how to define them, how to edit them.
BUGS:
It takes a few milliseconds to create a menu before it pops up.
Someone who understands the GNU Garbage Collector might see if it
is possible for defmenu to create a SunView menu struct that does
not get destroyed by Garbage Collection.
An outline of the files used to support Sun Windows and the mouse.
etc/SUN-SUPPORT.
This document.
etc/emacstool.1:
Added: an nroff'able man page for emacstool.
etc/emacstool.c:
Encodes all the function keys internally, and passes non-window
system arguments to emacs.
etc/emacs.icon:
The "Kitchen Sink" GNU Emacs icon.
src/sunfns.c:
This contains the auxilary functions that allow elisp code to interact
with the sunwindows, selection, and menu functions.
lisp/sun-mouse.el:
Defines the lisp function which is called when a mouse hit is found
in the input queue. This handler decodes the mouse hit via a keymap-like
structure sensitive to a particular window and where in the window the
hit occured (text-region, right-margin, mode-line). Three variables
are bound (*mouse-window* *mouse-x* *mouse-y*) and the selected function
is called.
See documentation on "define-mouse" or look at lisp/sun-fns.el
to see how this is done.
Defines two functions to pass between region and sun-selection
Defines functions for interfacing with the Menu.
During menu evaluation, the variables *menu-window* *menu-x* *menu-y* are bound.
lisp/sun-fns.el
The definition of the default menu and mouse function bindings.
lisp/sun-cursors.el
Defines a number of alternate cursors, and an editor for them.
The editor is also a demonstration of mouse/menu utilization.
lisp/term/sun.el
Sets up the keymap to make the sun function keys do useful things.
Also includes the setup/initialization code for running under emacstool,
which makes "\C-Z" just close the emacstool window (-WI emacs.icon).
Jeff Peck, Sun Microsystems, Inc <peck@sun.com>
Subject: Making multi-line scrolling really work:
In your .defaults file, include the line:
/Tty/Retained "Yes"
That way, the terminal emulator can do text moves using bitblt,
instead of repaint.
If that's not enough for you, then tell unix and emacs that
the sun terminal supports multi-line and multi-character insert/delete.
Add this patch to your /etc/termcap file:
*** /etc/termcap.~1~ Mon Sep 15 12:34:23 1986
--- /etc/termcap Mon Feb 9 17:34:08 1987
***************
*** 32,39 ****
--- 32,40 ----
Mu|sun|Sun Microsystems Workstation console:\
:am:bs:km:mi:ms:pt:li#34:co#80:cl=^L:cm=\E[%i%d;%dH:\
:ce=\E[K:cd=\E[J:so=\E[7m:se=\E[m:rs=\E[s:\
:al=\E[L:dl=\E[M:im=:ei=:ic=\E[@:dc=\E[P:\
+ :AL=\E[%dL:DL=\E[%dM:IC=\E[%d@:DC=\E[%dP:\
:up=\E[A:nd=\E[C:ku=\E[A:kd=\E[B:kr=\E[C:kl=\E[D:\
:k1=\E[224z:k2=\E[225z:k3=\E[226z:k4=\E[227z:k5=\E[228z:\
:k6=\E[229z:k7=\E[230z:k8=\E[231z:k9=\E[232z:
M-|sun-nic|sune|Sun Microsystems Workstation console without insert character:\
If you don't have the program "patch", just add the line:
:AL=\E[%dL:DL=\E[%dM:IC=\E[%d@:DC=\E[%dP:\
casetek@crvax.sri.com says:
Those of you using GNU Emacs on Sun workstations under
3.2 may be interested in reducing memory utilization in
the emacstool via the Sun toolmerge facility. The technique
is described in the Release 3.2 Manual starting on page
71. The following is a summary of how it would apply
to merging emacstool into the basetools.
1) Change the main procedure declaration in emacstool.c to:
#ifdef SUN_TOOLMERGE
emacstool_main (argc, argv);
#else
main (argc, argv)
#endif
This will allow creation of either standard or toolmerge
versions.
2) Copy emacstool.o into directory /usr/src/sun/suntool.
3) make CFLAGS="-g -DSUN_TOOLMERGE" emacstool.o
4) Add the following line to basetools.h
"emacstool",emacstool_main,
5) Add the following line to toolmerge.c.
extern emacstool_main();
6) make basetools MOREOBJS="emacstool.o"
7) make install_bins
To invoke the toolmerged version, you must exit suntools and
re-start it. Make sure that /usr/bin occurs before the directory
in which you installed the standard (non-toolmerged) version.
Subject: Moving selections between OW and Emacstool/xvetool
Date: Wed, 26 Jun 91 18:58:24 PDT
From: Jeff Peck <peck>
The short answer is that we can Cut and Paste between Emacstool
and TTYSW (shelltool) and we can Paste between Emacstool and TEXTSW(cmdtool)
and somewhat more slowly move from TEXTSW to Emacstool.
**** This interaction with the TTYSW selection is a HACK! ****
At end of this message is the code that should be in your sun-mouse.el or .emacs
Here's the restrictions on using it:
1. from Shelltool to Emacstool:
select text in shelltool and hit COPY.
move to Emacstool, hit PASTE. (simple, eh?)
For any other movement, you must remember this:
"The window system must believe that a shelltool has the current selection."
If you do that, then this will all work painlessly.
[that will also explain why you can not make a selection in a cmdtool
and then directly PASTE it into Emacstool]
2. from Emacstool to Shelltool
ensure that a shelltool has the selection: (select something and hit COPY)
in emacstool select a region and hit COPY
in shelltool hit PASTE. (not too bad, yet)
3. from Emacstool to Cmdtool
ensure that a shelltool has the selection:
(in a *shelltool* select something and hit COPY)
in emacstool select a region and hit COPY
in shelltool hit PASTE. (ok, its getting crufty)
4. from Cmdtool to Emacstool
select in Cmdtool, hit COPY
in a shelltool, % cat > /dev/null
then hit PASTE
Select the text again, from the shelltool this time. hit COPY
in emacstool, hit PASTE
4a. from Cmdtool (or shelltool) to Emacstool
the function "sunview-yank-any-selection" should be bound to Meta-PASTE
If so, then just:
select in Cmdtool
in emacstool, hit Meta-PASTE
This uses the function "sunview-yank-current-selection"
which relies one the (supported) utility "get_selection"
As such, it is *not* a hack, but it *IS* SLOW (or slower)
If you know that a shelltool *still* has the selection
(note: nothing you do with Emacstool or the PASTE key will affect that)
then the "ensure..." line is a NO-OP.
Note that using COPY in emacstool will change the *value* of the selection
behind the window systems back:
the holder of the selection doesn't know of this,
the window system doesn't know of this,
and the highlighted text *WILL NOT CHANGE*
Turns out the selection value is written into a /tmp/ttyselection file
and emacs just rewrites that file, clever, eh?
Your version of sun-mouse.el should include these functions
(or put them into your .emacs)
;;; define the selection file used by this emacs
;;; if not local machine, then automounter must find /net/<host>/tmp
(defconst owselectionfile
(let ((display (getenv "DISPLAY")))
(if (null display)
nil ; no DISPLAY variable -- return nil
(let ((colon_at (string-match ":" display)))
(if (null colon_at)
nil ; no colon in environment variable -- return nil
(if (zerop colon_at)
"/tmp/ttyselection" ; colon is first character
(concat "/net/" (substring display 0 colon_at) "/tmp/ttyselection")
)))))
)
(defun xv-yank-selection ()
"Set mark and yank the contents of the current Xview selection
into the current buffer at point. The STUFF selection contains the currently
or previously highlighted text from a TTYSW."
(interactive "*")
(insert-file owselectionfile)
(exchange-point-and-mark)
)
(defun xv-select-region (beg end)
"Set the TTYSW selection to the region in the current buffer."
(interactive "r")
(write-region beg end owselectionfile nil 'noprint)
)
You can then bind these to Copy and Paste in your .emacs
(setq suntool-map-hooks '( ; not your usual hook list
(define-key suntool-map "fl" 'xv-select-region) ; L6 Copy
(define-key suntool-map "hl" 'xv-yank-selection) ; L8 Paste
)
)