*os_beos.txt*	For Vim version 7.4.  Last change: 2016 Mar 28


		  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 swapmouse
package for an example:					 |gui-mouse-mapping|
$VIMRUNTIME/pack/dist/opt/swapmouse/plugin/swapmouse.vim


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:
