Skip to content

Commit f2943b7

Browse files
committed
Add keymap migration UI for idris-hackers#204
1 parent bee20ee commit f2943b7

File tree

4 files changed

+114
-2
lines changed

4 files changed

+114
-2
lines changed

keymaps/language-idris.json

+28-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,20 @@
1313
"ctrl-i s": "language-idris:proof-search",
1414
"ctrl-i t": "language-idris:type-of",
1515
"ctrl-i w": "language-idris:make-with",
16-
"ctrl-i enter": "language-idris:open-repl"
16+
"ctrl-i enter": "language-idris:open-repl",
17+
18+
"ctrl-alt-a": "language-idris:legacy-keymap-notice",
19+
"ctrl-alt-b": "language-idris:legacy-keymap-notice",
20+
"ctrl-alt-c": "language-idris:legacy-keymap-notice",
21+
"ctrl-alt-d": "language-idris:legacy-keymap-notice",
22+
"ctrl-alt-l": "language-idris:legacy-keymap-notice",
23+
"ctrl-alt-m": "language-idris:legacy-keymap-notice",
24+
"ctrl-alt-p": "language-idris:legacy-keymap-notice",
25+
"ctrl-alt-r": "language-idris:legacy-keymap-notice",
26+
"ctrl-alt-s": "language-idris:legacy-keymap-notice",
27+
"ctrl-alt-t": "language-idris:legacy-keymap-notice",
28+
"ctrl-alt-w": "language-idris:legacy-keymap-notice",
29+
"ctrl-alt-enter": "language-idris:legacy-keymap-notice"
1730
},
1831

1932
".platform-darwin atom-text-editor[data-grammar~=\"idris\"]": {
@@ -30,6 +43,19 @@
3043
"cmd-i s": "language-idris:proof-search",
3144
"cmd-i t": "language-idris:type-of",
3245
"cmd-i w": "language-idris:make-with",
33-
"cmd-i enter": "language-idris:open-repl"
46+
"cmd-i enter": "language-idris:open-repl",
47+
48+
"cmd-alt-a": "language-idris:legacy-keymap-notice",
49+
"cmd-alt-b": "language-idris:legacy-keymap-notice",
50+
"cmd-alt-c": "language-idris:legacy-keymap-notice",
51+
"cmd-alt-d": "language-idris:legacy-keymap-notice",
52+
"cmd-alt-l": "language-idris:legacy-keymap-notice",
53+
"cmd-alt-m": "language-idris:legacy-keymap-notice",
54+
"cmd-alt-p": "language-idris:legacy-keymap-notice",
55+
"cmd-alt-r": "language-idris:legacy-keymap-notice",
56+
"cmd-alt-s": "language-idris:legacy-keymap-notice",
57+
"cmd-alt-t": "language-idris:legacy-keymap-notice",
58+
"cmd-alt-w": "language-idris:legacy-keymap-notice",
59+
"cmd-alt-enter": "language-idris:legacy-keymap-notice"
3460
}
3561
}

lib/idris-controller.coffee

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ Ipkg = require './utils/ipkg'
88
Symbol = require './utils/symbol'
99
editorHelper = require './utils/editor'
1010
highlighter = require './utils/highlighter'
11+
migrations = require './migrations'
1112

1213
class IdrisController
1314
errorMarkers: []
@@ -29,6 +30,7 @@ class IdrisController
2930
'language-idris:apropos': @runCommand @apropos
3031
'language-idris:add-proof-clause': @runCommand @doAddProofClause
3132
'language-idris:browse-namespace': @runCommand @doBrowseNamespace
33+
'language-idris:legacy-keymap-notice': migrations.showKeymapDeprecationNotice
3234

3335
isIdrisFile: (uri) ->
3436
uri?.match? /\.idr$/

lib/migrations.coffee

+83
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
#
2+
# Throw out this module as soon as it becomes a maintenance burden, or
3+
# sufficient stabilization time has passed for the new keymap.
4+
#
5+
6+
CSON = require 'cson-parser'
7+
8+
formatLegacyKeymap = () ->
9+
legacyKeymap =
10+
"atom-text-editor[data-grammar~=\"idris\"]":
11+
"ctrl-alt-a": "language-idris:add-clause"
12+
"ctrl-alt-b": "language-idris:browse-namespace"
13+
"ctrl-alt-c": "language-idris:case-split"
14+
"ctrl-alt-d": "language-idris:docs-for"
15+
"ctrl-alt-l": "language-idris:make-lemma"
16+
"ctrl-alt-m": "language-idris:make-case"
17+
"ctrl-alt-p": "language-idris:add-proof-clause"
18+
"ctrl-alt-r": "language-idris:typecheck"
19+
"ctrl-alt-s": "language-idris:proof-search"
20+
"ctrl-alt-t": "language-idris:type-of"
21+
"ctrl-alt-w": "language-idris:make-with"
22+
"ctrl-alt-enter": "language-idris:open-repl"
23+
".platform-darwin atom-text-editor[data-grammar~=\"idris\"]":
24+
"ctrl-cmd-a": "language-idris:add-clause"
25+
"ctrl-cmd-b": "language-idris:browse-namespace"
26+
"ctrl-cmd-c": "language-idris:case-split"
27+
"ctrl-cmd-d": "language-idris:docs-for"
28+
"ctrl-cmd-l": "language-idris:make-lemma"
29+
"ctrl-cmd-m": "language-idris:make-case"
30+
"ctrl-cmd-p": "language-idris:add-proof-clause"
31+
"ctrl-cmd-r": "language-idris:typecheck"
32+
"ctrl-cmd-s": "language-idris:proof-search"
33+
"ctrl-cmd-t": "language-idris:type-of"
34+
"ctrl-cmd-w": "language-idris:make-with"
35+
"ctrl-cmd-enter": "language-idris:open-repl"
36+
37+
keymapExtension = atom.keymaps.getUserKeymapPath().split('.').pop()
38+
if keymapExtension == 'cson'
39+
return CSON.stringify(legacyKeymap, null, 2)
40+
if keymapExtension == 'json'
41+
return JSON.stringify(legacyKeymap, null, 2)
42+
43+
44+
module.exports =
45+
showKeymapDeprecationNotice: ->
46+
detailMd = """
47+
Please use <kbd>ctrl-i</kbd><kbd>r</kbd>,
48+
<kbd>ctrl-i</kbd><kbd>t</kbd>,
49+
<kbd>ctrl-i</kbd><kbd>c</kbd> shortcuts
50+
instead of <kbd>ctrl-alt-r</kbd>,
51+
<kbd>ctrl-alt-t</kbd>,
52+
<kbd>ctrl-alt-c</kbd>... etc.
53+
54+
As usual, you can learn Idris shortcuts in Command Palette:
55+
<kbd>ctrl-shift-p</kbd> or <kbd>cmd-shift-p</kbd>, then type `Idris`.
56+
57+
---
58+
59+
To get back the old `ctrl-alt` bindings *(not recommended)*,
60+
click the "Edit keymap" button below, and paste.
61+
"""
62+
63+
popup = atom.notifications.addInfo("Default Idris keymap has been changed.",
64+
dismissable: true
65+
description: detailMd
66+
buttons: [
67+
{ text: "Dismiss", onDidClick: () -> popup.dismiss() }
68+
{
69+
text: "Edit keymap"
70+
className: 'btn btn-warning icon icon-clippy copy-icon'
71+
onDidClick: () ->
72+
content = formatLegacyKeymap()
73+
console.log("Copying ", content)
74+
atom.clipboard.write(content)
75+
atom.commands.dispatch(atom.views.getView(atom.workspace),
76+
'application:open-your-keymap')
77+
popup.dismiss()
78+
atom.notifications.addSuccess("Copied to clipboard",
79+
description: "The old `ctrl-alt` Idris keymap can be pasted now."
80+
)
81+
}
82+
]
83+
)

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
"dependencies": {
4343
"atom-message-panel": "^1.3.0",
4444
"bennu": "17.3.0",
45+
"cson-parser": "^1.0.9",
4546
"nu-stream": "3.3.1",
4647
"rx-lite": "4.0.0",
4748
"@cycle/core": "3.1.0",

0 commit comments

Comments
 (0)