Emacs and Haiku
***************

Haiku is a Unix-like operating system that originated as a re-implementation of the operating system BeOS.

This appendix describes the peculiarities of using Emacs built with the Application Kit, the windowing system indigenous to Haiku.  The idiosyncrasies illustrated here do not apply to Emacs on Haiku built without windowing support, or configured with X11.

Haiku Installation and Startup
==============================

When Emacs is installed under Haiku, two executables are copied to the binaries directory, which are identical save for some identifying file-system metadata.  The first is a normal Emacs executable, emacs, whereas the second, Emacs, incorporates an icon and an application ``signature'' that abets the system in attributing both file types and open frames to it, thereby enabling it to receive file type assignments, and thus to open files directly from the Tracker.

Several file attributes are set within Emacs that prompt the system to permit only a single copy to run at any given time.  This invariant is verified upon the establishment of a display connection, and is enforced by terminating any Emacs process that attempts to create a display connection when one is already present.

For this and other reasons, Emacs is appropriate for starting a GUI session of Emacs, while emacs should be used for other types of Emacs sessions.

Emacs is incapable of receiving unusual modifier keys such as Hyper under Haiku, or to receive accented characters produced from the system Super key map.

By default, the Super modifier is reported when the Option key defined by the operating system is depressed.  Analogously, the Meta modifier is assigned to the Command key, and of course Control to the system Control key and Shift to the system Shift key.  On a standard PC keyboard, Haiku should map these keys to positions familiar to those using a GNU system, but this may require some adjustment to your system's configuration to work.

You can customize the relation between modifier keys known to the system and those known to Emacs by means of the variables below.

haiku-meta-keysym
     The system modifier key that will be treated as the Meta key by Emacs. It defaults to command.

haiku-control-keysym
     The system modifier key that will be treated as the Control key by Emacs.  It defaults to control.

haiku-super-keysym
     The system modifier key that will be treated as the Super key by Emacs.  It defaults to option.

haiku-shift-keysym
     The system modifier key that will be treated as the Shift key by Emacs.  It defaults to shift.

The value of each variable can be one of the symbols command, control, option, shift, or nil. nil or any other value will cause the default value to be used instead.

On Haiku, Emacs defaults to using the system tooltip mechanism. Tooltips thus generated are sometimes more responsive, but will not be able to display text properties or faces.  If you need those features, customize the variable use-system-tooltips to nil value, whereupon Emacs will use its own implementation of tooltips instead.

Unlike the X window system, Haiku does not provide a system-wide resource database.  Since many important options are specified via X resources (see X Resources), an emulation is provided: upon startup, Emacs will load a file named GNU Emacs inside the user configuration directory (normally /boot/home/config/settings), which should be a flattened system message where keys and values are both strings, and correspond to attributes and their values respectively.  Such a file may be created with the xmlbmessage tool.

If the variable haiku-debug-on-fatal-error is non-nil, Emacs will launch the system debugger when a fatal signal is received.  It defaults to t.  If GDB cannot be used on your system, please attach the report generated by the system debugger when reporting a bug.

Font Backends and Selection under Haiku
=======================================

Emacs supports several different font backends when built with Haiku windowing support, though the subset supported is subject to the list of dependencies present and enabled when Emacs was configured.  You can specify which font backends to utilize by providing -xrm Emacs.fontBackend:BACKEND on the command line used to invoke Emacs, where BACKEND is one of the backends listed below, or on a per-frame basis by changing the font-backend frame parameter.

Two of these backends, ftcr and ftcrhb are identical to their counterparts on the X Window System.  There is also a Haiku-specific backend named haiku, that uses the App Server to draw fonts, but presently cannot display color fonts or Emoji.