├── README.md ├── convcompose.py ├── demo.gif ├── gencompose.py ├── karabiner-compose.png ├── mappings ├── README.md ├── common.yaml ├── emoji.yaml ├── lithuanian.yaml ├── readme.yaml ├── xcompose.compose └── xcompose.yaml ├── pyproject.toml ├── tests ├── __init__.py ├── test.compose └── test_convcompose.py └── toXcompose.py /README.md: -------------------------------------------------------------------------------- 1 | # Compose Key On Macos 2 | 3 | `gen-compose` - generates _compose key_ keybindings for macos. 4 | 5 | > A compose key (sometimes called multi key) is a key on a computer keyboard that indicates that the following (usually 2 or more) keystrokes trigger the insertion of an alternate character, typically a precomposed character or a symbol. 6 | > https://en.wikipedia.org/wiki/Compose_key 7 | 8 | Compose keys lets you insert complex character by entering multiple characters in a succession: 9 | 10 | ![screencast demonstration of compose key](./demo.gif) 11 | 12 | e.g. ` + d + o + w + n` will insert `👇` 13 | 14 | Mac os doesn't come with a compose key feature built-in. However there's a short hack to make it work: 15 | 16 | 1. Keys can be rebound in mac via `~/Library/KeyBindings/DefaultKeyBinding.dict` dictionary file. 17 | 2. The rebound keys can be chained like compose keys e.g. pressing `abcd` can be made to insert `AlphaBetaCharlieDad` 18 | 3. Modifier keys cannot be rebound 19 | 20 | With these three rules we can replicate compose key and even set it to work with a mod key! 21 | 22 | ## Install 23 | 24 | `gen-compose` can be installed via python manager with py3.6+ versions: 25 | 26 | ``` 27 | $ pip3 install --user gen-compose 28 | $ gen-compose --help 29 | Usage: gen-compose [OPTIONS] [MAPPINGS]... 30 | 31 | Generate macos rebind file from compose json mapping 32 | 33 | Options: 34 | --key TEXT key to use as compose key [default: §] 35 | -r, --raw just keymap without prefix 36 | --help Show this message and exit. 37 | ``` 38 | 39 | ## Preconfig 40 | 41 | 42 | 1. First lets fix modifier key issue by forcing modifier to be a character. For example to use `right_options` key we need to use [karabiner elements] and remap it to some unused key like `non_us_backslash`: 43 | ![karabiner compose screenshot](./karabiner-compose.png) 44 | 45 | 2. Now we have the compose key ready: if we click right_options it should insert `§` character 46 | However we cannot compose anything yet as we have no compose mappings yet. For that we need to modify keybindings dictionary located in `~/Library/KeyBindings/DefaultKeyBinding.dict`. 47 | It's written in some cryptic hard to edit format and here's where `gen-compose` comes in and lets you write `yaml` files instead! 48 | 49 | ## Usage 50 | 51 | 1. Create yaml mappings file (e.g. `mappings/readme.yaml`): 52 | ```yaml 53 | cat: "(^≗ω≗^)" 54 | "+1": 👍 55 | "-1": 👎 56 | ":(": "my face is sad" 57 | ``` 58 | This map defines key combinations and texts that will be inserted, e.g. `` will insert thumbs up. 59 | _note: see [mappings](./mappings) directory for some built in mappings_ 60 | 2. Using `gen-compose` we generated `.dict` keybind file file from our yaml configuration: 61 | ```shell 62 | $ gen-compose mappings/readme.yaml 63 | {"§" = { 64 | "c" = { 65 | "a" = { 66 | "t" = ("insertText:", "(^≗ω≗^)"); 67 | }; 68 | }; 69 | "+" = { 70 | "1" = ("insertText:", "👍"); 71 | }; 72 | "-" = { 73 | "1" = ("insertText:", "👎"); 74 | }; 75 | ":" = { 76 | "(" = ("insertText:", "my face is sad"); 77 | }; 78 | };} 79 | ``` 80 | _note: multiple mappings can be used to generate a single keymap:_ `$ gen-compose map1.yaml map2.yaml` 81 | 3. Now save it directly to keybinds file: 82 | ```shell 83 | $ gen-compose mappings/readme.yaml > ~/Library/KeyBindings/DefaultKeyBinding.dict 84 | ``` 85 | 4. Restart your programs and type `§+1` and you'll see `👍`! 86 | 5. Customize your own mapping or see `/mappings` for some existing configurations and have fun! 87 | 88 | 89 | _note: Some programs need a hard reboot to take in the map, like `kill -9` sort of reboot to start working._ 90 | 91 | ## Using XCompose Mappings 92 | 93 | Linux's xcompose mappings are supported via experimental conversion: 94 | 95 | ``` 96 | $ gen-compose-convert xcompose --help 97 | Usage: gen-compose-convert xcompose [OPTIONS] [FILES]... 98 | 99 | Convert xcompose file, that follows format like: 100 | <1> : "⑴" 101 | 102 | Options: 103 | -c, --keep-comments keep inline comments 104 | --help Show this message and exit. 105 | ``` 106 | 107 | For example: 108 | 109 | ``` 110 | $ head mappings/example.compose 111 | : "₿" U20BF # BITCOIN SIGN 112 | ... 113 | $ gen-compose-convert xcompose mappings/xcompose.compose --keep-comments > example.yaml 114 | $ cat example.yaml 115 | "B|": "₿" # BITCOIN SIGN 116 | ... 117 | ``` 118 | 119 | ## Exporting to XCompose 120 | 121 | `gen-compose-export` command can be used export yaml configuration back to XCompose file: 122 | 123 | ```shell 124 | $ gen-compose-export --help 125 | Usage: gen-compose-export [OPTIONS] YAMLFILE 126 | 127 | Export .yaml config file back to XCompose file i.e. this is reverse of 128 | gen-compose-convert 129 | 130 | Options: 131 | --help Show this message and exit. 132 | ``` 133 | 134 | For example: 135 | 136 | ```python 137 | $ head mappings/xcompose.yaml 138 | "..": "…" # HORIZONTAL ELLIPSIS 139 | "v..": "⋮" # VERTICAL ELLIPSIS 140 | ... 141 | $ gen-compose-export mappings/xcompose.yaml > xcompose.compose 142 | $ head xcompose.compose 143 | :"…" 144 | :"⋮" 145 | :"⋯" 146 | :"⋰" 147 | :"⋱" 148 | <2>:"‥" 149 | <1>:"·" 150 | :"⁒" 151 | :"⅋" 152 | <7>:"⁊" 153 | ... 154 | ``` 155 | 156 | ## Notes and Issues 157 | 158 | * There's no way to really debug this other than trial and error and making sure applications are restarted after every update. 159 | * When multiple keymaps (eg `compose-gen map1.yaml map2.yal`) provided they will be joined and updated in order they are provided. 160 | * Keymap does not allow completely overlapping keys. e.g. `egg` and `eggplant` will break because it's impossible to map two overlapping values as keymap functionality has no timeout (i.e. break if nothing is typed after a second and insert `egg`, instead it will wait indefinitely for you to finish `eggplant`) 161 | If overlap happens `compose-gen` will choose the shorter form and discard the long one. 162 | To fix this add end terminator character such as space: `egg` rather than `egg` in your mappings. 163 | * `DefaultKeyBinding.dict` map doesn't work in some popular programs: 164 | - JetBrain editors such as PyCharm, see: https://youtrack.jetbrains.com/issue/IDEA-127470 165 | - QT apps such as Qutebrowser, see (and vote): https://bugreports.qt.io/browse/QTBUG-393 166 | 167 | 168 | 169 | #### Related Resources 170 | 171 | https://github.com/gnarf/osx-compose-key 172 | http://lolengine.net/blog/2012/06/17/compose-key-on-os-x 173 | http://bob.cakebox.net/osxcompose.php 174 | https://github.com/ttscoff/KeyBindings 175 | 176 | [karabiner elements]: https://karabiner-elements.pqrs.org/ 177 | -------------------------------------------------------------------------------- /convcompose.py: -------------------------------------------------------------------------------- 1 | import click 2 | import re 3 | 4 | from click import echo 5 | 6 | KEY_MAP = { 7 | 'bracketleft': '[', 8 | 'bracketright': ']', 9 | 'parenleft': '(', 10 | 'parenright': ')', 11 | 'Multi_key': '', 12 | 'period': '.', 13 | 'minus': '-', 14 | 'plus': '+', 15 | 'dollar': '$', 16 | 'at': '@', 17 | 'exclam': '!', 18 | 'less': '<', 19 | 'greater': '>', 20 | 'slash': '/', 21 | 'backslash': '\\', 22 | 'question': '?', 23 | 'space': ' ', 24 | 'equal': '=', 25 | 'asciitilde': '~', 26 | 'numbersign': '#', 27 | 'asterisk': '*', 28 | 'colon': ':', 29 | 'semicolon': ';', 30 | 'percent': '%', 31 | 'underscore': '_', 32 | 'asciicircum': '^', 33 | 'comma': ',', 34 | 'apostrophe': "'", 35 | 'quotedbl': '"', 36 | 'bar': "|", 37 | 'grave': "`", 38 | 'ampersand': "&", 39 | 'braceright': "}", 40 | 'braceleft': "{", 41 | 'KP_Multiply': "*", 42 | 'exclamdown': "¡", 43 | 'questiondown': "¿", 44 | } 45 | 46 | 47 | def quote(char): 48 | """ 49 | quote yaml key 50 | - replaces `\` to `\\` 51 | - replace `"` to `\"` 52 | """ 53 | char = char.replace('\\', '\\\\') 54 | char = char.replace('"', '\\"') 55 | return char 56 | 57 | 58 | def remap_keys(keys): 59 | """remap xcompose keys to unicode characters""" 60 | result = [] 61 | for key in keys: 62 | key = key.strip('<>') 63 | if len(key) > 1: 64 | # convert unicode hexes to unicode characters 65 | # e.g. U220B == ∋ 66 | if key.startswith('U') and any(c.isdigit() for c in key): 67 | key = key.split('U', 1)[1] 68 | key = chr(int(key, 16)) 69 | elif key not in KEY_MAP: 70 | raise ValueError(f'unsupported keymap: {key}') 71 | result.append(KEY_MAP.get(key, key)) 72 | return result 73 | 74 | 75 | @click.group() 76 | def main(): 77 | """convert alternative formats to yaml key: value format""" 78 | pass 79 | 80 | 81 | @main.command() 82 | @click.argument('files', type=click.File(), nargs=-1) 83 | @click.option('-c', '--keep-comments', is_flag=True, help='keep inline comments') 84 | def xcompose(files, keep_comments): 85 | """ 86 | Convert xcompose file, that follows format like: 87 | <1> : "⑴" 88 | """ 89 | # e.g. < Multi_key > < parenleft > < period > < 1 > < parenright >: "⑴" 90 | for file in files: 91 | for row in file: 92 | row = row.strip() 93 | if not row: 94 | continue 95 | if row.startswith('#') or row.startswith('include'): 96 | continue 97 | if '#' in row: 98 | row, comment = row.split('#', 1) 99 | else: 100 | comment = '' 101 | try: 102 | from_, to = row.split(':', 1) 103 | except ValueError: 104 | echo(f'malformed line:\n{row}', err=True) 105 | continue 106 | from_ = re.split(r'\s+', from_) 107 | try: 108 | from_ = ''.join(remap_keys(from_)) 109 | except ValueError as e: 110 | echo(f'{e}; skipping:\n {row}', err=True) 111 | continue 112 | to = to.split('"')[1] 113 | value = f'"{quote(from_)}": "{quote(to)}"' 114 | if keep_comments and comment: 115 | value += f' #{comment}' 116 | echo(value) 117 | 118 | 119 | if __name__ == '__main__': 120 | main() 121 | -------------------------------------------------------------------------------- /demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Granitosaurus/macos-compose/0bdd7b6cc0713103b6726834d79e2ad3f9fc7143/demo.gif -------------------------------------------------------------------------------- /gencompose.py: -------------------------------------------------------------------------------- 1 | import json 2 | import re 3 | from collections.abc import MutableMapping 4 | from copy import deepcopy 5 | from typing import Union, Tuple, Callable, Type, Iterable, Dict 6 | 7 | import click 8 | import yaml 9 | from click import echo 10 | 11 | 12 | def key_nest(keys: Iterable) -> Dict: 13 | """ 14 | creates key nest from provided values 15 | 16 | >>> key_nest('1234') 17 | {'1': {'2': {'3': '4'}}} 18 | """ 19 | v = None 20 | for c in keys[::-1]: 21 | if not v: 22 | v = c 23 | else: 24 | v = {c: v} 25 | return v 26 | 27 | 28 | def object_hook(dict_, func: Callable, types: Union[Tuple[Type], Type] = dict): 29 | """ 30 | object hook for python dictionary - applies function to every object of type recursively 31 | note: dictionary keys are not considered to be objects and will be type matched, 32 | for processing dictionary keys you should process whole dict type. 33 | example: 34 | >>> object_hook({'foo': 'bar'}, str.upper, str) 35 | {'foo': 'BAR'} 36 | >>> object_hook({'foo': {'nested': 10}}, lambda v: v+1, int) 37 | {'foo': {'nested': 11}} 38 | """ 39 | new = deepcopy(dict_) 40 | if isinstance(dict_, types): # hook self as well 41 | new = func(new) 42 | 43 | if not isinstance(new, MutableMapping): 44 | return new 45 | 46 | for key in new: 47 | # recursive object_hook for dicts 48 | if isinstance(new[key], MutableMapping): 49 | new[key] = object_hook(new[key], func, types) 50 | # for lists either apply function if type matched or recursive object_hook if dict 51 | elif isinstance(new[key], (list, tuple)): 52 | new[key] = type(new[key])( 53 | object_hook(v, func, types) if 54 | isinstance(v, MutableMapping) else func(v) 55 | if isinstance(v, types) else v 56 | for v in new[key] 57 | ) 58 | 59 | if isinstance(new[key], types): 60 | new[key] = func(new[key]) 61 | 62 | return new 63 | 64 | 65 | @click.command() 66 | @click.argument('mappings', type=click.File(), nargs=-1) 67 | @click.option('--key', default='§', show_default=True, help='key to use as compose key') 68 | @click.option('-r', '--raw', is_flag=True, help='just keymap without prefix') 69 | def main(mappings, raw, key): 70 | """Generate macos rebind file from compose json mapping""" 71 | all_maps = {} 72 | for mapping in mappings: 73 | yamldata = yaml.load(mapping.read(), Loader=yaml.Loader) 74 | all_maps.update(**{str(k): str(v) for k, v in yamldata.items()}) 75 | all_maps = read_paths(all_maps) 76 | text = data_to_mac_dict(all_maps) 77 | if raw: 78 | echo(text) 79 | else: 80 | based = '{{"' + key + '" = {}}}' 81 | echo(based.format(text)) 82 | 83 | 84 | def merge(source, destination): 85 | """ 86 | deepmerge dictionaries 87 | 88 | >>> a = { 'first' : { 'all_rows' : { 'pass' : 'dog', 'number' : '1' } } } 89 | >>> b = { 'first' : { 'all_rows' : { 'fail' : 'cat', 'number' : '5' } } } 90 | >>> merge(b, a) == { 'first' : { 'all_rows' : { 'pass' : 'dog', 'fail' : 'cat', 'number' : '5' } } } 91 | """ 92 | if isinstance(destination, str): 93 | return source 94 | for key, value in source.items(): 95 | if isinstance(value, dict): 96 | # get node or create one 97 | node = destination.setdefault(key, {}) 98 | merge(value, node) 99 | else: 100 | destination[key] = value 101 | return destination 102 | 103 | 104 | def read_paths(data): 105 | """ 106 | Unpack first key of a dictionary as nested dictionary path 107 | 108 | >>> read_paths({'cat': '>-.-<'}) 109 | {'c': {'a': {'t': '>-.-<'}}} 110 | """ 111 | parsed = {} 112 | for k, v in data.items(): 113 | parsed = merge(parsed, key_nest(list(k) + [v])) 114 | return parsed 115 | 116 | 117 | def data_to_mac_dict(data): 118 | """ 119 | converts dictionary data to macos keymap.dict format 120 | 121 | >>> data_to_mac_dict({'c': {'a': {'t': '(^≗ω≗^)'}}}) 122 | { 123 | "c" = { 124 | "a" = { 125 | "t" = ("insertText:", "(^≗ω≗^)"); 126 | }; 127 | }; 128 | }; 129 | """ 130 | updated = object_hook(data, lambda value: f'INSERT:{value}', str) 131 | text = json.dumps(updated, indent=2, ensure_ascii=False) 132 | repl = lambda value: f'("insertText:", "{value.groups()[0]}");' 133 | text = re.sub('"INSERT:(.+)",*', repl, text) 134 | text = re.sub('},*(\n|$)', '};\n', text) 135 | text = re.sub('": ', '" = ', text) 136 | return text 137 | 138 | 139 | if __name__ == '__main__': 140 | main() 141 | -------------------------------------------------------------------------------- /karabiner-compose.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Granitosaurus/macos-compose/0bdd7b6cc0713103b6726834d79e2ad3f9fc7143/karabiner-compose.png -------------------------------------------------------------------------------- /mappings/README.md: -------------------------------------------------------------------------------- 1 | # Example Mappings 2 | 3 | Here are some example json mappings that can be used with `gen-compose` -------------------------------------------------------------------------------- /mappings/common.yaml: -------------------------------------------------------------------------------- 1 | # arrows 2 | -^: ↑ 3 | -v: ↓ 4 | ->: → 5 | <-: ← 6 | <->: ↔ 7 | ^-v: ↕ 8 | ^\: ↖ 9 | \v: ↗ 10 | v/: ↙ 11 | \v: ↘ 12 | # punctuation 13 | --: ‒ 14 | # math 15 | +-: ± 16 | c/: ¢ 17 | L-: £ 18 | Y=: ¥ 19 | ^1: ¹ 20 | ^2: ² 21 | oo: ° 22 | ..: · 23 | # circles 24 | oc: © 25 | or: ® 26 | 27 | -------------------------------------------------------------------------------- /mappings/emoji.yaml: -------------------------------------------------------------------------------- 1 | # faces 2 | ": ": 😶 3 | ":(": 🙁 4 | ":)": 🙂 5 | ";)": 😏 6 | ":P": 😋 7 | ":|": 😐 8 | ":I": 😬 9 | ":r": 🙄 10 | ":z": 🤐 11 | ":oo": 🥺 12 | "xxo": 😵 13 | ":f": 🤬 14 | ":<": 😤 15 | ssh: 🤫 16 | lol: 😂 17 | rofl: 🤣 18 | 0-0: 😎 19 | # symbols 20 | world: 🌏 21 | globe: 🌐 22 | compass: 🧭 23 | poo: 💩 24 | <3: ❤ 25 | beach: 🏖 26 | mountain: ⛰ 27 | splash: 💦 28 | /-/: ⚡ 29 | fire: 🔥 30 | sun: ☀ 31 | rain: 🌧 32 | moon: 🌕 33 | rainbow: 🌈 34 | medal: 🏅 35 | bball: 🏀 36 | game: 🎮 37 | "bell ": 🔔 38 | bell/: 🔕 39 | # body 40 | ok: 👌 41 | up: 👆 42 | down: 👇 43 | "+ ": 👍 44 | "- ": 👎 45 | wai: 🙏 46 | shake: 🤝 47 | horns: 🤟 48 | callme: 🤙 49 | win: ✌ 50 | wave: 👋 51 | brain: 🧠 52 | eyes: 👀 53 | # people 54 | # animals 55 | rat: 🐀 56 | snek: 🐍 57 | sauro: 🦕 58 | trex: 🦖 59 | octo: 🐙 60 | whale: 🐳 61 | bug: 🐛 62 | bee: 🐝 63 | spider: 🕷 64 | shrimp: 🦐 65 | lobster: 🦞 66 | crab: 🦀 67 | squid: 🦑 68 | # plants 69 | rose: 🌹 70 | sunflower: 🌻 71 | bouquet: 💐 72 | tree: 🌳 73 | gtree: 🌲 74 | cactus: 🌵 75 | peach: 🍑 76 | orange: 🍊 77 | apple: 🍎 78 | banana: 🍌 79 | eggplant: 🍆 80 | mushroom: 🍄 81 | chili: 🌶 82 | "egg ": 🥚 83 | # food 84 | cake: 🎂 85 | beer: 🍺 86 | wine: 🍷 87 | cheers: 🍻 88 | whiskey: 🥃 89 | mate: 🧉 90 | clink: 🥂 91 | ice: 🧊 92 | # transport 93 | bike: 🚲 94 | car: 🚗 95 | traffic: 🚥 96 | ufo: 🛸 97 | -------------------------------------------------------------------------------- /mappings/lithuanian.yaml: -------------------------------------------------------------------------------- 1 | # These are bindings for Lithuanian special letters: ąčęėįšūųž 2 | A,: Ą 3 | a,: ą 4 | C<: Č 5 | c<: č 6 | E,: Ę 7 | E.: Ė 8 | e,: ę 9 | e.: ė 10 | I,: Į 11 | i,: į 12 | S<: Š 13 | s<: š 14 | U-: Ū 15 | U,: Ų 16 | u-: ū 17 | u,: ų 18 | Z<: Ž 19 | z<: ž 20 | -------------------------------------------------------------------------------- /mappings/readme.yaml: -------------------------------------------------------------------------------- 1 | # example used in macos-compose readme 2 | cat: "(^≗ω≗^)" 3 | "+1": 👍 4 | "-1": 👍 5 | ":(": "my face is sad" 6 | -------------------------------------------------------------------------------- /mappings/xcompose.compose: -------------------------------------------------------------------------------- 1 | # for Emacs: -*- coding: utf-8 -*- 2 | include "%L" 3 | 4 | # def emit(keys, codepoint, word): 5 | # print (' %s \t: "%s"\tU%04X\t\t# CIRCLED DIGIT %s' % 6 | # (keys, unichr(codepoint), codepoint, word)).encode('utf8') 7 | # numbers = 'one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty' 8 | # words = numbers.upper().split() 9 | # emit('<0>', 0x24EA, "ZERO") 10 | # for num, word in zip(range(1, 21), words): 11 | # emit(' '.join("<%s>" % char for char in str(num)), 0x245f + num, word) 12 | 13 | # Custom additions: Typography 14 | : "…" U2026 # HORIZONTAL ELLIPSIS 15 | : "⋮" U22EE # VERTICAL ELLIPSIS 16 | : "⋯" U22EF # MIDLINE HORIZONTAL ELLIPSIS 17 | : "⋰" U22F0 # UP RIGHT DIAGONAL ELLIPSIS 18 | # To avoid conflict with \. for combining dot above. 19 | # : "⋱" U22F1 # DOWN RIGHT DIAGONAL ELLIPSIS 20 | : "⋱" U22F1 # DOWN RIGHT DIAGONAL ELLIPSIS 21 | # Will we someday regret this, wanting 2. for ⒉ ? 22 | <2> : "‥" U2025 # TWO DOT LEADER 23 | # This should not be needed. 24 | # <1> : "․" U2024 # ONE DOT LEADER 25 | <1> : "·" U00B7 # MIDDLE DOT (maybe I can remember the keystroke better? 26 | : "⁒" U2052 # COMMERCIAL MINUS SIGN 27 | ### or && ? 28 | : "⅋" U214B # TURNED AMPERSAND 29 | <7> : "⁊" U204A # TIRONIAN SIGN ET 30 | # Printable sign for space. But is \ too useful a key combo to use 31 | # for this? 32 | : "␣" U2423 # OPEN BOX 33 | # These two are already present for me: 34 | # : "—" U2014 # EM DASH 35 | # : "–" U2013 # EN DASH 36 | : "– " # EN DASH (followed by space) 37 | : "―" U2015 # HORIZONTAL BAR 38 | <2> : "⸺" U2E3A # TWO-EM DASH 39 | <3> : "⸻" U2E3B # THREE-EM DASH 40 | : "­" U00AD # SOFT HYPHEN 41 | # This is the recommended typographical practice for em dashes in English. 42 | # Unfortunately, it doesn’t work out all that well in monospace fonts, 43 | # where the thin spaces aren’t thin. But I think this is okay. 44 | # This conflicts with the default binding to “~”, which is potentially 45 | # a problem for non-American keyboards. 46 | : " — " # EM DASH surrounded by THIN SPACEs. 47 | 48 | 49 | # Quotation marks. 50 | : "‚" U201A # SINGLE LOW-9 QUOTATION MARK 51 | : "„" U201E # DOUBLE LOW-9 QUOTATION MARK 52 | : "⹂" U2E42 # DOUBLE LOW-REVERSED-9 QUOTATION MARK 53 | : "’" U2019 # RIGHT SINGLE QUOTATION MARK 54 | : "”" U201D # RIGHT DOUBLE QUOTATION MARK 55 | : "‘" U2018 # LEFT SINGLE QUOTATION MARK 56 | : "“" U201C # LEFT DOUBLE QUOTATION MARK 57 | <6> : "‘" U2018 # LEFT SINGLE QUOTATION MARK (high 6) 58 | <6> : "“" U201C # LEFT DOUBLE QUOTATION MARK (66) 59 | <9> : "’" U2019 # RIGHT SINGLE QUOTATION MARK (high 9) 60 | <9> : "”" U201D # RIGHT DOUBLE QUOTATION MARK (99) 61 | <9> : "‛" U201B # SINGLE HIGH-REVERSED-9 QUOTATION MARK 62 | <9> : "‟" U201F # DOUBLE HIGH-REVERSED-9 QUOTATION MARK 63 | : "‚" U201A # SINGLE LOW-9 QUOTATION MARK (quote resembling a comma) 64 | : "„" U201E # DOUBLE LOW-9 QUOTATION MARK 65 | 66 | # Convenience shortcuts for quotation marks. 67 | : " “" # space followed by LEFT DOUBLE QUOTATION MARK 68 | : "” " # RIGHT DOUBLE QUOTATION MARK followed by space 69 | : " ‘" # space followed by LEFT SINGLE QUOTATION MARK 70 | # Unfortunately is, asymmetrically, just "’". Whatever. 71 | : "n’t " # Apostrophized English “not.” 72 | # Some more English shortcuts: 73 | : " the " 74 | : " The " 75 | : " and " 76 | : " I’m " 77 | : "’ve " 78 | 79 | : "⸲" U2E32 # TURNED COMMA 80 | # Conflicts with system def? (·) 81 | : "⸳" U2E33 # RAISED DOT 82 | : "⸳" U2E33 # RAISED DOT 83 | : "⸴" U2E34 # RAISED COMMA 84 | : "⸵" U2E35 # TURNED SEMICOLON 85 | # Convlicts with system def? (⍭) 86 | : "ⸯ" U2E2F # VERTICAL TILDE 87 | : "ⸯ" U2E2F # VERTICAL TILDE 88 | : "⹀" U2E40 # DOUBLE HYPHEN 89 | : "⹁" U2E41 # REVERSED COMMA 90 | : "↵" U21B5 # DOWNWARDS ARROW WITH CORNER LEFTWARDS 91 | # The bullet was , but it clashes with ꙭ 92 | <1> : "•" U2022 # BULLET 93 | # By default does this, but we broke that with the ... binding. 94 | : "⁃" U2043 # HYPHEN BULLET 95 | : "·" periodcentered # MIDDLE DOT 96 | # I don’t use this nearly as often as the em-dash sequence I’ve remapped it to: 97 | # : "‑" U2011 # NON-BREAKING HYPHEN 98 | # Already present for me: 99 | # : " " U00A0 # NO-BREAK SPACE 100 | # Narrow no-break space, needed for some Latin languages like French 101 | : " " U202f # NARROW NO-BREAK SPACE 102 | # Technically, NO-BREAK SPACE is not supposed to be fixed-width. This is: 103 | : " " U2007 # FIGURE SPACE 104 | # We used to have THIN SPACE as , but now that’s remapped 105 | # to " ‘", for conveniently enclosing things in proper single-quotes. 106 | : " " U2009 # THIN SPACE 107 | # (heh, heh... space bar) 108 | : " " U200A # HAIR SPACE 109 | : "†" U2020 # DAGGER 110 | : "‡" U2021 # DOUBLE DAGGER 111 | : "§" U00A7 # SECTION SIGN 112 | # It's in the Asian section, but it's a general-purpose punctuation: 113 | : "〃" U3003 # DITTO MARK 114 | # Working with the pattern from FLOOR/CEILING 115 | <7> : "⸢" U2E22 # TOP LEFT HALF BRACKET 116 | <7> : "⸣" U2E23 # TOP RIGHT HALF BRACKET 117 | : "⸤" U2E24 # BOTTOM LEFT HALF BRACKET 118 | : "⸥" U2E25 # BOTTOM RIGHT HALF BRACKET 119 | # Consider <7> / for ⸂⸃ maybe? and for ⸉⸊⸌⸍ ...? 120 | # I guess we can get by with sub/superset for ⸦⸧. 121 | 122 | : "←" leftarrow # LEFTWARDS ARROW 123 | : "↑" uparrow # UPWARDS ARROW 124 | : "→" rightarrow # RIGHTWARDS ARROW 125 | : "↓" downarrow # DOWNWARDS ARROW 126 | : "↔" U2194 # LEFT RIGHT ARROW (kragen's) 127 | 128 | : "←" leftarrow # LEFTWARDS ARROW 129 | : "↑" uparrow # UPWARDS ARROW 130 | : "→" rightarrow # RIGHTWARDS ARROW 131 | : "↓" downarrow # DOWNWARDS ARROW 132 | : "↔" U2194 # LEFT RIGHT ARROW (kragen's) 133 | : "↔" U2194 # LEFT RIGHT ARROW (kragen's) 134 | : "↕" U2195 # UP DOWN ARROW (kragen's) 135 | : "⇵" U21F5 # DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW 136 | : "↵" U21B5 # DOWNWARDS ARROW WITH CORNER LEFTWARDS 137 | : "⟲" U27F2 # ANTICLOCKWISE GAPPED CIRCLE ARROW 138 | : "⟳" U27F3 # CLOCKWISE GAPPED CIRCLE ARROW 139 | : "↺" U21BA # ANTICLOCKWISE OPEN CIRCLE ARROW 140 | : "↻" U21BB # CLOCKWISE OPEN CIRCLE ARROW 141 | : "⇜" U21DC # LEFTWARDS SQUIGGLE ARROW 142 | : "⬳" U2B33 # LONG LEFTWARDS SQUIGGLE ARROW 143 | : "⇝" U21DD # RIGHTWARDS SQUIGGLE ARROW 144 | : "⟿" U27FF # LONG RIGHTWARDS SQUIGGLE ARROW 145 | : "⇤" U21E4 # LEFTWARDS ARROW TO BAR 146 | : "⇥" U21E5 # RIGHTWARDS ARROW TO BAR 147 | : "⇠" U21E0 # LEFTWARDS DASHED ARROW 148 | : "⇡" U21E1 # UPWARDS DASHED ARROW 149 | : "⇢" U21E2 # RIGHTWARDS DASHED ARROW 150 | : "⇣" U21E3 # DOWNWARDS DASHED ARROW 151 | : "↯" U21AF # DOWNWARDS ZIGZAG ARROW 152 | 153 | # Arrow keys don't always work: some apps trap them for cursor control and 154 | # other boring things. The arrow symbols have alternate keystrokes. Do 155 | # we need others for these printer's fists? If so, what? The -= and =- 156 | # we had before are not necessarily the best choices. 157 | : "☚" U261A # BLACK LEFT POINTING INDEX 158 | : "☛" U261B # BLACK RIGHT POINTING INDEX 159 | : "☜" U261C # WHITE LEFT POINTING INDEX 160 | : "☝" U261D # WHITE UP POINTING INDEX 161 | : "☞" U261E # WHITE RIGHT POINTING INDEX 162 | : "☟" U261F # WHITE DOWN POINTING INDEX 163 | : "✌" U270C # VICTORY HAND 164 | : "✍" U270D # WRITING HAND 165 |

: "✎" U270E # LOWER RIGHT PENCIL 166 |

: "✏" U270F # PENCIL 167 |

: "✐" U2710 # UPPER RIGHT PENCIL 168 | 169 | # For some logical statements. I prefer doubled arrows for implication. 170 | : "⇒" U21D2 # RIGHTWARDS DOUBLE ARROW 171 | : "⇐" U21D0 # LEFTWARDS DOUBLE ARROW 172 | : "⇔" U21D4 # LEFT RIGHT DOUBLE ARROW 173 | : "⇒" U21D2 # RIGHTWARDS DOUBLE ARROW 174 | : "⇐" U21D0 # LEFTWARDS DOUBLE ARROW 175 | : "⇔" U21D4 # LEFT RIGHT DOUBLE ARROW 176 | : "⇔" U21D4 # LEFT RIGHT DOUBLE ARROW 177 | : "⇑" U21D1 # UPWARDS DOUBLE ARROW 178 | : "⇓" U21D3 # DOWNWARDS DOUBLE ARROW 179 | : "⇕" U21D5 # UP DOWN DOUBLE ARROW 180 | : "⏎" U23CE # RETURN SYMBOL 181 | # These are just too cool-looking not to have (if your font supports them) 182 | : "⸎" U2E0E # EDITORIAL CORONIS 183 |

: "ꟼ" UA7FC # LATIN EPIGRAPHIC LETTER REVERSED P 206 | : "ꟻ" UA7FB # LATIN EPIGRAPHIC LETTER REVERSED F 207 |

: "ꟼ" UA7FC # LATIN EPIGRAPHIC LETTER REVERSED P 208 | : "Ⅎ" U2132 # TURNED CAPITAL F 209 | : "ⅎ" U214E # TURNED SMALL F 210 | : "ꟽ" UA7FD # LATIN EPIGRAPHIC LETTER INVERTED M 211 | : "Ɯ" U019C # LATIN CAPITAL LETTER TURNED M 212 | : "ꟾ" UA7FE # LATIN EPIGRAPHIC LETTER I LONGA 213 | : "ꟿ" UA7FF # LATIN EPIGRAPHIC LETTER ARCHAIC M 214 | <2> <2> : "↊" U218A # TURNED DIGIT TWO 215 | <3> <3> : "↋" U218B # TURNED DIGIT THREE 216 | # I'd been avoiding this because we already have ∃... 217 | # Hey, these, being *letters* can be used as identifiers in some languages... 218 | : "Ǝ" U018E # LATIN CAPITAL LETTER REVERSED E 219 | : "Ǝ" U018E # LATIN CAPITAL LETTER REVERSED E 220 | : "ɘ" U0258 # LATIN SMALL LETTER REVERSED E 221 | : "ɘ" U0258 # LATIN SMALL LETTER REVERSED E 222 | # Complete the set 223 | : "Ɐ" U2C6F # LATIN CAPITAL LETTER TURNED A 224 | # These seem too long as keystrokes; any suggestions? 225 | # How about 2o? 226 | : "ꝏ" UA74F # LATIN SMALL LETTER OO 227 | : "Ꝏ" UA74E # LATIN CAPITAL LETTER OO 228 | <2> : "ꝏ" UA74F # LATIN SMALL LETTER OO 229 | <2> : "Ꝏ" UA74E # LATIN CAPITAL LETTER OO 230 | # Latin-D chars I'm particularly thinking about: 231 | # (side note: "I" has many referents in this file.) 232 | # ꜲꜳꜴꜵꜶꜷꜸꜹꜼꜽꝒꝓꝔꝕꝚꝛꝜꝝꝠꝡꝪꝫꝸ 233 | # The ligature pairs are so easy, might as well include them (probably 234 | # using ampersand though). P with flourish? Squirrel tail? How 235 | # pretty! I like the r and rum rotunda, and et actually has something 236 | # close to usefulness (it was very common for abbreviations, and is the 237 | # source of the "z" in abbreviations like oz. and viz.) Some others 238 | # are a little appealing too. 239 | 240 | : "Ꜳ" UA732 # LATIN CAPITAL LETTER AA 241 | : "ꜳ" UA733 # LATIN SMALL LETTER AA 242 | <2> : "Ꜳ" UA732 # LATIN CAPITAL LETTER AA 243 | <2> : "ꜳ" UA733 # LATIN SMALL LETTER AA 244 | : "Ꜵ" UA734 # LATIN CAPITAL LETTER AO 245 | : "ꜵ" UA735 # LATIN SMALL LETTER AO 246 | : "Ꜷ" UA736 # LATIN CAPITAL LETTER AU 247 | : "ꜷ" UA737 # LATIN SMALL LETTER AU 248 | : "Ꜹ" UA738 # LATIN CAPITAL LETTER AV 249 | : "ꜹ" UA739 # LATIN SMALL LETTER AV 250 | : "Ꜽ" UA73C # LATIN CAPITAL LETTER AY 251 | : "ꜽ" UA73D # LATIN SMALL LETTER AY 252 | : "Ꝇ" UA746 # LATIN CAPITAL LETTER BROKEN L 253 | : "ꝇ" UA747 # LATIN SMALL LETTER BROKEN L 254 | # (See above for reason behind keystrokes) 255 | : "Ꝫ" UA76A # LATIN CAPITAL LETTER ET 256 | : "ꝫ" UA76B # LATIN SMALL LETTER ET 257 | : "Ꝡ" UA760 # LATIN CAPITAL LETTER VY 258 | : "ꝡ" UA761 # LATIN SMALL LETTER VY 259 | : "Ꝣ" UA762 # LATIN CAPITAL LETTER VISIGOTHIC Z 260 | : "ꝣ" UA763 # LATIN SMALL LETTER VISIGOTHIC Z 261 | : "Ỻ" U1EFA # LATIN CAPITAL LETTER MIDDLE-WELSH LL 262 | : "ỻ" U1EFB # LATIN SMALL LETTER MIDDLE-WELSH LL 263 | : "Ỽ" U1EFC # LATIN CAPITAL LETTER MIDDLE-WELSH V 264 | : "ỽ" U1EFD # LATIN SMALL LETTER MIDDLE-WELSH V 265 | : "ȸ" U0238 # LATIN SMALL LETTER DB DIGRAPH 266 |

: "ȹ" U0239 # LATIN SMALL LETTER QP DIGRAPH 267 | : "ƿ" U01BF # LATIN LETTER WYNN 268 | : "Ƿ" U01F7 # LATIN CAPITAL LETTER WYNN 269 | : "Ȣ" U0222 # LATIN CAPITAL LETTER OU 270 | : "ȣ" U0223 # LATIN SMALL LETTER OU 271 | : "Ʀ" U01A6 # LATIN LETTER YR 272 | # might almost make more sense, as it's used when r follows [opb]. 273 | # But it conflicts with system ® 274 | : "ꝛ" UA75B # LATIN SMALL LETTER R ROTUNDA 275 | <0> : "ꝛ" UA75B # LATIN SMALL LETTER R ROTUNDA 276 | # Alas, conflicts with ® anyway. 277 | : "Ꝛ" UA75A # LATIN CAPITAL LETTER R ROTUNDA 278 | # something, anyway. 279 | <0> : "Ꝛ" UA75A # LATIN CAPITAL LETTER R ROTUNDA 280 | # Custom additions: Mathematical symbols 281 | : "≠" U2260 # NOT EQUAL TO 282 | : "≠" U2260 # NOT EQUAL TO 283 | : "≤" U2264 # LESS-THAN OR EQUAL TO 284 | : "≥" U2265 # GREATER-THAN OR EQUAL TO 285 | : "≸" U2278 # NEITHER LESS-THAN NOR GREATER-THAN 286 | # MUCH is usually enough for me. No need for VERY. 287 | : "≪" U226A # MUCH LESS-THAN 288 | : "≫" U226B # MUCH GREATER-THAN 289 | # Damn. That makes this conflict with the standard plus plus -> # 290 | : "⋘" U22D8 # VERY MUCH LESS-THAN 291 | : "⋙" U22D9 # VERY MUCH GREATER-THAN 292 | <3> : "⋙" U22D9 # VERY MUCH GREATER-THAN 293 | <3> : "⋘" U22D8 # VERY MUCH LESS-THAN 294 | : "∈" U2208 # ELEMENT OF 295 | : "∉" U2209 # NOT AN ELEMENT OF 296 | : "∉" U2209 # NOT AN ELEMENT OF (I have ∈ on my keyboard...) 297 | : "∊" U220A # SMALL ELEMENT OF 298 | : "∍" U220D # SMALL CONTAINS AS MEMBER 299 | # For the above for people without ∈/∋ on their kbds? {♫i/n} and {♫n/i}? 300 | : "∋" U220B # CONTAINS AS MEMBER (I hope this doesn't conflict) 301 | : "∌" U220C # DOES NOT CONTAIN AS MEMBER 302 | # would conflict, with for N WITH UNDERDOT, etc. 303 | : "∌" U220C # DOES NOT CONTAIN AS MEMBER 304 | : "≅" U2245 # APPROXIMATELY EQUAL TO (It actually means "congruent"!) 305 | : "≟" U225f # QUESTIONED EQUAL TO 306 | : "≝" U225D # EQUAL TO BY DEFINITION 307 | : "≝" U225D # EQUAL TO BY DEFINITION 308 | : "≡" U2261 # IDENTICAL TO 309 | : "≔" U2254 # COLON EQUALS 310 | : "≕" U2255 # EQUALS COLON 311 | <2> : "⩵" U2A75 # TWO CONSECUTIVE EQUALS SIGNS 312 | : "⩵" U2A75 # TWO CONSECUTIVE EQUALS SIGNS 313 | <3> : "⩶" U2A76 # THREE CONSECUTIVE EQUALS SIGNS 314 | # Using conflicts. 315 | : "≢" U2262 # NOT IDENTICAL TO 316 | # We already have ± 317 | : "∓" U2213 # MINUS OR PLUS SIGN 318 | : "√" U221A # SQUARE ROOT 319 | # keystrokes might not make the most sense, but you know what they mean... 320 | <3> : "∛" U221B # CUBE ROOT 321 | <4> : "∜" U221C # FOURTH ROOT 322 | # “(Note: I had put the backslash in position 5/15. It enabled the 323 | # ALGOL “and” to be “/\” and the “or” to be “\/”.)” --- Bob Bemer, 324 | # http://home.ccil.org/~remlaps/www.bobbemer.com/BRACES.HTM, quoting 325 | # himself in “A view of the history of the ISO character code”, 1972 326 | : "∧" U2227 # LOGICAL AND 327 | : "∨" U2228 # LOGICAL OR 328 | : "⊻" U22BB # XOR 329 | : "¬" U00AC # NOT SIGN 330 | : "∘" U2218 # RING OPERATOR (function composition) 331 | : "⨯" U2A2F # CROSS PRODUCT 332 | : "⋅" U22C5 # DOT OPERATOR (dot product) 333 | <0> : "∅" U2205 # EMPTY SET (thanks jsled!) 334 | <0> : "∅" U2205 # EMPTY SET 335 | # I'm hoping { can work as a set mnemonic 336 | : "∪" U222A # UNION 337 | : "∩" U2229 # INTERSECTION 338 | : "⊂" U2282 # SUBSET OF 339 | : "⊆" U2286 # SUBSET OF OR EQUAL TO 340 | : "⊄" U2284 # NOT A SUBSET OF 341 | : "⊄" U2284 # NOT A SUBSET OF 342 | : "⊅" U2285 # NOT A SUPERSET OF 343 | : "⊅" U2285 # NOT A SUPERSET OF 344 | : "⊃" U2283 # SUPERSET OF 345 | : "⊇" U2287 # SUPERSET OF OR EQUAL TO 346 | : "∃" U2203 # THERE EXISTS 347 | # We can't use ! E E, because ! E maps to E-WITH-UNDERDOT. 348 | : "∄" U2204 # THERE DOES NOT EXIST 349 | : "∀" U2200 # FOR ALL 350 | : "∎" U220E # END OF PROOF 351 | <8> <8> : "∞" U221E # INFINITY 352 |

: "ℵ" U2135 # ALEF SYMBOL 353 |

<0> : "ℵ₀" # ALEF Null 354 |

<1> : "ℵ₁" # ALEF One 355 | : "ℵ" U2135 # ALEF SYMBOL 356 | : "∗" U2217 # ASTERISK OPERATOR 357 | : "⊕" U2295 # CIRCLED PLUS 358 | : "⊖" U2296 # CIRCLED MINUS 359 | : "⊗" U2297 # CIRCLED TIMES 360 | : "⊘" U2298 # CIRCLED DIVISION SLASH 361 | : "⊛" U229B # CIRCLED ASTERISK OPERATOR 362 | # )- conflicts with system for }. 363 | : "⟌" U27CC # LONG DIVISION 364 | : "∴" U2234 # THEREFORE 365 | <4> : "∴" U2234 # THEREFORE 366 | : "∵" U2235 # BECAUSE 367 | : "∵" U2235 # BECAUSE 368 | : "‱" U2031 # PER TEN THOUSAND (basis points) 369 | : "µ" U00B5 # MICRO SIGN 370 | # Ordinal indicators, for femenine and masculine, used in Romance languages 371 | : "ª" U00AA # FEMININE ORDINAL INDICATOR 372 | : "º" U00BA # MASCULINE ORDINAL INDICATOR 373 | 374 | # See also U03A3 (Greek capital sigma) 375 | : "∑" U2211 # N-ARY SUMMATION 376 | # OK, absolutely cannot believe we made it this long without NABLA or INTEGRAL 377 | # or PARTIAL DIFFERENTIAL 378 | : "∫" U222B # INTEGRAL 379 | : "⨛" U2A1B # UPPER INTEGRAL 380 | : "⨜" U2A1C # LOWER INTEGRAL 381 | : "∬" U222C # DOUBLE INTEGRAL 382 | : "∭" U222D # TRIPLE INTEGRAL 383 | : "⨌" U2A0C # QUADRUPLE INTEGRAL 384 | : "∮" U222E # CONTOUR INTEGRAL 385 |

: "⨕" U2A15 # INTEGRAL AROUND A POINT OPERATOR 386 |

: "⨓" U2A13 # LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE 387 | : "∯" U222F # SURFACE INTEGRAL 388 | : "∰" U2230 # VOLUME INTEGRAL 389 | : "⨘" U2A18 # GEOMETRIC INTEGRAL 390 | : "⨋" U2A0B # SUM/INTEGRAL 391 | #Now for some WTF integrals: ⨙ ⨚ 392 | : "∇" U2207 # NABLA 393 |

: "∂" U2202 # PARTIAL DIFFERENTIAL 394 | : "∂" U2202 # PARTIAL DIFFERENTIAL 395 | : "ℜ" U211C # BLACK-LETTER CAPITAL R (Real Part) 396 | : "ℑ" U2111 # BLACK-LETTER CAPTIAL I (Imaginary Part) 397 | : "ℏ" U210F # PLANCK CONSTANT OVER TWO PI 398 | : "ℏ" U210F # PLANCK CONSTANT OVER TWO PI 399 |

: "ℎ" U210E # PLANCK CONSTANT 400 |

: "ℯ" U212F # SCRIPT SMALL E 401 | <1> <0> : "⏨" U23E8 # DECIMAL EXPONENT SYMBOL 402 |

: "℘" U2118 # SCRIPT CAPITAL P 403 | # Would we prefer 20D1 COMBINING RIGHT HARPOON ABOVE? 404 | : "⃗" U20D7 # COMBINING RIGHT ARROW ABOVE (vector) 405 | : "ℂ" U2102 # DOUBLE-STRUCK CAPITAL C (set of complex numbers) 406 | : "ℕ" U2115 # DOUBLE-STRUCK CAPITAL N (natural number) 407 |

: "ℙ" U2119 # DOUBLE-STRUCK CAPITAL P 408 | : "ℚ" U211A # DOUBLE-STRUCK CAPITAL Q (set of rational numbers) 409 | : "ℝ" U211D # DOUBLE-STRUCK CAPITAL R (set of real numbers) 410 | : "ℤ" U2124 # DOUBLE-STRUCK CAPITAL Z (set of integers) 411 | : "ℍ" U210d # DOUBLE-STRUCK CAPITAL H 412 | : "ⅇ" U2147 # DOUBLE-STRUCK ITALIC SMALL E 413 | : "ⅈ" U2148 # DOUBLE-STRUCK ITALIC SMALL I 414 | : "ⅉ" U2149 # DOUBLE-STRUCK ITALIC SMALL J 415 |

: "ℼ" U213C # DOUBLE-STRUCK SMALL PI 416 | : "ℼ" U213C # DOUBLE-STRUCK SMALL PI 417 |

: "ℿ" U213F # DOUBLE-STRUCK CAPITAL PI 418 | : "ℿ" U213F # DOUBLE-STRUCK CAPITAL PI 419 | : "⅀" U2140 # DOUBLE-STRUCK N-ARY SUMMATION 420 | : "⅀" U2140 # DOUBLE-STRUCK N-ARY SUMMATION 421 | : "⦂" U2982 # Z NOTATION TYPE COLON 422 | # Apparently it is only for historical reasons that this is not unified with 423 | # ⨟ U+2A1F Z NOTATION SCHEMA COMPOSITION 424 | : "⨾" U2A3E # Z NOTATION RELATIONAL COMPOSITION 425 | # The *look* double-struck. 426 | : "⦃" U2983 # LEFT WHITE CURLY BRACKET 427 | : "⦄" U2984 # RIGHT WHITE CURLY BRACKET 428 | # ⦅⦆⦇⦈⦉⦊ too? 429 | # The rest of that block? Some there may be worth it. 430 | # Ooh. There are lots of nice brackets to consider: 431 | # ⟅⟆⟨⟩⟪⟫⟬⟭⟮⟯⦑⦒⦓⦔⦕⦖⦗⦘⧼⧽⧘⧙⧚⧛⸢⸣⸤⸥⸨⸩「」『』 432 | # Others too, of course, but these to start with. Some are likely worthy. 433 | : "⟅" U27C5 # LEFT S-SHAPED BAG DELIMITER 434 | : "⟆" U27C6 # RIGHT S-SHAPED BAG DELIMITER 435 | : "⁅" U2045 # LEFT SQUARE BRACKET WITH QUILL 436 | : "⁆" U2046 # RIGHT SQUARE BRACKET WITH QUILL 437 | # There are a lot of angle brackets (3008/9, 27E8/9, 2329/A). I'm deciding 438 | # to go with the mathematical brackets from now on, since they seem to be 439 | # better supported. 440 | : "⟨" U27E8 # MATHEMATICAL LEFT ANGLE BRACKET 441 | : "⟩" U27E9 # MATHEMATICAL RIGHT ANGLE BRACKET 442 | : "⟦" U27E6 # MATHEMATICAL LEFT WHITE SQUARE BRACKET 443 | : "⟧" U27E7 # MATHEMATICAL RIGHT WHITE SQUARE BRACKET 444 | <2> : "⟪" U27EA # MATHEMATICAL LEFT DOUBLE ANGLE BRACKET 445 | <2> : "⟫" U27EB # MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET 446 | # Keystrokes inconsistent. 447 | : "⟬" U27EC # MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET 448 | : "⟭" U27ED # MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET 449 | : "⟮" U27EE # MATHEMATICAL LEFT FLATTENED PARENTHESIS 450 | : "⟯" U27EF # MATHEMATICAL RIGHT FLATTENED PARENTHESIS 451 | : "⦗" U2997 # LEFT BLACK TORTOISE SHELL BRACKET 452 | : "⦘" U2998 # RIGHT BLACK TORTOISE SHELL BRACKET 453 | # Do the underlined brackets, ones with ticks, dots, etc? 454 | : "⧘" U29D8 # LEFT WIGGLY FENCE 455 | : "⧙" U29D9 # RIGHT WIGGLY FENCE 456 | <2> : "⧚" U29DA # LEFT DOUBLE WIGGLY FENCE 457 | <2> : "⧛" U29DB # RIGHT DOUBLE WIGGLY FENCE 458 | : "⸨" U2E28 # LEFT DOUBLE PARENTHESIS 459 | : "⸩" U2E29 # RIGHT DOUBLE PARENTHESIS 460 | <2> : "⸨" U2E28 # LEFT DOUBLE PARENTHESIS 461 | <2> : "⸩" U2E29 # RIGHT DOUBLE PARENTHESIS 462 | : "༼" U0F3C # TIBETAN MARK ANG KHANG GYON 463 | : "༽" U0F3D # TIBETAN MARK ANG KHANG GYAS 464 | # I'm thinking shape-mnemonics for these, somehow: 465 | : "⌊" U230A # LEFT FLOOR 466 | : "⌋" U230B # RIGHT FLOOR 467 | <7> : "⌈" U2308 # LEFT CEILING 468 | <7> : "⌉" U2309 # RIGHT CEILING 469 | # These are actually quotes, hence the mnemonic. 470 | <7> : "「" UFF62 # HALFWIDTH LEFT CORNER BRACKET 471 | : "」" UFF63 # HALFWIDTH RIGHT CORNER BRACKET 472 | # Why am I using halfwidth though, I wonder? And I'd also like ⌜⌝⌞⌟ 473 | <7> : "『" U300E # LEFT WHITE CORNER BRACKET 474 | : "』" U300F # RIGHT WHITE CORNER BRACKET 475 | # How about these for the "corners"? Confusing with {L[} etc? 476 | # and don't forget about {L_[} which we have for ⸤ 477 | <7> : "⌜" U231C # TOP LEFT CORNER 478 | <7> : "⌝" U231D # TOP RIGHT CORNER 479 | : "⌞" U231E # BOTTOM LEFT CORNER 480 | : "⌟" U231F # BOTTOM RIGHT CORNER 481 | : "≬" U226C # BETWEEN 482 | : "ℓ" U2113 # SCRIPT SMALL L 483 | : "⊏" U228F # SQUARE IMAGE OF 484 | : "⊑" U2291 # SQUARE IMAGE OF OR EQUAL TO 485 | : "⊑" U2291 # SQUARE IMAGE OF OR EQUAL TO 486 | : "⊐" U2290 # SQUARE ORIGINAL OF 487 | : "⊒" U2292 # SQUARE ORIGINAL OF OR EQUAL TO 488 | : "⊒" U2292 # SQUARE ORIGINAL OF OR EQUAL TO 489 | # If I did more Haskell, I'd want this more: 490 | : "⊥" U22A5 # UP TACK (bottom) or should we use U27C2 PERPENDICULAR? 491 | : "⊤" U22A4 # DOWN TACK (opposite of False) 492 | : "⊢" U22A2 # RIGHT TACK 493 | : "⊣" U22A3 # LEFT TACK 494 | # Handy for UNIX filenames... but XXX conflicts with standard → "\" 495 | : "⁄" U2044 # FRACTION SLASH 496 | 497 | # The system file gives us subscript numbers, plus/minus, and parens. But 498 | # there are letters missing. It would be nice to have at least a few of them. 499 | 500 | # block U+208x 501 | <0> : "₀" U2080 # SUBSCRIPT ZERO 502 | <1> : "₁" U2081 # SUBSCRIPT ONE 503 | <2> : "₂" U2082 # SUBSCRIPT TWO 504 | <3> : "₃" U2083 # SUBSCRIPT THREE 505 | <4> : "₄" U2084 # SUBSCRIPT FOUR 506 | <5> : "₅" U2085 # SUBSCRIPT FIVE 507 | <6> : "₆" U2086 # SUBSCRIPT SIX 508 | <7> : "₇" U2087 # SUBSCRIPT SEVEN 509 | <8> : "₈" U2088 # SUBSCRIPT EIGHT 510 | <9> : "₉" U2089 # SUBSCRIPT NONE 511 | : "₊" U208A # SUBSCRIPT PLUS 512 | : "₋" U208B # SUBSCRIPT MINUS 513 | : "₌" U208C # SUBSCRIPT EQUALS SIGN 514 | : "₍" U208D # SUBSCRIPT LEFT PARENTHESIS 515 | : "₎" U208E # SUBSCRIPT RIGHT PARENTHESIS 516 | 517 | # block U+209x 518 | : "ₐ" U2090 # LATIN SUBSCRIPT SMALL LETTER A 519 | : "ₑ" U2091 # LATIN SUBSCRIPT SMALL LETTER E 520 | : "ₒ" U2092 # LATIN SUBSCRIPT SMALL LETTER O 521 | : "ₓ" U2093 # LATIN SUBSCRIPT SMALL LETTER X 522 | : "ₕ" U2095 # LATIN SUBSCRIPT SMALL LETTER H 523 | : "ₖ" U2096 # LATIN SUBSCRIPT SMALL LETTER K 524 | : "ₗ" U2097 # LATIN SUBSCRIPT SMALL LETTER L 525 | : "ₘ" U2098 # LATIN SUBSCRIPT SMALL LETTER M 526 | : "ₙ" U2099 # LATIN SUBSCRIPT SMALL LETTER N 527 |

: "ₚ" U209A # LATIN SUBSCRIPT SMALL LETTER P 528 | : "ₛ" U209B # LATIN SUBSCRIPT SMALL LETTER S 529 | : "ₜ" U209C # LATIN SUBSCRIPT SMALL LETTER T 530 | 531 | # subscripts in other blocks 532 | : "ᵢ" U1D62 # LATIN SUBSCRIPT SMALL LETTER I 533 | : "ⱼ" U2C7C # LATIN SUBSCRIPT SMALL LETTER J 534 | : "ᵣ" U1D63 # LATIN SUBSCRIPT SMALL LETTER R 535 | : "ᵤ" U1D64 # LATIN SUBSCRIPT SMALL LETTER U 536 | : "ᵥ" U1D65 # LATIN SUBSCRIPT SMALL LETTER V 537 | : "ᵦ" U1D66 # GREEK SUBSCRIPT SMALL LETTER BETA 538 | : "ᵧ" U1D67 # GREEK SUBSCRIPT SMALL LETTER GAMMA 539 | : "ᵨ" U1D68 # GREEK SUBSCRIPT SMALL LETTER RHO 540 | : "ᵩ" U1D69 # GREEK SUBSCRIPT SMALL LETTER PHI 541 | : "ᵪ" U1D6A # GREEK SUBSCRIPT SMALL LETTER CHI 542 | 543 | # Custom additions: Greek letters. Mapping corresponds to Emacs Greek 544 | # input method. Aristotle Pagaltzis informs me that this is the 545 | # standard Greek keyboard layout, which is good. 546 | : "α" U03B1 # GREEK SMALL LETTER ALPHA 547 | : "β" U03B2 # GREEK SMALL LETTER BETA 548 | : "ψ" U03C8 # GREEK SMALL LETTER PSI 549 | : "δ" U03B4 # GREEK SMALL LETTER DELTA 550 | : "ε" U03B5 # GREEK SMALL LETTER EPSILON 551 | : "φ" U03C6 # GREEK SMALL LETTER PHI 552 | : "γ" U03B3 # GREEK SMALL LETTER GAMMA 553 | : "η" U03B7 # GREEK SMALL LETTER ΕΤΑ 554 | : "ι" U03B9 # GREEK SMALL LETTER ΙΟΤΑ 555 | : "ξ" U03BE # GREEK SMALL LETTER XI 556 | : "κ" U03BA # GREEK SMALL LETTER KAPPA 557 | : "λ" U03BB # GREEK SMALL LETTER LAMBDA 558 | : "μ" U03BC # GREEK SMALL LETTER MU 559 | : "ν" U03BD # GREEK SMALL LETTER NU 560 | : "ο" U03BF # GREEK SMALL LETTER OMICRON 561 |

: "π" U03C0 # GREEK SMALL LETTER PI 562 | # no mapping for q; in Emacs that's ";" 563 | # U037E GREEK QUESTION MARK is canonically equivalent to U003B SEMICOLON. 564 | # ... But that won't stop us from doing it anyway!!! 565 | : ";" U037E # GREEK QUESTION MARK 566 | : "ρ" U03C1 # GREEK SMALL LETTER RHO 567 | : "σ" U03C3 # GREEK SMALL LETTER SIGMA 568 | : "τ" U03C4 # GREEK SMALL LETTER TAU 569 | : "θ" U03B8 # GREEK SMALL LETTER THETA 570 | : "ω" U03C9 # GREEK SMALL LETTER OMEGA 571 | : "ς" U03C2 # GREEK SMALL LETTER FINAL SIGMA 572 | : "χ" U03C7 # GREEK SMALL LETTER CHI 573 | : "υ" U03C5 # GREEK SMALL LETTER UPSILON 574 | : "ζ" U03B6 # GREEK SMALL LETTER ZETA 575 | 576 | # Capital greek letters. 577 | : "Α" U0391 # GREEK CAPITAL LETTER ALPHA 578 | : "Β" U0392 # GREEK CAPITAL LETTER BETA 579 | : "Ψ" U03A8 # GREEK CAPITAL LETTER PSI 580 | : "Δ" U0394 # GREEK CAPITAL LETTER DELTA 581 | : "Ε" U0395 # GREEK CAPITAL LETTER EPSILON 582 | : "Φ" U03A6 # GREEK CAPITAL LETTER PHI 583 | : "Γ" U0393 # GREEK CAPITAL LETTER GAMMA 584 | : "Η" U0397 # GREEK CAPITAL LETTER ΕΤΑ 585 | : "Ι" U0399 # GREEK CAPITAL LETTER ΙΟΤΑ 586 | : "Ξ" U039E # GREEK CAPITAL LETTER XI 587 | : "Κ" U039A # GREEK CAPITAL LETTER KAPPA 588 | : "Λ" U039B # GREEK CAPITAL LETTER LAMBDA 589 | : "Μ" U039C # GREEK CAPITAL LETTER MU 590 | : "Ν" U039D # GREEK CAPITAL LETTER NU 591 | : "Ο" U039F # GREEK CAPITAL LETTER OMICRON 592 |

: "Π" U03A0 # GREEK CAPITAL LETTER PI 593 | # see below for Q qoppa; in Emacs Q is “:” 594 | : "Ρ" U03A1 # GREEK CAPITAL LETTER RHO 595 | : "Σ" U03A3 # GREEK CAPITAL LETTER SIGMA 596 | : "Τ" U03A4 # GREEK CAPITAL LETTER TAU 597 | : "Θ" U0398 # GREEK CAPITAL LETTER THETA 598 | : "Ω" U03A9 # GREEK CAPITAL LETTER OMEGA 599 | # Emacs maps W to "Σ", but I think that’s stupid 600 | # I think that's from the Greek keyboard. 601 | : "Χ" U03A7 # GREEK CAPITAL LETTER CHI 602 | : "Υ" U03A5 # GREEK CAPITAL LETTER UPSILON 603 | : "Ζ" U0396 # GREEK CAPITAL LETTER ZETA 604 | 605 | # Some archaic Greek. If we only wanted *normal* characters we wouldn't be 606 | # doing this at all! 607 | # "period" will indicate a sort of variant of some kind; asterisk is still the "greek" marker 608 |

: "ϖ" U03D6 # GREEK PI SYMBOL 609 | # Reserving .f in case we want PHI SYMBOL. Digamma was "w" sound anyway. 610 | : "ϝ" U03DD # GREEK SMALL LETTER DIGAMMA 611 | : "Ϝ" U03DC # GREEK CAPITAL LETTER DIGAMMA 612 | : "Ϟ" U03DE # GREEK LETTER QOPPA 613 | : "ϟ" U03DF # GREEK SMALL LETTER QOPPA 614 | : "Ϙ" U03D8 # GREEK LETTER ARCHAIC QOPPA 615 | : "ϙ" U03D9 # GREEK SMALL LETTER ARCHAIC QOPPA 616 | : "ϗ" U03D7 # GREEK KAI SYMBOL 617 | : "Ϡ" U03E0 # GREEK LETTER SAMPI 618 | : "ϡ" U03E1 # GREEK SMALL LETTER SAMPI 619 | : "Ͳ" U0372 # GREEK CAPITAL LETTER ARCHAIC SAMPI 620 | : "ͳ" U0373 # GREEK SMALL LETTER ARCHAIC SAMPI 621 | # Sorry, couldn't think of better ones for these. Might want .s for SAN. 622 | : "Ϛ" U03DA # GREEK LETTER STIGMA 623 | : "ϛ" U03DB # GREEK SMALL LETTER STIGMA 624 | : "ʹ" U02B9 # MODIFIER LETTER PRIME, canonically equivalent to U0374 GREEK NUMERAL SIGN 625 | # While we're at it... 626 | : "′" U2032 # PRIME 627 | : "″" U2033 # DOUBLE PRIME 628 | : "͵" U0375 # GREEK LOWER NUMERAL SIGN (for thousands) 629 | # Do we want BETA SYMBOL, RHO SYMBOL, KAPPA SYMBOL, PHI SYMBOL, THETA SYMBOL? 630 | # The format makes them obvious enough I guess. PI SYMBOL is different enough 631 | # that there's no question, and it is separate from these. 632 | : "ϐ" U03D0 # GREEK BETA SYMBOL 633 | : "ϑ" U03D1 # GREEK THETA SYMBOL 634 | : "ϒ" U03D2 # GREEK UPSILON WITH HOOK SYMBOL 635 | : "ϕ" U03D5 # GREEK PHI SYMBOL 636 | : "ϰ" U03F0 # GREEK KAPPA SYMBOL 637 | : "ϱ" U03F1 # GREEK RHO SYMBOL 638 | : "ϴ" U03F4 # GREEK CAPITAL THETA SYMBOL 639 | : "ϵ" U03F5 # GREEK LUNATE EPSILON SYMBOL 640 | # Not doing the lunate sigmas and dotted versions thereof... What about SAN, which is at least a letter? 641 | : "ϻ" U03FB # GREEK SMALL LETTER SAN 642 | : "Ϻ" U03FA # GREEK CAPITAL LETTER SAN 643 | 644 | # If you wanted to actually type in Greek, you would also need άίέ 645 | # etc. But you would probably just switch to a Greek keyboard layout. 646 | 647 | # Custom additions: fractions 648 | <1> <3> : "⅓" U2153 # VULGAR FRACTION ONE THIRD 649 | <2> <3> : "⅔" U2154 # VULGAR FRACTION TWO THIRDS 650 | # more extensive fractions from jsled 651 | <1> <5> : "⅕" U2155 # VULGAR FRACTION ONE FIFTH 652 | <2> <5> : "⅖" U2156 # VULGAR FRACTION TWO FIFTHS 653 | <3> <5> : "⅗" U2157 # VULGAR FRACTION THREE FIFTHS 654 | <4> <5> : "⅘" U2158 # VULGAR FRACTION FOUR FIFTHS 655 | <1> <6> : "⅙" U2159 # VULGAR FRACTION ONE SIXTH 656 | <5> <6> : "⅚" U215A # VULGAR FRACTION FIVE SIXTHS 657 | <1> <8> : "⅛" U215B # VULGAR FRACTION ONE EIGHTH 658 | <3> <8> : "⅜" U215C # VULGAR FRACTION THREE EIGHTHS 659 | <5> <8> : "⅝" U215D # VULGAR FRACTION FIVE EIGHTHS 660 | <7> <8> : "⅞" U215E # VULGAR FRACTION SEVEN EIGHTHS 661 | <1> <7> : "⅐" U2150 # VULGAR FRACTION ONE SEVENTH 662 | <1> <9> : "⅑" U2151 # VULGAR FRACTION ONE NINTH 663 | <1> : "⅒" U2152 # VULGAR FRACTION ONE TENTH 664 | <0> <3> : "↉" U2189 # VULGAR FRACTION ZERO THIRDS 665 | <1> : "⅟" U215F # FRACTION NUMERATOR ONE 666 | 667 | # How about roman numerals? Percent for numerical mnemonic? 668 | # Does this go against the spirit of this file? These symbols are accessible 669 | # as regular letters and would look okay. Maybe only for I-X? 670 | <1> : "ⅰ" U2170 # SMALL ROMAN NUMERAL ONE 671 | <2> : "ⅱ" U2171 # SMALL ROMAN NUMERAL TWO 672 | <3> : "ⅲ" U2172 # SMALL ROMAN NUMERAL THREE 673 | <4> : "ⅳ" U2173 # SMALL ROMAN NUMERAL FOUR 674 | <5> : "ⅴ" U2174 # SMALL ROMAN NUMERAL FIVE 675 | <6> : "ⅵ" U2175 # SMALL ROMAN NUMERAL SIX 676 | <7> : "ⅶ" U2176 # SMALL ROMAN NUMERAL SEVEN 677 | <8> : "ⅷ" U2177 # SMALL ROMAN NUMERAL EIGHT 678 | <9> : "ⅸ" U2178 # SMALL ROMAN NUMERAL NINE 679 | : "ⅹ" U2179 # SMALL ROMAN NUMERAL TEN 680 | # How do we handle eleven and twelve? 681 | <1> : "ⅺ" U217A # SMALL ROMAN NUMERAL ELEVEN 682 | <2> : "ⅻ" U217B # SMALL ROMAN NUMERAL TWELVE 683 | # That okay? 684 | : "ⅼ" U217C # SMALL ROMAN NUMERAL FIFTY 685 | : "ⅽ" U217D # SMALL ROMAN NUMERAL ONE HUNDRED 686 | : "ⅾ" U217E # SMALL ROMAN NUMERAL FIVE HUNDRED 687 | : "ⅿ" U217F # SMALL ROMAN NUMERAL ONE THOUSAND 688 | ### 689 | <0> <1> : "Ⅰ" U2160 # ROMAN NUMERAL ONE 690 | <0> <2> : "Ⅱ" U2161 # ROMAN NUMERAL TWO 691 | <0> <3> : "Ⅲ" U2162 # ROMAN NUMERAL THREE 692 | <0> <4> : "Ⅳ" U2163 # ROMAN NUMERAL FOUR 693 | <0> <5> : "Ⅴ" U2164 # ROMAN NUMERAL FIVE 694 | <0> <6> : "Ⅵ" U2165 # ROMAN NUMERAL SIX 695 | <0> <7> : "Ⅶ" U2166 # ROMAN NUMERAL SEVEN 696 | <0> <8> : "Ⅷ" U2167 # ROMAN NUMERAL EIGHT 697 | <0> <9> : "Ⅸ" U2168 # ROMAN NUMERAL NINE 698 | <0> : "Ⅹ" U2169 # ROMAN NUMERAL TEN 699 | # How do we handle eleven and twelve? 700 | <0> <1> : "Ⅺ" U216A # ROMAN NUMERAL ELEVEN 701 | <0> <2> : "Ⅻ" U216B # ROMAN NUMERAL TWELVE 702 | <0> : "Ⅼ" U216C # ROMAN NUMERAL FIFTY 703 | <0> : "Ⅽ" U216D # ROMAN NUMERAL ONE HUNDRED 704 | <0> : "Ⅾ" U216E # ROMAN NUMERAL FIVE HUNDRED 705 | <0> : "Ⅿ" U216F # ROMAN NUMERAL ONE THOUSAND 706 | : "Ⅹ" U2169 # ROMAN NUMERAL TEN 707 | : "Ⅼ" U216C # ROMAN NUMERAL FIFTY 708 | : "Ⅽ" U216D # ROMAN NUMERAL ONE HUNDRED 709 | : "Ↄ" U2183 # ROMAN NUMERAL REVERSED ONE HUNDRED 710 | : "Ⅾ" U216E # ROMAN NUMERAL FIVE HUNDRED 711 | : "Ⅿ" U216F # ROMAN NUMERAL ONE THOUSAND 712 | <0> : "ↀ" U2180 # ROMAN NUMERAL ONE THOUSAND C D 713 | <0> : "ↁ" U2181 # ROMAN NUMERAL FIVE THOUSAND 714 | <0> : "ↂ" U2182 # ROMAN NUMERAL TEN THOUSAND 715 | <0> <0> : "ↇ" U2187 # ROMAN NUMERAL FIFTY THOUSAND 716 | <0> <0> : "ↈ" U2188 # ROMAN NUMERAL ONE HUNDRED THOUSAND 717 | 718 | 719 | # Custom additions: for chat (kragen) 720 | : "☻" U263B # BLACK SMILING FACE 721 | : "☺" U263A # WHITE SMILING FACE 722 | : "☹" U2639 # WHITE FROWNING FACE 723 | : "⍨" U2368 # APL FUNCTIONAL SYMBOL TILDE DIAERESIS 724 | : "⸚" U2E1A # HYPHEN WITH DIAERESIS 725 | : "°͜°" # Funny smiley-face. 726 | # Those are archaic cyrilic letters... but look so _perfect_ for use 727 | # in chat. And about the last, the "multiocular O"... Well, I don't 728 | # know what it can be used for, but given the description, how could I 729 | # leave it out‽ 730 | # (I guess using U+1F440 EYES would be more straightforward, but not as funny?) 731 | : "Ꙭ" UA66C # CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O * used in the dual of words based on the root for 'eye' 732 | : "ꙭ" UA66D # CYRILLIC SMALL LETTER DOUBLE MONOCULAR O 733 | : "Ꙫ" UA66A # CYRILLIC CAPITAL LETTER BINOCULAR O * used in the dual of words based on the root for 'eye' 734 | : "ꙫ" UA66B # CYRILLIC SMALL LETTER BINOCULAR O 735 | : "ꙮ" UA66E # CYRILLIC LETTER MULTIOCULAR O * used in the epithet 'many-eyed' 736 | # While we're doing stacks of circles with dots. 737 | <3> : "߷" U07F7 # NKO SYMBOL GBAKURUNEN 738 | : "‽" U203D # INTERROBANG 739 | : "⸘" U2E18 # INVERTED INTERROBANG, standard now. 740 | : "⸘" U2E18 # INVERTED INTERROBANG (if you have a ¡ key. Otherwise...? "?i" maybe? 741 | : "⸘" U2E18 # INVERTED INTERROBANG (if you have a ¡ key. Otherwise...? "?i" maybe? 742 | : "⸮" U2E2E # REVERSED QUESTION MARK 743 | : "⸮" U2E2E # REVERSED QUESTION MARK 744 | : "⁇" U2047 # DOUBLE QUESTION MARK 745 | <2> : "⁇" U2047 # DOUBLE QUESTION MARK 746 | : "⁈" U2048 # QUESTION EXCLAMATION MARK 747 | : "⁉" U2049 # EXCLAMATION QUESTION MARK 748 | : "‼" U203C # DOUBLE EXCLAMATION MARK 749 | <2> : "‼" U203C # DOUBLE EXCLAMATION MARK 750 | <2> : "∷" U2237 # PROPORTION -- not strictly 2 times COLON 751 | : "⁏" U204F # REVERSED SEMICOLON 752 | : "⁏" U204F # REVERSED SEMICOLON 753 | # Keep looking into big hunks of Latin Extended-D, A720- et seq. 754 | <3> : "♥" U2665 # BLACK HEART SUIT 755 | <8> : "♣" U2663 # BLACK CLUB SUIT 756 | <3> : "♣" U2663 # BLACK CLUB SUIT 757 | : "♢" U2662 # WHITE DIAMOND SUIT 758 | <3> : "♠" U2660 # BLACK SPADE SUIT 759 | : "♠" U2660 # BLACK SPADE SUIT 760 | : "♡" U2661 # WHITE HEART SUIT 761 | # "shamrock" is too long; there IS a limit to these! 762 | : "☘" U2618 # SHAMROCK 763 | : "☘" U2618 # SHAMROCK 764 |

: "☮" U262E # PEACE SYMBOL 765 |

: "☮" U262E # PEACE SYMBOL 766 | : "☯" U262F # YIN YANG 767 | : "☯" U262F # YIN YANG 768 | # And now that we are into hearts... 769 | <3> : "❥" U2765 # ROTATED HEAVY BLACK HEART BULLET 770 | <3> : "❣" U2763 # HEAVY HEART EXCLAMATION MARK ORNAMENT 771 | <3> : "❦" U2766 # FLORAL HEART 772 | <3> : "❧" U2767 # ROTATED FLORAL HEART BULLET 773 | <3> : "☙" U2619 # REVERSED ROTATED FLORAL HEART BULLET 774 | : "☎" U260E # BLACK TELEPHONE 775 | : "☕" U2615 # HOT BEVERAGE 776 | # These last two bother me less, though they can still be improved. 777 | # Other possibly useful symbols: 778 | # 2668 HOT SPRINGS (for chat, for running off to shower?) 779 | # I want 2713-2714 and 2717-2718 780 | # We need a Dingbats prefix, for ❛❜❝❞❢ 781 | : "☐" U2610 # BALLOT BOX 782 | # Better keystrokes anyone? This one breaks the pattern. [c]? [v]? [y]? [/]? 783 | : "☑" U2611 # BALLOT BOX WITH CHECK 784 | : "☑" U2611 # BALLOT BOX WITH CHECK 785 | : "☒" U2612 # BALLOT BOX WITH X 786 | # @ for dingbats? 787 | : "✓" U2713 # CHECK MARK 788 | : "✔" U2714 # HEAVY CHECK MARK 789 | : "✗" U2717 # BALLOT X 790 | : "✘" U2718 # HEAVY BALLOT X 791 | : "❨" U2768 # MEDIUM LEFT PARENTHESIS ORNAMENT 792 | : "❩" U2769 # MEDIUM RIGHT PARENTHESIS ORNAMENT 793 | : "❪" U276A # MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT 794 | : "❫" U276B # MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT 795 | : "❬" U276C # MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT 796 | : "❭" U276D # MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT 797 | # U276E&F ❮❯ ? Angle quotation mark ornaments? 798 | : "❰" U2770 # HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT 799 | : "❱" U2771 # HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT 800 | : "❲" U2772 # LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT 801 | : "❳" U2773 # LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT 802 | : "❴" U2774 # MEDIUM LEFT CURLY BRACKET ORNAMENT 803 | : "❵" U2775 # MEDIUM RIGHT CURLY BRACKET ORNAMENT 804 | # Will I want for something else? 805 | # Now there is such a thing as text style and emoji style. Use the 806 | # "dingbat prefix" in an unusual way: 807 | : "️" UFE0F # Emoji selector 808 | : "︎" UFE0E # Text selector 809 | # How about dice? 810 | <1> : "⚀" U2680 # DIE FACE-1 811 | <2> : "⚁" U2681 # DIE FACE-2 812 | <3> : "⚂" U2682 # DIE FACE-3 813 | <4> : "⚃" U2683 # DIE FACE-4 814 | <5> : "⚄" U2684 # DIE FACE-5 815 | <6> : "⚅" U2685 # DIE FACE-6 816 | # 267B BLACK UNIVERSAL RECYCLING SYMBOL 817 | 818 | : "🅭" U1F16D # CIRCLED CC 819 | : "🅭" U1F16D # CIRCLED CC 820 | : "🅮" U1F16E # CIRCLED C WITH OVERLAID BACKSLASH 821 | : "🅮" U1F16E # CIRCLED C WITH OVERLAID BACKSLASH 822 | : "🅮" U1F16E # CIRCLED C WITH OVERLAID BACKSLASH 823 | : "🅮" U1F16E # CIRCLED C WITH OVERLAID BACKSLASH 824 | : "🅯" U1F16F # CIRCLED HUMAN FIGURE 825 | : "🄎" U1F10E # CIRCLED ANTICLOCKWISE ARROW 826 | ## ugh, this doesn't (usually) match the style of the others. They're practically emoji; ⊜ is a math symbol. 827 | : "⊜" U229C # CIRCLED EQUALS 828 | : "⊜" U229C # CIRCLED EQUALS 829 | : "🄏" U1F10F # CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH 830 | : "🄏" U1F10F # CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH 831 | : "🄏" U1F10F # CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH 832 | ## Not actually Creative Commons, but related. Too many options? 833 | : "🄯" U1F12F # COPYLEFT SYMBOL 834 | : "🄯" U1F12F # COPYLEFT SYMBOL 835 | : "🄯" U1F12F # COPYLEFT SYMBOL 836 | : "🄯" U1F12F # COPYLEFT SYMBOL 837 | 838 | ## Segmented digits? 839 | <0> : "🯰" U1FBF0 # SEGMENTED DIGIT ZERO 840 | <1> : "🯱" U1FBF1 # SEGMENTED DIGIT ONE 841 | <2> : "🯲" U1FBF2 # SEGMENTED DIGIT TWO 842 | <3> : "🯳" U1FBF3 # SEGMENTED DIGIT THREE 843 | <4> : "🯴" U1FBF4 # SEGMENTED DIGIT FOUR 844 | <5> : "🯵" U1FBF5 # SEGMENTED DIGIT FIVE 845 | <6> : "🯶" U1FBF6 # SEGMENTED DIGIT SIX 846 | <7> : "🯷" U1FBF7 # SEGMENTED DIGIT SEVEN 847 | <8> : "🯸" U1FBF8 # SEGMENTED DIGIT EIGHT 848 | <9> : "🯹" U1FBF9 # SEGMENTED DIGIT NINE 849 | 850 | # Keystrokes okay? 851 | : "⚜" U269C # FLEUR-DE-LIS 852 | : "⚛" U269B # ATOM SYMBOL 853 |

: "☭" U262D # HAMMER AND SICKLE 854 | : "⚠" U26A0 # WARNING SIGN 855 | : "⚠" U26A0 # WARNING SIGN 856 |

: "⚡" U26A1 # HIGH VOLTAGE SIGN 857 | # Shouldn't use just because it's too likely to be a prefix for 858 | # a useful word. 859 | : "☢" U2622 # RADIOACTIVE SIGN 860 | : "☣" U2623 # BIOHAZARD SIGN 861 | : "☣" U2623 # BIOHAZARD SIGN 862 | # Changing this from ⚝ 863 | : "⛤" U26E4 # PENTAGRAM (pentalpha, get it?) 864 |

: "✈" U2708 # AIRPLANE 865 | : "✉" U2709 # ENVELOPE 866 | : "♿" U267F # WHEELCHAIR SYMBOL 867 | : "☤" U2624 # CADEUCEUS 868 | ## Don't usually do sequences, but exception made for the 869 | ## "eyewitness" compound emoji sequence: 870 | : "👁️‍🗨️" 871 | # Something different for STAFF OF AESCULAPIUS? 872 | <1> : "⚕" U2695 # STAFF OF AESCULAPIUS 873 | # 26B0 COFFIN ? 874 | # One of the SNOWFLAKEs? 875 | # SNOWMAN? COMET? ANCHOR? 876 | # Maybe if we go with having a "word" symbol and spelling out lots and 877 | # lots of whole words, we can have all the planets. 878 | # 879 | # I already have STAR OF DAVID on another map. 880 | # 231A, 231B -- WATCH and HOURGLASS -- one should be &-w-a-i-t 881 | # 23D4 METRICAL LONG OVER TWO SHORTS a.k.a. METRICAL BOOBS 882 | # 0950 DEVANAGARI OM? 883 | # 212E ESTIMATED SYMBOL? 884 | # 2324 UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS a.k.a. NOT AMUSED 885 | # 237E BELL SYMBOL a.k.a. ALIENS LANDING 886 | 887 | : "♀" U2640 # FEMALE SIGN 888 | : "♂" U2642 # MALE SIGN 889 | 890 | : "⚣" U26A3 # DOUBLED MALE SIGN 891 | : "⚢" U26A2 # DOUBLED FEMALE SIGN 892 | : "⚤" U26A4 # INTERLOCKED FEMALE AND MALE SIGN 893 | 894 | # 'trans': short for transgender/transexual 895 | # 'genderq': short for genderqueer. 896 | # Wasn't sure which to call which symbol, and wanted to include both 897 | : "⚥" U26A5 # MALE AND FEMALE SIGN 898 | : "⚧" U26A7 # MALE WITH STROKE AND MALE AND FEMALE SIGN 899 | 900 | 901 | : "☠" U2620 # SKULL AND CROSSBONES 902 | : "☠" U2620 # SKULL AND CROSSBONES 903 | : "☠" U2620 # SKULL AND CROSSBONES 904 | : "⌨" U2328 # KEYBOARD 905 | : "☞" U261E # WHITE RIGHT POINTING INDEX 906 | : "☜" U261C # WHITE LEFT POINTING INDEX 907 | :"★" U2605 # BLACK STAR 908 | <0> :"☆" U2606 # WHITE STAR 909 | :"✪" U272A # CIRCLED WHITE STAR 910 | ## Did not have great luck with keystrokes for these. L/ conflicts with ł, 911 | ## and <2> : "⯨" U2BE8 # LEFT HALF BLACK STAR 913 | <2> : "⯩" U2BE9 # RIGHT HALF BLACK STAR 914 | <2> : "⯪" U2BEA # STAR WITH LEFT HALF BLACK 915 | <2> : "⯫" U2BEB # STAR WITH RIGHT HALF BLACK 916 | <3> :"⁂" U2042 # ASTERISM 917 | <3> :"⁂" U2042 # ASTERISM 918 | <2> :"⁑" U2051 # TWO ASTERISKS ALIGNED VERTICALLY 919 | <4> :"✢" U2722 # FOUR TEARDROP-SPOKED ASTERISK 920 | <6> :"✡" U2721 # STAR OF DAVID 921 | :"✯" U272F # PINWHEEL STAR 922 | :"✱" U2731 # HEAVY ASTERISK 923 | : "❖" U2756 # BLACK DIAMOND MINUS WHITE X 924 | : "⌘" U2318 # PLACE OF INTEREST SIGN 925 | # Using backslash-minus-slash etc. conflicts with combining accents. 926 | : "⚞" U269E # THREE LINES CONVERGING RIGHT 927 | : "⚟" U269F # THREE LINES CONVERGING LEFT 928 | : "⍾" U237E # BELL SYMBOL (or ALIENS LANDING) -- &-a-l-i-e-n ? 929 | # Other monstery characters... ѪꙚ (alien abductions?) 930 | # ඏൠഋ & others from Kannada et al...? 931 | # Can't use -^- for this; conflicts with -^ for ↑, and getting those arrows 932 | # workable was complicated enough. How about this? 933 | : "⌤" U2324 # UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS; aka ENTER KEY, aka NOT AMUSED. 934 | : "⌛" U231B # HOURGLASS 935 | : "⌛" U231B # HOURGLASS 936 | : "⌚" U231A # WATCH 937 | : "⌚" U231A # WATCH 938 | : " " U2002 # EN SPACE 939 | : " " U2003 # EM SPACE 940 | <3> : " " U2004 # THREE-PER-EM SPACE 941 | <4> : " " U2005 # FOUR-PER-EM SPACE 942 | <6> : " " U2006 # SIX-PER-EM SPACE 943 | : " " U2008 # PUNCTUATION SPACE 944 | : " " U205F # MEDIUM MATHEMATICAL SPACE 945 | : "◌" U25CC # DOTTED CIRCLE 946 | : "⬚" U2B1A # DOTTED SQUARE 947 | : "﴾" UFD3E # ORNATE LEFT PARENTHESIS 948 | : "﴿" UFD3F # ORNATE RIGHT PARENTHESIS 949 | : "ʘ" U0298 # LATIN LETTER BILABIAL CLICK (kiss sound) 950 | : "‣" U2023 # TRIANGULAR BULLET 951 | #SUPERSCRIPTS: 952 | #To avoid namespace clashes, is doubled (will I regret that?) 953 | : "ʰ" U02B0 # SUPERSCRIPT H 954 | : "ⁱ" U2071 # SUPERSCRIPT I 955 | : "ʲ" U02B2 # SUPERSCRIPT J 956 | : "ⁿ" U207F # SUPERSCRIPT N 957 | : "ʳ" U02B3 # SUPERSCRIPT R 958 | : "ʷ" U02B7 # SUPERSCRIPT W 959 | : "ʸ" U02B8 # SUPERSCRIPT Y 960 | # How could I have gone so long without being able to type "10ˣ" for "thanks"? 961 | : "ˣ" U02E3 # SUPERSCRIPT X 962 | # So I can use yᵗ/þᵗ and yᵉ/þᵉ 963 | : "ᵉ" U1D49 # MODIFIER LETTER SMALL E 964 | : "ᵗ" U1D57 # MODIFIER LETTER SMALL T 965 | # Abbreviation for "that": 966 | : "ꝥ" UA765 # LATIN SMALL LETTER THORN WITH STROKE 967 | #Maybe add: ˃˂ Need to be able to talk about ʔˁ... 968 | : "ˀ" U02C0 # MODIFIER LETTER GLOTTAL STOP 969 | : "ˁ" U02C1 # MODIFIER LETTER REVERSED GLOTTAL STOP 970 | : "⁻" U207B # SUPERSCRIPT MINUS 971 | : "⁺" U207A # SUPERSCRIPT PLUS 972 | 973 | : "≈" U2248 # ALMOST EQUAL TO 974 | : "ʃ" U0283 # LATIN SMALL LETTER ESH 975 | : "ʒ" U0292 # LATIN SMALL LETTER EZH 976 | : "ɬ" U026C # LATIN SMALL LETTER L WITH BELT 977 | <3> : "ɮ" U026E # LATIN SMALL LETTER LEZH 978 | : "ȝ" U021D # LATIN SMALL LETTER YOGH 979 | : "Ȝ" U021C # LATIN CAPITAL LETTER YOGH 980 | : "ʔ" U0294 # LATIN LETTER GLOTTAL STOP 981 | : "ʕ" U0295 # LATIN LETTER PHARYNGEAL VOICED FRICATIVE 982 | # Not great keystrokes... 983 | : "ʖ" U0296 # LATIN LETTER INVERTED GLOTTAL STOP 984 | : "ʖ" U0296 # LATIN LETTER INVERTED GLOTTAL STOP 985 | : "ʡ" U02A1 # LATIN LETTER GLOTTAL STOP WITH STROKE 986 | : "ʢ" U02A2 # LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE 987 | # How about ɸ? φ isn’t the IPA glyph. 988 |

: "ɸ" U0278 # LATIN SMALL LETTER PHI 989 | : "ɪ" U026A # LATIN LETTER SMALL CAPITAL I 990 | : "ɪ" U026A # LATIN LETTER SMALL CAPITAL I 991 | : "ʊ" U028A # LATIN SMALL LETTER UPSILON 992 | : "ʊ" U028A # LATIN SMALL LETTER UPSILON 993 | : "ɑ" U0251 # LATIN SMALL LETTER ALPHA 994 | : "ɚ" U025A # LATIN SMALL LETTER SCHWA WITH HOOK 995 | :"ɔ" U0254 # LATIN SMALL LETTER OPEN O 996 | : "ɔ" U0254 # LATIN SMALL LETTER OPEN O 997 | :"Ɔ" U0186 # LATIN CAPITAL LETTER OPEN O 998 | : "Ɔ" U0186 # LATIN CAPITAL LETTER OPEN O 999 | : "ɛ" U025B # LATIN SMALL LETTER OPEN E 1000 | # Have to put the at the beginning for these. 1001 | : "ɒ" U0252 # LATIN SMALL LETTER TURNED ALPHA 1002 | : "ɒ" U0252 # LATIN SMALL LETTER TURNED ALPHA 1003 | : "ɜ" U025C # LATIN SMALL LETTER REVERSED OPEN E 1004 | : "ɜ" U025C # LATIN SMALL LETTER REVERSED OPEN E 1005 | : "ɝ" U025D # LATIN SMALL LETTER REVERSED OPEN E WITH HOOK 1006 | : "ɝ" U025D # LATIN SMALL LETTER REVERSED OPEN E WITH HOOK 1007 | # It's spelled "gy" in Hungarian... 1008 | : "ɟ" U025F # LATIN SMALL LETTER DOTLESS J WITH STROKE 1009 | # How are these keystrokes? 1010 | : "ˈ" U02C8 # MODIFIER LETTER VERTICAL LINE 1011 | : "ˌ" U02CC # MODIFIER LETTER LOW VERTICAL LINE 1012 | : "̩" U0329 # COMBINING VERTICAL LINE BELOW 1013 | # Harmonize with other combiners. 1014 | : "̩" U0329 # COMBINING VERTICAL LINE BELOW 1015 | : "ɹ" U0279 # LATIN SMALL LETTER TURNED R: voiced alveolar approximant (American English (at least) R) 1016 | : "ɾ" U027E # LATIN SMALL LETTER R WITH FISHHOOK: voiced alveolar flap or tap (American English intervocalic allophone of d, or Spanish r) 1017 | : "ʌ" U028C # LATIN SMALL LETTER TURNED V 1018 | : "ɯ" U026F # LATIN SMALL LETTER TURNED M 1019 | # doubling a letter seems to be mostly used for turning 1020 | : "ʍ" U028D # LATIN SMALL LETTER TURNED W 1021 | : "ʎ" U028E # LATIN SMALL LETTER TURNED Y 1022 | : "ɐ" U0250 # LATIN SMALL LETTER TURNED A 1023 | : "ɥ" U0265 # LATIN SMALL LETTER TURNED H 1024 | # ı is already available in the "standard" .XCompose 1025 | : "ȷ" U0237 # LATIN SMALL LETTER DOTLESS J 1026 | : "Ꞌ" UA78B # LATIN CAPITAL LETTER SALTILLO 1027 | : "ꞌ" UA78C # LATIN SMALL LETTER SALTILLO 1028 | # I'll use capitals for a different double 1029 | : "ʬ" U02AC # LATIN LETTER BILABIAL PERCUSSIVE 1030 | # Also handy for writing urls: http://ʬw.omniglot.com/ 1031 | # Sorry, I miss having this and hate having to use colon instead: 1032 | : "ː" U02D0 # MODIFIER LETTER TRIANGULAR COLON 1033 | # ɣ? ᴥ? Important enough to add? ᴥ is cool just as a "latin" letter. 1034 | : "ɣ" U0263 # LATIN SMALL LETTER GAMMA 1035 | # It looks like a ɣ and makes an "o" sorta sound: 1036 | : "ɤ" U0264 # LATIN SMALL LETTER RAMS HORN 1037 | : "ᴥ" U1D25 # LATIN LETTER AIN 1038 | # Sometimes it's a "tail", sometimes a "hook", and sometimes a "retroflex hook" 1039 | : "ɖ" U0256 # LATIN SMALL LETTER D WITH TAIL 1040 | : "ɭ" U026D # LATIN SMALL LETTER L WITH RETROFLEX HOOK 1041 | : "ɳ" U0273 # LATIN SMALL LETTER N WITH RETROFLEX HOOK 1042 | : "ʂ" U0282 # LATIN SMALL LETTER S WITH HOOK 1043 | : "ʈ" U0288 # LATIN SMALL LETTER T WITH RETROFLEX HOOK 1044 | : "ʐ" U0290 # LATIN SMALL LETTER Z WITH RETROFLEX HOOK 1045 | # This is used for functions, folders, etc. Yeah, the hook's facing wrong. 1046 | : "ƒ" U0192 # LATIN SMALL LETTER F WITH HOOK 1047 | # Sigh, might as well do implosives. Which is also sometimes a hook. 1048 | : "ɓ" U0253 # LATIN SMALL LETTER B WITH HOOK 1049 | : "ɗ" U0257 # LATIN SMALL LETTER D WITH HOOK 1050 | : "ɠ" U0260 # LATIN SMALL LETTER G WITH HOOK 1051 | : "ɡ" U0261 # LATIN SMALL LETTER SCRIPT G 1052 | # The h looks the same... 1053 | : "ɦ" U0266 # LATIN SMALL LETTER H WITH HOOK 1054 | : "ʛ" U029B # LATIN LETTER SMALL CAPITAL G WITH HOOK 1055 | : "№" U2116 # NUMERO SIGN 1056 | : "℞" U211E # PRESCRIPTION TAKE 1057 |

: "⅌" U214C # PER SIGN 1058 | : "℥" U2125 # OUNCE SIGN 1059 | : "℈" U2108 # SCRUPLE 1060 | # There are all kinds of awesome combining characters in the U+0300 page. 1061 | # There are a bunch of other awesome combining characters like U+20E0 1062 | : "๛" U0E5B # THAI CHARACTER KHOMUT (end of chapter) 1063 | # 1064 | # Music stuff. # is the music mnemonic. 1065 | : "♭" U266d # MUSIC FLAT SIGN 1066 | : "♮" U266e # MUSIC NATURAL SIGN 1067 | : "♮" U266e # MUSIC NATURAL SIGN 1068 | : "♯" U266f # MUSIC SHARP SIGN 1069 | : "𝄞" U0001d11e # MUSICAL SYMBOL G CLEF 1070 | : "𝄢" U0001d122 # MUSICAL SYMBOL F CLEF 1071 | : "𝄡" U0001d121 # MUSICAL SYMBOL C CLEF 1072 | : "♪" U266a # EIGHTH NOTE 1073 | : "♫" U266b # BEAMED EIGHTH NOTES 1074 | : "♫" U266b # BEAMED EIGHTH NOTES 1075 | : "♩" U2669 # QUARTER NOTE 1076 | : "𝅗𝅥" U0001d15e # MUSICAL SYMBOL HALF NOTE 1077 | : "𝅝" U0001d15d # MUSICAL SYMBOL WHOLE NOTE 1078 | 1079 | 1080 | # Combining accents, for making things you don't have precomposed chars or keystrokes for: 1081 | : "̀" U0300 # COMBINING GRAVE ACCENT 1082 | : "́" U0301 # COMBINING ACUTE ACCENT 1083 | : "̂" U0302 # COMBINING CIRCUMFLEX ACCENT 1084 | : "̃" U0303 # COMBINING TILDE 1085 | : "̄" U0304 # COMBINING MACRON 1086 | : "̅" U0305 # COMBINING OVERLINE -- ??? 1087 | : "̆" U0306 # COMBINING BREVE 1088 | : "̇" U0307 # COMBINING DOT ABOVE 1089 | : "̈" U0308 # COMBINING DIAERESIS 1090 | : "̉" U0309 # COMBINING HOOK ABOVE 1091 | : "̊" U030a # COMBINING RING ABOVE 1092 | # That now conflicts with the new 🙌 in the system xcompose. Alternative: 1093 | <0> : "̊" U030a # COMBINING RING ABOVE 1094 | : "̋" U030b # COMBINING DOUBLE ACUTE ACCENT -- ?? 1095 | : "̌" U030c # COMBINING CARON 1096 | : "̍" U030d # COMBINING VERTICAL LINE ABOVE 1097 | <2> : "̎" U030e # COMBINING DOUBLE VERTICAL LINE ABOVE 1098 | <2> : "̏" U030f # COMBINING DOUBLE GRAVE ACCENT 1099 | # For writing PSILI and DASIA in Greek 1100 | # Ugh, better key-coding? I may need @ for BELOW. 1101 | : "̒" U0312 # COMBINING TURNED COMMA ABOVE 1102 | : "̓" U0313 # COMBINING COMMA ABOVE 1103 | : "̔" U0314 # COMBINING REVERSED COMMA ABOVE 1104 | : "͒" U0352 # COMBINING FERMATA 1105 | : "̐" U0310 # COMBINING CHANDRABINDU 1106 | : "̑" U0311 # COMBINING INVERTED BREVE -- ?? 1107 | : "⃝" U20DD # COMBINING ENCLOSING CIRCLE 1108 | : "⃞" U20DE # COMBINING ENCLOSING SQUARE 1109 | : "⃟" U20DF # COMBINING ENCLOSING DIAMOND 1110 | : "⃠" U20E0 # COMBINING ENCLOSING CIRCLE BACKSLASH 1111 | : "⃢" U20E2 # COMBINING ENCLOSING SCREEN 1112 | : "⃣" U20E3 # COMBINING ENCLOSING KEYCAP 1113 | : "⃤" U20E4 # COMBINING ENCLOSING TRIANGLE 1114 | <2> : "⃫" U20EB # COMBINING LONG DOUBLE SOLIDUS OVERLAY 1115 | : "⃰" U20F0 # COMBINING ASTERISK ABOVE 1116 | : "̣" U0323 # COMBINING DOT BELOW 1117 | # With only one underscore it conflicts with stuff. 1118 | : "̱" U0331 # COMBINING MACRON BELOW 1119 | : "̲" U0332 # COMBINING LOW LINE 1120 | : "̳" U0333 # COMBINING DOUBLE LOW LINE 1121 | 1122 | # The @ sign will signify reversal to the bottom of the glyph, 'kay? 1123 | 1124 | : "̥" U0325 # COMBINING RING BELOW 1125 | 1126 | : "̬" U032c # COMBINING CARON BELOW 1127 | : "̭" U032d # COMBINING CIRCUMFLEX ACCENT BELOW 1128 | : "̮" U032e # COMBINING BREVE BELOW 1129 | : "̯" U032f # COMBINING INVERTED BREVE BELOW -- ?? 1130 | 1131 | # How about leading & (or &&?) for double combiners? There aren't many anyway. 1132 | # Except that I found myself assuming it was "2" for double. 1133 | : "͜" U035C # COMBINING DOUBLE BREVE BELOW 1134 | <2> : "͜" U035C # COMBINING DOUBLE BREVE BELOW 1135 | : "͝" U035D # COMBINING DOUBLE BREVE 1136 | <2> : "͝" U035D # COMBINING DOUBLE BREVE 1137 | : "͞" U035E # COMBINING DOUBLE MACRON 1138 | <2> : "͞" U035E # COMBINING DOUBLE MACRON 1139 | : "͟" U035F # COMBINING DOUBLE MACRON BELOW 1140 | <2> : "͟" U035F # COMBINING DOUBLE MACRON BELOW 1141 | : "͟" U035F # COMBINING DOUBLE MACRON BELOW 1142 | <2> : "͟" U035F # COMBINING DOUBLE MACRON BELOW 1143 | : "͠" U0360 # COMBINING DOUBLE TILDE 1144 | <2> : "͠" U0360 # COMBINING DOUBLE TILDE 1145 | : "͡" U0361 # COMBINING DOUBLE INVERTED BREVE 1146 | <2> : "͡" U0361 # COMBINING DOUBLE INVERTED BREVE 1147 | : "᷼" U1DFC # COMBINING DOUBLE INVERTED BREVE BELOW 1148 | <2> : "᷼" U1DFC # COMBINING DOUBLE INVERTED BREVE BELOW 1149 | # Might as well finish up the set. 1150 | : "͢" U0362 # COMBINING DOUBLE RIGHTWARDS ARROW BELOW 1151 | <2> : "͢" U0362 # COMBINING DOUBLE RIGHTWARDS ARROW BELOW 1152 | 1153 | : "͒" U0352 # COMBINING FERMATA 1154 | 1155 | : "҉" U0489 # COMBINING CYRILLIC MILLIONS SIGN -- aka COMBINING SHINY 1156 |

: "₽" U20BD # RUBLE SIGN 1157 |

: "₽" U20BD # RUBLE SIGN 1158 | 1159 | # How about for a little extra control: 1160 |

: "​" U200B # ZERO WIDTH SPACE 1161 | : "‌" U200C # ZERO WIDTH NON-JOINER 1162 | : "‍" U200D # ZERO WIDTH JOINER 1163 | : "‎" U200E # LEFT-TO-RIGHT MARK 1164 | : "‏" U200F # RIGHT-TO-LEFT MARK 1165 | # I never understood the whole embedding/pop thing, but we might as well add 'em 1166 | : "‪" U202A # LEFT-TO-RIGHT EMBEDDING 1167 | : "‫" U202B # RIGHT-TO-LEFT EMBEDDING 1168 |

: "‬" U202C # POP DIRECTIONAL FORMATTING 1169 | : "⁦" U2066 # LEFT-TO-RIGHT ISOLATE 1170 | : "⁧" U2067 # RIGHT-TO-LEFT ISOLATE 1171 | : "⁨" U2068 # FIRST STRONG ISOLATE 1172 |

: "⁩" U2069 # POP DIRECTIONAL ISOLATE 1173 | : "‭" U202D # LEFT-TO-RIGHT OVERRIDE 1174 | : "‮" U202E # RIGHT-TO-LEFT OVERRIDE 1175 | : "" UFEFF # ZERO WIDTH NO-BREAK SPACE (Byte Order Mark) 1176 | : "͏" U034F # COMBINING GRAPHEME JOINER 1177 | : "⁠" U2060 # WORD JOINER 1178 | # These are sufficiently special and well-known that they don't need the 1179 | # double prefix I think. The all-caps helps too. 1180 | 1181 | # How about some small-caps? We normally use a special character as a prefix, 1182 | # but why not a suffix? It won't interfere with things that way. 1183 | # Several of these are also IPA, which is handy. And so a few have multiple 1184 | # entries. Whatever. 1185 | 1186 | : "ᴀ" U1D00 # LATIN LETTER SMALL CAPITAL A 1187 | : "ʙ" U0299 # LATIN LETTER SMALL CAPITAL B 1188 | : "ᴄ" U1D04 # LATIN LETTER SMALL CAPITAL C 1189 | : "ᴅ" U1D05 # LATIN LETTER SMALL CAPITAL D 1190 | : "ᴇ" U1D07 # LATIN LETTER SMALL CAPITAL E 1191 | : "ꜰ" UA730 # LATIN LETTER SMALL CAPITAL F 1192 | : "ɢ" U0262 # LATIN LETTER SMALL CAPITAL G 1193 | : "ʜ" U029C # LATIN LETTER SMALL CAPITAL H 1194 | : "ɪ" U026A # LATIN LETTER SMALL CAPITAL I 1195 | : "ᴊ" U1D0A # LATIN LETTER SMALL CAPITAL J 1196 | : "ᴋ" U1D0B # LATIN LETTER SMALL CAPITAL K 1197 | : "ʟ" U029F # LATIN LETTER SMALL CAPITAL L 1198 | : "ᴍ" U1D0D # LATIN LETTER SMALL CAPITAL M 1199 | : "ɴ" U0274 # LATIN LETTER SMALL CAPITAL N 1200 | : "ᴏ" U1D0F # LATIN LETTER SMALL CAPITAL O 1201 |

: "ᴘ" U1D18 # LATIN LETTER SMALL CAPITAL P 1202 | : "ꞯ" UA7AF # LATIN LETTER SMALL CAPITAL Q 1203 | : "ʀ" U0280 # LATIN LETTER SMALL CAPITAL R 1204 | : "ꜱ" UA731 # LATIN LETTER SMALL CAPITAL S 1205 | : "ᴛ" U1D1B # LATIN LETTER SMALL CAPITAL T 1206 | : "ᴜ" U1D1C # LATIN LETTER SMALL CAPITAL U 1207 | : "ᴠ" U1D20 # LATIN LETTER SMALL CAPITAL V 1208 | : "ᴡ" U1D21 # LATIN LETTER SMALL CAPITAL W 1209 | # There is no SMALL CAPITAL X (yet) 1210 | : "ʏ" U028F # LATIN LETTER SMALL CAPITAL Y 1211 | : "ᴢ" U1D22 # LATIN LETTER SMALL CAPITAL Z 1212 | 1213 | 1214 | # See also http://bleah.co.uk/~simon/stuff/XCompose 1215 | # and http://dotfiles.org/~inky/.XCompose 1216 | # and http://paste.lisp.org/display/73094 1217 | 1218 | : "☉" U2609 # SUN (Sunday) 1219 | : "☽" U263D # FIRST QUARTER MOON (Monday) 1220 | : "☿" U263F # MERCURY (Wednesday) 1221 | # We already have Venus (Friday) and Mars (Tuesday) as Male/Female signs; do we need them here too? 1222 | # : "♀" U2640 # FEMALE SIGN 1223 | # : "♂" U2642 # MALE SIGN 1224 |

: "♃" U2643 # JUPITER (Thursday) 1225 | : "♄" U2644 # SATURN (Saturday) 1226 | : "♅" U2645 # URANUS (or ⛢ U26E2?) 1227 |

: "♆" U2646 # NEPTUNE 1228 |

: "♇" U2647 # PLUTO (ok, it isn't a planet anymore, but we still love it.) 1229 | # Minor planets, whilst we're at it? 1230 | : "⚳" U26B3 # CERES 1231 |

: "⚴" U26B4 # PALLAS 1232 | : "⚵" U26B5 # JUNO 1233 | : "⚶" U26B6 # VESTA 1234 | : "⚷" U26B7 # CHIRON 1235 | : "⚸" U26B8 # BLACK MOON LILITH 1236 | : "⚿" U26BF # SQUARED KEY 1237 | 1238 | # Unicode 6.0 gave us all kinds of things, perhaps more than we can use... 1239 | 1240 | # Playing Cards? It's a lot, but so what? I don't think the [] convention 1241 | # will conflict with anything. 1242 | # The convention is more or less established, except for the Knight. I'm 1243 | # using N for that, like in Chess, since K would conflict with King of course. 1244 | 1245 | : "🂡" U1F0A1 # PLAYING CARD ACE OF SPADES 1246 | <2> : "🂢" U1F0A2 # PLAYING CARD TWO OF SPADES 1247 | <3> : "🂣" U1F0A3 # PLAYING CARD THREE OF SPADES 1248 | <4> : "🂤" U1F0A4 # PLAYING CARD FOUR OF SPADES 1249 | <5> : "🂥" U1F0A5 # PLAYING CARD FIVE OF SPADES 1250 | <6> : "🂦" U1F0A6 # PLAYING CARD SIX OF SPADES 1251 | <7> : "🂧" U1F0A7 # PLAYING CARD SEVEN OF SPADES 1252 | <8> : "🂨" U1F0A8 # PLAYING CARD EIGHT OF SPADES 1253 | <9> : "🂩" U1F0A9 # PLAYING CARD NINE OF SPADES 1254 | : "🂪" U1F0AA # PLAYING CARD TEN OF SPADES 1255 | : "🂫" U1F0AB # PLAYING CARD JACK OF SPADES 1256 | : "🂬" U1F0AC # PLAYING CARD KNIGHT OF SPADES 1257 | : "🂭" U1F0AD # PLAYING CARD QUEEN OF SPADES 1258 | : "🂮" U1F0AE # PLAYING CARD KING OF SPADES 1259 | 1260 | : "🂱" U1F0B1 # PLAYING CARD ACE OF HEARTS 1261 | <2> : "🂲" U1F0B2 # PLAYING CARD TWO OF HEARTS 1262 | <3> : "🂳" U1F0B3 # PLAYING CARD THREE OF HEARTS 1263 | <4> : "🂴" U1F0B4 # PLAYING CARD FOUR OF HEARTS 1264 | <5> : "🂵" U1F0B5 # PLAYING CARD FIVE OF HEARTS 1265 | <6> : "🂶" U1F0B6 # PLAYING CARD SIX OF HEARTS 1266 | <7> : "🂷" U1F0B7 # PLAYING CARD SEVEN OF HEARTS 1267 | <8> : "🂸" U1F0B8 # PLAYING CARD EIGHT OF HEARTS 1268 | <9> : "🂹" U1F0B9 # PLAYING CARD NINE OF HEARTS 1269 | : "🂺" U1F0BA # PLAYING CARD TEN OF HEARTS 1270 | : "🂻" U1F0BB # PLAYING CARD JACK OF HEARTS 1271 | : "🂼" U1F0BC # PLAYING CARD KNIGHT OF HEARTS 1272 | : "🂽" U1F0BD # PLAYING CARD QUEEN OF HEARTS 1273 | : "🂾" U1F0BE # PLAYING CARD KING OF HEARTS 1274 | 1275 | : "🃁" U1F0C1 # PLAYING CARD ACE OF DIAMONDS 1276 | <2> : "🃂" U1F0C2 # PLAYING CARD TWO OF DIAMONDS 1277 | <3> : "🃃" U1F0C3 # PLAYING CARD THREE OF DIAMONDS 1278 | <4> : "🃄" U1F0C4 # PLAYING CARD FOUR OF DIAMONDS 1279 | <5> : "🃅" U1F0C5 # PLAYING CARD FIVE OF DIAMONDS 1280 | <6> : "🃆" U1F0C6 # PLAYING CARD SIX OF DIAMONDS 1281 | <7> : "🃇" U1F0C7 # PLAYING CARD SEVEN OF DIAMONDS 1282 | <8> : "🃈" U1F0C8 # PLAYING CARD EIGHT OF DIAMONDS 1283 | <9> : "🃉" U1F0C9 # PLAYING CARD NINE OF DIAMONDS 1284 | : "🃊" U1F0CA # PLAYING CARD TEN OF DIAMONDS 1285 | : "🃋" U1F0CB # PLAYING CARD JACK OF DIAMONDS 1286 | : "🃌" U1F0CC # PLAYING CARD KNIGHT OF DIAMONDS 1287 | : "🃍" U1F0CD # PLAYING CARD QUEEN OF DIAMONDS 1288 | : "🃎" U1F0CE # PLAYING CARD KING OF DIAMONDS 1289 | 1290 | : "🃑" U1F0D1 # PLAYING CARD ACE OF CLUBS 1291 | <2> : "🃒" U1F0D2 # PLAYING CARD TWO OF CLUBS 1292 | <3> : "🃓" U1F0D3 # PLAYING CARD THREE OF CLUBS 1293 | <4> : "🃔" U1F0D4 # PLAYING CARD FOUR OF CLUBS 1294 | <5> : "🃕" U1F0D5 # PLAYING CARD FIVE OF CLUBS 1295 | <6> : "🃖" U1F0D6 # PLAYING CARD SIX OF CLUBS 1296 | <7> : "🃗" U1F0D7 # PLAYING CARD SEVEN OF CLUBS 1297 | <8> : "🃘" U1F0D8 # PLAYING CARD EIGHT OF CLUBS 1298 | <9> : "🃙" U1F0D9 # PLAYING CARD NINE OF CLUBS 1299 | : "🃚" U1F0DA # PLAYING CARD TEN OF CLUBS 1300 | : "🃛" U1F0DB # PLAYING CARD JACK OF CLUBS 1301 | : "🃜" U1F0DC # PLAYING CARD KNIGHT OF CLUBS 1302 | : "🃝" U1F0DD # PLAYING CARD QUEEN OF CLUBS 1303 | : "🃞" U1F0DE # PLAYING CARD KING OF CLUBS 1304 | 1305 | : "🂠" U1F0A0 # PLAYING CARD BACK 1306 | : "🃏" U1F0CF # PLAYING CARD BLACK JOKER 1307 | : "🃟" U1F0DF # PLAYING CARD WHITE JOKER 1308 | 1309 | # Do we want domino bones also? I'm thinking [ 1 1 ], etc, maybe use 1310 | # ] 1 1 [ for vertical (or vice-versa) 1311 | 1312 | # And chess/checkers pieces! We need a convention for those. # looks like a 1313 | # checkerboard but we're already using that for music. Half of it? 1314 | # will be an issue when we want double-struck W or B... we'll have 1315 | # to consider it. Maybe replace with 1316 | : "♔" U2654 # WHITE CHESS KING 1317 | : "♕" U2655 # WHITE CHESS QUEEN 1318 | : "♖" U2656 # WHITE CHESS ROOK 1319 | : "♗" U2657 # WHITE CHESS BISHOP 1320 | : "♘" U2658 # WHITE CHESS KNIGHT 1321 |

: "♙" U2659 # WHITE CHESS PAWN 1322 | : "♚" U265A # BLACK CHESS KING 1323 | : "♛" U265B # BLACK CHESS QUEEN 1324 | : "♜" U265C # BLACK CHESS ROOK 1325 | : "♝" U265D # BLACK CHESS BISHOP 1326 | : "♞" U265E # BLACK CHESS KNIGHT 1327 |

: "♟" U265F # BLACK CHESS PAWN 1328 | : "⛀" U26C0 # WHITE DRAUGHTS MAN 1329 | : "⛁" U26C1 # WHITE DRAUGHTS KING 1330 | : "⛂" U26C2 # BLACK DRAUGHTS MAN 1331 | : "⛃" U26C3 # BLACK DRAUGHTS KING 1332 | # Since we're doing game pieces, might as well. 1333 | : "☖" U2616 # WHITE SHOGI PIECE 1334 | : "☗" U2617 # BLACK SHOGI PIECE 1335 | # It's turned vertically and not horizontally reflected, but we use the < 1336 | # symbol for turning... 1337 | : "⛉" U26C9 # TURNED WHITE SHOGI PIECE 1338 | : "⛊" U26CA # TURNED BLACK SHOGI PIECE 1339 | 1340 | # As for the emoji... We can't possibly get all of them, even just all of the 1341 | # cool/useful ones. Maybe we can pick and choose some high-fliers. 1342 | 1343 | : "°" U00B0 # DEGREE SIGN 1344 | : "℃" U2103 # DEGREE CELSIUS 1345 | : "℃" U2103 # DEGREE CELSIUS 1346 | : "℉" U2109 # DEGREE FAHRENHEIT 1347 | : "℉" U2109 # DEGREE FAHRENHEIT 1348 | 1349 | # Zodiacal symbols? 1350 | : "♈" U2648 # ARIES 1351 | : "♉" U2649 # TAURUS 1352 | : "♊" U264A # GEMINI 1353 | : "♋" U264B # CANCER 1354 | : "♌" U264C # LEO 1355 | : "♍" U264D # VIRGO 1356 | : "♎" U264E # LIBRA 1357 | # Abbreviating some of the longer ones. 1358 |

: "♏" U264F # SCORPIUS 1359 | : "♐" U2650 # SAGITTARIUS 1360 |

: "♑" U2651 # CAPRICORN 1361 | : "♒" U2652 # AQUARIUS 1362 |

: "♓" U2653 # PISCES 1363 | # Really, this should be SERPENTARIUS. All the other signs are in Latin. 1364 |

: "⛎" U26CE # OPHIUCHUS 1365 | 1366 | # Sigh. So many emoji... I think the first ones I'd go for would be 1367 | # 💡💢💣💤💥💦💧💨💫 (1F4A1-1F4A8 and 1F4AB). Maybe 1F550-1F567 are useful. 1368 | : "💡" U1F4A1 # ELECTRIC LIGHT BULB 1369 | : "💢" U1F4A2 # ANGER SYMBOL 1370 | : "💣" U1F4A3 # BOMB 1371 | : "💤" U1F4A4 # SLEEPING SYMBOL 1372 |

: "💥" U1F4A5 # COLLISION SYMBOL 1373 | : "💦" U1F4A6 # SPLASHING SWEAT SYMBOL 1374 |

: "💧" U1F4A7 # DROPLET 1375 |

: "💨" U1F4A8 # DASH SYMBOL 1376 |

: "💩" U1F4A9 # PILE OF POO 1377 | # Skipping U+1F4AA just now. 1378 | : "💫" U1F4AB # DIZZY SYMBOL 1379 | : "💰" U1F4B0 # MONEY BAG 1380 | : "🍰" U1F370 # SHORTCAKE 1381 | # The cake is a lie... OK, too cutesy? 1382 | : "🎂" U1F382 # BIRTHDAY CAKE 1383 | : "🎂" U1F382 # BIRTHDAY CAKE 1384 | : "👌" U1F44C # OK HAND SIGN 1385 |

: "👍" U1F44D # THUMBS UP SIGN 1386 | : "👎" U1F44E # THUMBS DOWN SIGN 1387 | # More useful in chat than U+1F48F KISS 1388 | : "💋" U1F48B # KISS MARK 1389 | : "⛔" U26D4 # NO ENTRY 1390 | # So many hearts... I'm not touching them for now. 1391 | # And emoticons? (U+1F600 et seq) -- Moved to their own file. 1392 | 1393 | <1> <0> <0> : "🕐" U1F550 # CLOCK FACE ONE OCLOCK 1394 | <2> <0> <0> : "🕑" U1F551 # CLOCK FACE TWO OCLOCK 1395 | <3> <0> <0> : "🕒" U1F552 # CLOCK FACE THREE OCLOCK 1396 | <4> <0> <0> : "🕓" U1F553 # CLOCK FACE FOUR OCLOCK 1397 | <5> <0> <0> : "🕔" U1F554 # CLOCK FACE FIVE OCLOCK 1398 | <6> <0> <0> : "🕕" U1F555 # CLOCK FACE SIX OCLOCK 1399 | <7> <0> <0> : "🕖" U1F556 # CLOCK FACE SEVEN OCLOCK 1400 | <8> <0> <0> : "🕗" U1F557 # CLOCK FACE EIGHT OCLOCK 1401 | <9> <0> <0> : "🕘" U1F558 # CLOCK FACE NINE OCLOCK 1402 | <1> <0> <0> <0> : "🕙" U1F559 # CLOCK FACE TEN OCLOCK 1403 | <1> <1> <0> <0> : "🕚" U1F55A # CLOCK FACE ELEVEN OCLOCK 1404 | <1> <2> <0> <0> : "🕛" U1F55B # CLOCK FACE TWELVE OCLOCK 1405 | 1406 | <1> <3> <0> : "🕜" U1F55C # CLOCK FACE ONE-THIRTY 1407 | <2> <3> <0> : "🕝" U1F55D # CLOCK FACE TWO-THIRTY 1408 | <3> <3> <0> : "🕞" U1F55E # CLOCK FACE THREE-THIRTY 1409 | <4> <3> <0> : "🕟" U1F55F # CLOCK FACE FOUR-THIRTY 1410 | <5> <3> <0> : "🕠" U1F560 # CLOCK FACE FIVE-THIRTY 1411 | <6> <3> <0> : "🕡" U1F561 # CLOCK FACE SIX-THIRTY 1412 | <7> <3> <0> : "🕢" U1F562 # CLOCK FACE SEVEN-THIRTY 1413 | <8> <3> <0> : "🕣" U1F563 # CLOCK FACE EIGHT-THIRTY 1414 | <9> <3> <0> : "🕤" U1F564 # CLOCK FACE NINE-THIRTY 1415 | <1> <0> <3> <0> : "🕥" U1F565 # CLOCK FACE TEN-THIRTY 1416 | <1> <1> <3> <0> : "🕦" U1F566 # CLOCK FACE ELEVEN-THIRTY 1417 | <1> <2> <3> <0> : "🕧" U1F567 # CLOCK FACE TWELVE-THIRTY 1418 | # Real bitcoin symbol now. 1419 | : "₿" U20BF # BITCOIN SIGN 1420 | -------------------------------------------------------------------------------- /mappings/xcompose.yaml: -------------------------------------------------------------------------------- 1 | "..": "…" # HORIZONTAL ELLIPSIS 2 | "v..": "⋮" # VERTICAL ELLIPSIS 3 | "c..": "⋯" # MIDLINE HORIZONTAL ELLIPSIS 4 | "/..": "⋰" # UP RIGHT DIAGONAL ELLIPSIS 5 | ".\\.": "⋱" # DOWN RIGHT DIAGONAL ELLIPSIS 6 | "2.": "‥" # TWO DOT LEADER 7 | "c1.": "·" # MIDDLE DOT (maybe I can remember the keystroke better? 8 | "./.": "⁒" # COMMERCIAL MINUS SIGN 9 | "&@": "⅋" # TURNED AMPERSAND 10 | "&7": "⁊" # TIRONIAN SIGN ET 11 | "\\ ": "␣" # OPEN BOX 12 | "-- ": "– " # EN DASH (followed by space) 13 | "-~-": "―" # HORIZONTAL BAR 14 | "-2M": "⸺" # TWO-EM DASH 15 | "-3M": "⸻" # THREE-EM DASH 16 | "\\-": "­" # SOFT HYPHEN 17 | " -": " — " # EM DASH surrounded by THIN SPACEs. 18 | ", ": "‚" # SINGLE LOW-9 QUOTATION MARK 19 | ",,": "„" # DOUBLE LOW-9 QUOTATION MARK 20 | "<,,": "⹂" # DOUBLE LOW-REVERSED-9 QUOTATION MARK 21 | "' ": "’" # RIGHT SINGLE QUOTATION MARK 22 | "''": "”" # RIGHT DOUBLE QUOTATION MARK 23 | "` ": "‘" # LEFT SINGLE QUOTATION MARK 24 | "``": "“" # LEFT DOUBLE QUOTATION MARK 25 | "6'": "‘" # LEFT SINGLE QUOTATION MARK (high 6) 26 | "6\"": "“" # LEFT DOUBLE QUOTATION MARK (66) 27 | "9'": "’" # RIGHT SINGLE QUOTATION MARK (high 9) 28 | "9\"": "”" # RIGHT DOUBLE QUOTATION MARK (99) 29 | "<9'": "‛" # SINGLE HIGH-REVERSED-9 QUOTATION MARK 30 | "<9\"": "‟" # DOUBLE HIGH-REVERSED-9 QUOTATION MARK 31 | ",'": "‚" # SINGLE LOW-9 QUOTATION MARK (quote resembling a comma) 32 | ",\"": "„" # DOUBLE LOW-9 QUOTATION MARK 33 | " \"": " “" # space followed by LEFT DOUBLE QUOTATION MARK 34 | "\" ": "” " # RIGHT DOUBLE QUOTATION MARK followed by space 35 | " '": " ‘" # space followed by LEFT SINGLE QUOTATION MARK 36 | "nt": "n’t " # Apostrophized English “not.” 37 | " t": " the " 38 | " T": " The " 39 | " a": " and " 40 | "im": " I’m " 41 | "ve": "’ve " 42 | ",@": "⸲" # TURNED COMMA 43 | ".^": "⸳" # RAISED DOT 44 | ".~": "⸳" # RAISED DOT 45 | ",^": "⸴" # RAISED COMMA 46 | ";@": "⸵" # TURNED SEMICOLON 47 | "~|": "ⸯ" # VERTICAL TILDE 48 | "^|": "ⸯ" # VERTICAL TILDE 49 | "-=": "⹀" # DOUBLE HYPHEN 50 | ",<": "⹁" # REVERSED COMMA 51 | "<|": "↵" # DOWNWARDS ARROW WITH CORNER LEFTWARDS 52 | "*1": "•" # BULLET 53 | "o_": "⁃" # HYPHEN BULLET 54 | "o,": "·" # MIDDLE DOT 55 | " n": " " # NARROW NO-BREAK SPACE 56 | " #": " " # FIGURE SPACE 57 | "\\,": " " # THIN SPACE 58 | " |": " " # HAIR SPACE 59 | "dag": "†" # DAGGER 60 | "ddag": "‡" # DOUBLE DAGGER 61 | "sec": "§" # SECTION SIGN 62 | "\"\"": "〃" # DITTO MARK 63 | "7^[": "⸢" # TOP LEFT HALF BRACKET 64 | "7^]": "⸣" # TOP RIGHT HALF BRACKET 65 | "L_[": "⸤" # BOTTOM LEFT HALF BRACKET 66 | "L_]": "⸥" # BOTTOM RIGHT HALF BRACKET 67 | "-<": "←" # LEFTWARDS ARROW 68 | "-^": "↑" # UPWARDS ARROW 69 | "->": "→" # RIGHTWARDS ARROW 70 | "-v": "↓" # DOWNWARDS ARROW 71 | "<->": "↔" # LEFT RIGHT ARROW (kragen's) 72 | "zz>": "↯" # DOWNWARDS ZIGZAG ARROW 73 | "fv": "✌" # VICTORY HAND 74 | "fw": "✍" # WRITING HAND 75 | "=>": "⇒" # RIGHTWARDS DOUBLE ARROW 76 | "=<": "⇐" # LEFTWARDS DOUBLE ARROW 77 | "<-=>": "⇔" # LEFT RIGHT DOUBLE ARROW 78 | "=.=": "⸎" # EDITORIAL CORONIS 79 | "palm": "⸙" # PALM BRANCH 80 | "branch": "⸙" # PALM BRANCH 81 | "ff": "ff" # LATIN SMALL LIGATURE FF 82 | "fi": "fi" # LATIN SMALL LIGATURE FI 83 | "Fi": "ffi" # LATIN SMALL LIGATURE FFI 84 | "fl": "fl" # LATIN SMALL LIGATURE FL 85 | "Fl": "ffl" # LATIN SMALL LIGATURE FFL 86 | "st": "st" # LATIN SMALL LIGATURE ST 87 | "ft": "ſt" # LATIN SMALL LIGATURE LONG S T 88 | "ſt": "ſt" # LATIN SMALL LIGATURE LONG S T 89 | "SS": "ẞ" # LATIN CAPITAL LETTER SHARP S 90 | "F<": "ꟻ" # LATIN EPIGRAPHIC LETTER REVERSED F 91 | "P<": "ꟼ" # LATIN EPIGRAPHIC LETTER REVERSED P 92 | "FF": "Ⅎ" # TURNED CAPITAL F 93 | "Ff": "ⅎ" # TURNED SMALL F 94 | "MW": "ꟽ" # LATIN EPIGRAPHIC LETTER INVERTED M 95 | "MM": "Ɯ" # LATIN CAPITAL LETTER TURNED M 96 | "I|": "ꟾ" # LATIN EPIGRAPHIC LETTER I LONGA 97 | "M/": "ꟿ" # LATIN EPIGRAPHIC LETTER ARCHAIC M 98 | "22": "↊" # TURNED DIGIT TWO 99 | "33": "↋" # TURNED DIGIT THREE 100 | "E<": "Ǝ" # LATIN CAPITAL LETTER REVERSED E 101 | "e<": "ɘ" # LATIN SMALL LETTER REVERSED E 102 | "A<": "Ɐ" # LATIN CAPITAL LETTER TURNED A 103 | "o&o": "ꝏ" # LATIN SMALL LETTER OO 104 | "O&O": "Ꝏ" # LATIN CAPITAL LETTER OO 105 | "2o": "ꝏ" # LATIN SMALL LETTER OO 106 | "2O": "Ꝏ" # LATIN CAPITAL LETTER OO 107 | "A&A": "Ꜳ" # LATIN CAPITAL LETTER AA 108 | "a&a": "ꜳ" # LATIN SMALL LETTER AA 109 | "2A": "Ꜳ" # LATIN CAPITAL LETTER AA 110 | "2a": "ꜳ" # LATIN SMALL LETTER AA 111 | "A&O": "Ꜵ" # LATIN CAPITAL LETTER AO 112 | "a&o": "ꜵ" # LATIN SMALL LETTER AO 113 | "A&U": "Ꜷ" # LATIN CAPITAL LETTER AU 114 | "a&u": "ꜷ" # LATIN SMALL LETTER AU 115 | "A&V": "Ꜹ" # LATIN CAPITAL LETTER AV 116 | "a&v": "ꜹ" # LATIN SMALL LETTER AV 117 | "A&Y": "Ꜽ" # LATIN CAPITAL LETTER AY 118 | "a&y": "ꜽ" # LATIN SMALL LETTER AY 119 | "/&L": "Ꝇ" # LATIN CAPITAL LETTER BROKEN L 120 | "/&l": "ꝇ" # LATIN SMALL LETTER BROKEN L 121 | "Z.": "Ꝫ" # LATIN CAPITAL LETTER ET 122 | "z.": "ꝫ" # LATIN SMALL LETTER ET 123 | "V&Y": "Ꝡ" # LATIN CAPITAL LETTER VY 124 | "v&y": "ꝡ" # LATIN SMALL LETTER VY 125 | "CZ": "Ꝣ" # LATIN CAPITAL LETTER VISIGOTHIC Z 126 | "cz": "ꝣ" # LATIN SMALL LETTER VISIGOTHIC Z 127 | "L&L": "Ỻ" # LATIN CAPITAL LETTER MIDDLE-WELSH LL 128 | "l&l": "ỻ" # LATIN SMALL LETTER MIDDLE-WELSH LL 129 | "V&V": "Ỽ" # LATIN CAPITAL LETTER MIDDLE-WELSH V 130 | "v&v": "ỽ" # LATIN SMALL LETTER MIDDLE-WELSH V 131 | "d&b": "ȸ" # LATIN SMALL LETTER DB DIGRAPH 132 | "q&p": "ȹ" # LATIN SMALL LETTER QP DIGRAPH 133 | "wy": "ƿ" # LATIN LETTER WYNN 134 | "WY": "Ƿ" # LATIN CAPITAL LETTER WYNN 135 | "OU": "Ȣ" # LATIN CAPITAL LETTER OU 136 | "ou": "ȣ" # LATIN SMALL LETTER OU 137 | "yr": "Ʀ" # LATIN LETTER YR 138 | "ro": "ꝛ" # LATIN SMALL LETTER R ROTUNDA 139 | "r0": "ꝛ" # LATIN SMALL LETTER R ROTUNDA 140 | "RO": "Ꝛ" # LATIN CAPITAL LETTER R ROTUNDA 141 | "R0": "Ꝛ" # LATIN CAPITAL LETTER R ROTUNDA 142 | "!=": "≠" # NOT EQUAL TO 143 | "/=": "≠" # NOT EQUAL TO 144 | "<=": "≤" # LESS-THAN OR EQUAL TO 145 | ">=": "≥" # GREATER-THAN OR EQUAL TO 146 | "!<>": "≸" # NEITHER LESS-THAN NOR GREATER-THAN 147 | "+<": "≪" # MUCH LESS-THAN 148 | "+>": "≫" # MUCH GREATER-THAN 149 | "++<": "⋘" # VERY MUCH LESS-THAN 150 | "++>": "⋙" # VERY MUCH GREATER-THAN 151 | "3>": "⋙" # VERY MUCH GREATER-THAN 152 | "3<": "⋘" # VERY MUCH LESS-THAN 153 | "in": "∈" # ELEMENT OF 154 | "!in": "∉" # NOT AN ELEMENT OF 155 | "∈/": "∉" # NOT AN ELEMENT OF (I have ∈ on my keyboard...) 156 | ".∈": "∊" # SMALL ELEMENT OF 157 | ".∋": "∍" # SMALL CONTAINS AS MEMBER 158 | "ni": "∋" # CONTAINS AS MEMBER (I hope this doesn't conflict) 159 | "/ni": "∌" # DOES NOT CONTAIN AS MEMBER 160 | "∋/": "∌" # DOES NOT CONTAIN AS MEMBER 161 | "~=": "≅" # APPROXIMATELY EQUAL TO (It actually means "congruent"!) 162 | "=?": "≟" # QUESTIONED EQUAL TO 163 | "=def": "≝" # EQUAL TO BY DEFINITION 164 | "def=": "≝" # EQUAL TO BY DEFINITION 165 | "==": "≡" # IDENTICAL TO 166 | ":=": "≔" # COLON EQUALS 167 | "=:": "≕" # EQUALS COLON 168 | "2=": "⩵" # TWO CONSECUTIVE EQUALS SIGNS 169 | "=&=": "⩵" # TWO CONSECUTIVE EQUALS SIGNS 170 | "3=": "⩶" # THREE CONSECUTIVE EQUALS SIGNS 171 | "=|=": "≢" # NOT IDENTICAL TO 172 | "-+": "∓" # MINUS OR PLUS SIGN 173 | "sq": "√" # SQUARE ROOT 174 | "3sq": "∛" # CUBE ROOT 175 | "4sq": "∜" # FOURTH ROOT 176 | "/\\": "∧" # LOGICAL AND 177 | "\\/": "∨" # LOGICAL OR 178 | "\\_/": "⊻" # XOR 179 | "-,": "¬" # NOT SIGN 180 | "*o": "∘" # RING OPERATOR (function composition) 181 | "*x": "⨯" # CROSS PRODUCT 182 | "*.": "⋅" # DOT OPERATOR (dot product) 183 | "0/": "∅" # EMPTY SET (thanks jsled!) 184 | "/0": "∅" # EMPTY SET 185 | "{U": "∪" # UNION 186 | "{^": "∩" # INTERSECTION 187 | "{(": "⊂" # SUBSET OF 188 | "{=(": "⊆" # SUBSET OF OR EQUAL TO 189 | "!{(": "⊄" # NOT A SUBSET OF 190 | "/{(": "⊄" # NOT A SUBSET OF 191 | "!{)": "⊅" # NOT A SUPERSET OF 192 | "/{)": "⊅" # NOT A SUPERSET OF 193 | "{)": "⊃" # SUPERSET OF 194 | "{=)": "⊇" # SUPERSET OF OR EQUAL TO 195 | "EE": "∃" # THERE EXISTS 196 | "/EE": "∄" # THERE DOES NOT EXIST 197 | "AA": "∀" # FOR ALL 198 | "QED": "∎" # END OF PROOF 199 | "88": "∞" # INFINITY 200 | "aleph": "ℵ" # ALEF SYMBOL 201 | "alep0": "ℵ₀" # ALEF Null 202 | "alep1": "ℵ₁" # ALEF One 203 | "alef": "ℵ" # ALEF SYMBOL 204 | "**": "∗" # ASTERISK OPERATOR 205 | "(+)": "⊕" # CIRCLED PLUS 206 | "(-)": "⊖" # CIRCLED MINUS 207 | "(xx)": "⊗" # CIRCLED TIMES 208 | "(/)": "⊘" # CIRCLED DIVISION SLASH 209 | "(*)": "⊛" # CIRCLED ASTERISK OPERATOR 210 | ")_": "⟌" # LONG DIVISION 211 | ".\"": "∴" # THEREFORE 212 | "there4": "∴" # THEREFORE 213 | "\".": "∵" # BECAUSE 214 | "because": "∵" # BECAUSE 215 | "%%": "‱" # PER TEN THOUSAND (basis points) 216 | "/u": "µ" # MICRO SIGN 217 | "-a": "ª" # FEMININE ORDINAL INDICATOR 218 | "-o": "º" # MASCULINE ORDINAL INDICATOR 219 | "sum": "∑" # N-ARY SUMMATION 220 | "int": "∫" # INTEGRAL 221 | "uint": "⨛" # UPPER INTEGRAL 222 | "lint": "⨜" # LOWER INTEGRAL 223 | "iint": "∬" # DOUBLE INTEGRAL 224 | "iiint": "∭" # TRIPLE INTEGRAL 225 | "iiiint": "⨌" # QUADRUPLE INTEGRAL 226 | "oint": "∮" # CONTOUR INTEGRAL 227 | "pint": "⨕" # INTEGRAL AROUND A POINT OPERATOR 228 | "cPint": "⨓" # LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE 229 | "oiint": "∯" # SURFACE INTEGRAL 230 | "oiiint": "∰" # VOLUME INTEGRAL 231 | "gint": "⨘" # GEOMETRIC INTEGRAL 232 | "sint": "⨋" # SUM/INTEGRAL 233 | "del": "∇" # NABLA 234 | "part": "∂" # PARTIAL DIFFERENTIAL 235 | "*..d": "∂" # PARTIAL DIFFERENTIAL 236 | "Re": "ℜ" # BLACK-LETTER CAPITAL R (Real Part) 237 | "Im": "ℑ" # BLACK-LETTER CAPTIAL I (Imaginary Part) 238 | "hbar": "ℏ" # PLANCK CONSTANT OVER TWO PI 239 | "h-": "ℏ" # PLANCK CONSTANT OVER TWO PI 240 | "hp": "ℎ" # PLANCK CONSTANT 241 | "exp": "ℯ" # SCRIPT SMALL E 242 | "e10": "⏨" # DECIMAL EXPONENT SYMBOL 243 | "wp": "℘" # SCRIPT CAPITAL P 244 | "^>": "⃗" # COMBINING RIGHT ARROW ABOVE (vector) 245 | "|C": "ℂ" # DOUBLE-STRUCK CAPITAL C (set of complex numbers) 246 | "|N": "ℕ" # DOUBLE-STRUCK CAPITAL N (natural number) 247 | "|P": "ℙ" # DOUBLE-STRUCK CAPITAL P 248 | "|Q": "ℚ" # DOUBLE-STRUCK CAPITAL Q (set of rational numbers) 249 | "|R": "ℝ" # DOUBLE-STRUCK CAPITAL R (set of real numbers) 250 | "|Z": "ℤ" # DOUBLE-STRUCK CAPITAL Z (set of integers) 251 | "|H": "ℍ" # DOUBLE-STRUCK CAPITAL H 252 | "|e": "ⅇ" # DOUBLE-STRUCK ITALIC SMALL E 253 | "|i": "ⅈ" # DOUBLE-STRUCK ITALIC SMALL I 254 | "|j": "ⅉ" # DOUBLE-STRUCK ITALIC SMALL J 255 | "|*p": "ℼ" # DOUBLE-STRUCK SMALL PI 256 | "|*P": "ℿ" # DOUBLE-STRUCK CAPITAL PI 257 | "|*S": "⅀" # DOUBLE-STRUCK N-ARY SUMMATION 258 | "|:": "⦂" # Z NOTATION TYPE COLON 259 | "|;": "⨾" # Z NOTATION RELATIONAL COMPOSITION 260 | "|{": "⦃" # LEFT WHITE CURLY BRACKET 261 | "|}": "⦄" # RIGHT WHITE CURLY BRACKET 262 | "S(": "⟅" # LEFT S-SHAPED BAG DELIMITER 263 | "S)": "⟆" # RIGHT S-SHAPED BAG DELIMITER 264 | "E[": "⁅" # LEFT SQUARE BRACKET WITH QUILL 265 | "E]": "⁆" # RIGHT SQUARE BRACKET WITH QUILL 266 | "<(": "⟨" # MATHEMATICAL LEFT ANGLE BRACKET 267 | ">)": "⟩" # MATHEMATICAL RIGHT ANGLE BRACKET 268 | "|[": "⟦" # MATHEMATICAL LEFT WHITE SQUARE BRACKET 269 | "|]": "⟧" # MATHEMATICAL RIGHT WHITE SQUARE BRACKET 270 | "2<(": "⟪" # MATHEMATICAL LEFT DOUBLE ANGLE BRACKET 271 | "2>)": "⟫" # MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET 272 | "||(": "⟬" # MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET 273 | "||)": "⟭" # MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET 274 | "__(": "⟮" # MATHEMATICAL LEFT FLATTENED PARENTHESIS 275 | "__)": "⟯" # MATHEMATICAL RIGHT FLATTENED PARENTHESIS 276 | "([": "⦗" # LEFT BLACK TORTOISE SHELL BRACKET 277 | ")]": "⦘" # RIGHT BLACK TORTOISE SHELL BRACKET 278 | "%(": "⧘" # LEFT WIGGLY FENCE 279 | "%)": "⧙" # RIGHT WIGGLY FENCE 280 | "2%(": "⧚" # LEFT DOUBLE WIGGLY FENCE 281 | "2%)": "⧛" # RIGHT DOUBLE WIGGLY FENCE 282 | "(&(": "⸨" # LEFT DOUBLE PARENTHESIS 283 | ")&)": "⸩" # RIGHT DOUBLE PARENTHESIS 284 | "2(": "⸨" # LEFT DOUBLE PARENTHESIS 285 | "2)": "⸩" # RIGHT DOUBLE PARENTHESIS 286 | "Z(": "༼" # TIBETAN MARK ANG KHANG GYON 287 | "Z)": "༽" # TIBETAN MARK ANG KHANG GYAS 288 | "L[": "⌊" # LEFT FLOOR 289 | "L]": "⌋" # RIGHT FLOOR 290 | "7[": "⌈" # LEFT CEILING 291 | "7]": "⌉" # RIGHT CEILING 292 | "7'": "「" # HALFWIDTH LEFT CORNER BRACKET 293 | "L'": "」" # HALFWIDTH RIGHT CORNER BRACKET 294 | "7\"": "『" # LEFT WHITE CORNER BRACKET 295 | "L\"": "』" # RIGHT WHITE CORNER BRACKET 296 | "7(": "⌜" # TOP LEFT CORNER 297 | "7)": "⌝" # TOP RIGHT CORNER 298 | "L(": "⌞" # BOTTOM LEFT CORNER 299 | "L)": "⌟" # BOTTOM RIGHT CORNER 300 | "(&)": "≬" # BETWEEN 301 | "ll": "ℓ" # SCRIPT SMALL L 302 | "[[": "⊏" # SQUARE IMAGE OF 303 | "[=": "⊑" # SQUARE IMAGE OF OR EQUAL TO 304 | "[_": "⊑" # SQUARE IMAGE OF OR EQUAL TO 305 | "]]": "⊐" # SQUARE ORIGINAL OF 306 | "]=": "⊒" # SQUARE ORIGINAL OF OR EQUAL TO 307 | "]_": "⊒" # SQUARE ORIGINAL OF OR EQUAL TO 308 | "_|_": "⊥" # UP TACK (bottom) or should we use U27C2 PERPENDICULAR? 309 | "_!_": "⊤" # DOWN TACK (opposite of False) 310 | "_>_": "⊢" # RIGHT TACK 311 | "_<_": "⊣" # LEFT TACK 312 | "//": "⁄" # FRACTION SLASH 313 | "_0": "₀" # SUBSCRIPT ZERO 314 | "_1": "₁" # SUBSCRIPT ONE 315 | "_2": "₂" # SUBSCRIPT TWO 316 | "_3": "₃" # SUBSCRIPT THREE 317 | "_4": "₄" # SUBSCRIPT FOUR 318 | "_5": "₅" # SUBSCRIPT FIVE 319 | "_6": "₆" # SUBSCRIPT SIX 320 | "_7": "₇" # SUBSCRIPT SEVEN 321 | "_8": "₈" # SUBSCRIPT EIGHT 322 | "_9": "₉" # SUBSCRIPT NONE 323 | "_+": "₊" # SUBSCRIPT PLUS 324 | "_-": "₋" # SUBSCRIPT MINUS 325 | "_=": "₌" # SUBSCRIPT EQUALS SIGN 326 | "_(": "₍" # SUBSCRIPT LEFT PARENTHESIS 327 | "_)": "₎" # SUBSCRIPT RIGHT PARENTHESIS 328 | "_a": "ₐ" # LATIN SUBSCRIPT SMALL LETTER A 329 | "_e": "ₑ" # LATIN SUBSCRIPT SMALL LETTER E 330 | "_o": "ₒ" # LATIN SUBSCRIPT SMALL LETTER O 331 | "_x": "ₓ" # LATIN SUBSCRIPT SMALL LETTER X 332 | "_h": "ₕ" # LATIN SUBSCRIPT SMALL LETTER H 333 | "_k": "ₖ" # LATIN SUBSCRIPT SMALL LETTER K 334 | "_l": "ₗ" # LATIN SUBSCRIPT SMALL LETTER L 335 | "_m": "ₘ" # LATIN SUBSCRIPT SMALL LETTER M 336 | "_n": "ₙ" # LATIN SUBSCRIPT SMALL LETTER N 337 | "_p": "ₚ" # LATIN SUBSCRIPT SMALL LETTER P 338 | "_s": "ₛ" # LATIN SUBSCRIPT SMALL LETTER S 339 | "_t": "ₜ" # LATIN SUBSCRIPT SMALL LETTER T 340 | "_i": "ᵢ" # LATIN SUBSCRIPT SMALL LETTER I 341 | "_j": "ⱼ" # LATIN SUBSCRIPT SMALL LETTER J 342 | "_r": "ᵣ" # LATIN SUBSCRIPT SMALL LETTER R 343 | "_u": "ᵤ" # LATIN SUBSCRIPT SMALL LETTER U 344 | "_v": "ᵥ" # LATIN SUBSCRIPT SMALL LETTER V 345 | "_*b": "ᵦ" # GREEK SUBSCRIPT SMALL LETTER BETA 346 | "_*g": "ᵧ" # GREEK SUBSCRIPT SMALL LETTER GAMMA 347 | "_*r": "ᵨ" # GREEK SUBSCRIPT SMALL LETTER RHO 348 | "_*f": "ᵩ" # GREEK SUBSCRIPT SMALL LETTER PHI 349 | "_*x": "ᵪ" # GREEK SUBSCRIPT SMALL LETTER CHI 350 | "*a": "α" # GREEK SMALL LETTER ALPHA 351 | "*b": "β" # GREEK SMALL LETTER BETA 352 | "*c": "ψ" # GREEK SMALL LETTER PSI 353 | "*d": "δ" # GREEK SMALL LETTER DELTA 354 | "*e": "ε" # GREEK SMALL LETTER EPSILON 355 | "*f": "φ" # GREEK SMALL LETTER PHI 356 | "*g": "γ" # GREEK SMALL LETTER GAMMA 357 | "*h": "η" # GREEK SMALL LETTER ΕΤΑ 358 | "*i": "ι" # GREEK SMALL LETTER ΙΟΤΑ 359 | "*j": "ξ" # GREEK SMALL LETTER XI 360 | "*k": "κ" # GREEK SMALL LETTER KAPPA 361 | "*l": "λ" # GREEK SMALL LETTER LAMBDA 362 | "*m": "μ" # GREEK SMALL LETTER MU 363 | "*n": "ν" # GREEK SMALL LETTER NU 364 | "*o": "ο" # GREEK SMALL LETTER OMICRON 365 | "*p": "π" # GREEK SMALL LETTER PI 366 | "*.?": ";" # GREEK QUESTION MARK 367 | "*r": "ρ" # GREEK SMALL LETTER RHO 368 | "*s": "σ" # GREEK SMALL LETTER SIGMA 369 | "*t": "τ" # GREEK SMALL LETTER TAU 370 | "*u": "θ" # GREEK SMALL LETTER THETA 371 | "*v": "ω" # GREEK SMALL LETTER OMEGA 372 | "*w": "ς" # GREEK SMALL LETTER FINAL SIGMA 373 | "*x": "χ" # GREEK SMALL LETTER CHI 374 | "*y": "υ" # GREEK SMALL LETTER UPSILON 375 | "*z": "ζ" # GREEK SMALL LETTER ZETA 376 | "*A": "Α" # GREEK CAPITAL LETTER ALPHA 377 | "*B": "Β" # GREEK CAPITAL LETTER BETA 378 | "*C": "Ψ" # GREEK CAPITAL LETTER PSI 379 | "*D": "Δ" # GREEK CAPITAL LETTER DELTA 380 | "*E": "Ε" # GREEK CAPITAL LETTER EPSILON 381 | "*F": "Φ" # GREEK CAPITAL LETTER PHI 382 | "*G": "Γ" # GREEK CAPITAL LETTER GAMMA 383 | "*H": "Η" # GREEK CAPITAL LETTER ΕΤΑ 384 | "*I": "Ι" # GREEK CAPITAL LETTER ΙΟΤΑ 385 | "*J": "Ξ" # GREEK CAPITAL LETTER XI 386 | "*K": "Κ" # GREEK CAPITAL LETTER KAPPA 387 | "*L": "Λ" # GREEK CAPITAL LETTER LAMBDA 388 | "*M": "Μ" # GREEK CAPITAL LETTER MU 389 | "*N": "Ν" # GREEK CAPITAL LETTER NU 390 | "*O": "Ο" # GREEK CAPITAL LETTER OMICRON 391 | "*P": "Π" # GREEK CAPITAL LETTER PI 392 | "*R": "Ρ" # GREEK CAPITAL LETTER RHO 393 | "*S": "Σ" # GREEK CAPITAL LETTER SIGMA 394 | "*T": "Τ" # GREEK CAPITAL LETTER TAU 395 | "*U": "Θ" # GREEK CAPITAL LETTER THETA 396 | "*V": "Ω" # GREEK CAPITAL LETTER OMEGA 397 | "*X": "Χ" # GREEK CAPITAL LETTER CHI 398 | "*Y": "Υ" # GREEK CAPITAL LETTER UPSILON 399 | "*Z": "Ζ" # GREEK CAPITAL LETTER ZETA 400 | "*.p": "ϖ" # GREEK PI SYMBOL 401 | "*.w": "ϝ" # GREEK SMALL LETTER DIGAMMA 402 | "*.W": "Ϝ" # GREEK CAPITAL LETTER DIGAMMA 403 | "*Q": "Ϟ" # GREEK LETTER QOPPA 404 | "*q": "ϟ" # GREEK SMALL LETTER QOPPA 405 | "*.Q": "Ϙ" # GREEK LETTER ARCHAIC QOPPA 406 | "*.q": "ϙ" # GREEK SMALL LETTER ARCHAIC QOPPA 407 | "*&": "ϗ" # GREEK KAI SYMBOL 408 | "*.Z": "Ϡ" # GREEK LETTER SAMPI 409 | "*.z": "ϡ" # GREEK SMALL LETTER SAMPI 410 | "*..Z": "Ͳ" # GREEK CAPITAL LETTER ARCHAIC SAMPI 411 | "*..z": "ͳ" # GREEK SMALL LETTER ARCHAIC SAMPI 412 | "*?": "Ϛ" # GREEK LETTER STIGMA 413 | "*/": "ϛ" # GREEK SMALL LETTER STIGMA 414 | "*'": "ʹ" # MODIFIER LETTER PRIME, canonically equivalent to U0374 GREEK NUMERAL SIGN 415 | "*.'": "′" # PRIME 416 | "*.\"": "″" # DOUBLE PRIME 417 | "*,": "͵" # GREEK LOWER NUMERAL SIGN (for thousands) 418 | "*.b": "ϐ" # GREEK BETA SYMBOL 419 | "*.u": "ϑ" # GREEK THETA SYMBOL 420 | "*.Y": "ϒ" # GREEK UPSILON WITH HOOK SYMBOL 421 | "*.f": "ϕ" # GREEK PHI SYMBOL 422 | "*.k": "ϰ" # GREEK KAPPA SYMBOL 423 | "*.r": "ϱ" # GREEK RHO SYMBOL 424 | "*.U": "ϴ" # GREEK CAPITAL THETA SYMBOL 425 | "*.e": "ϵ" # GREEK LUNATE EPSILON SYMBOL 426 | "*.s": "ϻ" # GREEK SMALL LETTER SAN 427 | "*.S": "Ϻ" # GREEK CAPITAL LETTER SAN 428 | "13": "⅓" # VULGAR FRACTION ONE THIRD 429 | "23": "⅔" # VULGAR FRACTION TWO THIRDS 430 | "15": "⅕" # VULGAR FRACTION ONE FIFTH 431 | "25": "⅖" # VULGAR FRACTION TWO FIFTHS 432 | "35": "⅗" # VULGAR FRACTION THREE FIFTHS 433 | "45": "⅘" # VULGAR FRACTION FOUR FIFTHS 434 | "16": "⅙" # VULGAR FRACTION ONE SIXTH 435 | "56": "⅚" # VULGAR FRACTION FIVE SIXTHS 436 | "18": "⅛" # VULGAR FRACTION ONE EIGHTH 437 | "38": "⅜" # VULGAR FRACTION THREE EIGHTHS 438 | "58": "⅝" # VULGAR FRACTION FIVE EIGHTHS 439 | "78": "⅞" # VULGAR FRACTION SEVEN EIGHTHS 440 | "17": "⅐" # VULGAR FRACTION ONE SEVENTH 441 | "19": "⅑" # VULGAR FRACTION ONE NINTH 442 | "1x": "⅒" # VULGAR FRACTION ONE TENTH 443 | "03": "↉" # VULGAR FRACTION ZERO THIRDS 444 | "1/": "⅟" # FRACTION NUMERATOR ONE 445 | "%1": "ⅰ" # SMALL ROMAN NUMERAL ONE 446 | "%2": "ⅱ" # SMALL ROMAN NUMERAL TWO 447 | "%3": "ⅲ" # SMALL ROMAN NUMERAL THREE 448 | "%4": "ⅳ" # SMALL ROMAN NUMERAL FOUR 449 | "%5": "ⅴ" # SMALL ROMAN NUMERAL FIVE 450 | "%6": "ⅵ" # SMALL ROMAN NUMERAL SIX 451 | "%7": "ⅶ" # SMALL ROMAN NUMERAL SEVEN 452 | "%8": "ⅷ" # SMALL ROMAN NUMERAL EIGHT 453 | "%9": "ⅸ" # SMALL ROMAN NUMERAL NINE 454 | "%x": "ⅹ" # SMALL ROMAN NUMERAL TEN 455 | "%_1": "ⅺ" # SMALL ROMAN NUMERAL ELEVEN 456 | "%_2": "ⅻ" # SMALL ROMAN NUMERAL TWELVE 457 | "%l": "ⅼ" # SMALL ROMAN NUMERAL FIFTY 458 | "%c": "ⅽ" # SMALL ROMAN NUMERAL ONE HUNDRED 459 | "%d": "ⅾ" # SMALL ROMAN NUMERAL FIVE HUNDRED 460 | "%m": "ⅿ" # SMALL ROMAN NUMERAL ONE THOUSAND 461 | "%01": "Ⅰ" # ROMAN NUMERAL ONE 462 | "%02": "Ⅱ" # ROMAN NUMERAL TWO 463 | "%03": "Ⅲ" # ROMAN NUMERAL THREE 464 | "%04": "Ⅳ" # ROMAN NUMERAL FOUR 465 | "%05": "Ⅴ" # ROMAN NUMERAL FIVE 466 | "%06": "Ⅵ" # ROMAN NUMERAL SIX 467 | "%07": "Ⅶ" # ROMAN NUMERAL SEVEN 468 | "%08": "Ⅷ" # ROMAN NUMERAL EIGHT 469 | "%09": "Ⅸ" # ROMAN NUMERAL NINE 470 | "%0x": "Ⅹ" # ROMAN NUMERAL TEN 471 | "%_01": "Ⅺ" # ROMAN NUMERAL ELEVEN 472 | "%_02": "Ⅻ" # ROMAN NUMERAL TWELVE 473 | "%0l": "Ⅼ" # ROMAN NUMERAL FIFTY 474 | "%0c": "Ⅽ" # ROMAN NUMERAL ONE HUNDRED 475 | "%0d": "Ⅾ" # ROMAN NUMERAL FIVE HUNDRED 476 | "%0m": "Ⅿ" # ROMAN NUMERAL ONE THOUSAND 477 | "%X": "Ⅹ" # ROMAN NUMERAL TEN 478 | "%L": "Ⅼ" # ROMAN NUMERAL FIFTY 479 | "%C": "Ⅽ" # ROMAN NUMERAL ONE HUNDRED 480 | "%": "♢" # WHITE DIAMOND SUIT 517 | "3-": "♠" # BLACK SPADE SUIT 518 | "<}": "♠" # BLACK SPADE SUIT 519 | "E>": "♡" # WHITE HEART SUIT 520 | "shmrck": "☘" # SHAMROCK 521 | "shamro": "☘" # SHAMROCK 522 | "pc": "☮" # PEACE SYMBOL 523 | "peace": "☮" # PEACE SYMBOL 524 | "yy": "☯" # YIN YANG 525 | "yinyan": "☯" # YIN YANG 526 | "!<3": "❣" # HEAVY HEART EXCLAMATION MARK ORNAMENT 527 | "f<3": "❦" # FLORAL HEART 528 | "tel": "☎" # BLACK TELEPHONE 529 | "tea": "☕" # HOT BEVERAGE 530 | "[ ]": "☐" # BALLOT BOX 531 | "chk": "☑" # BALLOT BOX WITH CHECK 532 | "[/]": "☑" # BALLOT BOX WITH CHECK 533 | "[x]": "☒" # BALLOT BOX WITH X 534 | "@/": "✓" # CHECK MARK 535 | "@@/": "✔" # HEAVY CHECK MARK 536 | "@X": "✗" # BALLOT X 537 | "@@X": "✘" # HEAVY BALLOT X 538 | "@(": "❨" # MEDIUM LEFT PARENTHESIS ORNAMENT 539 | "@)": "❩" # MEDIUM RIGHT PARENTHESIS ORNAMENT 540 | "@@(": "❪" # MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT 541 | "@@)": "❫" # MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT 542 | "@<": "❬" # MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT 543 | "@>": "❭" # MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT 544 | "@@<": "❰" # HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT 545 | "@@>": "❱" # HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT 546 | "@[(": "❲" # LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT 547 | "@])": "❳" # LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT 548 | "@{": "❴" # MEDIUM LEFT CURLY BRACKET ORNAMENT 549 | "@}": "❵" # MEDIUM RIGHT CURLY BRACKET ORNAMENT 550 | "@": "️" # Emoji selector 551 | "!": "︎" # Text selector 552 | "[1]": "⚀" # DIE FACE-1 553 | "[2]": "⚁" # DIE FACE-2 554 | "[3]": "⚂" # DIE FACE-3 555 | "[4]": "⚃" # DIE FACE-4 556 | "[5]": "⚄" # DIE FACE-5 557 | "[6]": "⚅" # DIE FACE-6 558 | "(CC)": "🅭" # CIRCLED CC 559 | "C(CC)": "🅭" # CIRCLED CC 560 | "(\\C)": "🅮" # CIRCLED C WITH OVERLAID BACKSLASH 561 | "(/C)": "🅮" # CIRCLED C WITH OVERLAID BACKSLASH 562 | "C(\\C)": "🅮" # CIRCLED C WITH OVERLAID BACKSLASH 563 | "C(/C)": "🅮" # CIRCLED C WITH OVERLAID BACKSLASH 564 | "C(BY)": "🅯" # CIRCLED HUMAN FIGURE 565 | "C(SA)": "🄎" # CIRCLED ANTICLOCKWISE ARROW 566 | "C(ND)": "⊜" # CIRCLED EQUALS 567 | "C(=)": "⊜" # CIRCLED EQUALS 568 | "C(NC)": "🄏" # CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH 569 | "C(/$)": "🄏" # CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH 570 | "C(\\$)": "🄏" # CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH 571 | "(C<)": "🄯" # COPYLEFT SYMBOL 572 | "C(C<)": "🄯" # COPYLEFT SYMBOL 573 | "#0": "🯰" # SEGMENTED DIGIT ZERO 574 | "#1": "🯱" # SEGMENTED DIGIT ONE 575 | "#2": "🯲" # SEGMENTED DIGIT TWO 576 | "#3": "🯳" # SEGMENTED DIGIT THREE 577 | "#4": "🯴" # SEGMENTED DIGIT FOUR 578 | "#5": "🯵" # SEGMENTED DIGIT FIVE 579 | "#6": "🯶" # SEGMENTED DIGIT SIX 580 | "#7": "🯷" # SEGMENTED DIGIT SEVEN 581 | "#8": "🯸" # SEGMENTED DIGIT EIGHT 582 | "#9": "🯹" # SEGMENTED DIGIT NINE 583 | "fdl": "⚜" # FLEUR-DE-LIS 584 | "atom": "⚛" # ATOM SYMBOL 585 | "cccp": "☭" # HAMMER AND SICKLE 586 | "/!\\": "⚠" # WARNING SIGN 587 | "!^": "⚠" # WARNING SIGN 588 | "zap": "⚡" # HIGH VOLTAGE SIGN 589 | "rad": "☢" # RADIOACTIVE SIGN 590 | "bh": "☣" # BIOHAZARD SIGN 591 | "biohaz": "☣" # BIOHAZARD SIGN 592 | "AAAAA": "⛤" # PENTAGRAM (pentalpha, get it?) 593 | "plane": "✈" # AIRPLANE 594 | "mail": "✉" # ENVELOPE 595 | "whlch": "♿" # WHEELCHAIR SYMBOL 596 | "med": "☤" # CADEUCEUS 597 | "iwit": "👁️‍🗨️" 598 | "1med": "⚕" # STAFF OF AESCULAPIUS 599 | "o-+": "♀" # FEMALE SIGN 600 | "o->": "♂" # MALE SIGN 601 | "gay": "⚣" # DOUBLED MALE SIGN 602 | "lesbian": "⚢" # DOUBLED FEMALE SIGN 603 | "hetero": "⚤" # INTERLOCKED FEMALE AND MALE SIGN 604 | "trans": "⚥" # MALE AND FEMALE SIGN 605 | "genderq": "⚧" # MALE WITH STROKE AND MALE AND FEMALE SIGN 606 | "OX": "☠" # SKULL AND CROSSBONES 607 | "death": "☠" # SKULL AND CROSSBONES 608 | "Xbones": "☠" # SKULL AND CROSSBONES 609 | "kbd": "⌨" # KEYBOARD 610 | "rhand": "☞" # WHITE RIGHT POINTING INDEX 611 | "lhand": "☜" # WHITE LEFT POINTING INDEX 612 | "**": "★" # BLACK STAR 613 | "*0": "☆" # WHITE STAR 614 | "*-": "✪" # CIRCLED WHITE STAR 615 | "*3": "⁂" # ASTERISM 616 | "3*": "⁂" # ASTERISM 617 | "2*": "⁑" # TWO ASTERISKS ALIGNED VERTICALLY 618 | "*4": "✢" # FOUR TEARDROP-SPOKED ASTERISK 619 | "*6": "✡" # STAR OF DAVID 620 | "*#": "✯" # PINWHEEL STAR 621 | "*!": "✱" # HEAVY ASTERISK 622 | "": "❖" # BLACK DIAMOND MINUS WHITE X 623 | "@#": "⌘" # PLACE OF INTEREST SIGN 624 | "`-'": "⚞" # THREE LINES CONVERGING RIGHT 625 | "'-`": "⚟" # THREE LINES CONVERGING LEFT 626 | "Bellsym": "⍾" # BELL SYMBOL (or ALIENS LANDING) -- &-a-l-i-e-n ? 627 | "_^_": "⌤" # UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS; aka ENTER KEY, aka NOT AMUSED. 628 | "wait": "⌛" # HOURGLASS 629 | "hour": "⌛" # HOURGLASS 630 | "time": "⌚" # WATCH 631 | "watch": "⌚" # WATCH 632 | " N": " " # EN SPACE 633 | " M": " " # EM SPACE 634 | " 3M": " " # THREE-PER-EM SPACE 635 | " 4M": " " # FOUR-PER-EM SPACE 636 | " 6M": " " # SIX-PER-EM SPACE 637 | " ,": " " # PUNCTUATION SPACE 638 | " +": " " # MEDIUM MATHEMATICAL SPACE 639 | "()": "◌" # DOTTED CIRCLE 640 | "[]": "⬚" # DOTTED SQUARE 641 | "*(": "﴾" # ORNATE LEFT PARENTHESIS 642 | "*)": "﴿" # ORNATE RIGHT PARENTHESIS 643 | "ks": "ʘ" # LATIN LETTER BILABIAL CLICK (kiss sound) 644 | "|>": "‣" # TRIANGULAR BULLET 645 | "^^h": "ʰ" # SUPERSCRIPT H 646 | "^^i": "ⁱ" # SUPERSCRIPT I 647 | "^^j": "ʲ" # SUPERSCRIPT J 648 | "^^n": "ⁿ" # SUPERSCRIPT N 649 | "^^r": "ʳ" # SUPERSCRIPT R 650 | "^^w": "ʷ" # SUPERSCRIPT W 651 | "^^y": "ʸ" # SUPERSCRIPT Y 652 | "^^x": "ˣ" # SUPERSCRIPT X 653 | "^^e": "ᵉ" # MODIFIER LETTER SMALL E 654 | "^^t": "ᵗ" # MODIFIER LETTER SMALL T 655 | "þt": "ꝥ" # LATIN SMALL LETTER THORN WITH STROKE 656 | "^?.": "ˀ" # MODIFIER LETTER GLOTTAL STOP 657 | "^?(": "ˁ" # MODIFIER LETTER REVERSED GLOTTAL STOP 658 | "^-": "⁻" # SUPERSCRIPT MINUS 659 | "^+": "⁺" # SUPERSCRIPT PLUS 660 | "~~": "≈" # ALMOST EQUAL TO 661 | "sh": "ʃ" # LATIN SMALL LETTER ESH 662 | "zh": "ʒ" # LATIN SMALL LETTER EZH 663 | "lh": "ɬ" # LATIN SMALL LETTER L WITH BELT 664 | "l3": "ɮ" # LATIN SMALL LETTER LEZH 665 | "yg": "ȝ" # LATIN SMALL LETTER YOGH 666 | "YG": "Ȝ" # LATIN CAPITAL LETTER YOGH 667 | "?.": "ʔ" # LATIN LETTER GLOTTAL STOP 668 | "?(": "ʕ" # LATIN LETTER PHARYNGEAL VOICED FRICATIVE 669 | "?v": "ʖ" # LATIN LETTER INVERTED GLOTTAL STOP 670 | "?@": "ʖ" # LATIN LETTER INVERTED GLOTTAL STOP 671 | "?-": "ʡ" # LATIN LETTER GLOTTAL STOP WITH STROKE 672 | "?{": "ʢ" # LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE 673 | "ph": "ɸ" # LATIN SMALL LETTER PHI 674 | "ih": "ɪ" # LATIN LETTER SMALL CAPITAL I 675 | "IH": "ɪ" # LATIN LETTER SMALL CAPITAL I 676 | "uh": "ʊ" # LATIN SMALL LETTER UPSILON 677 | "UH": "ʊ" # LATIN SMALL LETTER UPSILON 678 | "ah": "ɑ" # LATIN SMALL LETTER ALPHA 679 | "er": "ɚ" # LATIN SMALL LETTER SCHWA WITH HOOK 680 | "o)": "ɔ" # LATIN SMALL LETTER OPEN O 681 | "aw": "ɔ" # LATIN SMALL LETTER OPEN O 682 | "O)": "Ɔ" # LATIN CAPITAL LETTER OPEN O 683 | "AW": "Ɔ" # LATIN CAPITAL LETTER OPEN O 684 | "eh": "ɛ" # LATIN SMALL LETTER OPEN E 685 | "": "͢" # COMBINING DOUBLE RIGHTWARDS ARROW BELOW 799 | "\\2>": "͢" # COMBINING DOUBLE RIGHTWARDS ARROW BELOW 800 | ".)": "͒" # COMBINING FERMATA 801 | "\\\\*": "҉" # COMBINING CYRILLIC MILLIONS SIGN -- aka COMBINING SHINY 802 | "P-": "₽" # RUBLE SIGN 803 | "p-": "₽" # RUBLE SIGN 804 | "ZWSP": "​" # ZERO WIDTH SPACE 805 | "ZWNJ": "‌" # ZERO WIDTH NON-JOINER 806 | "ZWJ": "‍" # ZERO WIDTH JOINER 807 | "LRM": "‎" # LEFT-TO-RIGHT MARK 808 | "RLM": "‏" # RIGHT-TO-LEFT MARK 809 | "LRE": "‪" # LEFT-TO-RIGHT EMBEDDING 810 | "RLE": "‫" # RIGHT-TO-LEFT EMBEDDING 811 | "PDF": "‬" # POP DIRECTIONAL FORMATTING 812 | "LRI": "⁦" # LEFT-TO-RIGHT ISOLATE 813 | "RLI": "⁧" # RIGHT-TO-LEFT ISOLATE 814 | "FSI": "⁨" # FIRST STRONG ISOLATE 815 | "PDI": "⁩" # POP DIRECTIONAL ISOLATE 816 | "LRO": "‭" # LEFT-TO-RIGHT OVERRIDE 817 | "RLO": "‮" # RIGHT-TO-LEFT OVERRIDE 818 | "BOM": "" # ZERO WIDTH NO-BREAK SPACE (Byte Order Mark) 819 | "CGJ": "͏" # COMBINING GRAPHEME JOINER 820 | "WJ": "⁠" # WORD JOINER 821 | "a`": "ᴀ" # LATIN LETTER SMALL CAPITAL A 822 | "b`": "ʙ" # LATIN LETTER SMALL CAPITAL B 823 | "c`": "ᴄ" # LATIN LETTER SMALL CAPITAL C 824 | "d`": "ᴅ" # LATIN LETTER SMALL CAPITAL D 825 | "e`": "ᴇ" # LATIN LETTER SMALL CAPITAL E 826 | "f`": "ꜰ" # LATIN LETTER SMALL CAPITAL F 827 | "g`": "ɢ" # LATIN LETTER SMALL CAPITAL G 828 | "h`": "ʜ" # LATIN LETTER SMALL CAPITAL H 829 | "i`": "ɪ" # LATIN LETTER SMALL CAPITAL I 830 | "j`": "ᴊ" # LATIN LETTER SMALL CAPITAL J 831 | "k`": "ᴋ" # LATIN LETTER SMALL CAPITAL K 832 | "l`": "ʟ" # LATIN LETTER SMALL CAPITAL L 833 | "m`": "ᴍ" # LATIN LETTER SMALL CAPITAL M 834 | "n`": "ɴ" # LATIN LETTER SMALL CAPITAL N 835 | "o`": "ᴏ" # LATIN LETTER SMALL CAPITAL O 836 | "p`": "ᴘ" # LATIN LETTER SMALL CAPITAL P 837 | "q`": "ꞯ" # LATIN LETTER SMALL CAPITAL Q 838 | "r`": "ʀ" # LATIN LETTER SMALL CAPITAL R 839 | "s`": "ꜱ" # LATIN LETTER SMALL CAPITAL S 840 | "t`": "ᴛ" # LATIN LETTER SMALL CAPITAL T 841 | "u`": "ᴜ" # LATIN LETTER SMALL CAPITAL U 842 | "v`": "ᴠ" # LATIN LETTER SMALL CAPITAL V 843 | "w`": "ᴡ" # LATIN LETTER SMALL CAPITAL W 844 | "y`": "ʏ" # LATIN LETTER SMALL CAPITAL Y 845 | "z`": "ᴢ" # LATIN LETTER SMALL CAPITAL Z 846 | "sun": "☉" # SUN (Sunday) 847 | "moon": "☽" # FIRST QUARTER MOON (Monday) 848 | "mercury": "☿" # MERCURY (Wednesday) 849 | "jupiter": "♃" # JUPITER (Thursday) 850 | "saturn": "♄" # SATURN (Saturday) 851 | "uranus": "♅" # URANUS (or ⛢ U26E2?) 852 | "neptune": "♆" # NEPTUNE 853 | "pluto": "♇" # PLUTO (ok, it isn't a planet anymore, but we still love it.) 854 | "ceres": "⚳" # CERES 855 | "pallas": "⚴" # PALLAS 856 | "juno": "⚵" # JUNO 857 | "vesta": "⚶" # VESTA 858 | "chiron": "⚷" # CHIRON 859 | "lilith": "⚸" # BLACK MOON LILITH 860 | "[key]": "⚿" # SQUARED KEY 861 | "[AS]": "🂡" # PLAYING CARD ACE OF SPADES 862 | "[2S]": "🂢" # PLAYING CARD TWO OF SPADES 863 | "[3S]": "🂣" # PLAYING CARD THREE OF SPADES 864 | "[4S]": "🂤" # PLAYING CARD FOUR OF SPADES 865 | "[5S]": "🂥" # PLAYING CARD FIVE OF SPADES 866 | "[6S]": "🂦" # PLAYING CARD SIX OF SPADES 867 | "[7S]": "🂧" # PLAYING CARD SEVEN OF SPADES 868 | "[8S]": "🂨" # PLAYING CARD EIGHT OF SPADES 869 | "[9S]": "🂩" # PLAYING CARD NINE OF SPADES 870 | "[TS]": "🂪" # PLAYING CARD TEN OF SPADES 871 | "[JS]": "🂫" # PLAYING CARD JACK OF SPADES 872 | "[NS]": "🂬" # PLAYING CARD KNIGHT OF SPADES 873 | "[QS]": "🂭" # PLAYING CARD QUEEN OF SPADES 874 | "[KS]": "🂮" # PLAYING CARD KING OF SPADES 875 | "[AH]": "🂱" # PLAYING CARD ACE OF HEARTS 876 | "[2H]": "🂲" # PLAYING CARD TWO OF HEARTS 877 | "[3H]": "🂳" # PLAYING CARD THREE OF HEARTS 878 | "[4H]": "🂴" # PLAYING CARD FOUR OF HEARTS 879 | "[5H]": "🂵" # PLAYING CARD FIVE OF HEARTS 880 | "[6H]": "🂶" # PLAYING CARD SIX OF HEARTS 881 | "[7H]": "🂷" # PLAYING CARD SEVEN OF HEARTS 882 | "[8H]": "🂸" # PLAYING CARD EIGHT OF HEARTS 883 | "[9H]": "🂹" # PLAYING CARD NINE OF HEARTS 884 | "[TH]": "🂺" # PLAYING CARD TEN OF HEARTS 885 | "[JH]": "🂻" # PLAYING CARD JACK OF HEARTS 886 | "[NH]": "🂼" # PLAYING CARD KNIGHT OF HEARTS 887 | "[QH]": "🂽" # PLAYING CARD QUEEN OF HEARTS 888 | "[KH]": "🂾" # PLAYING CARD KING OF HEARTS 889 | "[AD]": "🃁" # PLAYING CARD ACE OF DIAMONDS 890 | "[2D]": "🃂" # PLAYING CARD TWO OF DIAMONDS 891 | "[3D]": "🃃" # PLAYING CARD THREE OF DIAMONDS 892 | "[4D]": "🃄" # PLAYING CARD FOUR OF DIAMONDS 893 | "[5D]": "🃅" # PLAYING CARD FIVE OF DIAMONDS 894 | "[6D]": "🃆" # PLAYING CARD SIX OF DIAMONDS 895 | "[7D]": "🃇" # PLAYING CARD SEVEN OF DIAMONDS 896 | "[8D]": "🃈" # PLAYING CARD EIGHT OF DIAMONDS 897 | "[9D]": "🃉" # PLAYING CARD NINE OF DIAMONDS 898 | "[TD]": "🃊" # PLAYING CARD TEN OF DIAMONDS 899 | "[JD]": "🃋" # PLAYING CARD JACK OF DIAMONDS 900 | "[ND]": "🃌" # PLAYING CARD KNIGHT OF DIAMONDS 901 | "[QD]": "🃍" # PLAYING CARD QUEEN OF DIAMONDS 902 | "[KD]": "🃎" # PLAYING CARD KING OF DIAMONDS 903 | "[AC]": "🃑" # PLAYING CARD ACE OF CLUBS 904 | "[2C]": "🃒" # PLAYING CARD TWO OF CLUBS 905 | "[3C]": "🃓" # PLAYING CARD THREE OF CLUBS 906 | "[4C]": "🃔" # PLAYING CARD FOUR OF CLUBS 907 | "[5C]": "🃕" # PLAYING CARD FIVE OF CLUBS 908 | "[6C]": "🃖" # PLAYING CARD SIX OF CLUBS 909 | "[7C]": "🃗" # PLAYING CARD SEVEN OF CLUBS 910 | "[8C]": "🃘" # PLAYING CARD EIGHT OF CLUBS 911 | "[9C]": "🃙" # PLAYING CARD NINE OF CLUBS 912 | "[TC]": "🃚" # PLAYING CARD TEN OF CLUBS 913 | "[JC]": "🃛" # PLAYING CARD JACK OF CLUBS 914 | "[NC]": "🃜" # PLAYING CARD KNIGHT OF CLUBS 915 | "[QC]": "🃝" # PLAYING CARD QUEEN OF CLUBS 916 | "[KC]": "🃞" # PLAYING CARD KING OF CLUBS 917 | "[CB]": "🂠" # PLAYING CARD BACK 918 | "[BJ]": "🃏" # PLAYING CARD BLACK JOKER 919 | "[WJ]": "🃟" # PLAYING CARD WHITE JOKER 920 | "|WK": "♔" # WHITE CHESS KING 921 | "|WQ": "♕" # WHITE CHESS QUEEN 922 | "|WR": "♖" # WHITE CHESS ROOK 923 | "|WB": "♗" # WHITE CHESS BISHOP 924 | "|WN": "♘" # WHITE CHESS KNIGHT 925 | "|WP": "♙" # WHITE CHESS PAWN 926 | "|BK": "♚" # BLACK CHESS KING 927 | "|BQ": "♛" # BLACK CHESS QUEEN 928 | "|BR": "♜" # BLACK CHESS ROOK 929 | "|BB": "♝" # BLACK CHESS BISHOP 930 | "|BN": "♞" # BLACK CHESS KNIGHT 931 | "|BP": "♟" # BLACK CHESS PAWN 932 | "|WDM": "⛀" # WHITE DRAUGHTS MAN 933 | "|WDK": "⛁" # WHITE DRAUGHTS KING 934 | "|BDM": "⛂" # BLACK DRAUGHTS MAN 935 | "|BDK": "⛃" # BLACK DRAUGHTS KING 936 | "|WS": "☖" # WHITE SHOGI PIECE 937 | "|BS": "☗" # BLACK SHOGI PIECE 938 | "|"] 6 | license = "GPL-3.0-or-later" 7 | packages = [ 8 | {"include" = "gencompose.py"}, 9 | {"include" = "convcompose.py"}, 10 | {"include" = "toXcompose.py"}, 11 | ] 12 | readme = "README.md" 13 | homepage = "https://github.com/Granitosaurus/macos-compose" 14 | repository = "https://github.com/Granitosaurus/macos-compose" 15 | keywords = ['macos', 'compose', 'keymap'] 16 | classifiers = [ 17 | "Development Status :: 4 - Beta", 18 | "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", 19 | "Topic :: System :: Hardware", 20 | "Topic :: Utilities", 21 | ] 22 | 23 | [tool.poetry.dependencies] 24 | python = "^3.6" 25 | click = "^7.1.2" 26 | pyyaml = "^5.3.1" 27 | 28 | [tool.poetry.dev-dependencies] 29 | pytest = "^6.1.0" 30 | 31 | [tool.poetry.scripts] 32 | gen-compose = "gencompose:main" 33 | gen-compose-convert = "convcompose:main" 34 | gen-compose-export = "toXcompose:main" 35 | 36 | 37 | [build-system] 38 | requires = ["poetry>=0.12"] 39 | build-backend = "poetry.masonry.api" 40 | -------------------------------------------------------------------------------- /tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Granitosaurus/macos-compose/0bdd7b6cc0713103b6726834d79e2ad3f9fc7143/tests/__init__.py -------------------------------------------------------------------------------- /tests/test.compose: -------------------------------------------------------------------------------- 1 | # some leading comments 2 | # that should be ignored 3 | : "…" U2026 # HORIZONTAL ELLIPSIS 4 | 5 | # spaces and line breaking comments should be ignored too 6 | -------------------------------------------------------------------------------- /tests/test_convcompose.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | 3 | from click.testing import CliRunner 4 | from convcompose import main 5 | 6 | 7 | def test_xcompose_convert(): 8 | runner = CliRunner() 9 | file = Path(__file__).parent / 'test.compose' 10 | result = runner.invoke(main, args=['xcompose', str(file)]) 11 | assert result.exit_code == 0 12 | assert result.output == '"..": "…"\n' 13 | result = runner.invoke(main, args=['xcompose', str(file), '--keep-comments']) 14 | assert result.exit_code == 0 15 | assert result.output == '"..": "…" # HORIZONTAL ELLIPSIS\n' 16 | -------------------------------------------------------------------------------- /toXcompose.py: -------------------------------------------------------------------------------- 1 | import yaml 2 | import click 3 | from click import echo 4 | from convcompose import KEY_MAP 5 | 6 | mapping_dict = {v: k for k, v in KEY_MAP.items()} 7 | 8 | def get_xcompose_key(key): 9 | xval = " " # might be another unique value 10 | for i in key: 11 | kval = i 12 | if i in mapping_dict: 13 | kval = mapping_dict[i] 14 | xval += f"<{kval}>" 15 | return xval 16 | 17 | def get_xcompose_val(val): 18 | return f'"{val}"' 19 | 20 | @click.command() 21 | @click.argument('yamlfile', type=click.File()) 22 | def main(yamlfile): 23 | """ 24 | Export .yaml config file back to XCompose file 25 | i.e. this is reverse of gen-compose-convert 26 | """ 27 | yamldata = yaml.load(yamlfile.read(), Loader=yaml.Loader) 28 | for k, v in yamldata.items(): 29 | xkey = get_xcompose_key(k) 30 | xval = get_xcompose_val(v) 31 | echo(f"{xkey}:{xval}") 32 | 33 | if __name__ == '__main__': 34 | main() 35 | 36 | --------------------------------------------------------------------------------

: "⸙" U2E19 # PALM BRANCH 184 | : "⸙" U2E19 # PALM BRANCH 185 | 186 | 187 | : "ff" UFB00 # LATIN SMALL LIGATURE FF 188 | : "fi" UFB01 # LATIN SMALL LIGATURE FI 189 | : "ffi" UFB03 # LATIN SMALL LIGATURE FFI 190 | : "fl" UFB02 # LATIN SMALL LIGATURE FL 191 | : "ffl" UFB04 # LATIN SMALL LIGATURE FFL 192 | : "st" UFB06 # LATIN SMALL LIGATURE ST 193 | : "ſt" UFB05 # LATIN SMALL LIGATURE LONG S T 194 | # allow me still to use my ſ key, okay? 195 | : "ſt" UFB05 # LATIN SMALL LIGATURE LONG S T 196 | # ß is already available as I think. But now it comes in industrial size! 197 | : "ẞ" U1E9E # LATIN CAPITAL LETTER SHARP S 198 | 199 | # Eventually we'll have to look over the really crazy-cakes Latin letters 200 | # they're adding as "mediævalist extensions" 201 | # ꜢꜣꜤꜥ for the Egyptologists, Ꝏꝏ because they're cꝏl... Maybe some others. 202 | # Can't do for ꝏ though, since that's already °. 203 | # Epigraphics should not be missed: 204 | : "ꟻ" UA7FB # LATIN EPIGRAPHIC LETTER REVERSED F 205 |