buninu-browser 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. package/LICENSES/jsmdcui.txt +22 -0
  2. package/README.md +40 -4
  3. package/frontends/wayland/LICENSE-land +21 -0
  4. package/frontends/wayland/README.md +152 -0
  5. package/frontends/wayland/casty/LICENSE +21 -0
  6. package/frontends/wayland/casty/bookmarks.js +32 -0
  7. package/frontends/wayland/casty/click.js +96 -0
  8. package/frontends/wayland/casty/commands.js +61 -0
  9. package/frontends/wayland/casty/config.js +45 -0
  10. package/frontends/wayland/casty/download-directory.js +28 -0
  11. package/frontends/wayland/casty/download.js +49 -0
  12. package/frontends/wayland/casty/hints.js +334 -0
  13. package/frontends/wayland/casty/keys.js +56 -0
  14. package/frontends/wayland/casty/page-commands.js +80 -0
  15. package/frontends/wayland/casty/prompt-width.js +148 -0
  16. package/frontends/wayland/casty/urlbar.js +606 -0
  17. package/frontends/wayland/client.js +88 -0
  18. package/frontends/wayland/clipboard.js +80 -0
  19. package/frontends/wayland/index.js +130 -0
  20. package/frontends/wayland/input.js +75 -0
  21. package/frontends/wayland/protocol.js +55 -0
  22. package/frontends/wayland/protocols/wayland.xml +3248 -0
  23. package/frontends/wayland/protocols/xdg-shell.xml +1415 -0
  24. package/frontends/wayland/transport.js +120 -0
  25. package/frontends/wayland/urlbar.js +162 -0
  26. package/index.js +28 -1
  27. package/lib/audio/shared-connection.js +31 -0
  28. package/lib/cdp-server.js +15 -2
  29. package/lib/clipboard-command.js +10 -0
  30. package/lib/clipboard-powershell.js +22 -0
  31. package/lib/clipboard.js +37 -2
  32. package/lib/document-types.js +11 -0
  33. package/lib/headless-shell.js +54 -12
  34. package/lib/layout/text-layout.js +17 -9
  35. package/lib/paint/display-list.js +6 -1
  36. package/lib/qml/README.md +1427 -0
  37. package/lib/qml/builtins.js +771 -0
  38. package/lib/qml/canvas-dom.js +115 -0
  39. package/lib/qml/canvas.js +76 -0
  40. package/lib/qml/document.js +1199 -0
  41. package/lib/qml/fonts.js +69 -0
  42. package/lib/qml/format.js +9 -0
  43. package/lib/qml/host.js +352 -0
  44. package/lib/qml/images.js +199 -0
  45. package/lib/qml/launcher.js +132 -0
  46. package/lib/qml/loader.js +521 -0
  47. package/lib/qml/media-renderer.js +49 -0
  48. package/lib/qml/media.js +86 -0
  49. package/lib/qml/models.js +622 -0
  50. package/lib/qml/parser.js +381 -0
  51. package/lib/qml/qs +5 -0
  52. package/lib/qml/qscasty +3 -0
  53. package/lib/qml/qsheadless +3 -0
  54. package/lib/qml/qswayland +3 -0
  55. package/lib/qml/reactive.js +182 -0
  56. package/lib/qml/runtime.js +3603 -0
  57. package/lib/qml/shader/fragment.js +83 -0
  58. package/lib/qml/shader/qsb.js +27 -0
  59. package/lib/qml/shader/renderer.js +39 -0
  60. package/lib/qml/shader/runtime.js +61 -0
  61. package/lib/qml/shapes.js +251 -0
  62. package/lib/qml/shortcuts.js +65 -0
  63. package/lib/qml/text.js +109 -0
  64. package/lib/qml/textures.js +126 -0
  65. package/lib/qml/wayland-clipboard.js +32 -0
  66. package/lib/qml/window-constraints.js +16 -0
  67. package/lib/qml/worker-thread.js +70 -0
  68. package/lib/render-tree/index.js +16 -1
  69. package/lib/renderer/bindings.js +16 -1
  70. package/lib/renderer/canvas-2d.js +29 -0
  71. package/lib/renderer/document-selection.js +19 -0
  72. package/lib/renderer/host.js +45 -17
  73. package/lib/renderer/main.js +21 -6
  74. package/lib/renderer/page-realm.js +20 -10
  75. package/lib/renderer/page-renderer.js +497 -42
  76. package/lib/renderer/pointer-move.js +5 -3
  77. package/lib/renderer/render-interval.js +9 -0
  78. package/lib/renderer/text-input-paint.js +54 -0
  79. package/lib/renderer/text-input.js +57 -0
  80. package/lib/style/computed-style.js +10 -4
  81. package/package.json +1 -1
  82. package/test/audio-connection-lifetime.test.js +46 -0
  83. package/test/canvas-paint.test.js +8 -0
  84. package/test/clipboard.test.js +19 -0
  85. package/test/computed-style.test.js +12 -0
  86. package/test/document-selection.test.js +27 -0
  87. package/test/double-click.test.js +85 -0
  88. package/test/fixtures/canvas-damage.js +40 -0
  89. package/test/fixtures/fake-renderer.js +1 -0
  90. package/test/fixtures/flea-helpers/Dockerfile +36 -0
  91. package/test/fixtures/flea-helpers/bat.mjs +43 -0
  92. package/test/fixtures/flea-helpers/bin/bat +3 -0
  93. package/test/fixtures/flea-helpers/bin/bwrap +10 -0
  94. package/test/fixtures/flea-helpers/bin/bwrap-real-filter +9 -0
  95. package/test/fixtures/flea-helpers/bin/glow +3 -0
  96. package/test/fixtures/flea-helpers/bin/qs +3 -0
  97. package/test/fixtures/flea-helpers/bin/unsupported +3 -0
  98. package/test/fixtures/flea-helpers/check-highlighting.mjs +47 -0
  99. package/test/fixtures/flea-helpers/check-media.mjs +29 -0
  100. package/test/fixtures/flea-helpers/check-preview.mjs +27 -0
  101. package/test/fixtures/flea-helpers/check.mjs +36 -0
  102. package/test/fixtures/flea-helpers/highlight-cases.json +227 -0
  103. package/test/fixtures/flea-helpers/source-mime.xml +28 -0
  104. package/test/fixtures/flea-helpers/syntax-compat.mjs +23 -0
  105. package/test/fixtures/flea-thumbnail-stub/flea-placeholder.thumbnailer +4 -0
  106. package/test/fixtures/flea-thumbnail-stub/flea-thumbnail-stub +3 -0
  107. package/test/fixtures/omastorm-helpers/Dockerfile +35 -0
  108. package/test/fixtures/omastorm-helpers/check.mjs +56 -0
  109. package/test/fixtures/omastorm-helpers/launch.mjs +24 -0
  110. package/test/fixtures/omastorm-helpers/prepare.mjs +17 -0
  111. package/test/fixtures/omastorm-helpers/runtime.mjs +32 -0
  112. package/test/fixtures/pointer-paint-batching.js +23 -0
  113. package/test/fixtures/qml/flea/EscapeHint.qml +11 -0
  114. package/test/fixtures/qml/flea/LICENSE +21 -0
  115. package/test/fixtures/qml/flea/README.md +25 -0
  116. package/test/fixtures/qml/flea/Theme.qml +8 -0
  117. package/test/fixtures/qml/flea/demo.qml +24 -0
  118. package/test/fixtures/qml/flea/qmldir +3 -0
  119. package/test/fixtures/qml/flea-theme/LICENSE-Flea +21 -0
  120. package/test/fixtures/qml/flea-theme/LICENSE-Omarchy +20 -0
  121. package/test/fixtures/qml/flea-theme/README.md +70 -0
  122. package/test/fixtures/qml/flea-theme/button.qml +17 -0
  123. package/test/fixtures/qml/flea-theme/demo.qml +27 -0
  124. package/test/fixtures/qml/flea-theme/field.qml +21 -0
  125. package/test/fixtures/qml/flea-theme/imports/qs/Commons/BorderGeometry.js +373 -0
  126. package/test/fixtures/qml/flea-theme/imports/qs/Commons/Color.qml +258 -0
  127. package/test/fixtures/qml/flea-theme/imports/qs/Commons/I18n.qml +118 -0
  128. package/test/fixtures/qml/flea-theme/imports/qs/Commons/Numbers.js +19 -0
  129. package/test/fixtures/qml/flea-theme/imports/qs/Commons/Plural.js +91 -0
  130. package/test/fixtures/qml/flea-theme/imports/qs/Commons/Style.qml +561 -0
  131. package/test/fixtures/qml/flea-theme/imports/qs/Commons/Util.qml +188 -0
  132. package/test/fixtures/qml/flea-theme/imports/qs/Commons/qmldir +13 -0
  133. package/test/fixtures/qml/flea-theme/segment.qml +17 -0
  134. package/test/fixtures/qml/flea-theme/settings.qml +58 -0
  135. package/test/fixtures/qml/flea-theme/text-metrics.qml +10 -0
  136. package/test/fixtures/qml/flea-theme/ui/DialogButton.qml +150 -0
  137. package/test/fixtures/qml/flea-theme/ui/DialogField.qml +147 -0
  138. package/test/fixtures/qml/flea-theme/ui/EscapeHint.qml +11 -0
  139. package/test/fixtures/qml/flea-theme/ui/Glass.qml +114 -0
  140. package/test/fixtures/qml/flea-theme/ui/Glyph.qml +54 -0
  141. package/test/fixtures/qml/flea-theme/ui/GlyphSolid.qml +22 -0
  142. package/test/fixtures/qml/flea-theme/ui/Reveal.qml +54 -0
  143. package/test/fixtures/qml/flea-theme/ui/SettingsRuler.qml +85 -0
  144. package/test/fixtures/qml/flea-theme/ui/SettingsSegment.qml +85 -0
  145. package/test/fixtures/qml/flea-theme/ui/StableModel.qml +89 -0
  146. package/test/fixtures/qml/flea-theme/ui/Theme.qml +460 -0
  147. package/test/fixtures/qml/flea-theme/ui/ThemeColors.qml +43 -0
  148. package/test/fixtures/qml/flea-theme/ui/ViewState.qml +565 -0
  149. package/test/fixtures/qml/flea-theme/ui/js/Anchor.js +379 -0
  150. package/test/fixtures/qml/flea-theme/ui/js/AnchorHold.js +162 -0
  151. package/test/fixtures/qml/flea-theme/ui/js/Archive.js +157 -0
  152. package/test/fixtures/qml/flea-theme/ui/js/BackReturn.js +110 -0
  153. package/test/fixtures/qml/flea-theme/ui/js/Buttons.js +54 -0
  154. package/test/fixtures/qml/flea-theme/ui/js/ColumnMenu.js +111 -0
  155. package/test/fixtures/qml/flea-theme/ui/js/Columns.js +298 -0
  156. package/test/fixtures/qml/flea-theme/ui/js/Contrast.js +157 -0
  157. package/test/fixtures/qml/flea-theme/ui/js/Density.js +44 -0
  158. package/test/fixtures/qml/flea-theme/ui/js/DirSizes.js +129 -0
  159. package/test/fixtures/qml/flea-theme/ui/js/ExtThumbs.js +115 -0
  160. package/test/fixtures/qml/flea-theme/ui/js/Filter.js +284 -0
  161. package/test/fixtures/qml/flea-theme/ui/js/FolderSorts.js +108 -0
  162. package/test/fixtures/qml/flea-theme/ui/js/Format.js +305 -0
  163. package/test/fixtures/qml/flea-theme/ui/js/Icons.js +206 -0
  164. package/test/fixtures/qml/flea-theme/ui/js/Input.js +39 -0
  165. package/test/fixtures/qml/flea-theme/ui/js/KeyName.js +64 -0
  166. package/test/fixtures/qml/flea-theme/ui/js/Keymap.js +370 -0
  167. package/test/fixtures/qml/flea-theme/ui/js/Kinds.js +145 -0
  168. package/test/fixtures/qml/flea-theme/ui/js/Lists.js +11 -0
  169. package/test/fixtures/qml/flea-theme/ui/js/MakeDefault.js +186 -0
  170. package/test/fixtures/qml/flea-theme/ui/js/Match.js +27 -0
  171. package/test/fixtures/qml/flea-theme/ui/js/Material.js +109 -0
  172. package/test/fixtures/qml/flea-theme/ui/js/Menu.js +513 -0
  173. package/test/fixtures/qml/flea-theme/ui/js/Motion.js +16 -0
  174. package/test/fixtures/qml/flea-theme/ui/js/Mounts.js +320 -0
  175. package/test/fixtures/qml/flea-theme/ui/js/MouseNav.js +13 -0
  176. package/test/fixtures/qml/flea-theme/ui/js/Nav.js +328 -0
  177. package/test/fixtures/qml/flea-theme/ui/js/Palette.js +33 -0
  178. package/test/fixtures/qml/flea-theme/ui/js/Places.js +236 -0
  179. package/test/fixtures/qml/flea-theme/ui/js/Protocols.js +296 -0
  180. package/test/fixtures/qml/flea-theme/ui/js/RecentMode.js +154 -0
  181. package/test/fixtures/qml/flea-theme/ui/js/Search.js +396 -0
  182. package/test/fixtures/qml/flea-theme/ui/js/Settings.js +476 -0
  183. package/test/fixtures/qml/flea-theme/ui/js/SettingsAbout.js +99 -0
  184. package/test/fixtures/qml/flea-theme/ui/js/SettingsShelf.js +52 -0
  185. package/test/fixtures/qml/flea-theme/ui/js/Sort.js +127 -0
  186. package/test/fixtures/qml/flea-theme/ui/js/StateWords.js +42 -0
  187. package/test/fixtures/qml/flea-theme/ui/js/Swap.js +166 -0
  188. package/test/fixtures/qml/flea-theme/ui/js/TextSize.js +107 -0
  189. package/test/fixtures/qml/flea-theme/ui/js/Thumbs.js +158 -0
  190. package/test/fixtures/qml/flea-theme/ui/js/UiState.js +438 -0
  191. package/test/fixtures/qml/flea-theme/ui/js/Update.js +132 -0
  192. package/test/fixtures/qml/flea-theme/ui/js/UserDirs.js +56 -0
  193. package/test/fixtures/qml/flea-theme/ui/qmldir +227 -0
  194. package/test/fixtures/qml/hello.qml +26 -0
  195. package/test/fixtures/qml/imports/Demo/Toolkit/VersionLabel.qml +2 -0
  196. package/test/fixtures/qml/imports/Demo/Toolkit/VersionLabelNew.qml +2 -0
  197. package/test/fixtures/qml/imports/Demo/Toolkit/qmldir +3 -0
  198. package/test/fixtures/qml/imports/components/Badge.qml +15 -0
  199. package/test/fixtures/qml/imports/logic/base.js +2 -0
  200. package/test/fixtures/qml/imports/logic/counter.js +4 -0
  201. package/test/fixtures/qml/imports/logic/math.js +3 -0
  202. package/test/fixtures/qml/imports/logic/shared.js +3 -0
  203. package/test/fixtures/qml/imports/main.qml +21 -0
  204. package/test/fixtures/qml/imports/theme/Theme.qml +8 -0
  205. package/test/fixtures/qml/imports/theme/qmldir +2 -0
  206. package/test/fixtures/qml/multiply.qml +61 -0
  207. package/test/fixtures/qml-canvas-dom.js +90 -0
  208. package/test/fixtures/qml-fonts/main.qml +10 -0
  209. package/test/fixtures/qml-locale/check.mjs +6 -0
  210. package/test/fixtures/qml-locale/main.qml +8 -0
  211. package/test/fixtures/qml-media-audio.js +39 -0
  212. package/test/fixtures/qml-shader/grab.qml +14 -0
  213. package/test/fixtures/qml-shader/gradient.frag +5 -0
  214. package/test/fixtures/qml-shader/main.qml +14 -0
  215. package/test/fixtures/qml-shader/texture-grab.qml +25 -0
  216. package/test/fixtures/qml-shader/texture-size.frag +5 -0
  217. package/test/fixtures/qml-shader-check.mjs +24 -0
  218. package/test/fixtures/title-no-paint.js +20 -0
  219. package/test/helpers/flea-sandbox.js +48 -0
  220. package/test/helpers/quickshell-fixture.js +125 -0
  221. package/test/html-clipboard-wayland.test.js +47 -0
  222. package/test/index.test.js +13 -0
  223. package/test/manual-casty-without-qml.js +87 -0
  224. package/test/manual-double-click.html +21 -0
  225. package/test/manual-flea-application.js +49 -0
  226. package/test/manual-flea-binary.js +62 -0
  227. package/test/manual-flea-qml.js +9 -0
  228. package/test/manual-flea-settings.js +40 -0
  229. package/test/manual-flea-theme.js +40 -0
  230. package/test/manual-mouse-buttons.html +18 -0
  231. package/test/manual-omastorm-engine.mjs +19 -0
  232. package/test/manual-omastorm-shaders.mjs +28 -0
  233. package/test/manual-omastorm-software.mjs +25 -0
  234. package/test/manual-pointer-scroll.html +43 -0
  235. package/test/manual-qml-removal.js +46 -0
  236. package/test/manual-without-qml.js +45 -0
  237. package/test/pointer-drag.test.js +104 -0
  238. package/test/qml-canvas-dom.test.js +37 -0
  239. package/test/qml-canvas.test.js +21 -0
  240. package/test/qml-clipboard-bridge.test.js +25 -0
  241. package/test/qml-clipboard-wayland.test.js +40 -0
  242. package/test/qml-connections-timing.test.js +95 -0
  243. package/test/qml-controls-window.test.js +182 -0
  244. package/test/qml-dynamic.test.js +401 -0
  245. package/test/qml-flea-app.test.js +146 -0
  246. package/test/qml-flea-backend.test.js +78 -0
  247. package/test/qml-flea-columns-backend.test.js +38 -0
  248. package/test/qml-flea-compile.test.js +78 -0
  249. package/test/qml-flea-launcher.test.js +88 -0
  250. package/test/qml-flea-markdown-backend.test.js +31 -0
  251. package/test/qml-flea-media.test.js +28 -0
  252. package/test/qml-flea-navigation-backend.test.js +35 -0
  253. package/test/qml-flea-navigation-timing.test.js +147 -0
  254. package/test/qml-flea-preview-backend.test.js +53 -0
  255. package/test/qml-flea-previews.test.js +163 -0
  256. package/test/qml-flea-rows.test.js +101 -0
  257. package/test/qml-flea-textures.test.js +59 -0
  258. package/test/qml-flea-view-switch.test.js +33 -0
  259. package/test/qml-flea-wayland.test.js +68 -0
  260. package/test/qml-flea.test.js +34 -0
  261. package/test/qml-fonts.test.js +31 -0
  262. package/test/qml-grid-multiline.test.js +48 -0
  263. package/test/qml-host.test.js +238 -0
  264. package/test/qml-imports.test.js +102 -0
  265. package/test/qml-inherited-handlers.test.js +51 -0
  266. package/test/qml-input-selection.test.js +66 -0
  267. package/test/qml-interactions.test.js +309 -0
  268. package/test/qml-language.test.js +167 -0
  269. package/test/qml-launcher.test.js +54 -0
  270. package/test/qml-layout-text.test.js +205 -0
  271. package/test/qml-locale.test.js +45 -0
  272. package/test/qml-media.test.js +63 -0
  273. package/test/qml-nonvisual-visible.test.js +19 -0
  274. package/test/qml-persisted-delegates.test.js +45 -0
  275. package/test/qml-quickshell-controls.test.js +65 -0
  276. package/test/qml-quickshell-settings.test.js +62 -0
  277. package/test/qml-repeater.test.js +72 -0
  278. package/test/qml-shader-runtime.test.js +6 -0
  279. package/test/qml-shortcuts.test.js +39 -0
  280. package/test/qml-socket.test.js +60 -0
  281. package/test/qml-software-shader.test.js +55 -0
  282. package/test/qml-style-updates.test.js +124 -0
  283. package/test/qml-textures.test.js +66 -0
  284. package/test/qml-views.test.js +332 -0
  285. package/test/qml-window-update.test.js +36 -0
  286. package/test/qml-worker.test.js +69 -0
  287. package/test/qml.test.js +83 -0
  288. package/test/render-interval.test.js +33 -0
  289. package/test/renderer-host.test.js +11 -0
  290. package/test/text-input-pointer.test.js +31 -0
  291. package/test/text-input-scroll.test.js +29 -0
  292. package/test/text-input.test.js +47 -0
  293. package/test/title-no-paint.test.js +6 -0
  294. package/test/wayland-frontend.test.js +83 -0
  295. package/test/wayland-scroll.test.js +40 -0
  296. package/test/wayland-urlbar.test.js +61 -0
@@ -0,0 +1,370 @@
1
+ .pragma library
2
+
3
+ // Generated from keys.toml by tools/flea-keymap-gen. Do not edit.
4
+ var PRESETS = ["default","vim","mac","windows"]
5
+ var preset = "default"
6
+ var PRESET_KEYS = [
7
+ {"mods":"ctrl","key":"1","keys":"ctrl-1","action":"viewList","label":"list","context":"listing","frontend":"all","preset":"default","code":"Key_1","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_1,"mask":(Qt.ControlModifier)},
8
+ {"mods":"ctrl","key":"2","keys":"ctrl-2","action":"viewColumns","label":"columns","context":"listing","frontend":"all","preset":"default","code":"Key_2","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_2,"mask":(Qt.ControlModifier)},
9
+ {"mods":"ctrl","key":"3","keys":"ctrl-3","action":"viewGrid","label":"grid","context":"listing","frontend":"all","preset":"default","code":"Key_3","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_3,"mask":(Qt.ControlModifier)},
10
+ {"mods":"ctrl","key":"4","keys":"ctrl-4","action":"viewDual","label":"dual pane","context":"listing","frontend":"all","preset":"default","code":"Key_4","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_4,"mask":(Qt.ControlModifier)},
11
+ {"mods":"ctrl","key":"1","keys":"ctrl-1","action":"viewList","label":"list","context":"listing","frontend":"all","preset":"vim","code":"Key_1","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_1,"mask":(Qt.ControlModifier)},
12
+ {"mods":"ctrl","key":"2","keys":"ctrl-2","action":"viewColumns","label":"columns","context":"listing","frontend":"all","preset":"vim","code":"Key_2","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_2,"mask":(Qt.ControlModifier)},
13
+ {"mods":"ctrl","key":"3","keys":"ctrl-3","action":"viewGrid","label":"grid","context":"listing","frontend":"all","preset":"vim","code":"Key_3","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_3,"mask":(Qt.ControlModifier)},
14
+ {"mods":"ctrl","key":"4","keys":"ctrl-4","action":"viewDual","label":"dual pane","context":"listing","frontend":"all","preset":"vim","code":"Key_4","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_4,"mask":(Qt.ControlModifier)},
15
+ {"mods":"ctrl","key":"1","keys":"ctrl-1","action":"viewList","label":"list","context":"listing","frontend":"all","preset":"mac","code":"Key_1","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_1,"mask":(Qt.ControlModifier)},
16
+ {"mods":"ctrl","key":"2","keys":"ctrl-2","action":"viewColumns","label":"columns","context":"listing","frontend":"all","preset":"mac","code":"Key_2","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_2,"mask":(Qt.ControlModifier)},
17
+ {"mods":"ctrl","key":"3","keys":"ctrl-3","action":"viewGrid","label":"grid","context":"listing","frontend":"all","preset":"mac","code":"Key_3","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_3,"mask":(Qt.ControlModifier)},
18
+ {"mods":"ctrl","key":"4","keys":"ctrl-4","action":"viewDual","label":"dual pane","context":"listing","frontend":"all","preset":"mac","code":"Key_4","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_4,"mask":(Qt.ControlModifier)},
19
+ {"mods":"ctrl","key":"Up","keys":"ctrl-up","action":"parent","label":"up one level","context":"listing","frontend":"all","preset":"mac","code":"Key_Up","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Up,"mask":(Qt.ControlModifier)},
20
+ {"mods":"ctrl","key":"Down","keys":"ctrl-down","action":"open","label":"open","context":"listing","frontend":"all","preset":"mac","code":"Key_Down","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Down,"mask":(Qt.ControlModifier)},
21
+ {"mods":"ctrl","key":"Delete","keys":"ctrl-delete","action":"trash","label":"move to Trash","context":"listing","frontend":"all","preset":"mac","code":"Key_Delete","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Delete,"mask":(Qt.ControlModifier)},
22
+ {"mods":"ctrl","key":"K","keys":"ctrl-k","action":"addNetwork","label":"connect to server","context":"listing","frontend":"all","preset":"mac","code":"Key_K","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_K,"mask":(Qt.ControlModifier)},
23
+ {"mods":"ctrl","key":"H","keys":"ctrl-h","action":"toggleHidden","label":"hidden files","context":"listing","frontend":"all","preset":"windows","code":"Key_H","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_H,"mask":(Qt.ControlModifier)},
24
+ {"mods":"ctrlshift","key":"1","keys":"ctrl-shift-1","action":"viewList","label":"list","context":"listing","frontend":"all","preset":"windows","code":"Key_1","text":"","ctrl":true,"shift":true,"alt":false,"super":false,"keycode":Qt.Key_1,"mask":(Qt.ControlModifier | Qt.ShiftModifier)},
25
+ {"mods":"ctrlshift","key":"2","keys":"ctrl-shift-2","action":"viewColumns","label":"columns","context":"listing","frontend":"all","preset":"windows","code":"Key_2","text":"","ctrl":true,"shift":true,"alt":false,"super":false,"keycode":Qt.Key_2,"mask":(Qt.ControlModifier | Qt.ShiftModifier)},
26
+ {"mods":"ctrlshift","key":"3","keys":"ctrl-shift-3","action":"viewGrid","label":"grid","context":"listing","frontend":"all","preset":"windows","code":"Key_3","text":"","ctrl":true,"shift":true,"alt":false,"super":false,"keycode":Qt.Key_3,"mask":(Qt.ControlModifier | Qt.ShiftModifier)},
27
+ {"mods":"ctrlshift","key":"4","keys":"ctrl-shift-4","action":"viewDual","label":"dual pane","context":"listing","frontend":"all","preset":"windows","code":"Key_4","text":"","ctrl":true,"shift":true,"alt":false,"super":false,"keycode":Qt.Key_4,"mask":(Qt.ControlModifier | Qt.ShiftModifier)},
28
+ {"mods":"ctrl","key":"N","keys":"ctrl-n","action":"windowNew","label":"new window","frontend":"gui","context":"listing,rail","preset":"default","code":"Key_N","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_N,"mask":(Qt.ControlModifier)},
29
+ {"mods":"ctrl","key":"N","keys":"ctrl-n","action":"windowNew","label":"new window","frontend":"gui","context":"listing,rail","preset":"vim","code":"Key_N","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_N,"mask":(Qt.ControlModifier)},
30
+ {"mods":"ctrl","key":"N","keys":"ctrl-n","action":"windowNew","label":"new window","frontend":"gui","context":"listing,rail","preset":"windows","code":"Key_N","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_N,"mask":(Qt.ControlModifier)},
31
+ {"mods":"ctrl","key":"T","keys":"ctrl-t","action":"tabNew","label":"new tab","frontend":"all","context":"listing,rail","preset":"mac","code":"Key_T","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_T,"mask":(Qt.ControlModifier)},
32
+ {"mods":"ctrl","key":"T","keys":"ctrl-t","action":"tabNew","label":"new tab","frontend":"all","context":"listing,rail","preset":"windows","code":"Key_T","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_T,"mask":(Qt.ControlModifier)},
33
+ {"mods":"shift","key":"Delete","keys":"shift-delete","action":"deletePermanently","label":"delete permanently","frontend":"all","context":"listing","preset":"all","code":"Key_Delete","text":"","ctrl":false,"shift":true,"alt":false,"super":false,"keycode":Qt.Key_Delete,"mask":(Qt.ShiftModifier)},
34
+ {"mods":"alt","key":"P","keys":"alt-p","action":"togglePreview","label":"preview column","frontend":"all","context":"listing","preset":"all","code":"Key_P","text":"","ctrl":false,"shift":false,"alt":true,"super":false,"keycode":Qt.Key_P,"mask":(Qt.AltModifier)},
35
+ {"mods":"ctrl","key":"Space","keys":"ctrl-space","action":"loadPreview","label":"preview","frontend":"all","context":"listing","preset":"all","code":"Key_Space","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Space,"mask":(Qt.ControlModifier)},
36
+ {"mods":"ctrl","key":"W","keys":"ctrl-w","action":"tabClose","label":"close tab","frontend":"all","context":"listing,rail","preset":"all","code":"Key_W","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_W,"mask":(Qt.ControlModifier)},
37
+ {"mods":"ctrl","key":"PageDown","keys":"ctrl-pagedown","action":"tabNext","label":"next tab","frontend":"all","context":"listing,rail","preset":"all","code":"Key_PageDown","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_PageDown,"mask":(Qt.ControlModifier)},
38
+ {"mods":"ctrl","key":"PageUp","keys":"ctrl-pageup","action":"tabPrevious","label":"prev tab","frontend":"all","context":"listing,rail","preset":"all","code":"Key_PageUp","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_PageUp,"mask":(Qt.ControlModifier)},
39
+ {"mods":"ctrl","key":"Tab","keys":"ctrl-tab","action":"focusPreview","label":"focus preview","frontend":"all","context":"listing","preset":"all","code":"Key_Tab","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Tab,"mask":(Qt.ControlModifier)},
40
+ {"mods":"ctrl","key":"Insert","keys":"ctrl-insert","action":"copy","label":"copy","frontend":"tui","context":"listing","preset":"all","code":"Key_Insert","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Insert,"mask":(Qt.ControlModifier)},
41
+ {"mods":"shift","key":"Insert","keys":"shift-insert","action":"paste","label":"paste","frontend":"tui","context":"listing","preset":"all","code":"Key_Insert","text":"","ctrl":false,"shift":true,"alt":false,"super":false,"keycode":Qt.Key_Insert,"mask":(Qt.ShiftModifier)},
42
+ {"mods":"text","key":"H","keys":"H","action":"historyBack","label":"back","frontend":"all","context":"listing","preset":"default","code":"","text":"H","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
43
+ {"mods":"text","key":"H","keys":"H","action":"historyBack","label":"back","frontend":"all","context":"listing","preset":"vim","code":"","text":"H","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
44
+ {"mods":"text","key":"L","keys":"L","action":"historyForward","label":"forward","frontend":"all","context":"listing","preset":"default","code":"","text":"L","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
45
+ {"mods":"text","key":"L","keys":"L","action":"historyForward","label":"forward","frontend":"all","context":"listing","preset":"vim","code":"","text":"L","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
46
+ {"mods":"text","key":"y","keys":"yy","action":"copyArm","label":"copy","frontend":"all","context":"listing","preset":"vim","code":"","text":"y","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
47
+ {"mods":"text","key":"d","keys":"dd","action":"cutArm","label":"cut","frontend":"all","context":"listing","preset":"vim","code":"","text":"d","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
48
+ {"mods":"text","key":"p","keys":"pp","action":"pasteArm","label":"paste","frontend":"all","context":"listing","preset":"vim","code":"","text":"p","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
49
+ {"mods":"text","key":"g","keys":"gg","action":"cursorFirstArm","label":"first row","frontend":"all","context":"listing","preset":"vim","code":"","text":"g","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
50
+ {"mods":"text","key":"D","keys":"D","action":"trash","label":"move to Trash","frontend":"all","context":"listing","preset":"vim","code":"","text":"D","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
51
+ {"mods":"text","key":"u","keys":"u","action":"undo","label":"undo","frontend":"all","context":"listing","preset":"vim","code":"","text":"u","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
52
+ {"mods":"text","key":"l","keys":"l","action":"open","label":"open","frontend":"all","context":"listing","preset":"vim","code":"","text":"l","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
53
+ {"mods":"none","key":"Return","keys":"enter","action":"rename","label":"rename","frontend":"all","context":"listing","preset":"mac","code":"Key_Return","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Return,"mask":(0)},
54
+ {"mods":"none","key":"Enter","keys":"enter","action":"rename","label":"rename","frontend":"all","context":"listing","preset":"mac","code":"Key_Enter","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Enter,"mask":(0)},
55
+ {"mods":"none","key":"Left","keys":"left","action":"parent","label":"up one level","frontend":"all","context":"listing","preset":"mac","code":"Key_Left","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Left,"mask":(0)},
56
+ {"mods":"none","key":"Right","keys":"right","action":"open","label":"open","frontend":"all","context":"listing","preset":"mac","code":"Key_Right","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Right,"mask":(0)},
57
+ {"mods":"ctrl","key":"X","keys":"ctrl-x","action":"","label":"Control+X is inert","frontend":"all","context":"listing","preset":"mac","code":"Key_X","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_X,"mask":(Qt.ControlModifier)},
58
+ {"mods":"super","key":"C","keys":"super-c","action":"copy","label":"copy","frontend":"all","context":"listing","preset":"mac","code":"Key_C","text":"","ctrl":false,"shift":false,"alt":false,"super":true,"keycode":Qt.Key_C,"mask":(Qt.MetaModifier)},
59
+ {"mods":"super","key":"V","keys":"super-v","action":"paste","label":"paste","frontend":"all","context":"listing","preset":"mac","code":"Key_V","text":"","ctrl":false,"shift":false,"alt":false,"super":true,"keycode":Qt.Key_V,"mask":(Qt.MetaModifier)},
60
+ {"mods":"superalt","key":"V","keys":"superalt-v","action":"movePaste","label":"move here","frontend":"all","context":"listing","preset":"mac","code":"Key_V","text":"","ctrl":false,"shift":false,"alt":true,"super":true,"keycode":Qt.Key_V,"mask":(Qt.MetaModifier | Qt.AltModifier)},
61
+ {"mods":"super","key":"D","keys":"super-d","action":"duplicate","label":"duplicate","frontend":"all","context":"listing","preset":"mac","code":"Key_D","text":"","ctrl":false,"shift":false,"alt":false,"super":true,"keycode":Qt.Key_D,"mask":(Qt.MetaModifier)},
62
+ {"mods":"super","key":"Z","keys":"super-z","action":"undo","label":"undo","frontend":"all","context":"listing","preset":"mac","code":"Key_Z","text":"","ctrl":false,"shift":false,"alt":false,"super":true,"keycode":Qt.Key_Z,"mask":(Qt.MetaModifier)},
63
+ {"mods":"ctrlshift","key":"Z","keys":"ctrl-shift-z","action":"redo","label":"redo","frontend":"all","context":"listing","preset":"default","code":"Key_Z","text":"","ctrl":true,"shift":true,"alt":false,"super":false,"keycode":Qt.Key_Z,"mask":(Qt.ControlModifier | Qt.ShiftModifier)},
64
+ {"mods":"supershift","key":"Z","keys":"supershift-z","action":"redo","label":"redo","frontend":"all","context":"listing","preset":"mac","code":"Key_Z","text":"","ctrl":false,"shift":true,"alt":false,"super":true,"keycode":Qt.Key_Z,"mask":(Qt.MetaModifier | Qt.ShiftModifier)},
65
+ {"mods":"super","key":"A","keys":"super-a","action":"selectAll","label":"select all","frontend":"all","context":"listing","preset":"mac","code":"Key_A","text":"","ctrl":false,"shift":false,"alt":false,"super":true,"keycode":Qt.Key_A,"mask":(Qt.MetaModifier)},
66
+ {"mods":"super","key":"I","keys":"super-i","action":"properties","label":"get info","frontend":"all","context":"listing","preset":"mac","code":"Key_I","text":"","ctrl":false,"shift":false,"alt":false,"super":true,"keycode":Qt.Key_I,"mask":(Qt.MetaModifier)},
67
+ {"mods":"super","key":"N","keys":"super-n","action":"windowNew","label":"new window","frontend":"gui","context":"listing,rail","preset":"mac","code":"Key_N","text":"","ctrl":false,"shift":false,"alt":false,"super":true,"keycode":Qt.Key_N,"mask":(Qt.MetaModifier)},
68
+ {"mods":"super","key":"BracketLeft","keys":"super-bracketleft","action":"historyBack","label":"back","frontend":"all","context":"listing","preset":"mac","code":"Key_BracketLeft","text":"","ctrl":false,"shift":false,"alt":false,"super":true,"keycode":Qt.Key_BracketLeft,"mask":(Qt.MetaModifier)},
69
+ {"mods":"super","key":"BracketRight","keys":"super-bracketright","action":"historyForward","label":"forward","frontend":"all","context":"listing","preset":"mac","code":"Key_BracketRight","text":"","ctrl":false,"shift":false,"alt":false,"super":true,"keycode":Qt.Key_BracketRight,"mask":(Qt.MetaModifier)},
70
+ {"mods":"supershift","key":"Period","keys":"supershift-period","action":"toggleHidden","label":"hidden files","frontend":"all","context":"listing","preset":"mac","code":"Key_Period","text":"","ctrl":false,"shift":true,"alt":false,"super":true,"keycode":Qt.Key_Period,"mask":(Qt.MetaModifier | Qt.ShiftModifier)},
71
+ {"mods":"supershift","key":"Greater","keys":"supershift-greater","action":"toggleHidden","label":"hidden files","frontend":"all","context":"listing","preset":"mac","code":"Key_Greater","text":"","ctrl":false,"shift":true,"alt":false,"super":true,"keycode":Qt.Key_Greater,"mask":(Qt.MetaModifier | Qt.ShiftModifier)},
72
+ {"mods":"ctrl","key":"D","keys":"ctrl-d","action":"trash","label":"move to Trash","frontend":"all","context":"listing","preset":"windows","code":"Key_D","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_D,"mask":(Qt.ControlModifier)},
73
+ {"mods":"ctrl","key":"Y","keys":"ctrl-y","action":"redo","label":"redo","frontend":"all","context":"listing","preset":"windows","code":"Key_Y","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Y,"mask":(Qt.ControlModifier)},
74
+ {"mods":"alt","key":"Return","keys":"alt-return","action":"properties","label":"properties","frontend":"all","context":"listing","preset":"windows","code":"Key_Return","text":"","ctrl":false,"shift":false,"alt":true,"super":false,"keycode":Qt.Key_Return,"mask":(Qt.AltModifier)},
75
+ {"mods":"alt","key":"Enter","keys":"alt-enter","action":"properties","label":"properties","frontend":"all","context":"listing","preset":"windows","code":"Key_Enter","text":"","ctrl":false,"shift":false,"alt":true,"super":false,"keycode":Qt.Key_Enter,"mask":(Qt.AltModifier)},
76
+ {"mods":"alt","key":"Left","keys":"alt-left","action":"historyBack","label":"back","frontend":"all","context":"listing","preset":"windows","code":"Key_Left","text":"","ctrl":false,"shift":false,"alt":true,"super":false,"keycode":Qt.Key_Left,"mask":(Qt.AltModifier)},
77
+ {"mods":"alt","key":"Right","keys":"alt-right","action":"historyForward","label":"forward","frontend":"all","context":"listing","preset":"windows","code":"Key_Right","text":"","ctrl":false,"shift":false,"alt":true,"super":false,"keycode":Qt.Key_Right,"mask":(Qt.AltModifier)},
78
+ {"mods":"alt","key":"Up","keys":"alt-up","action":"parent","label":"up one level","frontend":"all","context":"listing","preset":"windows","code":"Key_Up","text":"","ctrl":false,"shift":false,"alt":true,"super":false,"keycode":Qt.Key_Up,"mask":(Qt.AltModifier)},
79
+ {"mods":"none","key":"Escape","keys":"escape","action":"escape","label":"escape","frontend":"all","context":"rail,menu,panel,preview,pdf,media","preset":"all","code":"Key_Escape","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Escape,"mask":(0)},
80
+ {"mods":"none","key":"Menu","keys":"menu","action":"menu","label":"context menu","frontend":"all","context":"listing,rail","preset":"all","code":"Key_Menu","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Menu,"mask":(0)},
81
+ {"mods":"none","key":"F4","keys":"f4","action":"autofitColumns","label":"autofit columns","frontend":"gui","context":"listing","preset":"all","code":"Key_F4","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_F4,"mask":(0)},
82
+ {"mods":"shift","key":"F10","keys":"shift-f10","action":"menu","label":"context menu","frontend":"all","context":"listing,rail","preset":"all","code":"Key_F10","text":"","ctrl":false,"shift":true,"alt":false,"super":false,"keycode":Qt.Key_F10,"mask":(Qt.ShiftModifier)},
83
+ {"mods":"none","key":"Down","keys":"down","action":"cursorDown","label":"cursorDown","frontend":"all","context":"rail,menu,panel,preview,pdf,media","preset":"all","code":"Key_Down","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Down,"mask":(0)},
84
+ {"mods":"none","key":"Up","keys":"up","action":"cursorUp","label":"cursorUp","frontend":"all","context":"rail,menu,panel,preview,pdf,media","preset":"all","code":"Key_Up","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Up,"mask":(0)},
85
+ {"mods":"text","key":"j","keys":"j","action":"cursorDown","label":"cursorDown","frontend":"all","context":"rail,menu,panel,preview,media","preset":"all","code":"","text":"j","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
86
+ {"mods":"text","key":"p","keys":"p","action":"playPause","label":"playPause","frontend":"all","context":"media","preset":"all","code":"","text":"p","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
87
+ {"mods":"text","key":"m","keys":"m","action":"mute","label":"mute","frontend":"all","context":"media","preset":"all","code":"","text":"m","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
88
+ {"mods":"text","key":"k","keys":"k","action":"cursorUp","label":"cursorUp","frontend":"all","context":"rail,menu,panel,preview,media","preset":"all","code":"","text":"k","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
89
+ {"mods":"none","key":"Return","keys":"return","action":"open","label":"open","frontend":"all","context":"rail,menu,panel,preview,pdf,media","preset":"all","code":"Key_Return","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Return,"mask":(0)},
90
+ {"mods":"none","key":"Enter","keys":"enter","action":"open","label":"open","frontend":"all","context":"rail,menu,panel,preview,pdf,media","preset":"all","code":"Key_Enter","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Enter,"mask":(0)},
91
+ {"mods":"none","key":"Space","keys":"space","action":"preview","label":"preview","frontend":"all","context":"rail,menu,panel,preview,pdf,media","preset":"all","code":"Key_Space","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Space,"mask":(0)},
92
+ {"mods":"none","key":"Tab","keys":"tab","action":"focusNext","label":"focusNext","frontend":"all","context":"rail,menu,panel,preview,pdf,media","preset":"all","code":"Key_Tab","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Tab,"mask":(0)},
93
+ {"mods":"shift","key":"Tab","keys":"shift-tab","action":"focusPrevious","label":"focus back","frontend":"all","context":"listing,rail,menu,panel,preview,pdf,media","preset":"all","code":"Key_Tab","text":"","ctrl":false,"shift":true,"alt":false,"super":false,"keycode":Qt.Key_Tab,"mask":(Qt.ShiftModifier)},
94
+ {"mods":"shift","key":"Backtab","keys":"shift-backtab","action":"focusPrevious","label":"focus back","frontend":"all","context":"listing,rail,menu,panel,preview,pdf,media","preset":"all","code":"Key_Backtab","text":"","ctrl":false,"shift":true,"alt":false,"super":false,"keycode":Qt.Key_Backtab,"mask":(Qt.ShiftModifier)},
95
+ {"mods":"none","key":"Right","keys":"right","action":"menuRight","label":"menuRight","frontend":"all","context":"menu","preset":"all","code":"Key_Right","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Right,"mask":(0)},
96
+ {"mods":"none","key":"Left","keys":"left","action":"parent","label":"parent","frontend":"all","context":"menu","preset":"all","code":"Key_Left","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Left,"mask":(0)},
97
+ {"mods":"text","key":"l","keys":"l","action":"menuRight","label":"menuRight","frontend":"all","context":"menu","preset":"all","code":"","text":"l","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
98
+ {"mods":"text","key":"1","keys":"1","action":"tag1","label":"tag 1","frontend":"all","context":"menu","preset":"all","code":"","text":"1","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
99
+ {"mods":"text","key":"2","keys":"2","action":"tag2","label":"tag 2","frontend":"all","context":"menu","preset":"all","code":"","text":"2","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
100
+ {"mods":"text","key":"3","keys":"3","action":"tag3","label":"tag 3","frontend":"all","context":"menu","preset":"all","code":"","text":"3","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
101
+ {"mods":"text","key":"4","keys":"4","action":"tag4","label":"tag 4","frontend":"all","context":"menu","preset":"all","code":"","text":"4","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
102
+ {"mods":"text","key":"5","keys":"5","action":"tag5","label":"tag 5","frontend":"all","context":"menu","preset":"all","code":"","text":"5","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
103
+ {"mods":"text","key":"6","keys":"6","action":"tag6","label":"tag 6","frontend":"all","context":"menu","preset":"all","code":"","text":"6","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
104
+ {"mods":"text","key":"7","keys":"7","action":"tag7","label":"tag 7","frontend":"all","context":"menu","preset":"all","code":"","text":"7","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
105
+ {"mods":"text","key":"h","keys":"h","action":"parent","label":"parent","frontend":"all","context":"menu","preset":"all","code":"","text":"h","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
106
+ {"mods":"text","key":"p","keys":"p","action":"copyPath","label":"copy path","frontend":"all","context":"menu","preset":"all","code":"","text":"p","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
107
+ {"mods":"text","key":"n","keys":"n","action":"copyName","label":"copy name","frontend":"all","context":"menu","preset":"all","code":"","text":"n","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
108
+ {"mods":"text","key":"e","keys":"e","action":"copyStem","label":"copy name without extension","frontend":"all","context":"menu","preset":"all","code":"","text":"e","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
109
+ {"mods":"text","key":"f","keys":"f","action":"copydirpath","label":"copy folder path","frontend":"all","context":"menu","preset":"all","code":"","text":"f","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
110
+ {"mods":"text","key":"u","keys":"u","action":"copyUri","label":"copy file URI","frontend":"all","context":"menu","preset":"all","code":"","text":"u","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
111
+ {"mods":"text","key":"s","keys":"s","action":"copyQuoted","label":"copy shell-quoted","frontend":"all","context":"menu","preset":"all","code":"","text":"s","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
112
+ {"mods":"text","key":"L","keys":"L","action":"pasteLink","label":"paste link","frontend":"all","context":"menu","preset":"all","code":"","text":"L","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
113
+ {"mods":"text","key":"a","keys":"a","action":"pasteAbsoluteLink","label":"paste absolute link","frontend":"all","context":"menu","preset":"all","code":"","text":"a","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
114
+ {"mods":"text","key":"H","keys":"H","action":"pasteHardLink","label":"paste hard link","frontend":"all","context":"menu","preset":"all","code":"","text":"H","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
115
+ {"mods":"ctrl","key":"Tab","keys":"ctrl-tab","action":"focusPreview","label":"focus listing","frontend":"all","context":"preview,pdf,media","preset":"all","code":"Key_Tab","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Tab,"mask":(Qt.ControlModifier)},
116
+ {"mods":"none","key":"Left","keys":"left","action":"seekBack","label":"seekBack","frontend":"all","context":"preview,pdf,media","preset":"all","code":"Key_Left","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Left,"mask":(0)},
117
+ {"mods":"none","key":"Right","keys":"right","action":"seekForward","label":"seekForward","frontend":"all","context":"preview,pdf,media","preset":"all","code":"Key_Right","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Right,"mask":(0)},
118
+ {"mods":"text","key":"h","keys":"h","action":"seekBack","label":"seekBack","frontend":"all","context":"preview,pdf,media","preset":"all","code":"","text":"h","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
119
+ {"mods":"text","key":"l","keys":"l","action":"pageForward","label":"pageForward","frontend":"all","context":"preview,pdf,media","preset":"all","code":"","text":"l","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
120
+ {"mods":"text","key":"r","keys":"r","action":"markdownView","label":"rendered/source","frontend":"all","context":"preview","preset":"all","code":"","text":"r","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
121
+ {"mods":"text","key":"w","keys":"w","action":"toggleWrap","label":"wrap","frontend":"all","context":"preview","preset":"all","code":"","text":"w","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
122
+ {"mods":"text","key":"y","keys":"y","action":"copyPatch","label":"copy patch","frontend":"all","context":"preview","preset":"all","code":"","text":"y","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
123
+ {"mods":"text","key":"-","keys":"-","action":"zoomOut","label":"zoomOut","frontend":"all","context":"preview,pdf","preset":"all","code":"","text":"-","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
124
+ {"mods":"text","key":"+","keys":"+","action":"zoomIn","label":"zoomIn","frontend":"all","context":"preview,pdf","preset":"all","code":"","text":"+","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
125
+ {"mods":"text","key":"0","keys":"0","action":"zoomFit","label":"zoomFit","frontend":"all","context":"preview","preset":"all","code":"","text":"0","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
126
+ {"mods":"text","key":"e","keys":"e","action":"expand","label":"expand","frontend":"all","context":"pdf","preset":"all","code":"","text":"e","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
127
+ {"mods":"none","key":"Escape","keys":"escape","action":"escape","label":"close editor","frontend":"all","context":"editor","preset":"all","code":"Key_Escape","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Escape,"mask":(0)},
128
+ {"mods":"text","key":"F","keys":"F","action":"previewPageForward","label":"page preview forward","frontend":"gui","context":"listing","preset":"all","code":"","text":"F","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
129
+ {"mods":"text","key":"B","keys":"B","action":"previewPageBack","label":"page preview back","frontend":"gui","context":"listing","preset":"all","code":"","text":"B","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
130
+ ]
131
+ var SHARED_KEYS = [
132
+ {"mods":"ctrlshift","key":"N","keys":"ctrl-shift-n","action":"newFolder","context":"listing","frontend":"all","preset":"all","code":"Key_N","text":"","ctrl":true,"shift":true,"alt":false,"super":false,"keycode":Qt.Key_N,"mask":(Qt.ControlModifier | Qt.ShiftModifier)},
133
+ {"mods":"ctrlshift","key":"Plus","keys":"ctrl-shift-plus","action":"textSizeUp","context":"listing","frontend":"all","preset":"all","code":"Key_Plus","text":"","ctrl":true,"shift":true,"alt":false,"super":false,"keycode":Qt.Key_Plus,"mask":(Qt.ControlModifier | Qt.ShiftModifier)},
134
+ {"mods":"ctrlshift","key":"Equal","keys":"ctrl-shift-equal","action":"textSizeUp","context":"listing","frontend":"all","preset":"all","code":"Key_Equal","text":"","ctrl":true,"shift":true,"alt":false,"super":false,"keycode":Qt.Key_Equal,"mask":(Qt.ControlModifier | Qt.ShiftModifier)},
135
+ {"mods":"ctrlshift","key":"Minus","keys":"ctrl-shift-minus","action":"textSizeDown","context":"listing","frontend":"all","preset":"all","code":"Key_Minus","text":"","ctrl":true,"shift":true,"alt":false,"super":false,"keycode":Qt.Key_Minus,"mask":(Qt.ControlModifier | Qt.ShiftModifier)},
136
+ {"mods":"ctrlshift","key":"Underscore","keys":"ctrl-shift-underscore","action":"textSizeDown","context":"listing","frontend":"all","preset":"all","code":"Key_Underscore","text":"","ctrl":true,"shift":true,"alt":false,"super":false,"keycode":Qt.Key_Underscore,"mask":(Qt.ControlModifier | Qt.ShiftModifier)},
137
+ {"mods":"ctrlshift","key":"0","keys":"ctrl-shift-0","action":"textSizeReset","context":"listing","frontend":"all","preset":"all","code":"Key_0","text":"","ctrl":true,"shift":true,"alt":false,"super":false,"keycode":Qt.Key_0,"mask":(Qt.ControlModifier | Qt.ShiftModifier)},
138
+ {"mods":"ctrlshift","key":"Greater","keys":"ctrl-shift-greater","action":"toggleHidden","context":"listing","frontend":"all","preset":"all","code":"Key_Greater","text":"","ctrl":true,"shift":true,"alt":false,"super":false,"keycode":Qt.Key_Greater,"mask":(Qt.ControlModifier | Qt.ShiftModifier)},
139
+ {"mods":"ctrlshift","key":"Period","keys":"ctrl-shift-.","action":"toggleHidden","context":"listing","frontend":"all","preset":"all","code":"Key_Period","text":"","ctrl":true,"shift":true,"alt":false,"super":false,"keycode":Qt.Key_Period,"mask":(Qt.ControlModifier | Qt.ShiftModifier)},
140
+ {"mods":"ctrlshift","key":"PageUp","keys":"ctrl-shift-pageup","action":"tabMoveLeft","context":"listing","frontend":"all","preset":"all","code":"Key_PageUp","text":"","ctrl":true,"shift":true,"alt":false,"super":false,"keycode":Qt.Key_PageUp,"mask":(Qt.ControlModifier | Qt.ShiftModifier)},
141
+ {"mods":"ctrlshift","key":"PageDown","keys":"ctrl-shift-pagedown","action":"tabMoveRight","context":"listing","frontend":"all","preset":"all","code":"Key_PageDown","text":"","ctrl":true,"shift":true,"alt":false,"super":false,"keycode":Qt.Key_PageDown,"mask":(Qt.ControlModifier | Qt.ShiftModifier)},
142
+ {"mods":"ctrlshift","key":"C","keys":"ctrl-shift-c","action":"copyPath","context":"listing","frontend":"all","preset":"all","code":"Key_C","text":"","ctrl":true,"shift":true,"alt":false,"super":false,"keycode":Qt.Key_C,"mask":(Qt.ControlModifier | Qt.ShiftModifier)},
143
+ {"mods":"ctrl","key":"D","keys":"ctrl-d","action":"pageDown","context":"listing","frontend":"all","preset":"all","code":"Key_D","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_D,"mask":(Qt.ControlModifier)},
144
+ {"mods":"ctrl","key":"U","keys":"ctrl-u","action":"pageUp","context":"listing","frontend":"all","preset":"all","code":"Key_U","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_U,"mask":(Qt.ControlModifier)},
145
+ {"mods":"ctrl","key":"A","keys":"ctrl-a","action":"selectAll","context":"listing","frontend":"all","preset":"all","code":"Key_A","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_A,"mask":(Qt.ControlModifier)},
146
+ {"mods":"ctrl","key":"C","keys":"ctrl-c","action":"copy","context":"listing","frontend":"all","preset":"all","code":"Key_C","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_C,"mask":(Qt.ControlModifier)},
147
+ {"mods":"ctrl","key":"V","keys":"ctrl-v","action":"paste","context":"listing","frontend":"all","preset":"all","code":"Key_V","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_V,"mask":(Qt.ControlModifier)},
148
+ {"mods":"ctrl","key":"X","keys":"ctrl-x","action":"cut","context":"listing","frontend":"all","preset":"all","code":"Key_X","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_X,"mask":(Qt.ControlModifier)},
149
+ {"mods":"ctrl","key":"Z","keys":"ctrl-z","action":"undo","context":"listing","frontend":"all","preset":"all","code":"Key_Z","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Z,"mask":(Qt.ControlModifier)},
150
+ {"mods":"ctrl","key":"F","keys":"ctrl-f","action":"search","context":"listing","frontend":"all","preset":"all","code":"Key_F","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_F,"mask":(Qt.ControlModifier)},
151
+ {"mods":"ctrl","key":"E","keys":"ctrl-e","action":"eject","context":"listing","frontend":"all","preset":"all","code":"Key_E","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_E,"mask":(Qt.ControlModifier)},
152
+ {"mods":"ctrl","key":"B","keys":"ctrl-b","action":"sidebar","context":"listing","frontend":"all","preset":"all","code":"Key_B","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_B,"mask":(Qt.ControlModifier)},
153
+ {"mods":"ctrl","key":"L","keys":"ctrl-l","action":"pathBar","context":"listing","frontend":"all","preset":"all","code":"Key_L","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_L,"mask":(Qt.ControlModifier)},
154
+ {"mods":"ctrl","key":"T","keys":"ctrl-t","action":"openTerminal","context":"listing","frontend":"all","preset":"all","code":"Key_T","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_T,"mask":(Qt.ControlModifier)},
155
+ {"mods":"ctrl","key":"Return","keys":"ctrl-enter","action":"openTab","context":"listing","frontend":"all","preset":"all","code":"Key_Return","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Return,"mask":(Qt.ControlModifier)},
156
+ {"mods":"ctrl","key":"Enter","keys":"ctrl-enter","action":"openTab","context":"listing","frontend":"all","preset":"all","code":"Key_Enter","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Enter,"mask":(Qt.ControlModifier)},
157
+ {"mods":"ctrl","key":"R","keys":"ctrl-r","action":"reload","context":"listing","frontend":"all","preset":"all","code":"Key_R","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_R,"mask":(Qt.ControlModifier)},
158
+ {"mods":"ctrl","key":"Comma","keys":"ctrl-comma","action":"settings","context":"listing","frontend":"all","preset":"all","code":"Key_Comma","text":"","ctrl":true,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Comma,"mask":(Qt.ControlModifier)},
159
+ {"mods":"shift","key":"Down","keys":"shift-down","action":"extendDown","context":"listing","frontend":"all","preset":"all","code":"Key_Down","text":"","ctrl":false,"shift":true,"alt":false,"super":false,"keycode":Qt.Key_Down,"mask":(Qt.ShiftModifier)},
160
+ {"mods":"shift","key":"Up","keys":"shift-up","action":"extendUp","context":"listing","frontend":"all","preset":"all","code":"Key_Up","text":"","ctrl":false,"shift":true,"alt":false,"super":false,"keycode":Qt.Key_Up,"mask":(Qt.ShiftModifier)},
161
+ {"mods":"none","key":"Down","keys":"down","action":"cursorDown","context":"listing","frontend":"all","preset":"all","code":"Key_Down","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Down,"mask":(0)},
162
+ {"mods":"none","key":"Up","keys":"up","action":"cursorUp","context":"listing","frontend":"all","preset":"all","code":"Key_Up","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Up,"mask":(0)},
163
+ {"mods":"none","key":"Home","keys":"home","action":"cursorFirst","context":"listing","frontend":"all","preset":"all","code":"Key_Home","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Home,"mask":(0)},
164
+ {"mods":"none","key":"End","keys":"end","action":"cursorLast","context":"listing","frontend":"all","preset":"all","code":"Key_End","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_End,"mask":(0)},
165
+ {"mods":"none","key":"PageUp","keys":"pageup","action":"pageUp","context":"listing","frontend":"all","preset":"all","code":"Key_PageUp","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_PageUp,"mask":(0)},
166
+ {"mods":"none","key":"PageDown","keys":"pagedown","action":"pageDown","context":"listing","frontend":"all","preset":"all","code":"Key_PageDown","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_PageDown,"mask":(0)},
167
+ {"mods":"none","key":"Return","keys":"enter","action":"open","context":"listing","frontend":"all","preset":"all","code":"Key_Return","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Return,"mask":(0)},
168
+ {"mods":"none","key":"Enter","keys":"enter","action":"open","context":"listing","frontend":"all","preset":"all","code":"Key_Enter","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Enter,"mask":(0)},
169
+ {"mods":"none","key":"Backspace","keys":"backspace","action":"parent","context":"listing","frontend":"all","preset":"all","code":"Key_Backspace","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Backspace,"mask":(0)},
170
+ {"mods":"none","key":"Delete","keys":"delete","action":"trash","context":"listing","frontend":"all","preset":"all","code":"Key_Delete","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Delete,"mask":(0)},
171
+ {"mods":"none","key":"Escape","keys":"escape","action":"escape","context":"listing","frontend":"all","preset":"all","code":"Key_Escape","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Escape,"mask":(0)},
172
+ {"mods":"none","key":"Tab","keys":"tab","action":"focusNext","context":"listing","frontend":"all","preset":"all","code":"Key_Tab","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Tab,"mask":(0)},
173
+ {"mods":"none","key":"Space","keys":"space","action":"preview","context":"listing","frontend":"all","preset":"all","code":"Key_Space","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Space,"mask":(0)},
174
+ {"mods":"none","key":"F2","keys":"f2","action":"rename","context":"listing","frontend":"all","preset":"all","code":"Key_F2","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_F2,"mask":(0)},
175
+ {"mods":"none","key":"F5","keys":"f5","action":"reload","context":"listing","frontend":"all","preset":"all","code":"Key_F5","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_F5,"mask":(0)},
176
+ {"mods":"none","key":"Left","keys":"left","action":"parent","context":"listing","frontend":"all","preset":"all","code":"Key_Left","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Left,"mask":(0)},
177
+ {"mods":"none","key":"Right","keys":"right","action":"pageForward","context":"listing","frontend":"all","preset":"all","code":"Key_Right","text":"","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":Qt.Key_Right,"mask":(0)},
178
+ {"mods":"text","key":"j","keys":"j","action":"cursorDown","context":"listing","frontend":"all","preset":"all","code":"","text":"j","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
179
+ {"mods":"text","key":"k","keys":"k","action":"cursorUp","context":"listing","frontend":"all","preset":"all","code":"","text":"k","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
180
+ {"mods":"text","key":"g","keys":"g","action":"cursorFirst","context":"listing","frontend":"all","preset":"all","code":"","text":"g","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
181
+ {"mods":"text","key":"G","keys":"G","action":"cursorLast","context":"listing","frontend":"all","preset":"all","code":"","text":"G","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
182
+ {"mods":"text","key":"v","keys":"v","action":"toggleSelect","context":"listing","frontend":"all","preset":"all","code":"","text":"v","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
183
+ {"mods":"text","key":"J","keys":"J","action":"extendDown","context":"listing","frontend":"all","preset":"all","code":"","text":"J","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
184
+ {"mods":"text","key":"K","keys":"K","action":"extendUp","context":"listing","frontend":"all","preset":"all","code":"","text":"K","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
185
+ {"mods":"text","key":"h","keys":"h","action":"parent","context":"listing","frontend":"all","preset":"all","code":"","text":"h","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
186
+ {"mods":"text","key":"/","keys":"/","action":"filter","context":"listing","frontend":"all","preset":"all","code":"","text":"/","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
187
+ {"mods":"text","key":"f","keys":"f","action":"search","context":"listing","frontend":"all","preset":"all","code":"","text":"f","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
188
+ {"mods":"text","key":"o","keys":"o","action":"reveal","context":"listing","frontend":"all","preset":"all","code":"","text":"o","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
189
+ {"mods":"text","key":":","keys":":","action":"pathBar","context":"listing","frontend":"all","preset":"all","code":"","text":":","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
190
+ {"mods":"text","key":"t","keys":"t","action":"tabNew","context":"listing","frontend":"all","preset":"all","code":"","text":"t","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
191
+ {"mods":"text","key":"T","keys":"T","action":"tags","context":"listing","frontend":"all","preset":"all","code":"","text":"T","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
192
+ {"mods":"text","key":"i","keys":"i","action":"factsToggle","context":"listing","frontend":"all","preset":"all","code":"","text":"i","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
193
+ {"mods":"text","key":"w","keys":"w","action":"tabClose","context":"listing","frontend":"all","preset":"all","code":"","text":"w","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
194
+ {"mods":"text","key":"y","keys":"y","action":"copy","context":"listing","frontend":"all","preset":"all","code":"","text":"y","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
195
+ {"mods":"text","key":"Y","keys":"Y","action":"copydirpath","context":"listing","frontend":"all","preset":"all","code":"","text":"Y","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
196
+ {"mods":"text","key":"x","keys":"x","action":"cut","context":"listing","frontend":"all","preset":"all","code":"","text":"x","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
197
+ {"mods":"text","key":"p","keys":"p","action":"paste","context":"listing","frontend":"all","preset":"all","code":"","text":"p","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
198
+ {"mods":"text","key":"d","keys":"dd","action":"trashArm","context":"listing","frontend":"all","preset":"all","code":"","text":"d","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
199
+ {"mods":"text","key":"r","keys":"r","action":"rename","context":"listing","frontend":"all","preset":"all","code":"","text":"r","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
200
+ {"mods":"text","key":"z","keys":"z","action":"undo","context":"listing","frontend":"all","preset":"all","code":"","text":"z","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
201
+ {"mods":"text","key":"s","keys":"s","action":"sortNext","context":"listing","frontend":"all","preset":"all","code":"","text":"s","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
202
+ {"mods":"text","key":"S","keys":"S","action":"sortReverse","context":"listing","frontend":"all","preset":"all","code":"","text":"S","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
203
+ {"mods":"text","key":".","keys":".","action":"toggleHidden","context":"listing","frontend":"all","preset":"all","code":"","text":".","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
204
+ {"mods":"text","key":"a","keys":"a","action":"addNetwork","context":"listing","frontend":"all","preset":"all","code":"","text":"a","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
205
+ {"mods":"text","key":"m","keys":"m","action":"menu","context":"listing","frontend":"all","preset":"all","code":"","text":"m","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
206
+ {"mods":"text","key":"c","keys":"c","action":"copyAs","context":"listing","frontend":"all","preset":"all","code":"","text":"c","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
207
+ {"mods":"text","key":"P","keys":"P","action":"pasteAs","context":"listing","frontend":"all","preset":"all","code":"","text":"P","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
208
+ {"mods":"text","key":"V","keys":"V","action":"invertSelection","context":"listing","frontend":"all","preset":"all","code":"","text":"V","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
209
+ {"mods":"text","key":",","keys":",","action":"settings","context":"listing","frontend":"all","preset":"all","code":"","text":",","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
210
+ {"mods":"text","key":"?","keys":"?","action":"keymapSheet","context":"listing","frontend":"all","preset":"all","code":"","text":"?","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
211
+ {"mods":"text","key":"-","keys":"-","action":"zoomOut","context":"listing","frontend":"all","preset":"all","code":"","text":"-","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
212
+ {"mods":"text","key":"+","keys":"+","action":"zoomIn","context":"listing","frontend":"all","preset":"all","code":"","text":"+","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
213
+ {"mods":"text","key":"e","keys":"e","action":"expand","context":"listing","frontend":"all","preset":"all","code":"","text":"e","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
214
+ {"mods":"text","key":"l","keys":"l","action":"pageForward","context":"listing","frontend":"all","preset":"all","code":"","text":"l","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
215
+ {"mods":"text","key":"{","keys":"{","action":"tabMoveLeft","context":"listing","frontend":"all","preset":"all","code":"","text":"{","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
216
+ {"mods":"text","key":"}","keys":"}","action":"tabMoveRight","context":"listing","frontend":"all","preset":"all","code":"","text":"}","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
217
+ {"mods":"text","key":"[","keys":"[","action":"tabPrevious","context":"listing","frontend":"all","sheet":false,"preset":"all","code":"","text":"[","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
218
+ {"mods":"text","key":"]","keys":"]","action":"tabNext","context":"listing","frontend":"all","sheet":false,"preset":"all","code":"","text":"]","ctrl":false,"shift":false,"alt":false,"super":false,"keycode":0,"mask":(0)},
219
+ ]
220
+ var POINTER = [{"where":"listing","press":"left","row":"any","does":"selectOnly","label":"put the cursor on the row and drop any other selection"},{"where":"listing","press":"left x2","row":"any","does":"open","label":"open the row"},{"where":"listing","press":"left","row":"result","does":"reveal","label":"go to the file in its own directory, selected"},{"where":"listing","press":"left x2","row":"result","does":"reveal","label":"still the one reveal the first tap made"},{"where":"listing","press":"ctrl left","row":"any","does":"toggleSelect","label":"add the row to the selection"},{"where":"listing","press":"shift left","row":"any","does":"extendSelect","label":"extend the selection to the row"},{"where":"listing","press":"ctrl left x2","row":"any","does":"toggleSelect","label":"still only selects"},{"where":"listing","press":"shift left x2","row":"any","does":"extendSelect","label":"still only selects"},{"where":"listing","press":"left","row":"renaming","does":"commitRename","label":"commit the open rename, then select the row"},{"where":"listing","press":"right","row":"any","does":"menu","label":"open the context menu at the pointer, on the selection the row is in"},{"where":"listing","press":"middle","row":"dir","does":"openTab","label":"open the directory in a new tab"},{"where":"listing","press":"middle","row":"file","does":"nothing","label":"a file has no directory to open in a tab"},{"where":"column","press":"left","row":"dir","does":"open","label":"go into that directory on one tap, as its neighbours do"},{"where":"neighbour","press":"left","row":"dir","does":"reveal","label":"show that directory in the middle column"},{"where":"neighbour","press":"left","row":"file","does":"nothing","label":"a file has no contents to reveal"},{"where":"neighbour","press":"left x2","row":"file","does":"open","label":"open the file"},{"where":"neighbour","press":"right","row":"any","does":"nothing","label":"a peeked row has no menu"},{"where":"neighbour","press":"middle","row":"dir","does":"openTab","label":"open the peeked directory in a new tab"},{"where":"chrome","press":"left","row":"parent","does":"goToCrumb","label":"open the directory that segment of the path names, on the first tap"},{"where":"chrome","press":"left x2","row":"inert","does":"pathBar","label":"type the path: the current folder's own segment, the collapsed marker or the strip beside the path"},{"where":"window","press":"back","row":"any","does":"backOrParent","label":"go back through the history, or up a directory when there is none"},{"where":"window","press":"forward","row":"any","does":"forward","label":"go forward again through a back, and nothing when there is none"},{"where":"rail","press":"left","row":"any","does":"open","label":"open the place"},{"where":"rail","press":"right","row":"any","does":"menu","label":"eject and unmount"},{"where":"rail","press":"middle","row":"place","does":"openTab","label":"open the place in a new tab"}]
221
+ var BASE_SHEET = [{"keys":"j k","action":"cursorDown","label":"move"},{"keys":"enter","action":"open","label":"open"},{"keys":"^enter","action":"openTab","label":"open in new tab"},{"keys":"h","action":"parent","label":"parent"},{"keys":"l","action":"pageForward","label":"browse in"},{"keys":"space","action":"preview","label":"quick look"},{"keys":"/","action":"filter","label":"filter"},{"keys":"f","action":"search","label":"find"},{"keys":"o","action":"reveal","label":"reveal"},{"keys":"F5 ^r","action":"reload","label":"reload"},{"keys":"tab","action":"focusNext","label":"scope / focus"},{"keys":": ^l","action":"pathBar","label":"path"},{"keys":"y ^c","action":"copy","label":"copy"},{"keys":"Y","action":"copydirpath","label":"folder path"},{"keys":"x ^x","action":"cut","label":"cut"},{"keys":"p ^v","action":"paste","label":"paste"},{"keys":"r","action":"rename","label":"rename"},{"keys":"F4","action":"autofitColumns","label":"autofit columns"},{"keys":"dd","action":"trashArm","label":"trash"},{"keys":"z ^z","action":"undo","label":"undo"},{"keys":"T","action":"tags","label":"tags"},{"keys":"i","action":"factsToggle","label":"facts"},{"keys":"^N","action":"newFolder","label":"new folder"},{"keys":"v","action":"toggleSelect","label":"select"},{"keys":"s","action":"sortNext","label":"sort"},{"keys":"S","action":"sortReverse","label":"reverse"},{"keys":". ^>","action":"toggleHidden","label":"hidden files"},{"keys":"a","action":"addNetwork","label":"add network place"},{"keys":"m","action":"menu","label":"menu"},{"keys":"^e","action":"eject","label":"eject"},{"keys":"^t","action":"openTerminal","label":"terminal"},{"keys":"^+","action":"textSizeUp","label":"larger"},{"keys":"^-","action":"textSizeDown","label":"smaller"},{"keys":"^)","action":"textSizeReset","label":"reset size"},{"keys":",","action":"settings","label":"settings"},{"keys":"?","action":"keymapSheet","label":"keys"}]
222
+ var SHEET_GROUPS = {"move":["cursorDown","cursorUp","cursorFirst","cursorLast","pageDown","pageUp","open","parent","pageForward","historyBack","historyForward","focusNext","focusPrevious","focusPreview","tabNew","openTab","tabClose","tabNext","tabPrevious","tabMoveLeft","tabMoveRight","windowNew","escape"],"look":["viewList","viewColumns","viewGrid","viewDual","togglePreview","factsToggle","loadPreview","preview","previewPageForward","previewPageBack","toggleHidden","sidebar","zoomIn","zoomOut","expand","mute","textSizeUp","textSizeDown","textSizeReset","keymapSheet"],"find":["filter","search","reveal","sortNext","sortReverse","pathBar","reload"],"change":["copy","cut","paste","movePaste","duplicate","rename","trash","deletePermanently","undo","redo","newFolder","copydirpath","copyPath","toggleSelect","selectAll","extendDown","extendUp","menu","properties","addNetwork","eject","openTerminal","settings","autofitColumns","copyAs","pasteAs","invertSelection","tags"]}
223
+ var SHEET_EXTRA = [{"preset":"all","mods":"text","keys":"m","action":"mute","label":"mute","context":"media"}]
224
+ var DIGITS = {"from":1,"to":9,"prefix":"tab"}
225
+
226
+ function applies(row, context, frontend) {
227
+ return (row.context.split(",").indexOf(context) >= 0 || row.context === "all")
228
+ && (row.frontend === frontend || row.frontend === "all")
229
+ }
230
+ function matches(row, key, text, modifiers) {
231
+ var mask = modifiers & (Qt.ControlModifier | Qt.ShiftModifier | Qt.AltModifier | Qt.MetaModifier)
232
+ if (row.mods === "text")
233
+ return (mask & ~Qt.ShiftModifier) === 0 && text === row.text
234
+ return mask === row.mask && key === row.keycode
235
+ }
236
+ // A matching empty action suppresses fallback, as Mac Ctrl+X requires.
237
+ function presetMatch(name, key, text, modifiers, context, frontend) {
238
+ for (var pass = 0; pass < 2; pass++) {
239
+ for (var i = 0; i < PRESET_KEYS.length; i++) {
240
+ var row = PRESET_KEYS[i]
241
+ if (row.preset !== (pass === 0 ? name : "all")) continue
242
+ if (matches(row, key, text, modifiers) && applies(row, context, frontend)) return row
243
+ }
244
+ }
245
+ return null
246
+ }
247
+ function lookupFor(name, key, text, modifiers, context, frontend) {
248
+ context = context || "listing"
249
+ frontend = frontend || "gui"
250
+ var row = presetMatch(name, key, text, modifiers, context, frontend)
251
+ if (row) return row.action
252
+ if (context !== "listing" && context !== "rail") return ""
253
+ for (var i = 0; i < SHARED_KEYS.length; i++) {
254
+ if (matches(SHARED_KEYS[i], key, text, modifiers)) return SHARED_KEYS[i].action
255
+ }
256
+ if ((frontend === "tui" || frontend === "gui") && modifiers === 0 && text >= String(DIGITS.from) && text <= String(DIGITS.to))
257
+ return DIGITS.prefix + text
258
+ return ""
259
+ }
260
+ function lookup(key, text, modifiers, context, frontend) {
261
+ return lookupFor(preset, key, text, modifiers, context, frontend)
262
+ }
263
+ function actionGroup(action) {
264
+ var arms = { copyArm: "copy", cutArm: "cut", pasteArm: "paste", cursorFirstArm: "cursorFirst", trashArm: "trash" }
265
+ return arms[action] || action
266
+ }
267
+ function bindingRows(name, frontend, group) {
268
+ var rows = [], candidates = PRESET_KEYS.concat(SHARED_KEYS)
269
+ for (var i = 0; i < candidates.length; i++) {
270
+ var row = candidates[i]
271
+ if ((row.preset !== "all" && row.preset !== name) || (group !== undefined && actionGroup(row.action) !== group)) continue
272
+ if (!applies(row, "listing", frontend || "gui") || !row.action) continue
273
+ if (lookupFor(name, row.keycode, row.text, row.mask, "listing", frontend || "gui") !== row.action) continue
274
+ var duplicate = rows.some(function (kept) { return kept.keys === row.keys && kept.action === row.action })
275
+ if (!duplicate) rows.push(row)
276
+ }
277
+ return rows
278
+ }
279
+ // One action per first ask, never the whole table: the status strip asks for one key while the first window builds.
280
+ function hintFor(action) {
281
+ if (!Object.prototype.hasOwnProperty.call(HINTS, action)) HINTS[action] = hintsFor(preset, action)[action] || ""
282
+ return HINTS[action]
283
+ }
284
+ // How wide a cap may get before a second spelling stops earning its place. The sheet draws two
285
+ // columns of a 300 unit card, so a cap past this elides and the wording beside it has nowhere to go.
286
+ var SHEET_CAP_BUDGET = 16
287
+
288
+ // Actions that answer each other show a second spelling on both members or on neither (width alone gave "]" beside "[ / ctrl-pageup").
289
+ var SHEET_MIRRORS = [["cursorDown", "cursorUp"], ["cursorFirst", "cursorLast"], ["pageDown", "pageUp"],
290
+ ["historyBack", "historyForward"], ["tabNext", "tabPrevious"], ["tabMoveLeft", "tabMoveRight"],
291
+ ["zoomIn", "zoomOut"], ["textSizeUp", "textSizeDown"], ["extendDown", "extendUp"]]
292
+
293
+ // An action id is not wording. A row the base sheet does not name printed its own identifier, so the
294
+ // pane advertised "pageDown" and "textSizeReset" beside sentences like "hidden files".
295
+ function spelledOut(action) {
296
+ return String(action).replace(/([a-z0-9])([A-Z])/g, "$1 $2").toLowerCase()
297
+ }
298
+
299
+ // Which spelling speaks for an action: the preset's own before an inherited one, and a plain key
300
+ // before a chord. setPreset ranks the menu hint the same way, so the sheet and the menus agree.
301
+ function capRank(row, preset) {
302
+ return (row.preset === preset ? 0 : 2) + (row.mods === "text" ? 0 : 1)
303
+ }
304
+
305
+ function sheetFor(name, frontend) {
306
+ var result = [], groups = {}
307
+ var rows = bindingRows(name, frontend || "gui").concat(SHEET_EXTRA).filter(function (row) { return row.sheet !== false })
308
+ for (var i = 0; i < rows.length; i++) {
309
+ var row = rows[i], action = actionGroup(row.action)
310
+ var group = groups[action]
311
+ if (!group) {
312
+ var label = row.label || spelledOut(action)
313
+ for (var j = 0; j < BASE_SHEET.length; j++)
314
+ if (actionGroup(BASE_SHEET[j].action) === action) label = BASE_SHEET[j].label
315
+ group = { action: action, label: label, keys: "", context: row.context || "listing", spellings: [] }
316
+ result.push(group)
317
+ groups[action] = group
318
+ }
319
+ group.spellings.push(row)
320
+ }
321
+ // One cap names one key. Joining every spelling an action answers to built caps of 40 characters
322
+ // on the default preset and 78 on mac, wider than the whole card, so the pane drew them across
323
+ // the column beside it. The best spelling always shows, a second only while both still fit.
324
+ for (var g = 0; g < result.length; g++) {
325
+ var spellings = result[g].spellings.slice()
326
+ spellings.sort(function (left, right) { return capRank(left, name) - capRank(right, name) })
327
+ var keys = spellings.length ? spellings[0].keys : ""
328
+ result[g].alone = keys
329
+ for (var k = 1; k < spellings.length; k++) {
330
+ var both = keys + " / " + spellings[k].keys
331
+ if (spellings[k].keys === keys || both.length > SHEET_CAP_BUDGET) continue
332
+ keys = both
333
+ break
334
+ }
335
+ result[g].keys = keys
336
+ }
337
+ // A pair shows a second spelling only when both members have one that fits.
338
+ for (var m = 0; m < SHEET_MIRRORS.length; m++) {
339
+ var first = groups[SHEET_MIRRORS[m][0]], second = groups[SHEET_MIRRORS[m][1]]
340
+ if (!first || !second) continue
341
+ if ((first.keys !== first.alone) === (second.keys !== second.alone)) continue
342
+ first.keys = first.alone
343
+ second.keys = second.alone
344
+ }
345
+ for (var d = 0; d < result.length; d++) {
346
+ delete result[d].spellings
347
+ delete result[d].alone
348
+ }
349
+ return result
350
+ }
351
+ function hintsFor(name, group) {
352
+ var hints = {}, ranks = {}, rows = bindingRows(name, "gui", group)
353
+ for (var i = 0; i < rows.length; i++) {
354
+ var row = rows[i]
355
+ if (row.mods !== "text" && row.mods !== "none" && row.mods !== "shift") continue
356
+ var action = actionGroup(row.action), rank = (row.preset === name ? 0 : 2) + (row.mods === "text" ? 0 : row.mods === "none" ? 1 : 4)
357
+ if (ranks[action] !== undefined && ranks[action] <= rank) continue
358
+ // A menu hint is the key the operator presses: Menus.html and the OpenWith board
359
+ // both draw Move to Trash with d; a shift chord fills an action no plain key names. The full dd chord stays on the sheet below.
360
+ hints[action] = row.mods === "text" ? row.key : row.keys
361
+ ranks[action] = rank
362
+ }
363
+ return hints
364
+ }
365
+ function setPreset(name) {
366
+ preset = PRESETS.indexOf(name) >= 0 ? name : "default"
367
+ HINTS = {}
368
+ }
369
+ var HINTS = {}
370
+ setPreset("default")