]> git.gir.st - VimFx.git/blob - documentation/options.md
Improve holding keys for scrolling by page
[VimFx.git] / documentation / options.md
1 <!--
2 This is part of the VimFx documentation.
3 Copyright Simon Lydell 2015, 2016.
4 See the file README.md for copying conditions.
5 -->
6
7 # Options
8
9 VimFx has many options that can be configured, but they all have nice defaults
10 so you shouldn’t need to.
11
12 Advanced users might also be interested in [styling] VimFx and writing a [config
13 file].
14
15 [styling]: styling.md
16 [config file]: config-file.md
17
18
19 ## Regular options
20
21 These options are available in VimFx’s options page in the Add-ons Manager
22 (where you can also customize [keyboard shortcuts]).
23
24 [keyboard shortcuts]: shortcuts.md
25
26 ### Prevent autofocus
27
28 `prevent_autofocus`
29
30 Many sites autofocus their search box, for example. This might be annoying when
31 browsing using the keyboard, as you do with VimFx, because it often feels like
32 VimFx isn’t responding, until you realize that you are typing in a text box—not
33 running VimFx commands!
34
35 For this reason VimFx can prevent autofocus. It’s not enabled by default,
36 though, since one of VimFx’s key features is to be nice to your browser and your
37 habits.
38
39 If enabled, all focusing that occurs on page load, or after you’ve just switched
40 back to a tab from another, until you interact with the page is prevented.
41
42 #### Technical notes and trivia
43
44 Autofocus on page load and when coming back to a tab are the two most common
45 cases. Some sites, though, automatically focus a text input in other cases as
46 well. Trying to catch those cases as well, VimFx used to prevent all focusing
47 that didn’t occur within a fixed number of milliseconds after your last
48 interaction (click or keypress). However, this proved to be too aggressive,
49 preventing too much focusing. In other words, the time-based check was not
50 sufficient to distinguish between intended focusing and automatic unwanted
51 focusing. It made things worse more than it helped. Since these cases are so
52 difficult (if not impossible) to detect, it is better to leave them. Thankfully
53 they are not very common.
54
55 On page load or when coming back to a tab, before you have interacted with the
56 page in any way, we can be _sure_ that any focusing is automatic (not caused by
57 you), which makes it safe to prevent all focusing in those time spans.
58
59 ### Ignore keyboard layout
60
61 `ignore_keyboard_layout`
62
63 If you use more than one keyboard layout, you probably want to enable this
64 option.
65
66 People who use a keyboard layout _without_ the letters A–Z usually also use the
67 standard en-US QWERTY layout as well.
68
69 This option makes VimFx ignore your current layout and pretend that the standard
70 en-US QWERTY layout is _always_ used. This way the default shortcuts work even
71 if your layout doesn’t contain the letters A–Z and all shortcuts can be typed by
72 the same physical keys on your keyboard regardless of your current keyboard
73 layout.
74
75 Note that when filtering hints markers by element text (but not when typing hint
76 characters) in [Hints mode], your current layout _is_ used, even if you’ve
77 enabled ignoring of it. That’s because otherwise you wouldn’t be able to filter
78 by element text in any other language than English.
79
80 If you have modified your keyboard layout slightly using software, such as
81 having swapped `<capslock>` and `<escape>`, this option will cause VimFx to
82 ignore that as well. If that’s unwanted, you need to tell VimFx about your
83 layout customizations by using the special option [`translations`].
84
85 If you’d like VimFx to pretend that some other keyboard layout than the standard
86 en-US QWERTY is always used, that’s also a job for the special option
87 [`translations`].
88
89 [Hints mode]: commands.md#the-hint-commands--hints-mode
90 [`translations`]: #translations
91
92 ### Blacklist
93
94 `blacklist`
95
96 Space separated list of URL patterns where VimFx should automatically enter
97 Ignore mode. Example:
98
99 *example.com* http://example.org/editor/*
100
101 **The fastest way** to blacklist the page you’re currently on, is to **use the
102 `gB` command.** It opens a modal with a text input filled in with the blacklist,
103 and with `*currentdomain.com*` added at the start for you! Edit it if needed, or
104 just press `<enter>` straight away to save. Ignore mode is then automatically
105 entered (if the URL patterns apply).
106
107 Note that the URLs in the list must match the current URL _entirely_ for it to
108 apply. Therefore it is easiest to always use the `*` wildcard (which matches
109 zero or more characters).
110
111 Set the option to `*` to make VimFx start out in Ignore mode _everywhere._
112
113 When you’re done editing the blacklist, go to one of the pages you intend to
114 match. If you already have a tab open for that page, reload it. Then look at
115 VimFx’s [button] to see if your edits work out.
116
117 Note that when Ignore mode is automatically entered because of the blacklist, it
118 is also automatically exited (returning to Normal mode) if you go to a
119 non-blacklisted page in the same tab. On the other hand, if you entered Ignore
120 mode by pressing `i`, you’ll stay in Ignore mode in that tab until you exit it,
121 even if you navigate to another page.
122
123 You might also want to read about the [Ignore mode `<s-f1>` command][s-f1].
124
125 [button]: button.md
126 [s-f1]: commands.md#ignore-mode-s-f1
127
128 #### Blacklisting specific elements
129
130 VimFx automatically enters Ignore mode while Vim-style editors are focused, such
131 as the [wasavi] extension and [CodeMirror editors in Vim mode][codemirror-vim].
132
133 By default, VimFx lets you press `<escape>` to blur text inputs. Also by
134 default, Vim-style editors use `<escape>` to exit from their Insert mode to
135 their Normal mode. In other words, there is a keyboard shortcut conflict here.
136
137 It makes the most sense to let the Vim-style editor “win.” That’s why VimFx
138 (temporarily) enters Ignore mode when focusing such an editor. In Ignore mode,
139 there is no `<escape>` shortcut (by default), and thus no conflict. Instead,
140 there’s `<s-escape>` to blur the current element and exit Ignore mode.
141 `<s-escape>` was chosen because it is very unlikely to cause conflicts. If it
142 ever does, there’s the [`<s-f1>`] command to the rescue.
143
144 There is currently no way of specifying your own elements to be blacklisted, but
145 such a feature could be added if there’s demand for it.
146
147 [wasavi]: http://appsweets.net/wasavi/
148 [codemirror-vim]: https://codemirror.net/demo/vim.html
149 [`<s-f1>`]: commands.md#ignore-mode-s-f1
150
151 ### Hint characters
152
153 `hints.chars`
154
155 The characters used for the hints in Hints mode, which can be entered using one
156 of the many [hint commands].
157
158 **Tip:** Prefer filtering hints by element text? Use only uppercase hint
159 characters (such as `FJDKSLAGHRUEIWONC MV`), or only numbers (`01234567 89`).
160
161 [hint commands]: commands.md#the-hint-commands--hints-mode
162
163 #### Filtering hints by element text
164
165 All characters other than the hint characters are used to filter hint markers by
166 element text.
167
168 The filtering works like in Firefox’s location bar. In short, that means:
169
170 - It is case insensitive.
171 - Your typed characters are split on spaces. Each part must be present in the
172 element text (in any order, and they may overlap).
173
174 By default, “f” is a hint character. If you type an “f”, that character is used
175 to match the hints on screen. If you type an “F” (uppercase), though, which is
176 _not_ a hint character by default, you will filter the hints based on element
177 text, causing some hints markers to disappear, and the rest to be replaced. Only
178 the markable elements with text containing an “f” or “F” will now get a hint
179 marker. All the “f”s and “F”s are highlighted on the page, to help you keep
180 track of what’s going on. Keep typing other non-hint characters to further
181 reduce the number of hint markers, and make the hints shorter all the time.
182
183 Hint markers are usually displayed in uppercase, because it looks nicer.
184 However, if you mix both lowercase and uppercase hint characters, they will be
185 displayed as-is, so you can tell them apart. It is recommended to either use
186 _only_ lowercase or _only_ uppercase characters, though.
187
188 Some people prefer to filter hint markers by element text in the first hand,
189 rather than typing hint characters. If so, it is a good idea to choose all
190 uppercase hint characters, or only numbers. This way, you can press `f` and then
191 simply begin typing the text of the link you wish to follow.
192
193 #### Easy-to-type and performant hints
194
195 Quick suggestion: Put more easily reachable keys longer to the left. Put two
196 pretty good (but not the best) keys at the end, after the space.
197
198 Some hint characters are easier to type than others. Many people think that the
199 ones on the home row are the best. VimFx favors keys to the left. That’s why you
200 should put better keys longer to the left.
201
202 The hint characters always contain a single space. This splits them into two
203 groups: _primary_ hint characters (before the space), and _secondary_ hint
204 characters (after the space). Read on to find out why.
205
206 Some markable elements are quicker to find than others. Therefore, VimFx looks
207 for markable elements in two passes for some commands, such as the `f` command.
208 (This is why all hints don’t always appear on screen at the same time). If two
209 passes are used, hints from the _first_ pass can only begin with _primary_ hint
210 characters. In all other cases hints may start with _any_ hint character.
211
212 When choosing how many secondary hint characters you want (there are two by
213 default), think about this: Usually most markable elements are found in the
214 first pass, while fewer are found in the second pass. So it makes sense to have
215 more primary hint characters than secondary. It’s a tradeoff. If you think the
216 hints from the first pass are too long, you probably need more primary hint
217 characters. On the other hand, if you think the hints from the _second_ pass are
218 too long, you might need a few extra secondary hint characters, but remember
219 that it might be at the expense of longer hints in the first pass.
220
221 All of this also help you understand why hints may be slow on some pages:
222
223 - One reason could be that most hints come from a second pass, which are slower
224 to compute (and are worse than first pass hints).
225
226 If a site gets an unusual amount of second pass hints, it might be because the
227 site is badly coded accessibility-wise. If so, consider contacting the site
228 and telling them so, which improves their accessibility for everyone!
229
230 - Another reason could be that a page has a _huge_ amount of links. If that
231 bothers you regularly, feel free to send a pull request with faster code!
232
233 ### Hint auto-activation
234
235 `hints.auto_activate`
236
237 The marker (or marker<strong>s</strong> in the case where several links go to
238 the same place and have gotten the same hint) with the best hint are highlighted
239 with a different color. You may at any time press `<enter>` to activate those
240 markers.
241
242 One workflow is to type non-hint characters until the hint marker of the element
243 you want to activate gets highlighted, and then hit `<enter>`. To make this more
244 obvious, the entire element text is selected, too. However, if _all_ hint
245 markers end up highlighted (because the text you’ve typed uniquely identifies a
246 single link) the highlighted markers will be activated _automatically._
247
248 If you dislike that, disable this option. Then, you either have to press
249 `<enter>` or a hint character to activate hint markers.
250
251 ### Auto-activation timeout
252
253 `hints.timeout`
254
255 If you type quickly, you might find that you will keep typing even after a hint
256 marker has been automatically activated (see [Hint auto-activation]). You might
257 simply not react that quickly. This might cause you to accidentally trigger
258 VimFx commands. Therefore, VimFx ignores all your keypresses for a certain
259 number of milliseconds when having automatically activated a hint marker after
260 filtering by element text. This option controls exactly how many milliseconds
261 that is.
262
263 If you can’t find a timeout that works for you, you might want to disable [Hint
264 auto-activation] instead.
265
266 [Hint auto-activation]: #hint-auto-activation
267
268 ### Timeout
269
270 `timeout`
271
272 The maximum amount of time (in milliseconds) that may pass between two
273 keypresses of a shortcut.
274
275 It’s easy to press, say, `a` by mistake while browsing. Without a timeout, you
276 might be surprised that all search results are highlighted when you a bit later
277 try to search using the `/` command. (That’s what `a/` does.) _With_ a timeout,
278 the `a` would be cancelled when the timeout has passed.
279
280 ### “Previous”/“Next” link patterns
281
282 `prev_patterns`/`next_patterns`
283
284 Space separated lists of patterns that match links to the previous/next page.
285 Used by the `[` and `]` commands.
286
287 There is a standardized way for websites to tell browsers the URLs to the
288 previous and next page. VimFx looks for that information in the first place.
289 Unfortunately, many websites don’t provide this information. Then VimFx falls
290 back on looking for links on the page that seem to go to the previous/next page
291 using patterns.
292
293 The patterns are matched at the beginning and end of link text (and the
294 attributes defined by the advanced option [`pattern_attrs`]). The patterns do
295 not match in the middle of words, so “previous” does not match “previously”.
296 The matching is case <strong>in</strong>sensitive.
297
298 Actually, the patterns are regular expressions. If you do not know what a
299 regular expression is, that’s fine. You can type simple patterns like the
300 default ones without problems. If you do know what it is, though, you have the
301 possibility to create more advanced patterns if needed.
302
303 Some of the default patterns are English words. You might want to add
304 alternatives in your own language.
305
306 Note: If you need to include a space in your pattern, use `\s`. For example:
307 `next\spage`.
308
309 [`pattern_attrs`]: #pattern_attrs
310
311
312 ## Advanced options
313
314 These options are _not_ available in VimFx’s options page in the Add-ons
315 Manager. They can only be changed in [about:config] or using a [config file].
316 They all start with `extensions.VimFx.`.
317
318 Don’t feel that you have to go through all of these options in order to get the
319 most from VimFx! Really, there’s no need at all to change the defaults unless
320 you’ve run into some edge case.
321
322 (There are actually a few more advanced options than those listed here. You can
323 see them all in [defaults.coffee].)
324
325 [about:config]: http://kb.mozillazine.org/About:config
326 [config file]: config-file.md
327 [defaults.coffee]: ../extension/lib/defaults.coffee
328
329 ### `notifications_enabled`
330
331 Controls whether [notifications] should be shown or not.
332
333 You can also choose to show notifications any way you want by listening for the
334 [the `notification` and `hideNotification` events][notification-events].
335
336 [notifications]: notifications.md
337 [notification-events]: api.md#the-notification-and-hidenotification-events
338
339 ### `notify_entered_keys`
340
341 If enabled, a [notification] is shown with the keys you have entered so far of
342 a command. This is only noticeable if you type a multi-key shortcut or use a
343 count, or if you filter hint markers by element text (then, the text you’ve
344 typed will be shown).
345
346 [notification]: notifications.md
347
348 ### `prevent_target_blank`
349
350 You might have noticed that some links open in new tabs when you click them.
351 That is not the case if you “click” them using VimFx’s `f` command, though. If
352 you dislike that, disable this option.
353
354 ### `counts_enabled`
355
356 Controls whether [counts] are enabled or not.
357
358 [counts]: commands.md#counts
359
360 ### `find_from_top_of_viewport`
361
362 Toggles whether the various find commands are Vim-style or Firefox
363 default-style.
364
365 Disable this option if you want `/` to work more like `<c-f>` and `n`/`N` to
366 work more like `<f3>`/`<s-f3>`.
367
368 If there is selected text on the page, Firefox starts searching after that.
369 VimFx does so too, but only if the selection is currently _visible_ (inside the
370 current viewport).
371
372 If there _isn’t_ selected text on the page, Firefox starts searching from the
373 top of the page. VimFx instead starts searching from the top of the current
374 viewport.
375
376 The VimFx behavior is designed to be less disorienting. It is also similar to
377 how searching in Vim works. Again, you can return to the Firefox default
378 behavior (if you prefer that) by disabling this option.
379
380 One of the main benefits of the VimFx behavior is that you can scroll past a
381 block of the text with lots of search matches and then continue going through
382 matches with `n` after that block, without having to spam `n` lots and lots of
383 times.
384
385 ### `browsewithcaret`
386
387 [Caret mode] uses [Firefox’s own Caret mode] under the hood. This means that
388 VimFx temporarily enables the Firefox option `accessibility.browsewithcaret`
389 when you are in VimFx’s Caret mode. When you leave Caret mode, that option is
390 turned off again.
391
392 VimFx automatically syncs the `browsewithcaret` option with
393 `accessibility.browsewithcaret`. If you change the latter manually (such as by
394 using the Firefox default shortcut `<f7>`), VimFx’s option is changed as well,
395 so you shouldn’t really have to touch this option at all.
396
397 [Caret mode]: commands.md#caret-mode
398 [Firefox’s own Caret mode]: http://kb.mozillazine.org/Accessibility_features_of_Firefox#Allow_text_to_be_selected_with_the_keyboard
399
400 ### `ignore_ctrl_alt`
401
402 This option is enabled by default on Windows, and disabled otherwise.
403
404 If enabled, ignores ctrl+alt for printable keys. `<a-c-$>` becomes `$` and
405 `<a-c-A>` becomes `A`, while `<a-c-enter>` stays the same.
406
407 This option is suitable on Windows, which treats [AltGr as
408 ctrl+alt][wikipedia-altgr]. For example, if a user of the sv-SE layout on
409 Windows holds AltGr and presses the key labeled `4`, in order to produce a `$`,
410 the result would be `<a-c-$>` without this option, making it impossible to
411 trigger a keyboard shortcut containing `$`. _With_ this option the result is
412 `$`, as expected (and as on GNU/Linux). On the other hand it won’t be possible
413 to trigger keyboard shortcuts such as `<a-c-a>`, but ctrl+alt keyboard shortcuts
414 are [discouraged on Windows][wikipedia-altgr] anyway because of this reason.
415
416 [wikipedia-altgr]: https://en.wikipedia.org/wiki/AltGr_key#Control_.2B_Alt_as_a_substitute
417
418 ### `prevent_autofocus_modes`
419
420 Space separated list of modes where `prevent_autofocus` should be used.
421
422 ### `config_file_directory`
423
424 VimFx can optionally be customized using a [config file]. If you want to that,
425 you need to tell VimFx where that file is. That’s what this option is for.
426
427 By default this option is blank (the empty string), which means that no config
428 file should be loaded.
429
430 If non-blank, it should be the path to the directory where the config file
431 exists. See the [config file] documentation for more information.
432
433 [config file]: config-file.md
434
435 ### `blur_timeout`
436
437 The number of milliseconds VimFx should wait after an element has been blurred
438 before checking if you’re inside a text input or not.
439
440 Some sites with fancy text inputs (such as twitter) blur the text input for a
441 split second and then re-focus it again while typing (for some reason). If you
442 happen to press a key during that split second, that key might trigger a VimFx
443 shortcut instead of typing into the text input, which can be quite annoying. To
444 avoid the problem, VimFx waits a bit before checking if you have left the text
445 input.
446
447 ### `refocus_timeout`
448
449 If you switch to another window while a text input is focused, Firefox actually
450 blurs the text input. If you then switch back again, Firefox will re-focus the
451 text input.
452
453 VimFx tracks that case, so that the [Prevent autofocus] option does not think it
454 should prevent that refocus. Unfortunately, the tracking requires a timeout.
455 This option let’s you customize that timeout (measured in milliseconds).
456
457 If you experience that text input focus is lost after switching back to Firefox
458 from another window, you might want to increase this timeout.
459
460 [Prevent autofocus]: #prevent-autofocus
461
462 ### Scrolling options
463
464 Apart from its own options, VimFx also respects a few built-in Firefox options.
465
466 #### Smooth scrolling
467
468 If you want to customize Firefox’s smooth scrolling, adjusting
469 `general.smoothScroll.{lines,pages,other}.duration{Min,Max}MS` is the way to
470 go. VimFx has similar options for the scrolling commands, but they work like
471 `layout.css.scroll-behavior.spring-constant`.
472
473 Basically, the higher the value, the faster the scrolling.
474
475 These are VimFx’s variants, and the commands they affect:
476
477 - `smoothScroll.lines.spring-constant`: `h`, `l`, `j`, `k`
478 - `smoothScroll.pages.spring-constant`: `d`, `u`, `<space>`, `<s-space>`
479 - `smoothScroll.other.spring-constant`: `gg`, `G`, `0`, `^`, `$`, `'`
480
481 Note that the value of these options are _strings,_ not numbers!
482
483 Unfortunately, Firefox provides no way for code to tell which “spring constant”
484 it wants when scrolling smoothly. All VimFx can do is to temporarily set
485 Firefox’s `layout.css.scroll-behavior.spring-constant` option. It is reset again
486 after one second (by default). If that doesn’t work out for you, you can
487 customize that timeout using the `scroll.reset_timeout` option.
488
489 Another quirk of Firefox’s smooth scrolling is that it doesn’t like if you ask
490 for smooth scrolling too often: The scrolling can get stuttery, progressively
491 slower and even grind to a halt. On a long page with lots of elements, simply
492 holding `d`, `u`, `<space>` or `<s-space>` can be too much. By default, keyboard
493 software typically repeats keypresses every 30ms when holding keys. Because of
494 this, VimFx only asks for smooth scrolling if more than 65ms (two repeats) has
495 passed since the last request. You can customize that timeout via the
496 `scroll.repeat_timeout` option.
497
498 The Firefox option `general.smoothScroll` lets you turn off smooth scrolling
499 entirely, including all of VimFx’s scrolling commands.
500
501 `general.smoothScroll.lines`, `general.smoothScroll.pages`, and
502 `general.smoothScroll.other` lets you selectively disable smooth scrolling.
503 VimFx’s scrolling commands follow the same “lines,” “pages” and “other”
504 categorization as in the above list.
505
506 #### Scroll step
507
508 By default you can scroll using the arrow keys in Firefox. You can control how
509 much they scroll by adjusting the following options:
510
511 - `toolkit.scrollbox.horizontalScrollDistance`: `<left>`, `<right>`, `h`, `l`
512 - `toolkit.scrollbox.verticalScrollDistance`: `<down>`, `<up>`, `j`, `k`
513
514 (VimFx used to have a `scroll_step` option, but is has been replaced by the
515 above.)
516
517 #### `scroll.horizontal_boost` and `scroll.vertical_boost`
518
519 When holding down `h`, `l`, `j` or `k` (rather than just tapping those keys),
520 their scrolling speed is sped up, just like when you hold down an arrow key to
521 scroll. These options control _how much_ the mentioned commands are sped up. The
522 usual scroll distances are multiplied by these numbers.
523
524 #### `scroll.full_page_adjustment` and `scroll.half_page_adjustment`
525
526 An important use case for scrolling a full page down is to read an entire page
527 (a window-full) of text, press `<space>` and then continue reading the next
528 page. However, if you can only see, say, _half_ of the height the last line,
529 pressing `<space>` would give you the other half, but reading only the top or
530 bottom parts of letters is difficult. Even if the lines happen to line up with
531 the window edge to not be sliced horizontally, it might feel disorienting
532 pressing `<space>`.
533
534 For this reason, both VimFx and Firefox by default scroll _about a line less
535 than a whole page_ when pressing `<space>`. This solves the sliced-last-line
536 problem, and provides some context on where you are in the text you’re reading.
537
538 These two options control how many pixels “about a line” actually means for the
539 different page scrolling commands.
540
541 - `scroll.full_page_adjustment`: `<space>, `<s-space>`
542 - `scroll.half_page_adjustment`: `d`, `u`
543
544 #### `scroll.last_position_mark` and `scroll.last_find_mark`
545
546 These options allow you to customize the [special marks] for the
547 [`'`][scroll-to-mark] command.
548
549 [special marks]: commands.md#special-marks
550 [scroll-to-mark]: commands.md#marks-m-and-
551
552 ### `pattern_selector`
553
554 A CSS selector that targets candidates for a previous/next page link.
555
556 ### `pattern_attrs`
557
558 A space-separated list of attributes that the [“Previous”/“Next” link patterns]
559 should be matched against.
560
561 [“Previous”/“Next” link patterns]: #previousnext-link-patterns
562
563 ### `hints.matched_timeout`
564
565 The number of milliseconds a matched hint marker should stay on screen before
566 disappearing (or resetting).
567
568 ### `hints.sleep`
569
570 In Hints mode, VimFx continually checks if the element for a hint marker has
571 moved. If so, the marker is moved as well. This option controls how many
572 milliseconds VimFx should “sleep” between each check. The shorter, the more CPU
573 usage, the longer, the more stuttery marker movement.
574
575 The default value should work fine, but if you have a low-performing computer
576 and you notice bothering CPU usage during Hints mode you might want to raise the
577 sleep time.
578
579 Set it to -1 to disable the marker movement feature entirely.
580
581 ### `hints.match_text`
582
583 If you strongly dislike that typing non-[Hint characters] filters hint markers
584 by element text, disable this option. (That’ll make things work like it did in
585 VimFx 0.18.x and older.)
586
587 [Hint characters]: #hint-characters
588
589 ### `hints.peek_through`
590
591 This option doesn’t do much. If you’ve used custom [styling] to change which
592 modifier lets you peek through markers in [Hints mode], you might want to change
593 this option as well. Otherwise VimFx’s Keyboard Shortcuts dialog will still tell
594 you to press shift for this task.
595
596 [styling]: styling.md
597 [Hints mode]: commands.md#the-hint-commands--hints-mode
598
599 ### `hints.toggle_in_tab`
600
601 If the keypress that matched a hint starts with this string, toggle whether to
602 open the matched link in the current tab or a new tab. See the [hint commands]
603 for more information.
604
605 ### `hints.toggle_in_background`
606
607 If the keypress that matched a hint starts with this string, open the matched
608 link in a new tab and toggle whether to open that tab in the background or
609 foreground. See the [hint commands] for more information.
610
611 ### `activatable_element_keys`
612
613 Keys that should not trigger VimFx commands but be sent through to the page if
614 an “activatable” element (link or button) is focused.
615
616 ### `adjustable_element_keys`
617
618 Keys that should not trigger VimFx commands but be sent through to the page if
619 an “adjustable” element (form control or video player) is focused.
620
621 ### `focus_previous_key` and `focus_next_key`
622
623 The default values are `<s-tab` and `<tab>`, respectively. Those keys are
624 specially handled after focusing a text input using [`gi`]. To disable this
625 special handling, set the options to the empty string.
626
627 [`gi`]: commands.md#gi-1
628
629
630 ## Special options
631
632 These options are available in neither VimFx’s options page in the Add-ons
633 Manager nor in [about:config]. The only way to change them is by using the
634 a [config file].
635
636 ### `translations`
637
638 This option is only useful if you use the [Ignore keyboard layout] option. As
639 mentioned in the documentation for that option, `translations` exist to let you:
640
641 - Teach VimFx about layout customizations you’ve made, that otherwise get
642 ignored.
643 - Make VimFx pretend that some other keyboard layout than the standard en-US
644 QWERTY is always used.
645
646 Here’s some example usage:
647
648 ```js
649 vimfx.set('translations', {
650 // Swapped <capslock> and <escape>.
651 'CapsLock': 'Escape',
652 'Escape': 'CapsLock',
653
654 // AZERTY mappings.
655 'KeyQ': ['a', 'A'],
656 'KeyA': ['q', 'Q'],
657 // etc.
658
659 // Bonus: Distinguish between regular numbers and numpad numbers by
660 // translating the numpad numbers into made-up names (regardless of numlock
661 // state). Then, you can use `<k0>` to `<k9>` in shortcuts.
662 'Numpad0': 'K0',
663 'Numpad1': 'K1',
664 'Numpad2': 'K2',
665 'Numpad3': 'K3',
666 'Numpad4': 'K4',
667 'Numpad5': 'K5',
668 'Numpad6': 'K6',
669 'Numpad7': 'K7',
670 'Numpad8': 'K8',
671 'Numpad9': 'K9',
672 })
673 ```
674
675 More formally, `translations` is an object where:
676
677 - The object keys are [`event.code`] strings that should be translated.
678
679 - The object values are either strings or arrays of two strings.
680
681 If an array is provided, the first value of it is used when shift is _not_
682 held, and the other value when shift _is_ held.
683
684 If only one string is provided, that value is always used (regardless of the
685 shift state).
686
687 The strings are what you want VimFx to treat the pressed key as. For example,
688 providing `Escape` will cause the translated key to match VimFx shortcuts
689 containing `<Escape>` (or `<escape>`—the case doesn’t matter).
690
691 At this point, you might be wondering why these options to ignore your keyboard
692 layout and translate keys have to exist. It’s all about the data that is
693 available in Firefox (basically [`event.key`] and [`event.code`]). There is a
694 longer technical explanation in [vim-like-key-notation], the library VimFx uses
695 for dealing with keyboard stuff.
696
697 [Ignore keyboard layout]: #ignore-keyboard-layout
698 [`event.code`]: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code
699 [`event.key`]: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key
700 [vim-like-key-notation]: https://github.com/lydell/vim-like-key-notation#technical-notes
701
702 ### `categories`
703
704 See the documentation for [`vimfx.get('categories')`][categories].
705
706 [categories]: api.md#vimfxgetcategories
Imprint / Impressum