*os_beos.txt*	For Vim version 7.3.  Last change: 2010 Aug 14


		  VIM REFERENCE MANUAL    by Bram Moolenaar


							*BeOS* *BeBox*
This is a port of Vim 5.1 to the BeOS Preview Release 2 (also known as PR2)
or later.

This file contains the particularities for the BeBox/BeOS version of Vim.  For
matters not discussed in this file, Vim behaves very much like the Unix
|os_unix.txt| version.

 1. General			|beos-general|
 2. Compiling Vim		|beos-compiling|
 3. Timeout in the Terminal	|beos-timeout|
 4. Unicode vs. Latin1		|beos-unicode|
 5. The BeOS GUI		|beos-gui|
 6. The $VIM directory		|beos-vimdir|
 7. Drag & Drop			|beos-dragndrop|
 8. Single Launch vs. Multiple
    Launch			|beos-launch|
 9. Fonts			|beos-fonts|
10. The meta key modifier	|beos-meta|
11. Mouse key mappings		|beos-mouse|
12. Color names			|beos-colors|
13. Compiling with Perl		|beos-perl|


1. General						*beos-general*

The default syntax highlighting mostly works with different foreground colors
to highlight items.  This works best if you set your Terminal window to a
darkish background and light letters.  Some middle-grey background (for
instance (r,g,b)=(168,168,168)) with black letters also works nicely.  If you
use the default light background and dark letters, it may look better to
simply reverse the notion of foreground and background color settings.  To do
this, add this to your .vimrc file (where <Esc> may need to be replaced with
the escape character): >

  :if &term == "beos-ansi"
  :    set t_AB=<Esc>[3%dm
  :    set t_AF=<Esc>[4%dm
  :endif


2. Compiling Vim					*beos-compiling*

From the Advanced Access Preview Release (AAPR) on, Vim can be configured with
the standard configure script.  To get the compiler and its flags right, use
the following command-line in the shell (you can cut and paste it in one go):

CC=$BE_C_COMPILER CFLAGS="$BE_DEFAULT_C_FLAGS -O7" \
    ./configure --prefix=/boot/home/config

$BE_C_COMPILER is usually "mwcc", $BE_DEFAULT_C_FLAGS is usually "-I- -I."

When configure has run, and you wish to enable GUI support, you must edit the
config.mk file so that the lines with GUI_xxx refer to $(BEOSGUI_xxx) instead
of $(NONE_xxx).
Alternatively you can make this change in the Makefile; it will have a
more permanent effect.  Search for "NONE_".

After compilation you need to add the resources to the binary.  Add the
following few lines near the end (before the line with "exit $exit_value") of
the link.sh script to do this automatically.

    rmattr BEOS:TYPE vim
    copyres os_beos.rsrc vim
    mimeset vim

Also, create a dummy file "strip":

    #!/bin/sh
    mimeset $1
    exit 0

You will need it when using "make install" to install Vim.

Now type "make" to compile Vim, then "make install" to install it.

If you want to install Vim by hand, you must copy Vim to $HOME/config/bin, and
create a bunch of symlinks to it ({g,r,rg}{vim,ex,view}).  Furthermore you must
copy Vim's configuration files to $HOME/config/share/vim:
vim-5.0s/{*.vim,doc,syntax}.  For completeness, you should also copy the nroff
manual pages to $HOME/config/man/man1.  Don't forget ctags/ctags and xxd/xxd!

Obviously, you need the unlimited linker to actually link Vim.  See
http://www.metrowerks.com for purchasing the CodeWarrior compiler for BeOS.
There are currently no other linkers that can do the job.

This won't be able to include the Perl or Python interfaces even if
you have the appropriate files installed. |beos-perl|


3. Timeout in the Terminal				*beos-timeout*

Because some POSIX/UNIX features are still missing[1], there is no direct OS
support for read-with-timeout in the Terminal.  This would mean that you cannot
use :mappings of more than one character, unless you also :set notimeout.
|'timeout'|

To circumvent this problem, I added a workaround to provide the necessary
input with timeout by using an extra thread which reads ahead one character.
As a side effect, it also makes Vim recognize when the Terminal window
resizes.

Function keys are not supported in the Terminal since they produce very
indistinctive character sequences.

These problems do not exist in the GUI.

[1]: there is no select() on file descriptors; also the termios VMIN and VTIME
settings do not seem to work properly.  This has been the case since DR7 at
least and still has not been fixed as of PR2.

							*beos-unicode*
4. Unicode vs. Latin1					*beos-utf8*

BeOS uses Unicode and UTF-8 for text strings (16-bit characters encoded to
8-bit characters).  Vim assumes ISO-Latin1 or other 8-bit character codes.
This does not produce the desired results for non-ASCII characters.  Try the
command :digraphs to see.  If they look messed up, use :set isprint=@ to
(slightly) improve the display of ISO-Latin1 characters 128-255.  This works
better in the GUI, depending on which font you use (below).

You may also use the /boot/bin/xtou command to convert UTF-8 files from (xtou
-f iso1 filename) or to (xtou -t iso1 filename) ISO-Latin1 characters.


5. The BeOS GUI						*beos-gui*

The BeOS GUI is no longer included.  It was not maintained for a while and
most likely didn't work.  If you want to work on this: get the Vim 6.x version
and merge it back in.


6. The $VIM directory					*beos-vimdir*

$VIM is the symbolic name for the place where Vims support files are stored.
The default value for $VIM is set at compile time and can be determined with >

  :version

The normal value is /boot/home/config/share/vim.  If you don't like it you can
set the VIM environment variable to override this, or set 'helpfile' in your
.vimrc: >

  :if version >= 500
  :    set helpfile=~/vim/vim54/doc/help.txt
  :    syntax on
  :endif


7. Drag & Drop						*beos-dragndrop*

You can drop files and directories on either the Vim icon (starts a new Vim
session, unless you use the File Types application to set Vim to be "Single
Launch") or on the Vim window (starts editing the files).  Dropping a folder
sets Vim's current working directory. |:cd| |:pwd| If you drop files or
folders with either SHIFT key pressed, Vim changes directory to the folder
that contains the first item dropped.  When starting Vim, there is no need to
press shift: Vim behaves as if you do.

Files dropped set the current argument list. |argument-list|


8. Single Launch vs. Multiple Launch			*beos-launch*

As distributed Vim's Application Flags (as seen in the FileTypes preference)
are set to Multiple Launch.  If you prefer, you can set them to Single Launch
instead.  Attempts to start a second copy of Vim will cause the first Vim to
open the files instead.  This works from the Tracker but also from the command
line.  In the latter case, non-file (option) arguments are not supported.

NB: Only the GUI version has a BApplication (and hence Application Flags).
This section does not apply to the GUI-less version, should you compile one.


9. Fonts						*beos-fonts*

Set fonts with >

  :set guifont=Courier10_BT/Roman/10

where the first part is the font family, the second part the style, and the
third part the size.  You can use underscores instead of spaces in family and
style.

Best results are obtained with monospaced fonts (such as Courier).  Vim
attempts to use all fonts in B_FIXED_SPACING mode but apparently this does not
work for proportional fonts (despite what the BeBook says).

Vim also tries to use the B_ISO8859_1 encoding, also known as ISO Latin 1.
This also does not work for all fonts.  It does work for Courier, but not for
ProFontISOLatin1/Regular (strangely enough).  You can verify this by giving the >

  :digraphs

command, which lists a bunch of characters with their ISO Latin 1 encoding.
If, for instance, there are "box" characters among them, or the last character
isn't a dotted-y, then for this font the encoding does not work.

If the font you specify is unavailable, you get the system fixed font.

Standard fixed-width system fonts are:

	      ProFontISOLatin1/Regular
		  Courier10_BT/Roman
		  Courier10_BT/Italic
		  Courier10_BT/Bold
		  Courier10_BT/Bold_Italic

Standard proportional system fonts are:

		    Swis721_BT/Roman
		    Swis721_BT/Italic
		    Swis721_BT/Bold
		    Swis721_BT/Bold_Italic
		Dutch801_Rm_BT/Roman
		Dutch801_Rm_BT/Italic
		Dutch801_Rm_BT/Bold
		Dutch801_Rm_BT/Bold_Italic
		   Baskerville/Roman
		   Baskerville/Italic
		   Baskerville/Bold
		   Baskerville/Bold_Italic
		 SymbolProp_BT/Regular

Try some of them, just for fun.


10. The meta key modifier				*beos-meta*

The META key modifier is obtained by the left or right OPTION keys.  This is
because the ALT (aka COMMAND) keys are not passed to applications.


11. Mouse key mappings					*beos-mouse*

Vim calls the various mouse buttons LeftMouse, MiddleMouse and RightMouse.  If
you use the default Mouse preference settings these names indeed correspond to
reality.  Vim uses this mapping:

    Button 1 -> LeftMouse,
    Button 2 -> RightMouse,
    Button 3 -> MiddleMouse.

If your mouse has fewer than 3 buttons you can provide your own mapping from
mouse clicks with modifier(s) to other mouse buttons.  See the file
vim-5.x/macros/swapmous.vim for an example.		|gui-mouse-mapping|


12. Color names						*beos-colors*

Vim has a number of color names built-in.  Additional names are read from the
file $VIMRUNTIME/rgb.txt, if present.  This file is basically the color
database from X.  Names used from this file are cached for efficiency.


13. Compiling with Perl					*beos-perl*

Compiling with Perl support enabled is slightly tricky.  The Metrowerks
compiler has some strange ideas where to search for include files.  Since
several include files with Perl have the same names as some Vim header
files, the wrong ones get included.  To fix this, run the following Perl
script while in the vim-5.0/src directory: >

   preproc.pl > perl.h

    #!/bin/env perl
    # Simple #include expander, just good enough for the Perl header files.

    use strict;
    use IO::File;
    use Config;

    sub doinclude
    {
	my $filename = $_[0];
	my $fh = new IO::File($filename, "r");
	if (defined $fh) {
	    print "/* Start of $filename */\n";

	    while (<$fh>) {
		if (/^#include "(.*)"/) {
		    doinclude($1);
		    print "/* Back in $filename */\n";
		} else {
		    print $_;
		}
	    }
	    print "/* End of $filename */\n";

	    undef $fh;
	} else {
	    print "/* Cannot open $filename */\n";
	    print "#include \"$filename\"\n";
	}
    }

    chdir     $Config{installarchlib}."/CORE";
    doinclude "perl.h";

It expands the "perl.h" header file, using only other Perl header files.

Now you can configure & make Vim with the --enable-perlinterp option.
Be warned though that this adds about 616 kilobytes to the size of Vim!
Without Perl, Vim with default features and GUI is about 575K, with Perl
it is about 1191K.

-Olaf Seibert

[Note: these addresses no longer work:]
<rhialto@polder.ubc.kun.nl>
http://polder.ubc.kun.nl/~rhialto/be

 vim:tw=78:ts=8:ft=help:norl:
