Archive of UserLand's first discussion group, started October 5, 1998.

Re: Linux GUI

Author:Don Hopkins
Posted:3/4/1999; 3:08:01 PM
Topic:DHTML MTTF!
Msg #:3587 (In response to 3559)
Prev/Next:3586 / 3588

When I was working on the NeWS user interface for UniPress Emacs during the summer of '88, I implemented tabbed window frames. It was the first version of Emacs that supported multiple windows, and all those windows were really getting out of hand (you could open every .h file in a directory with a few keystrokes), so we really needed a good way to manage lots of windows opened at once!

I made a NeWS window frame class that had a title tab sticking out the top of the left edge, and had emacs lay them out in a vertical column, so the tabs were all lined up top to bottom along the left edge of the screen, like a menu. So you could see the title of every window that was opened, and click on it to bring it to the front, or drag it around by the tab to wherever you want, or pop up a menu on the tab to do all kinds of other things. The windows knocked up against the left edge of the screen, so they were easy to line up.

Later on I made more flexible tabbed window frames, that let you drag the tab around along any edge of the window, and iconify the window into just the tab. And designed a nice set of pie menus to go with them, that made window management very efficient.

So you could have the traditional tabs along the top edge of the window, but I prefer them along the left edge, since they are more compact and easier to read as a list. Text is much wider than it is tall, and the width of different labels is different, while the height is always the same, so it makes a lot more sense (for readability and compactness) to line the tabs up in a vertical column along the left edge of the screen, instead of along the top edge the way tabbed windows dialogs do. You can get a similar effect in windows by Alt-dragging your task bar to the left edge of the screen. (But the "tabs" in the task bar aren't attached to the windows they open).

I wrote a visual interface to PostScript (a graphical NeWS debugger) that let you drag around little tabbed windows containing PostScript data structures (that you could open to any depth in a graphical outliner). The PostScript interpreter was represented as a scrolling text window (so you could type in postscript and see the results), with a "spike" sticking out of the top edge of the window, that represented the stack (like a short order chef's spike of food orders). When you push an object onto the stack by typing some PostScript code or clicking on an object or menu, the object would appear in a new tabbed window, on the top of the stack, with the tab impaled on the spike. The tabs were formatted so they didn't overlap (so you could see their labels), but their windows (which could be opened to any size) did overlap. You could bring any window to the top without changing the stack order by clicking on the tab. You could grab the tab and drag the object vertically to a different place on the stack, or just pull it off (so it's popped off the stack) and set it aside on the desktop. When you dragged the tab of an object over the stack, it "snaps" onto the stack so you know it's been pushed, and slides up and down as you move it, changing the order of objects on the stack. I called it "direct stack manipulation". You could edit the stack with the mouse, as well as changing it from the keyboard -- the view would automatically be kept in sync with the state of the PostScript interpreter (a NewS thread).

I wrote a fun paper about it, called "The Shape of PSIBER Space: PostScript Interactive Bug Eradication Routines".

http://www.catalog.com/hopkins/psiber/psiber.html

-Don




This page was archived on 6/13/2001; 4:48:23 PM.

© Copyright 1998-2001 UserLand Software, Inc.