Haiku – Thoughts
Key Intents
Currently there are a multitude of different keybindings in use throughout the wonderful world of Haiku software of which you have to memorize. For example, some apps use Page Up/Page Down to scroll the viewport without moving the insertion point and some move the insertion point, or some apps use Ctrl+Page Up to go to the top of the current document and others use Ctrl+End, or some apps use the End key to go to the end of a line and some use Alt+Right Arrow.
It would be much nicer if you could configure globally what happens when you press a certain key combination i.e. if you could define the key mapping for a particular intent.
Currently the Haiku API has individual keys mapped to a constant, for example
B-PAGE-UP, which are sent to the application for it to respond to.
What we also need are constants such as the following,
B-START-OF-DOCUMENT, B-END-OF-LINE etc.
This, along with a preference/settings/config window à la SpicyKeys would allow for consistency of key mappings amongst the growing number of Haiku applications.
Resize or Move
In Windows when you drag the edge of a window you resize the window and in OSX you move the window. One way of providing for users coming from both operating systems would be to have a small section of the edge which you can toggle between moving and resizing the window with the rest of the edge performing the other function.
Directory Hierarchy
/boot (Only files needed to bootstrap the system,
NOT the boot drive)
kernel.x86 | kernel.ppc
/bin (All files are statically linked)
init
sh
echo
probe-addons
load-addon
unload-addon
/config
/bootscreen
bootscreen.uconf
bootscreen.raw (Raw boot screen image)
kernel.uconf
display.uconf
keyboard.uconf
filesystems.uconf
/addons
addons.uconf (Global configuration for add-ons)
{addon}.uconf (Configures {addon} in /boot/addons)
/scripts
startup.sh
shutdown.sh
modules.sh
/addons (Kernel add-ons)
/system (Haiku system)
/bin (Un*x style shell commands)
/lib
/addons
/kernel
/tracker
/deskbar
...
/scripts
startup.sh (System startup script)
login.sh (Script run on user login)
logout.sh (Script run on user logout)
shutdown.sh (System shutdown script)
/servers
server-server.sh
network-server.sh
...
/servers (Server daemons)
server-server (Manages the other servers)
auth-server
application-server
notification-server
mime-server
network-server
media-server
...
/applications
/control-panels (GUI’s to control servers)
/Tracker
/Deskbar
/config (System Configuration. That means no exe’s,
no libraries, ONLY CONFIG FILES)
config.conf (Only fixed filename, defines mapping to
localized names of files)
disks.conf (Disks to mount)
display.conf (Default resolution, bit depth etc.)
pointer.conf
bookmarks.conf
environment.conf
l10n.conf
/servers
/server
server.conf
/network
server.conf
devices.conf
dhcp.conf
routing.conf
/security
server.conf
users.conf
groups.conf
passwords.conf
/desktop
desktop.conf
workspaces.conf (Number of workspaces, names etc.)
/themes
themes.conf
{theme}.conf
/l10n (System localization)
/en
numbers.conf
currency.conf
datetime.conf
strings.conf (Standard strings - Yes, No, Cancel etc.)
/US
/GB
/documentation
/source
/haiku
haiku.conf
/kernel
/kits
/system
/applications (Applications for all users)
/bin (Un*x style shell commands)
/lib
/share
/config
/database
database.conf
/all
{application}.spec
/installed (Links to {application}.spec in ‘all’ directory)
{application}.package
/resources
/default
/en
strings.conf
/US
/documentation (Standard Documentation Set)
License
ReadMe
Install
Uninstall
/config (Default application configuration)
/perl
/python
/java
/users
/baron
/{user}
/desktop
/config
desktop.conf
bookmarks.conf
environment.conf
l10n.conf
scheduler.conf
/{application} or {application}.conf
/startup
/scripts
login.sh
logout.sh
...
/applications
/{application}
/documents
index.db
/people
/mail
filters.[u|x]conf
/inbox
/spam
/data
/system (Similar to linux /proc)
startup (Ordered list of scripts to run at startup)
shutdown (As above but for shutdown)
proc (Processors & Virtual Processors i.e. cores)
vproc
/etc
/temp
/pid
/lock
/mail (System mail server storage)
/inbox
/spam
/development
/config
system.uconf (Toolchain definitions)
/java
toolchain.uconf
/gcc or llvm (System compiler toolchain)
toolchain.uconf
{platform}.uconf
gcc
ld
/headers
/c
/haiku
/disk
/boot
/cdrom
/dev
/ide
/usb
/firewire
/scsi
/serial
/parallel
/disk
/network
Notes
All config files come in various forms characterised by their extensions
- .conf
- Flattened BMessage
- .xconf
- XML
- .uconf
- Un*x style ‘name = value’ with RFC822 style wrapping.
- .wconf
- Windows style = Un*x style + ‘[Section]’s
Shell scripts have the extension .sh