[comp.sys.apollo] DM-like editor under X11

george@hyper.lap.upenn.edu (George "Sir Lleb" Zipperlen) (04/24/91)

I have about 50% of the the Apollo DM editor working using the Apollo
Text Management Library (TMLib).  The major things that need to be added
are search/replace and mark/region handling.  I don't know how to
handle rectangular regions with wrapping in effect. 

Oh yes, I couldn't get history/UNDO to work.

Also missing is a lot of other DM functionality such as window
management and key re-definition, and the DM command language; as I've
cheated and bound a lot of functions directly to keyboard/mouse events. 

Additional functionality not in the DM
    text cursor distinct from window manager cursor
    8-bit fonts or pairs of 7-bit fonts to get at 
        characters in the range 128-255.
    If you don't mind storing your file as a TMLib object, rather
        than as unstructured text, you can use multiple fonts. 

I've been doing this in spare time -- the real project was a template
oriented multi-lingual dictionary editor. 

If there's interest, I could clean out the dictionary stuff, and post it
here, or in alt.sources in a few weeks.  

TMLib itself is part of the MIT X11/contrib distribution, and needs C++
to compile.  You can do a lot more with it than writing flat editors. 

Any idea how much work it would be to do a DM -like window manger for X?
I can't stand uwm, twm, awm, SunView, Mwm, MacIntosh, Windows3, or any
others I've tried, and I'm stuck using shared-mode X on the Apollo
(slow, and soon to disappear...).  I did like the old Xerox
XDE/ViewPoint environment, though, and SmallTalk is nice too. 

I know the DM editor is addictive, when I ftp files from Suns, NeXTs,
and other beasts to edit them on the the Apollo!
-- 
George Zipperlen    george@hyper.lap.upenn.edu   george@apollo.lap.upenn.edu
   ...!{rutgers, uunet, mit-eddie, decwrl}!upenn.edu!hyper.lap!george
Blatant plug: funky-music-request@hyper.lap.upenn.edu: "Won't be no Static" -JB

rees@dabo.citi.umich.edu (Jim Rees) (04/25/91)

In article <41853@netnews.upenn.edu>, george@hyper.lap.upenn.edu (George "Sir Lleb" Zipperlen) writes:

  I have about 50% of the the Apollo DM editor working using the Apollo
  Text Management Library (TMLib).

What I'd like to see more than the DM editor is DM pads.  I've got an xpad
client written, but it doesn't work exactly right because of limitations in
the way ptys work.  The xpad client needs to get a notification when the guy
at the other end of the pty is blocked on a read, so that it can then drain
all the output and update the boundary between the input and output sides of
the pad.  I can make this work in Domain/OS by either mucking with the
innards of ptys or writing my own pty type manager.  But I don't know how to
do it in general on a vanilla Unix pty.

What my xpad does now is it waits for output, and when it gets some, updates
the pads.  But this doesn't always work because there is no way to know the
order in which i/o events happened.  This is crucial for moving the input
text to the proper place in the output half of the pad.

Suggestions welcome.  Also, anyone know how to subclass Athena text widgets?
I want to be able to draw the line between the input and output halves of
the pad, and I think I need to subclass the sink widget to do this.

I suppose it might make sense to write a "DM edit" widget and use that
instead.  That's a bigger project than I want to get into, but maybe it
could be spun off of George's DM editor.

This is a low-priority project for me so I don't expect to have anything
usable for a while, if ever.

root@ttsi.lonestar.org (System) (04/26/91)

In article <512af270.cb12@dabo.citi.umich.edu> rees@citi.umich.edu (Jim Rees) writes:
>What I'd like to see more than the DM editor is DM pads.  I've got an xpad
>client written, but it doesn't work exactly right because of limitations in
>the way ptys work.  The xpad client needs to get a notification when the guy
>at the other end of the pty is blocked on a read, so that it can then drain
>all the output and update the boundary between the input and output sides of
>the pad.  I can make this work in Domain/OS by either mucking with the
>innards of ptys or writing my own pty type manager.  But I don't know how to
>do it in general on a vanilla Unix pty.

It seems to me that the easiest way to approach this is through the Epoch
extensions to GNU emacs which enables multiple windows (pads if you will)
to be popped.  If you combine epoch with multishell.el (by Aamod Sane), you 
have the nice ability to pop up shell windows.  Multishell depends upon
cmushell.el which is a whole lot nicer than the default GNU shell mode.  The
only thing left to do would be to write the elisp for DM emulation.  Much
of this effort will simply be a key-mapping-to-existing functions exercise.
Alot will be writing some wrapper routines.  I'd be surprised if someone
hadn't already done this.  I've done a superficial job of mapping the left
keypad and top right row of keys.  It's just a fraction of the DM 
functionality, but heck, now I have all the benefits of emacs at my
disposal which DM can't begin to match.

Another dividend from this approach is that you've now learned an editor
that plays on dumb terminals as well as a fancy X display.  (I'm talking
about emacs and not epoch which is limited to X display.  The two are
identical when it comes to keyboard editing functionality.)  With emacs
on a dumb terminal, you can have multiple shell buffers, etc. etc. etc.

DM is a pretty sleek cat but it wouldn't be the end of the world if it
went away.
-- 
Mark S. Evans                 Tandem Telecommunications Systems Inc.
Phone: 214-516-6201           850 E. Central Parkway
Fax:   214-516-6801           Plano, TX 75074
Mail:  mse@ttsi.lonestar.org

rees@dabo.citi.umich.edu (Jim Rees) (04/30/91)

In article <1991Apr26.140019.8433@ttsi.lonestar.org>, root@ttsi.lonestar.org (System) writes:

  >What I'd like to see more than the DM editor is DM pads.

  It seems to me that the easiest way to approach this is through the Epoch
  extensions to GNU emacs which enables multiple windows (pads if you will)
  to be popped.

Correct me if I'm wrong, but I think you've missed the point.  There are two
features of DM pads that I don't think you can get from emacs shells:

1.  The ability to edit input before it gets eaten by the shell.  I don't
mean in a separate buffer that you have to arrange to use ahead of time, I
mean in the shell window itself.

2.  Correct ordering of input and output.  For example, if I type "sleep 4
<nl> echo foo <nl>" the output should look like this
	% sleep 4
	% echo foo
	foo
	%
not like this
	% sleep 4
	echo foo
	% foo
	%

I believe that at least feature no. 2 requires mods to the pty driver.

nazgul@alphalpha.com (Kee Hinckley) (04/30/91)

In article <51443fc4.cb12@dabo.citi.umich.edu> rees@citi.umich.edu (Jim Rees) writes:
>2.  Correct ordering of input and output.  For example, if I type "sleep 4
><nl> echo foo <nl>" the output should look like this
>	% sleep 4
>	% echo foo
>	foo
>	%
>not like this
>	% sleep 4
>	echo foo
>	% foo
>	%
>
>I believe that at least feature no. 2 requires mods to the pty driver.

The Korn shell tries.  It lets you type ahead and see it, but then it displays
it all where it should be too.

-- 
Alfalfa Software, Inc.          |       Poste:  The EMail for Unix
nazgul@alfalfa.com              |       Send Anything... Anywhere
617/646-7703 (voice/fax)        |       info@alfalfa.com

I'm not sure which upsets me more: that people are so unwilling to accept
responsibility for their own actions, or that they are so eager to regulate
everyone else's.