*os_risc.txt*   For Vim version 7.1.  Last change: 2005 Mar 29


		  VIM REFERENCE MANUAL    by Thomas Leonard


						*riscos* *RISCOS* *RISC-OS*
This file contains the particularities for the RISC OS version of Vim.

The RISC OS port is a completely new port and is not based on the old `archi'
port.

1.  File locations		|riscos-locations|
2.  Filename munging		|riscos-munging|
3.  Command-line use		|riscos-commandline|
4.  Desktop (GUI) use		|riscos-gui|
5.  Remote use (telnet)		|riscos-remote|
6.  Temporary files		|riscos-temp-files|
7.  Interrupting		|riscos-interrupt|
8.  Memory usage		|riscos-memory|
9.  Filetypes			|riscos-filetypes|
10. The shell			|riscos-shell|
11. Porting new releases	|riscos-porting|

If I've missed anything, email me and I'll try to fix it.  In fact, even if I
haven't missed anything then email me anyway to give me some confidence that it
actually works!

Thomas Leonard <tal197@ecs.soton.ac.uk>

	[these URLs no longer work...]
 Port homepage:	http://www.ecs.soton.ac.uk/~tal197/
	or try:	http://www.soton.ac.uk/~tal197/

==============================================================================
							*riscos-locations*
1. File locations

The Vim executable and shared resource files are all stored inside the !Vim
application directory.

When !Vim is first seen by the filer, it aliases the *vi and *ex commands to
run the command-line versions of Vim (see |riscos-commandline|).

!Vim.Resources and !Vim.Resources2 contain the files from the standard Vim
distribution, but modified slightly to work within the limits of ADFS, plus
some extra files such as the window templates.

User choices are read from `Choices:*' and are saved to `<Choices$Write>.*'.
If you have the new !Boot structure then these should be set up already.  If
not, set Choices$Path to a list of directories to search when looking for
user configuration files.  Set Choices$Write to the directory you want files
to be saved into (so your search patterns and marks can be remembered between
sessions).

==============================================================================
							*riscos-munging*
2. Filename munging

All pathname munging is disabled by default, so Vim should behave like a
normal RISC OS application now.  So, if you want to edit `doc/html' then you
actually type `*vi doc/html'.

The only times munging is done is when:

- Searching included files from C programs, since these are always munged.
  See |[I|.
  Note: make sure you are in the right directory when you use this
	command (i.e. the one with subdirectories 'c' and 'h').

- Sourcing files using |:so|.
  Paths starting `$VIM/' are munged like this:

  $VIM/syntax/help.vim  ->  Vim:syntax.help

  Also, files ending in `.vim' have their extensions removed, and slashes
  replaced with dots.

Some tag files and script files may have to be edited to work under this port.

==============================================================================
							*riscos-commandline*
3. Command-line use

To use Vim from the command-line use the `*vi' command (or '*ex' for
|Ex-mode|).

Type `*vi -h' for a list of options.

Running the command-line version of Vim in a large high-color mode may cause
the scrolling to be very slow.  Either change to a mode with fewer colors or
use the GUI version.

Also, holding down Ctrl will slow it down even more, and Ctrl-Shift will
freeze it, as usual for text programs.

==============================================================================
							*riscos-gui*
4. Desktop use

Limitations:

- Left scrollbars don't work properly (right and bottom are fine).
- Doesn't increase scroll speed if it gets behind.

You can resize the window by dragging the lower-right corner, even though
there is no icon shown there.

You can use the --rows and --columns arguments to specify the initial size of
the Vim window, like this: >

  *Vi -g --rows 20 --columns 80

The global clipboard is supported, so you can select some text and then
paste it directly into another application (provided it supports the
clipboard too).

Clicking Menu now opens a menu like a normal RISC OS program.  Hold down Shift
when clicking Menu to paste (from the global clipboard).

Dragging a file to the window replaces the CURRENT buffer (the one with the
cursor, NOT the one you dragged to) with the file.

Dragging with Ctrl held down causes a new Vim window to be opened for the
file (see |:sp|).

Dragging a file in with Shift held down in insert mode inserts the pathname of
the file.

:browse :w opens a standard RISC OS save box.
:browse :e opens a directory viewer.

For fonts, you have the choice of the system font, an outline font, the system
font via ZapRedraw and any of the Zap fonts via ZapRedraw: >

  :set guifont=
<			To use the system font via the VDU drivers.  Supports
			bold and underline.
>
  :set guifont=Corpus.Medium
<			Use the named outline font.  You can use any font, but
			only monospaced ones like Corpus look right.
>
  :set guifont=Corpus.Medium:w8:h12:b:i
<			As before, but with size of 8 point by 12 point, and
			in bold italic.
			If only one of width and height is given then that
			value is used for both.  If neither is given then 10
			point is used.

Thanks to John Kortink, Vim can use the ZapRedraw module.  Start the font name
with '!' (or '!!' for double height), like this: >

  :set guifont=!!
<			Use the system font, but via ZapRedraw.  This gives a
			faster redraw on StrongARM processors, but you can't
			get bold or italic text.  Double height.
>
  :set guifont=!script
<			Uses the named Zap font (a directory in VimFont$Path).
			The redraw is the same speed as for '!!', but you get
			a nicer looking font.
			Only the "man+" and "script" fonts are supplied
			currently, but you can use any of the Zap fonts if
			they are in VimFont$Path.
			Vim will try to load font files '0', 'B', 'I' and 'IB'
			from the named directory.  Only '0' (normal style) MUST
			be present.  Link files are not currently supported.

Note that when using ZapRedraw the edit bar is drawn in front of the character
you are on rather than behind it.  Also redraw is incorrect for screen modes
with eigen values of 0.  If the font includes control characters then you can
get Vim to display them by changing the 'isprint' option.

If you find the scrolling is too slow on your machine, try experimenting
with the 'scrolljump' and 'ttyscroll' options.

In particular, StrongARM users may find that: >

  :set ttyscroll=0

makes scrolling faster in high-color modes.

=============================================================================
							*riscos-remote*
5. Remote use (telnet)

I have included a built-in termcap entry, but you can edit the termcap file to
allow other codes to be used if you want to use Vim from a remote terminal.

Although I do not have an internet connection to my Acorn, I have managed to
run Vim in a FreeTerm window using the loopback connection.

It seems to work pretty well now, using '*vi -T ansi'.

==============================================================================
							*riscos-temp-files*
6. Temporary files

If Vim crashes then the swap and backup files (if any) will be in the
directories set with the 'directory' and 'bdir' options.  By default the swap
files are in <Wimp$ScrapDir> (i.e. inside !Scrap) and backups are in the
directory you were saving to.  Vim will allow you to try and recover the file
when you next try to edit it.

To see a list of swap files, press <F12> and type `*vi -r'.

Vim no longer brings up ATTENTION warnings if you try to edit two files with
the same name in different directories.

However, it also no longer warns if you try to edit the same file twice (with
two copies of Vim), though you will still be warned when you save that the
datestamp has changed.

==============================================================================
							*riscos-interrupt*
7. Interrupting

To break out of a looping macro, or similar, hold down Escape in the
command-line version, or press CTRL-C in the GUI version.

==============================================================================
							*riscos-memory*
8. Memory usage

Vim will use dynamic areas on RISC OS 3.5 or later.  If you can use them on
older machines then edit the !RunTxt and GVim files.  I don't know what UnixLib
does by default on these machines so I'm playing safe.

It doesn't work at all well without dynamic areas, since it can't change its
memory allocation once running.  Hence you should edit `!Vim.GVim' and
`!Vim.!RunTxt' to choose the best size for you.  You probably need at least
about 1400K.

==============================================================================
							*riscos-filetypes*
9. Filetypes

You can now specify that autocommands are only executed for files of certain
types.  The filetype is given in the form &xxx, when xxx is the filetype.

Filetypes must be specified by number (e.g. &fff for Text).

The system has changed from version 5.3.  The new sequence of events is:

- A file is loaded. |'osfiletype'| is set to the RISC OS filetype.
- Based on the filetype and pathname, Vim will try to set |'filetype'| to the
  Vim-type of the file.
- Setting this option may load syntax files and perform other actions.
- Saving the file will give it a filetype of |'osfiletype'|.

Some examples may make this clearer:

  Kind of file loaded	osfiletype	filetype ~
  C code 'c.hellow'	Text (&fff)	C
  LaTeX document	LaTeX (&2a8)	TeX
  Draw document		DrawFile (&aff)	(not changed)

==============================================================================
							*riscos-shell*
10. The shell

- Bangs (!s) are only replaced if they are followed by a space or end-of-line,
  since many pathnames contain them.

- You can prefix the command with '~', which stops any output from being
  displayed.  This also means that you don't have to press <Enter> afterwards,
  and stops the screen from being redrawn. {only in the GUI version}

==============================================================================
							*riscos-porting*
11. Porting new releases to RISC OS

Downloading everything you need:

- Get the latest source distribution (see www.vim.org)
- Get the runtime environment files (e.g. these help files)
- Get the `extra' archive (contains the RISC OS specific bits)
- Get the RISC OS binary distribution (if possible)


Unarchiving:

- Create a raFS disk and put the archives on it
- Un-gzip them
- Un-tar them   (*tar xELf 50 archive/tar)


Recompiling the sources:

- Create c, s, and h directories.
- Put all the header files in 'h'.	     \
- Put all the C files in `c'.		     | And lose the extensions
- Put the assembler file (`swis/s') in 's'.  /
- Rename all the files in `proto' to `h', like this:
    raFS::VimSrc.source.proto.file/pro
	  becomes
    raFS::VimSrc.source.h.file_pro
- In the files `h.proto' and `c.termlib', search and replace
    .pro"
       with
    _pro.h"
- Create a simple Makefile if desired and do '*make -k'.
  Use 'CC = gcc -DRISCOS -DUSE_GUI -O2 -x c' in the Makefile.
- Save the binary as !Vim.Vim in the binary distribution.


Updating the run-time environment:

- Replace old or missing files inside !Vim.Resources with the
  new files.
- Remove files in `doc' not ending in `/txt', except for `tags'.
- Lose the extensions from the files in `doc'.
- Edit the `doc.tags' file.  Remove extensions from the second column: >
	:%s/^\(.[^\t]*\t.*\)\.txt\t/\1\t/
- Remove extensions from the syntax files.  Split them into two directories
  to avoid the 77 entry limit on old ADFS filesystems.
- Edit `Vim:FileType' to match `*.c.*' as well as `*/c' and so on.
  Add filetype checking too.
- Edit `Vim:Menu' and remove all the keys from the menus: >
	:%s/<Tab>[^ \t]*//
<
 vim:tw=78:ts=8:ft=help:norl:
