Select headings to return to index
LIB WINDOWS This is a facility for using VED with more than two visible windows on the same VDU screen or Xterm window, etc. It is most convenient if the screen displays more than 30 lines.
NB This was substantially improved for Poplog Version 14. For a list of improvements search for "V14" below.
CONTENTS - (Use <ENTER> g to access required sections)
This is an EXPERIMENTAL extension to the VED window mechanism, allowing more than two windows on a VDU screen at once. This is specially useful on a VDU allowing more than the usual 24 lines, but can occasionally be useful on an ordinary VDU.
Divisons between windows remain horizontal, as before, but the mechanism may later be extended to allow windows to have arbitrary rectangular boundaries on the screen.
The main new feature is the ability to define a 'map' for the screen, specifying how many windows there should be and how deep each one should be. Commands are available for changing the size of a window, and even temporarily covering up another window, by shifting the upper or lower boundary up or down. The VED command works as normal except that it uses the current window. The WED (Window EDit) command accepts a numerical parameter to specify the window to be used. Windows are referred to by number, counting down from the top of the screen.
You may have as many windows as you wish subject to the constraint that each window must have a status line and at least one other line visible, initially.
On Unix it is particularly useful to be able to reserve a small window for a VED_IMCSH file, for Unix CSH commands and their printout. See HELP *IMCSH
A window has a number, a file associated with it, a name, a start line and a finish line. It may be visible or invisible.
As with normal VED there may be files in VEDBUFFERLIST that are not currently visible in a window. They may be made visible by taking over a window, using the VED command or WED command, the <ENTER>rb command or the 'q(uit)' command.
There are commands for redefining the whole screen layout, i.e. specifying for each window its location and contents, commands for making a window switch between occupying the whole screen or only its 'rightful' space, commands for moving from one window to another, commands for shifting the bounds of the current window (which may cause another to become invisible or visible), commands for reading a new file into the current window, commands for exchanging the contents of two windows.
If the screen gets into a mess, type <ESC> CTRL-V or <ENTER> redraw to redisplay all windows.
Most VED facilities, including function keys, will work as expected, but some of the interactions are quite complex, and there may still be some minor problems.
A major difference from normal VED is that the default for reading in a new file is to use the current window concealing the existing file. The old file is not lost, however, and may be restored to view, e.g. using the <ENTER> rb (rotate buffers)
Make sure you have set VEDSCREENLENGTH to correspond to the total number of lines available on the screen.
The global variable VEDDEFAULTLENGTH may be set to a number determining default size of window. If this is not set by the user it will be
round(vedscreenlength/3)
allowing three windows on the screen.
Then, to compile the new facilities do lib windows
It should be possible to use VED and related facilities normally until NEWMAP described below has been invoked. After that the new window mechanism takes charge. This can be turned off by false -> vednewmapped;
The mechanism can be turned on most conveniently if you are already inside VED.
Use the <ENTER> NEWMAP command at least once in order to get the window facilities working. E.g. the first time try (including commas):
<ENTER> newmap help windows,,
This will start up with three windows, one of which contains this help file. The others will be given names indicating anonymity.
Since this command did not specify window locations, the sizes of the windows are controlled by the variable VEDDEFAULTLENGTH.
The command <ENTER> NEWMAP is used to (re-)define the window layout. It has several formats:-
If no arguments are provided, this redraws the whole screen using the previous map, and is equivalent to <ENTER> redraw.
If newmap has not been used previously, this sets up three windows. If arguments are provided they are separated by commas, and specify start line number for a window and a file name or VED command. A VED command is recognised by having two items separated by a space, e.g.
Will get the user's file 'fred' in the first window, starting at the top, a HELP files starting at line 12, and a library file at line 18.
The start line, if provided, is the number of lines counting down from top of screen.
Either the line number or the file name or both may be omitted. Top of screen is line 1. Line number and file name must be separated by space. E.g. The full format is:
If there is a final comma an extra window is added, of size veddefaultlength, if space is available on the screen. <number1>, if omitted, defaults to 1. It may be given a different value if it is desirable to leave some previou printout visible at the top.
If <numN> is omitted the size of window N-1 defaults to veddefaultlength lines, if there is space. (Default = vedscreenlength/3)
The <name> fields may contain two item VED commands, as described below. (Occasionally such commands may confuse the editor and prevent the window mapping being completed.)
If <name> is omitted then any unused file in vedbufferlist may be selected for the window. If there isn't one, a non-writeable file is created with a name indicting anonymity.
NB If the screen is not big enough for all the windows requested only a subset may be created.
E.g. the following are legal <ENTER> newmap 1, 5, 8, 15 create four windows, use files on vedbufferlist or files with 'anonymous' names.
<ENTER> newmap ,,, create four windows, starting at lines determined by vedefaultlength using existing files or anonymous files (If veddefaultlength * 3 >= vedscreenlength, the last window will not be visible.)
<ENTER> newmap foo.p, baz, help windows Insted of file names, the commands HELP, TEACH, SHOWLIB, etc can be used, provided that they have an argument.
<ENTER> newmap foo.p, 5 teach coffee, baz, 15 showlib assoc
<ENTER> newmap file1,file2 start a screen with two windows, the first taking only 1/3 of the screen.
<ENTER> newmap file1, file2, do: im Start a screen with three windows, the first two containing the named files, the last one running the command "im", to set up an "immediate mode" window. (See HELP * IM)
NOTES:
The procedure NEWMAP may be invoked from outside VED by giving it a string as argument, where the string contains what would follow '<ENTER> newmap' on the command line. For example, ved_newmap(',,')
will run VED with three windows on the screen.
To edit a file in the CURRENT window, give normal ved commands, though bearing in mind tht if a file is already visible in another window VED will go to that rather than move the file.
<ENTER> ved <filename> <ENTER> help <topic>
These requests will read in a new file if necessary, or retrieve a file from vedbufferlist and put it on the current window. if the file is alredy visible in another window, the cursor will simply move there.
This is like "<ENTER> ved" except that an optional window number can be given before the file name. The file will be edited in that window, no matter where it was before. If it was previously visible in a different window, a new file will be put there, but will not be visible until the cursor next goes to that window: so temporarily part of the previous file will still be visible.
Go to the window with that number and read the file into it. If the file already exists in another window it will remain visible until the cursor is next moved to that window.
If the number is larger than the existing number of windows, a new window will be added if possible. If not an error message is displayed.
Occasionally strange behaviour may result. Clear with a command of the form <ENTER> newmap <num1> <name1>,<num2> <name2>,<num3> <name3> ...
which will re-map the window. Or simply
<ENTER> newmap <name>
which will produce a single full screen window.
Move to the window with that number
Like <ENTER> ved, simply edit the file, wherever it is. If the file is not already in VED go to the "next" window and put it there.
The "|" facility allows the user to combine a command to go to a particular window and give a command there. <ENTER> |3 help index
I.e. read the index into window 3.
<ENTER>|2 rb
Go to window 2 and 'rotate buffers'
<ENTER> |2
Just go to window 2.
The key sequence <ESC> ; is redefined so as to pause and await a number. If a suitable number is typed, VED will go to that window. However, if no character is type within 'time_out_time' seconds then ved will simply go to the next window. It cycles round the windows in increasing order.
The normal * VEDFILESELECT mechanisms remain un-touched, So <ESC>e can be followed within about a second with the number of the desired file. This works like VEDFILESELECT outside LIB WINDOWS, i.e. the number to be typed is not the window number but the position in VEDBUFFERLIST. i.e. typing N gets you the N-th last file accessed. This enables a file not in any window to be brought into the current winodw.
ENTER xw takes one argument which is the number of another window or the name of another file. Swaps the contents of the current widow with the contents of the other window.
<ENTER> xw <file name>
Exchage contents with the window displaying the named file.
<ENTER> xw 2 Exchange contents of current window with number 2.
Commands are provided to shift the upper or lower boundary of the current window up or down.
move the upper boundary of this window up <number> lines, down if negative. If no number defaults to 1.
move the lower boundary down <number> lines, up if negative If no number, defaults to 1. The above operations may render a file temporarily invisible, or may uncover a file, i.e. make it visible.
Start editing the file named, in the current window, or in that files current window if it is already visible in one.
All the above behave like <ENTER> ved, though on library or documentation files. If the requested file is already displayed, the cursor will move to that window.
Re-draws whole screen. The key sequence ESC CTRL-v does the same.
prints out information about each window
Suspends the POPLOG process and takes you back to CSH (if running). On re-entry redraws the whole screen.
This is mapped onto the key sequence ESC 0
Rotate buffers. Show next undisplayed file on vedbufferlist. Uses current window. Does not show files which are already in other windows.
Quit current file. Complain if writeable and changed. Read another file into the window, if there is one in vedbufferlist not already displayed. If there is no undisplayed file create a new empty non-writeable file called NONAME<N> where N is the number of the window. Then move to next window. If all remaining files have "noname" names and are non-writeable then leave VED and go back to POPLOG top level.
This will assign false to vednewmapped, and reset the window to its normal VED behaviour.
Used to move to another window. If you type a number within time_out_time (default 50) hundredths of a second, then it will move to a file of that number. Otherwise it will go to the next window down the screen, or to the top window if already at the bottom window. If the next window is a "noname" window then it will try another one. Otherwise it will stay in the current window and print a message about there being no other files. If you then wish to go to another window, type a number after <ESC> ;, or use <ENTER> wed <number>.
If you always want it only to cycle round the windows, without waiting for a number, assign 0 to time_out_time.
Displays the window of that number on the screen, and makes it the current window.
If ved_full_screen is false, then more than one window is on screen. In that case ved_full_screen is set true and the current window is expanded to fill the screen. Otherwise the reverse occurs and the current window is shrunk to its proper size and all others re-displayed. This procedure is mapped to <ESC> w.
If vednewmapped is false, this behaves just like vedsetwindow.
A window is represented by a record of type 'window' defined as:
defclass lconstant procedure window {winnameof,winfileof,winnumof:short, winstartof:short,winendof:short, winvisof,winrefreshed};
I.e. it contains the full path name of the file, the file structure, the number of the window, its start and end positions on the screen, a boolean indicating whether it is visible and a boolean indicating whether it has been refreshed since last put on the screen.
E.g. winfileof(W) returns the file associated with the window W.
However, becauseof the "lconstant" the procedures will be inaccessible to users.
Windows are mapped onto their numbers, and back, and onto names of files and back, etc. as follows. (Names of files are represented as strings givnig the FULL path name, and are created by vedfullname).
Return or update the window corresponding to the number.
<window|false> -> windowof_name(<string>) Return or update the window corresponding to the file name.
For debugging. This prints out information about the window, i.e. the numbers of its top and bottom lines on the screen and its name.
true if the window has been temporarily covered up
(System procedure) report on or update visibility status of the window.
Sets up global VED variables, e.g. vedscreenlength - prepare to use the window.
Put the VED file structure into the window. Adjusts various links.
Make it the current window, and refresh it if it needs refreshing.
Similar but copes with full screen mode
Return (or update) beginning or end of a window. If updated, then redoes screen as appropriate. Updaters can alter visibility of files. Used by ved_wu and ved_wd
Applies the procedure to every number|window pair.
For use with vedsearchlist: given a file name return the full path name that would correspond to the file that VED would access, given the directories in vedsearchlist to search in. If the file is already in vedbufferlist, it returns the file structure.
true when file occupies full screen switched by vedswitchwindowsize (ESC w), otherwise false.
number of current window
default length for new window. (vedscreenlength/3 initially)
default 50 : time delay in hundredthsof a second while vednextwindow waits to see if a window number is typed before it goes to next window. If it is 0, vednextwindow just goes to next window.
The following VED procedures are redefined by LIB WINDOWS
ved_q ved_rb vedrestorescreen vedsetonscreen
However, when vednewmapped is false these should work as before.
The following key sequences are altered by this package
ESC CTRL-V redraws whole screen. If vednewmapped false calls vedrefresh
ESC x vedswapfiles (Previously called vednextwindow)
ESC ; calls vednextwindow. Type a number immediately, or wait. If vednewmapped false, calls vedswapfiles
ESC w switch window between full screen and 'proper' location. If vednewmapped false, calls vedsetwindow as usual.
ESC 0 calls ved_wstop, to suspend the process so that it restarts cleanly. (Unix only)
The new command <ENTER> newmap off makes vednewmapped false and restores normal ved behaviour.
Altered keybindings. ESC x reverts to vedswapfiles (using new version), ESC ; does the cycling round windows instead of ESC x as previously.
Assigned ved_wstop to ESC 0, and made it work properly if vednewmapped false
Added top level macro -ved- to get back to mapped screen.
Fixed various things that did not work right. Entailed major re-organisation of some bits.
ved_q now works more naturally. E.g. if the only files left are "no-name" temporary files then it quits VED.
ved_redraw now creates new temporary files if there are not enough files for the windows.
Had to redefine vedrestorewindows for use with ved_sourcefile
Had to redefine vedswapfiles to work properly with multiple windows.
Altered behaviour of vedfileselect if it creates a new window with a list of files. In this situation it now sets "full" screen. Otherwise it could corrupt the screen.
For more details SHOWLIB * WINDOWS
--- C.all/help/windows --- Copyright University of Sussex 1990. All rights reserved. ----------