'\" t
.\" Title: dome-key-mappings
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.79.1
.\" Date: 11/15/2018
.\" Manual: \ \&
.\" Source: \ \&
.\" Language: English
.\"
.TH "DOME\-KEY\-MAPPINGS" "7" "11/15/2018" "\ \&" "\ \&"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
dome-key-mappings \- Mapping definition syntax for dome\-key
.SH "SYNOPSIS"
.sp
Describes dome\-key\(cqs mapping syntax
.SH "DESCRIPTION"
.sp
The mappings file lives at \fI~/\&.config/dome\-key/mappings\&.dkmap\fR\&. All mappings should be written there\&. Three types of mappings can be defined: maps, commands, and modes\&.
.sp
Maps are used to simulate keyboard keys\&. Commands run shell commands\&. Modes, when activated, enable you to define multiple actions for the same headphone buttons\&.
.SH "SYNTAX"
.sp
Map and command mappings are composed of three parts, each separated by whitespace (one or more spaces or tabs):
.sp
.if n \{\
.RS 4
.\}
.nf
MAP_TYPE TRIGGER ACTION
.fi
.if n \{\
.RE
.\}
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
MAP_TYPE is the kind of action (\fBmap\fR
or
\fBcmd\fR)\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
TRIGGER is one or more headphone keys (\fB\fR,
\fB\fR,
\fB\fR)\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
ACTION defines what to do when the headphone keys from TRIGGER are pressed\&.
.RE
.sp
Mappings must be written on a single line\&. No line continuation operator is available\&.
.sp
Comment lines are prefixed with a \(oq#\(cq and must appear on their own line\&. They are not permitted on the same line as mapping definitions\&.
.SS "Map"
.sp
ACTION corresponds to a sequence of keyboard keys that will be pressed virtually\&. For example,
.sp
.if n \{\
.RS 4
.\}
.nf
map Hello
.fi
.if n \{\
.RE
.\}
.sp
will type "Hello" with a newline at the end\&. Simulated keys are pressed in succession as quickly as possible\&. There is no way to wait or sleep between keys\&.
.SS "Command"
.sp
ACTION must be a shell command\&. In:
.sp
.if n \{\
.RS 4
.\}
.nf
cmd say "Good morning"
.fi
.if n \{\
.RE
.\}
.sp
the \fB/usr/bin/say\fR command will be executed, playing "Good morning" in audible speech\&.
.sp
This map type is useful for running arbitrary code that can\(cqt be expressed by simulating keyboard keys with a \fBmap\fR\&.
.sp
Commands are executed with \fB$SHELL \-c ACTION\fR\&. If \fB$SHELL\fR isn\(cqt set, \fB/bin/sh\fR is used instead\&.
.SS "Mode"
.sp
You can think of modes like Vim modes\&. They enable you to map the same trigger more than once\&. Let\(cqs look at an example:
.sp
.if n \{\
.RS 4
.\}
.nf
cmd open \-a Firefox
.fi
.if n \{\
.RE
.\}
.sp
.if n \{\
.RS 4
.\}
.nf
mode {
map
}
.fi
.if n \{\
.RE
.\}
.sp
Here, the \fB\fR headphone button will open Firefox\&. But when the mode is active, pressing \fB\fR instead simulates the Space key\&.
.sp
Modes are both activated and deactivated by pressing the TRIGGER sequence written after the \fBmode\fR keyword\&. The trigger functions as a toggle\&. In our example, pressing \fB\fR activates the mode\&. If the mode is active, pressing \fB\fR will deactivate the mode, causing top\-level mappings to become available again\&.
.sp
Any number of maps and commands can be defined inside a mode\&. These are enclosed by curly braces\&. Mode mappings should not use the same trigger as the mode\(cqs\&. Mappings with the same trigger are ignored:
.sp
.if n \{\
.RS 4
.\}
.nf
mode {
# The following mapping is ignored:
map Hello
}
.fi
.if n \{\
.RE
.\}
.sp
Modes cannot be nested\&.
.SS "Special Keys"
.sp
Special keys are enclosed in \(oq<\(cq \(oq>\(cq brackets (e\&.g\&. \fB\fR)\&. These are used in \fBmap\fR actions to simulate a key press\&.
.PP
Nop
.RS 4
Unmaps a trigger\&. Used to remove the default behaviour of a trigger button without remapping it\&.
.RE
.PP
F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12
.RS 4
Function keys
.RE
.PP
Up, Down, Left, Right
.RS 4
Arrow keys
.RE
.sp
Home, End, PageUp, PageDown
.PP
Return, Enter, CR
.RS 4
Synonyms for the Return key
.RE
.PP
Del
.RS 4
Forward delete
.RE
.PP
BS
.RS 4
Backspace
.RE
.PP
Esc
.RS 4
Escape
.RE
.sp
CapsLock, NumLock
.sp
Tab, Space
.PP
VolumeUp, VolumeDown, Mute
.RS 4
Volume keys
.RE
.sp
BrightnessUp, BrightnessDown, ContrastUp, ContrastDown
.sp
Help
.sp
Power, Eject
.PP
VidMirror
.RS 4
Mirror displays
.RE
.PP
Play, Next, Previous, Fast, Rewind
.RS 4
Media keys
.RE
.PP
IlluminationUp, IlluminationDown, IlluminationToggle
.RS 4
Keyboard backlight
.RE
.sp
.it 1 an-trap
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
.ps +1
\fBEscaping\fR
.RS 4
.sp
To simulate a literal \(oq<\(cq character, it must be escaped with a backslash\&. Because backslash is used as an escape prefix, literal backslashes must also be escaped with a backslash\&.
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\(oq<\(cq becomes \(oq\e<\(cq
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\(oq\e\(cq becomes \(oq\e\e\(cq
.RE
.RE
.SS "Modifiers"
.sp
Modifiers can be applied to any key used in \fBmap\fR actions\&. Modifiers can also be chained\&. Modifiers must be prefixed to the key they\(cqre modifying, both of which are surrounded by \(oq<\(cq \(oq>\(cq brackets\&.
.PP
D\-
.RS 4
Apple/Command key
.RE
.PP
A\-
.RS 4
Option key
.RE
.PP
C\-
.RS 4
Control key
.RE
.PP
S\-
.RS 4
Shift key
.RE
.sp
.it 1 an-trap
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
.ps +1
\fBExamples\fR
.RS 4
.PP
.RS 4
Control\-c
.RE
.PP
.RS 4
Control\-Shift\-c
.RE
.PP
.RS 4
Apple\-Option\-Control\-Shift\-f
.RE
.PP
.RS 4
Option\-VolumeDown
.RE
.PP
.RS 4
Apple\-Option\-Eject
.RE
.RE
.SH "EXAMPLES"
.sp
Video controls:
.sp
.if n \{\
.RS 4
.\}
.nf
map
map
map
.fi
.if n \{\
.RE
.\}
.sp
Don\(cqt launch iTunes when pressing the middle button:
.sp
.if n \{\
.RS 4
.\}
.nf
map
.fi
.if n \{\
.RE
.\}
.sp
Let volume buttons function normally, and activate video controls when pressing \fB\fR twice:
.sp
.if n \{\
.RS 4
.\}
.nf
mode {
map
map
map
}
.fi
.if n \{\
.RE
.\}
.sp
Open frequently used applications:
.sp
.if n \{\
.RS 4
.\}
.nf
cmd open \-a Terminal
cmd open \-a Xcode
cmd open \-a Firefox
cmd open \-a Dictionary
.fi
.if n \{\
.RE
.\}
.sp
Compile code in Vim:
.sp
.if n \{\
.RS 4
.\}
.nf
map :make
.fi
.if n \{\
.RE
.\}
.SH "SEE ALSO"
.sp
dome\-key(1)\&.