Table of Contents

keyboard Plugin

Compatible with DokuWiki

  • 2024-02-06 "Kaos" unknown
  • 2023-04-04 "Jack Jackrum" yes
  • 2022-07-31 "Igor" yes
  • 2020-07-29 "Hogfather" yes

plugin Marks text as keyboard keys

Last updated on
2023-02-23
Provides
Syntax
Repository
Source

Tagged with keyboard, odt, pdf

Should work as-is, no longer actively maintained by original author.

Works well with the dw2pdf plugin and the odt plugin.

Usage

Use the tag <key> to mark some text as keyboad keys. E.g.:

This displays the keys <key>ALT</key> + <key>H</key>.

This will create the following output:


Example screenshot


Alternatively the tag <kbd> can be used in accordance to the HTML element:

This displays the keys <kbd>ALT</kbd> + <kbd>H</kbd>.

Short form

The shorter form to write the key combination ALT+H is:

This displays the keys <kbd>ALT+H</kbd>.

Separator signs for the short form can be + or -. In both cases the rendered sign between the keys will be a +. So in general it does not make a difference if + or - is used. But it does make a difference if you want to include a + or - as a key and not as a separator. If you would like to render the key combination ALT++ then you should write:

<kbd>ALT-+</kbd>

If you would like to render the key combination ALT+- then you should write:

<kbd>ALT+-</kbd>

Escape mechanism

Since release 2018-08-09 it is possible to surround keys with '…'. All keys enclosed in '…' will be displayed as-is without interpreting + or - as separators. Here is an example:

<kbd>'ALT+H'</kbd>

This example would display “ALT+H” as a single key instead of two keys: “ALT” + “H”.

Specify CSS class

If you like to vary the look with each given key sequence you can also specify a CSS class like this:

<key class="myclass">ALT+H</key>

Short cuts

Some keys like the letter C are short cuts which will be expanded to a translated key name. For example <key>ALT+C</key> will show the same result as if you entered <key>ALT+Ctrl</key>. If you want to suppress this behaviour then include the letter between two '. E.g. if you really want to show the letter C instead of Ctrl then write <key>ALT+'C'</key>.

Configuration

The following configuration options exist:

disable_translation — if this option is activated then all translations and short cuts are deactivated. The given keys will be displayed “as-is”.

css_class — the CSS class to use if no class is given in the syntax tag. There are two built-in classes:

For the standard look enter:

__keyboard

For a look similar to the MediaWiki keypress template enter:

__keyboard_keypress

You can also enter user defined CSS classes which e.g. could be defined in conf/userstyle.css, see customizing_templates.

Some DokuWiki templates like the Bootstrap3 template define an own style for kbd elements. In this case the css_class setting needs to be empty to use the style of the template.

Development

Changes:

Add LaTeX support

You can enhance this plugin to be used with different LaTeX export plugins. Otherwise the LaTeX export will (most likely) simply skip/ignore the keys.

dokutexit support

If you want to use this package with dokutexit, you can easily add latex-support: add the following after line 105 in “syntax.php”:

add-this-for-dokutexit-support.php
        if ($mode == 'latex') {
            list($state, $match) = $data;
            switch ($state) {
                case DOKU_LEXER_ENTER :
                    $renderer->doc .= '\framebox{';
                    break;
                case DOKU_LEXER_UNMATCHED :
                    foreach ($match as $key) {
                        if (substr($key, 0, 1) == "'" and
                          substr($key, -1, 1) == "'" and
                          strlen($key) > 1) {
                            $out[] = $renderer->_xmlEntities(substr($key,1,-1));
                        } else {
                            if (isset($lang[$key])) {
                                $out[] = $lang[$key];
                            } else {
                                $out[] = $renderer->_xmlEntities(ucfirst($key));
                            }
                        }
                    }
                    $renderer->doc .= implode('} + \framebox{', $out);
                    break;
                case DOKU_LEXER_EXIT :
                    $renderer->doc .= '}';
                    break;
            }
            return true;
        }

latexit support

If you want to use this package with latexit, add the following after line 105 in “syntax.php”:

add-this-for-latexit-support.php
        if ($mode == 'latex') {
            list($state, $match) = $data;
            switch ($state) {
                case DOKU_LEXER_ENTER :
                    $renderer->doc .= '\framebox{';
                    break;
                case DOKU_LEXER_UNMATCHED :
                    foreach ($match as $key) {
                        if (substr($key, 0, 1) == "'" and
                          substr($key, -1, 1) == "'" and
                          strlen($key) > 1) {
                            $out[] = $renderer->_latexSpecialChars(substr($key,1,-1));
                        } else {
                            if (isset($lang[$key])) {
                                $out[] = $lang[$key];
                            } else {
                                $out[] = $renderer->_latexSpecialChars(ucfirst($key));
                            }
                        }
                    }
                    $renderer->doc .= implode('} + \framebox{', $out);
                    break;
                case DOKU_LEXER_EXIT :
                    $renderer->doc .= '}';
                    break;
            }
            return true;
        }

Translations

The plugin is available in the languages German, English, French, Korean and Chinese.

Issues/Requests

Please report any issues or requests on the GitHub issue tracker.