jupyterlab-vim-langmap 0.1.0__py3-none-any.whl
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.
- jupyterlab_vim_langmap/__init__.py +16 -0
- jupyterlab_vim_langmap/_version.py +4 -0
- jupyterlab_vim_langmap-0.1.0.data/data/share/jupyter/labextensions/jupyterlab-vim-langmap/install.json +5 -0
- jupyterlab_vim_langmap-0.1.0.data/data/share/jupyter/labextensions/jupyterlab-vim-langmap/package.json +155 -0
- jupyterlab_vim_langmap-0.1.0.data/data/share/jupyter/labextensions/jupyterlab-vim-langmap/schemas/jupyterlab-vim-langmap/package.json.orig +150 -0
- jupyterlab_vim_langmap-0.1.0.data/data/share/jupyter/labextensions/jupyterlab-vim-langmap/schemas/jupyterlab-vim-langmap/plugin.json +55 -0
- jupyterlab_vim_langmap-0.1.0.data/data/share/jupyter/labextensions/jupyterlab-vim-langmap/static/232.3a830cce50e41a8e.js +6 -0
- jupyterlab_vim_langmap-0.1.0.data/data/share/jupyter/labextensions/jupyterlab-vim-langmap/static/261.ddf51921894263e0.js +1 -0
- jupyterlab_vim_langmap-0.1.0.data/data/share/jupyter/labextensions/jupyterlab-vim-langmap/static/remoteEntry.ab3889f3dd7f6561.js +1 -0
- jupyterlab_vim_langmap-0.1.0.data/data/share/jupyter/labextensions/jupyterlab-vim-langmap/static/style.js +4 -0
- jupyterlab_vim_langmap-0.1.0.data/data/share/jupyter/labextensions/jupyterlab-vim-langmap/static/third-party-licenses.json +16 -0
- jupyterlab_vim_langmap-0.1.0.dist-info/METADATA +123 -0
- jupyterlab_vim_langmap-0.1.0.dist-info/RECORD +15 -0
- jupyterlab_vim_langmap-0.1.0.dist-info/WHEEL +4 -0
- jupyterlab_vim_langmap-0.1.0.dist-info/licenses/LICENSE +29 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
try:
|
|
2
|
+
from ._version import __version__
|
|
3
|
+
except ImportError:
|
|
4
|
+
# Fallback when using the package in dev mode without installing
|
|
5
|
+
# in editable mode with pip. It is highly recommended to install
|
|
6
|
+
# the package from a stable release or in editable mode: https://pip.pypa.io/en/stable/topics/local-project-installs/#editable-installs
|
|
7
|
+
import warnings
|
|
8
|
+
warnings.warn("Importing 'jupyterlab_vim_langmap' outside a proper installation.")
|
|
9
|
+
__version__ = "dev"
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _jupyter_labextension_paths():
|
|
13
|
+
return [{
|
|
14
|
+
"src": "labextension",
|
|
15
|
+
"dest": "jupyterlab-vim-langmap"
|
|
16
|
+
}]
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "jupyterlab-vim-langmap",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Remap vim command-mode keys back to QWERTY positions when the OS emulates Dvorak",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"jupyter",
|
|
7
|
+
"jupyterlab",
|
|
8
|
+
"jupyterlab-extension",
|
|
9
|
+
"vim",
|
|
10
|
+
"dvorak",
|
|
11
|
+
"langmap",
|
|
12
|
+
"keyboard-layout",
|
|
13
|
+
"codemirror"
|
|
14
|
+
],
|
|
15
|
+
"homepage": "https://github.com/yvvakimoto/jupyterlab-vim-langmap",
|
|
16
|
+
"bugs": {
|
|
17
|
+
"url": "https://github.com/yvvakimoto/jupyterlab-vim-langmap/issues"
|
|
18
|
+
},
|
|
19
|
+
"license": "BSD-3-Clause",
|
|
20
|
+
"author": {
|
|
21
|
+
"name": "yvvakimoto",
|
|
22
|
+
"email": "yvvakimoto@ymail.ne.jp"
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}",
|
|
26
|
+
"style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}",
|
|
27
|
+
"src/**/*.{ts,tsx}",
|
|
28
|
+
"schema/*.json"
|
|
29
|
+
],
|
|
30
|
+
"main": "lib/index.js",
|
|
31
|
+
"types": "lib/index.d.ts",
|
|
32
|
+
"style": "style/index.css",
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "https://github.com/yvvakimoto/jupyterlab-vim-langmap.git"
|
|
36
|
+
},
|
|
37
|
+
"scripts": {
|
|
38
|
+
"build": "jlpm build:lib && jlpm build:labextension:dev",
|
|
39
|
+
"build:prod": "jlpm clean && jlpm build:lib:prod && jlpm build:labextension",
|
|
40
|
+
"build:labextension": "jupyter-builder build .",
|
|
41
|
+
"build:labextension:dev": "jupyter-builder build --development True .",
|
|
42
|
+
"build:lib": "tsc --sourceMap",
|
|
43
|
+
"build:lib:prod": "tsc",
|
|
44
|
+
"clean": "jlpm clean:lib",
|
|
45
|
+
"clean:lib": "rimraf lib tsconfig.tsbuildinfo",
|
|
46
|
+
"clean:lintcache": "rimraf .eslintcache .stylelintcache",
|
|
47
|
+
"clean:labextension": "rimraf jupyterlab_vim_langmap/labextension jupyterlab_vim_langmap/_version.py",
|
|
48
|
+
"clean:all": "jlpm clean:lib && jlpm clean:labextension && jlpm clean:lintcache",
|
|
49
|
+
"eslint": "jlpm eslint:check --fix",
|
|
50
|
+
"eslint:check": "eslint . --cache",
|
|
51
|
+
"install:extension": "jlpm build",
|
|
52
|
+
"lint": "jlpm stylelint && jlpm prettier && jlpm eslint",
|
|
53
|
+
"lint:check": "jlpm stylelint:check && jlpm prettier:check && jlpm eslint:check",
|
|
54
|
+
"prettier": "jlpm prettier:base --write --list-different",
|
|
55
|
+
"prettier:base": "prettier \"**/*{.ts,.tsx,.js,.jsx,.cjs,.css,.json,.md}\"",
|
|
56
|
+
"prettier:check": "jlpm prettier:base --check",
|
|
57
|
+
"stylelint": "jlpm stylelint:check --fix",
|
|
58
|
+
"stylelint:check": "stylelint --cache \"style/**/*.css\"",
|
|
59
|
+
"watch": "run-p watch:src watch:labextension",
|
|
60
|
+
"watch:src": "tsc -w --sourceMap",
|
|
61
|
+
"watch:labextension": "jupyter-builder watch ."
|
|
62
|
+
},
|
|
63
|
+
"dependencies": {
|
|
64
|
+
"@jupyterlab/application": "^4.0.0",
|
|
65
|
+
"@jupyterlab/settingregistry": "^4.0.0",
|
|
66
|
+
"@lumino/keyboard": "^2.0.0",
|
|
67
|
+
"@replit/codemirror-vim": "^6.2.1"
|
|
68
|
+
},
|
|
69
|
+
"devDependencies": {
|
|
70
|
+
"@codemirror/commands": "^6.0.0",
|
|
71
|
+
"@codemirror/language": "^6.0.0",
|
|
72
|
+
"@codemirror/search": "^6.0.0",
|
|
73
|
+
"@codemirror/state": "^6.0.0",
|
|
74
|
+
"@codemirror/view": "^6.0.0",
|
|
75
|
+
"@eslint/js": "^9.0.0",
|
|
76
|
+
"@jupyter/builder": "^1.2.0",
|
|
77
|
+
"@jupyter/eslint-plugin": "^1.1.0",
|
|
78
|
+
"@types/json-schema": "^7.0.11",
|
|
79
|
+
"@types/react": "^18.0.26",
|
|
80
|
+
"@types/react-addons-linked-state-mixin": "^0.14.22",
|
|
81
|
+
"eslint": "^9.0.0",
|
|
82
|
+
"eslint-config-prettier": "^9.0.0",
|
|
83
|
+
"eslint-plugin-prettier": "^5.0.0",
|
|
84
|
+
"globals": "^15.0.0",
|
|
85
|
+
"npm-run-all2": "^7.0.1",
|
|
86
|
+
"prettier": "^3.0.0",
|
|
87
|
+
"rimraf": "^5.0.1",
|
|
88
|
+
"stylelint": "^15.10.1",
|
|
89
|
+
"stylelint-config-recommended": "^13.0.0",
|
|
90
|
+
"stylelint-config-standard": "^34.0.0",
|
|
91
|
+
"stylelint-csstree-validator": "^3.0.0",
|
|
92
|
+
"stylelint-prettier": "^4.0.0",
|
|
93
|
+
"typescript": "~5.5.4",
|
|
94
|
+
"typescript-eslint": "^8.0.0",
|
|
95
|
+
"yjs": "^13.5.0"
|
|
96
|
+
},
|
|
97
|
+
"resolutions": {
|
|
98
|
+
"lib0": "0.2.111",
|
|
99
|
+
"webpack": "5.106.0"
|
|
100
|
+
},
|
|
101
|
+
"sideEffects": [
|
|
102
|
+
"style/*.css",
|
|
103
|
+
"style/index.js"
|
|
104
|
+
],
|
|
105
|
+
"styleModule": "style/index.js",
|
|
106
|
+
"publishConfig": {
|
|
107
|
+
"access": "public"
|
|
108
|
+
},
|
|
109
|
+
"jupyterlab": {
|
|
110
|
+
"extension": true,
|
|
111
|
+
"outputDir": "jupyterlab_vim_langmap/labextension",
|
|
112
|
+
"schemaDir": "schema",
|
|
113
|
+
"sharedPackages": {
|
|
114
|
+
"@replit/codemirror-vim": {
|
|
115
|
+
"bundled": false
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
"_build": {
|
|
119
|
+
"load": "static/remoteEntry.ab3889f3dd7f6561.js",
|
|
120
|
+
"extension": "./extension",
|
|
121
|
+
"style": "./style"
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
"prettier": {
|
|
125
|
+
"singleQuote": true,
|
|
126
|
+
"trailingComma": "none",
|
|
127
|
+
"arrowParens": "avoid",
|
|
128
|
+
"endOfLine": "auto",
|
|
129
|
+
"overrides": [
|
|
130
|
+
{
|
|
131
|
+
"files": "package.json",
|
|
132
|
+
"options": {
|
|
133
|
+
"tabWidth": 4
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
]
|
|
137
|
+
},
|
|
138
|
+
"stylelint": {
|
|
139
|
+
"extends": [
|
|
140
|
+
"stylelint-config-recommended",
|
|
141
|
+
"stylelint-config-standard",
|
|
142
|
+
"stylelint-prettier/recommended"
|
|
143
|
+
],
|
|
144
|
+
"plugins": [
|
|
145
|
+
"stylelint-csstree-validator"
|
|
146
|
+
],
|
|
147
|
+
"rules": {
|
|
148
|
+
"csstree/validator": true,
|
|
149
|
+
"property-no-vendor-prefix": null,
|
|
150
|
+
"selector-class-pattern": "^([a-z][A-z\\d]*)(-[A-z\\d]+)*$",
|
|
151
|
+
"selector-no-vendor-prefix": null,
|
|
152
|
+
"value-no-vendor-prefix": null
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "jupyterlab-vim-langmap",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Remap vim command-mode keys back to QWERTY positions when the OS emulates Dvorak",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"jupyter",
|
|
7
|
+
"jupyterlab",
|
|
8
|
+
"jupyterlab-extension",
|
|
9
|
+
"vim",
|
|
10
|
+
"dvorak",
|
|
11
|
+
"langmap",
|
|
12
|
+
"keyboard-layout",
|
|
13
|
+
"codemirror"
|
|
14
|
+
],
|
|
15
|
+
"homepage": "https://github.com/yvvakimoto/jupyterlab-vim-langmap",
|
|
16
|
+
"bugs": {
|
|
17
|
+
"url": "https://github.com/yvvakimoto/jupyterlab-vim-langmap/issues"
|
|
18
|
+
},
|
|
19
|
+
"license": "BSD-3-Clause",
|
|
20
|
+
"author": {
|
|
21
|
+
"name": "yvvakimoto",
|
|
22
|
+
"email": "yvvakimoto@ymail.ne.jp"
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}",
|
|
26
|
+
"style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}",
|
|
27
|
+
"src/**/*.{ts,tsx}",
|
|
28
|
+
"schema/*.json"
|
|
29
|
+
],
|
|
30
|
+
"main": "lib/index.js",
|
|
31
|
+
"types": "lib/index.d.ts",
|
|
32
|
+
"style": "style/index.css",
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "https://github.com/yvvakimoto/jupyterlab-vim-langmap.git"
|
|
36
|
+
},
|
|
37
|
+
"scripts": {
|
|
38
|
+
"build": "jlpm build:lib && jlpm build:labextension:dev",
|
|
39
|
+
"build:prod": "jlpm clean && jlpm build:lib:prod && jlpm build:labextension",
|
|
40
|
+
"build:labextension": "jupyter-builder build .",
|
|
41
|
+
"build:labextension:dev": "jupyter-builder build --development True .",
|
|
42
|
+
"build:lib": "tsc --sourceMap",
|
|
43
|
+
"build:lib:prod": "tsc",
|
|
44
|
+
"clean": "jlpm clean:lib",
|
|
45
|
+
"clean:lib": "rimraf lib tsconfig.tsbuildinfo",
|
|
46
|
+
"clean:lintcache": "rimraf .eslintcache .stylelintcache",
|
|
47
|
+
"clean:labextension": "rimraf jupyterlab_vim_langmap/labextension jupyterlab_vim_langmap/_version.py",
|
|
48
|
+
"clean:all": "jlpm clean:lib && jlpm clean:labextension && jlpm clean:lintcache",
|
|
49
|
+
"eslint": "jlpm eslint:check --fix",
|
|
50
|
+
"eslint:check": "eslint . --cache",
|
|
51
|
+
"install:extension": "jlpm build",
|
|
52
|
+
"lint": "jlpm stylelint && jlpm prettier && jlpm eslint",
|
|
53
|
+
"lint:check": "jlpm stylelint:check && jlpm prettier:check && jlpm eslint:check",
|
|
54
|
+
"prettier": "jlpm prettier:base --write --list-different",
|
|
55
|
+
"prettier:base": "prettier \"**/*{.ts,.tsx,.js,.jsx,.cjs,.css,.json,.md}\"",
|
|
56
|
+
"prettier:check": "jlpm prettier:base --check",
|
|
57
|
+
"stylelint": "jlpm stylelint:check --fix",
|
|
58
|
+
"stylelint:check": "stylelint --cache \"style/**/*.css\"",
|
|
59
|
+
"watch": "run-p watch:src watch:labextension",
|
|
60
|
+
"watch:src": "tsc -w --sourceMap",
|
|
61
|
+
"watch:labextension": "jupyter-builder watch ."
|
|
62
|
+
},
|
|
63
|
+
"dependencies": {
|
|
64
|
+
"@jupyterlab/application": "^4.0.0",
|
|
65
|
+
"@jupyterlab/settingregistry": "^4.0.0",
|
|
66
|
+
"@lumino/keyboard": "^2.0.0",
|
|
67
|
+
"@replit/codemirror-vim": "^6.2.1"
|
|
68
|
+
},
|
|
69
|
+
"devDependencies": {
|
|
70
|
+
"@codemirror/commands": "^6.0.0",
|
|
71
|
+
"@codemirror/language": "^6.0.0",
|
|
72
|
+
"@codemirror/search": "^6.0.0",
|
|
73
|
+
"@codemirror/state": "^6.0.0",
|
|
74
|
+
"@codemirror/view": "^6.0.0",
|
|
75
|
+
"@eslint/js": "^9.0.0",
|
|
76
|
+
"@jupyter/builder": "^1.2.0",
|
|
77
|
+
"@jupyter/eslint-plugin": "^1.1.0",
|
|
78
|
+
"@types/json-schema": "^7.0.11",
|
|
79
|
+
"@types/react": "^18.0.26",
|
|
80
|
+
"@types/react-addons-linked-state-mixin": "^0.14.22",
|
|
81
|
+
"eslint": "^9.0.0",
|
|
82
|
+
"eslint-config-prettier": "^9.0.0",
|
|
83
|
+
"eslint-plugin-prettier": "^5.0.0",
|
|
84
|
+
"globals": "^15.0.0",
|
|
85
|
+
"npm-run-all2": "^7.0.1",
|
|
86
|
+
"prettier": "^3.0.0",
|
|
87
|
+
"rimraf": "^5.0.1",
|
|
88
|
+
"stylelint": "^15.10.1",
|
|
89
|
+
"stylelint-config-recommended": "^13.0.0",
|
|
90
|
+
"stylelint-config-standard": "^34.0.0",
|
|
91
|
+
"stylelint-csstree-validator": "^3.0.0",
|
|
92
|
+
"stylelint-prettier": "^4.0.0",
|
|
93
|
+
"typescript": "~5.5.4",
|
|
94
|
+
"typescript-eslint": "^8.0.0",
|
|
95
|
+
"yjs": "^13.5.0"
|
|
96
|
+
},
|
|
97
|
+
"resolutions": {
|
|
98
|
+
"lib0": "0.2.111",
|
|
99
|
+
"webpack": "5.106.0"
|
|
100
|
+
},
|
|
101
|
+
"sideEffects": [
|
|
102
|
+
"style/*.css",
|
|
103
|
+
"style/index.js"
|
|
104
|
+
],
|
|
105
|
+
"styleModule": "style/index.js",
|
|
106
|
+
"publishConfig": {
|
|
107
|
+
"access": "public"
|
|
108
|
+
},
|
|
109
|
+
"jupyterlab": {
|
|
110
|
+
"extension": true,
|
|
111
|
+
"outputDir": "jupyterlab_vim_langmap/labextension",
|
|
112
|
+
"schemaDir": "schema",
|
|
113
|
+
"sharedPackages": {
|
|
114
|
+
"@replit/codemirror-vim": {
|
|
115
|
+
"bundled": false
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
"prettier": {
|
|
120
|
+
"singleQuote": true,
|
|
121
|
+
"trailingComma": "none",
|
|
122
|
+
"arrowParens": "avoid",
|
|
123
|
+
"endOfLine": "auto",
|
|
124
|
+
"overrides": [
|
|
125
|
+
{
|
|
126
|
+
"files": "package.json",
|
|
127
|
+
"options": {
|
|
128
|
+
"tabWidth": 4
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
]
|
|
132
|
+
},
|
|
133
|
+
"stylelint": {
|
|
134
|
+
"extends": [
|
|
135
|
+
"stylelint-config-recommended",
|
|
136
|
+
"stylelint-config-standard",
|
|
137
|
+
"stylelint-prettier/recommended"
|
|
138
|
+
],
|
|
139
|
+
"plugins": [
|
|
140
|
+
"stylelint-csstree-validator"
|
|
141
|
+
],
|
|
142
|
+
"rules": {
|
|
143
|
+
"csstree/validator": true,
|
|
144
|
+
"property-no-vendor-prefix": null,
|
|
145
|
+
"selector-class-pattern": "^([a-z][A-z\\d]*)(-[A-z\\d]+)*$",
|
|
146
|
+
"selector-no-vendor-prefix": null,
|
|
147
|
+
"value-no-vendor-prefix": null
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"jupyter.lab.setting-icon-label": "Vim langmap",
|
|
3
|
+
"title": "Vim langmap (Dvorak → QWERTY)",
|
|
4
|
+
"description": "Remap command keys back to QWERTY physical positions when the OS emulates another layout such as Dvorak. Text input (vim Insert mode, the Ex and search prompts) is left alone.",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"enabled": {
|
|
8
|
+
"title": "Enabled",
|
|
9
|
+
"description": "Master switch. When off, both the vim langmap and the keyboard layout are restored to their defaults.",
|
|
10
|
+
"type": "boolean",
|
|
11
|
+
"default": true
|
|
12
|
+
},
|
|
13
|
+
"preset": {
|
|
14
|
+
"title": "Preset",
|
|
15
|
+
"description": "Which langmap string to use.",
|
|
16
|
+
"type": "string",
|
|
17
|
+
"oneOf": [
|
|
18
|
+
{
|
|
19
|
+
"const": "dvorak",
|
|
20
|
+
"title": "Dvorak → QWERTY (built in)"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"const": "custom",
|
|
24
|
+
"title": "Custom — use the langmap setting below"
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"default": "dvorak"
|
|
28
|
+
},
|
|
29
|
+
"langmap": {
|
|
30
|
+
"title": "Custom langmap",
|
|
31
|
+
"description": "A vim 'langmap' string, used only when 'preset' is 'custom'. Same format as vim's :set langmap= and VSCodeVim's vim.langmap — comma separated parts, each either a list of from/to character pairs (e.g. `aAbB`) or `fromlist;tolist` (e.g. `abc;ABC`). Escape a literal comma or semicolon with a backslash.",
|
|
32
|
+
"type": "string",
|
|
33
|
+
"default": ""
|
|
34
|
+
},
|
|
35
|
+
"remapCtrl": {
|
|
36
|
+
"title": "Remap Ctrl combinations",
|
|
37
|
+
"description": "Also apply the langmap to Ctrl/Alt/Meta combinations, so that e.g. Ctrl-d stays on the physical QWERTY 'd' key. Turn this off if your OS level remapper already passes Ctrl combinations through unchanged.",
|
|
38
|
+
"type": "boolean",
|
|
39
|
+
"default": true
|
|
40
|
+
},
|
|
41
|
+
"applyToVim": {
|
|
42
|
+
"title": "Apply to vim command keys",
|
|
43
|
+
"description": "Remap keys in vim Normal, Visual and operator-pending modes inside cell editors. Requires jupyterlab-vim.",
|
|
44
|
+
"type": "boolean",
|
|
45
|
+
"default": true
|
|
46
|
+
},
|
|
47
|
+
"applyToJupyterShortcuts": {
|
|
48
|
+
"title": "Apply to JupyterLab shortcuts",
|
|
49
|
+
"description": "Remap JupyterLab's own keybindings — Jupyter Command mode (dd, x, c, v, a, b, z), the command palette and menu mnemonics — by swapping the Lumino keyboard layout. Turn this off if your OS level remapper leaves event.keyCode on the physical key, in which case these shortcuts are already in QWERTY positions.",
|
|
50
|
+
"type": "boolean",
|
|
51
|
+
"default": true
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"additionalProperties": false
|
|
55
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";(self.rspackChunkjupyterlab_vim_langmap=self.rspackChunkjupyterlab_vim_langmap||[]).push([[232],{475(e,t,n){var r=n(601),a=n.n(r),o=n(314),s=(n.n(o))()(a());s.push([e.id,`/*
|
|
2
|
+
See the JupyterLab Developer Guide for useful CSS Patterns:
|
|
3
|
+
|
|
4
|
+
https://jupyterlab.readthedocs.io/en/stable/developer/css.html
|
|
5
|
+
*/
|
|
6
|
+
`,""]),n.d(t,{},{A:s})},314(e){e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var n="",r=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),r&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),r&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n}).join("")},t.i=function(e,n,r,a,o){"string"==typeof e&&(e=[[null,e,void 0]]);var s={};if(r)for(var c=0;c<this.length;c++){var i=this[c][0];null!=i&&(s[i]=!0)}for(var u=0;u<e.length;u++){var p=[].concat(e[u]);r&&s[p[0]]||(void 0!==o&&(void 0===p[5]||(p[1]="@layer".concat(p[5].length>0?" ".concat(p[5]):""," {").concat(p[1],"}")),p[5]=o),n&&(p[2]&&(p[1]="@media ".concat(p[2]," {").concat(p[1],"}")),p[2]=n),a&&(p[4]?(p[1]="@supports (".concat(p[4],") {").concat(p[1],"}"),p[4]=a):p[4]="".concat(a)),t.push(p))}},t}},601(e){e.exports=function(e){return e[1]}},72(e){var t=[];function n(e){for(var n=-1,r=0;r<t.length;r++)if(t[r].identifier===e){n=r;break}return n}function r(e,r){for(var a={},o=[],s=0;s<e.length;s++){var c=e[s],i=r.base?c[0]+r.base:c[0],u=a[i]||0,p="".concat(i," ").concat(u);a[i]=u+1;var l=n(p),d={css:c[1],media:c[2],sourceMap:c[3],supports:c[4],layer:c[5]};if(-1!==l)t[l].references++,t[l].updater(d);else{var f=function(e,t){var n=t.domAPI(t);return n.update(e),function(t){t?(t.css!==e.css||t.media!==e.media||t.sourceMap!==e.sourceMap||t.supports!==e.supports||t.layer!==e.layer)&&n.update(e=t):n.remove()}}(d,r);r.byIndex=s,t.splice(s,0,{identifier:p,updater:f,references:1})}o.push(p)}return o}e.exports=function(e,a){var o=r(e=e||[],a=a||{});return function(e){e=e||[];for(var s=0;s<o.length;s++){var c=n(o[s]);t[c].references--}for(var i=r(e,a),u=0;u<o.length;u++){var p=n(o[u]);0===t[p].references&&(t[p].updater(),t.splice(p,1))}o=i}}},659(e){var t={};e.exports=function(e,n){var r=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!r)throw Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(n)}},540(e){e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},56(e,t,n){e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},825(e){e.exports=function(e){if("u"<typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(n){var r,a,o;r="",n.supports&&(r+="@supports (".concat(n.supports,") {")),n.media&&(r+="@media ".concat(n.media," {")),(a=void 0!==n.layer)&&(r+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),r+=n.css,a&&(r+="}"),n.media&&(r+="}"),n.supports&&(r+="}"),(o=n.sourceMap)&&"u">typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),e.styleTagTransform(r,t,e.options)},remove:function(){var e;null===(e=t).parentNode||e.parentNode.removeChild(e)}}}},113(e){e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},579(e,t,n){var r=n(72),a=n.n(r),o=n(825),s=n.n(o),c=n(659),i=n.n(c),u=n(56),p=n.n(u),l=n(540),d=n.n(l),f=n(113),v=n.n(f),m=n(475),h={};h.styleTagTransform=v(),h.setAttributes=p(),h.insert=i().bind(null,"head"),h.domAPI=s(),h.insertStyleElement=d(),a()(m.A,h),m.A&&m.A.locals&&m.A.locals}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.rspackChunkjupyterlab_vim_langmap=self.rspackChunkjupyterlab_vim_langmap||[]).push([[261],{508(e,t,a){a.r(t),a.d(t,{default:()=>g});var l=a(783),r=a(136);function o(e){return e.split(/\\?(.)/).filter(Boolean)}let n={8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",27:"Escape",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",61:"=",65:"A",66:"B",67:"C",68:"D",69:"E",70:"F",71:"G",72:"H",73:"I",74:"J",75:"K",76:"L",77:"M",78:"N",79:"O",80:"P",81:"Q",82:"R",83:"S",84:"T",85:"U",86:"V",87:"W",88:"X",89:"Y",90:"Z",91:"Meta",93:"ContextMenu",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9",106:"*",107:"+",109:"-",110:".",111:"/",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",224:"Meta"},p=["Shift","Ctrl","Alt","Meta"],i=(()=>{let e={";":[59,186],"=":[61,187],",":[188],"-":[173,189],".":[190],"/":[191],"`":[192],"[":[219],"\\":[220],"]":[221],"'":[222]};for(let t=0;t<26;t++)e[String.fromCharCode(97+t)]=[65+t];return e})(),s={":":";","+":"=","<":",",_:"-",">":".","?":"/","~":"`","{":"[","|":"\\","}":"]",'"':"'"},u="jupyterlab-vim-langmap:plugin",c=null,m=!1;async function y(){if(m)return c;m=!0;try{c=(await a.e(280).then(a.t.bind(a,27,23))).Vim}catch(e){console.warn("[jupyterlab-vim-langmap] could not reach @replit/codemirror-vim. The vim half of the remap is inactive. Is jupyterlab-vim installed and enabled?",e),c=null}return c}let f=null;async function h(e){let t=e.enabled?"custom"===e.preset?e.langmap:"'q,\\,w,.e,pr,yt,fy,gu,ci,ro,lp,/[,=],aa,os,ed,uf,ig,dh,hj,tk,nl,s\\;,-',\\;z,qx,jc,kv,xb,bn,mm,w\\,,v.,z/,[-,]=,\"Q,<W,>E,PR,YT,FY,GU,CI,RO,LP,?{,+},AA,OS,ED,UF,IG,DH,HJ,TK,NL,S:,_\",:Z,QX,JC,KV,XB,BN,MM,W<,V>,Z?,{_,}+":"",a=await y();if(a&&a.langmap(e.applyToVim?t:"",!!e.remapCtrl),t&&e.applyToJupyterShortcuts){let e,a=function(e){let t={...n},a=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);for(let r of Object.keys(e)){var l;let o;if(a(i,r))o=r;else{if(!/^[A-Z]$/.test(r)||a(e,r.toLowerCase()))continue;o=r.toLowerCase()}let n=(l=e[r],/^[a-z]$/.test(l)?l.toUpperCase():/^[A-Z]$/.test(l)?l:Object.prototype.hasOwnProperty.call(s,l)?s[l]:Object.prototype.hasOwnProperty.call(i,l)?l:null);if(null!==n)for(let e of i[o])t[e]=n}return t}((e={},t&&t.split(/((?:[^\\,]|\\.)+),/).forEach(t=>{if(!t)return;let a=t.split(/((?:[^\\;]|\\.)+);/);if(3===a.length){let t=o(a[1]),l=o(a[2]);if(t.length!==l.length)return;for(let a=0;a<t.length;a++)e[t[a]]=l[a]}else if(1===a.length){let a=o(t);if(a.length%2!=0)return;for(let t=0;t<a.length;t+=2)e[a[t]]=a[t+1]}}),e));(0,r.setKeyboardLayout)(new r.KeycodeLayout("jupyterlab-vim-langmap",a,p))}else f&&(0,r.setKeyboardLayout)(f)}let g={id:u,description:"Remap vim command-mode keys back to QWERTY positions when the OS emulates Dvorak",autoStart:!0,requires:[l.ISettingRegistry],activate:(e,t)=>{f=(0,r.getKeyboardLayout)();let a=e=>{let t;h({enabled:(t=(t,a)=>{let l=e.get(t).composite;return void 0===l?a:l})("enabled",!0),preset:t("preset","dvorak"),langmap:t("langmap",""),remapCtrl:t("remapCtrl",!0),applyToVim:t("applyToVim",!0),applyToJupyterShortcuts:t("applyToJupyterShortcuts",!0)}).catch(e=>{console.error("[jupyterlab-vim-langmap] failed to apply",e)})};t.load(u).then(e=>{a(e),e.changed.connect(a)}).catch(e=>{console.error("[jupyterlab-vim-langmap] failed to load settings",e)})}}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var _JUPYTERLAB;(()=>{"use strict";var e,n,r,t,o,i,u,a,c,l,f,s,p,h,d,g,v,m,y,b,S,j,k,w,E,x,O,_,P,T,M,A,C,D,q,L,N,V={547(e,n,r){var t={"./index":()=>r.e(261).then(()=>()=>r(508)),"./extension":()=>r.e(261).then(()=>()=>r(508)),"./style":()=>r.e(232).then(()=>()=>r(579))},o=function(e,n){return r.R=n,n=r.o(t,e)?t[e]():Promise.resolve().then(()=>{throw Error('Module "'+e+'" does not exist in container.')}),r.R=void 0,n},i=function(e,n){if(r.S){var t="default",o=r.S[t];if(o&&o!==e)throw Error("Container initialization failed as it has already been initialized with a different share scope");return r.S[t]=e,r.I(t,n)}};r.d(n,{get:()=>o,init:()=>i})}},$={};function z(e){var n=$[e];if(void 0!==n)return n.exports;var r=$[e]={id:e,exports:{}};return V[e](r,r.exports,z),r.exports}z.m=V,z.c=$,z.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return z.d(n,{a:n}),n},R=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,z.t=function(e,n){if(1&n&&(e=this(e)),8&n||"object"==typeof e&&e&&(4&n&&e.__esModule||16&n&&"function"==typeof e.then))return e;var r=Object.create(null);z.r(r);var t={};I=I||[null,R({}),R([]),R(R)];for(var o=2&n&&e;("object"==typeof o||"function"==typeof o)&&!~I.indexOf(o);o=R(o))Object.getOwnPropertyNames(o).forEach(n=>{t[n]=()=>e[n]});return t.default=()=>e,z.d(r,t),r},z.d=(e,n,r)=>{var t=(n,r)=>{for(var t in n)z.o(n,t)&&!z.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,[r]:n[t]})};t(n,"get"),t(r,"value")},z.f={},z.e=e=>Promise.all(Object.keys(z.f).reduce((n,r)=>(z.f[r](e,n),n),[])),z.u=e=>""+e+"."+({232:"3a830cce50e41a8e",261:"ddf51921894263e0"})[e]+".js?v="+({232:"3a830cce50e41a8e",261:"ddf51921894263e0"})[e],z.g=(()=>{if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}})(),z.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),U={},z.l=function(e,n,r,t){if(U[e])return void U[e].push(n);if(void 0!==r)for(var o,i,u=document.getElementsByTagName("script"),a=0;a<u.length;a++){var c=u[a];if(c.getAttribute("src")==e||c.getAttribute("data-rspack")=="jupyterlab-vim-langmap:"+r){o=c;break}}o||(i=!0,(o=document.createElement("script")).timeout=120,z.nc&&o.setAttribute("nonce",z.nc),o.setAttribute("data-rspack","jupyterlab-vim-langmap:"+r),o.src=e),U[e]=[n];var l=function(n,r){o.onerror=o.onload=null,clearTimeout(f);var t=U[e];if(delete U[e],o.parentNode&&o.parentNode.removeChild(o),t&&t.forEach(function(e){return e(r)}),n)return n(r)},f=setTimeout(l.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=l.bind(null,o.onerror),o.onload=l.bind(null,o.onload),i&&document.head.appendChild(o)},z.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},z.nc=void 0,z.S={},z.initializeSharingData={scopeToSharingDataMapping:{default:[{name:"jupyterlab-vim-langmap",version:"0.1.0",factory:()=>z.e(261).then(()=>()=>z(508)),eager:0,treeShakingMode:null}]},uniqueName:"jupyterlab-vim-langmap"},B={},J={},z.I=function(e,n){n||(n=[]);var r=J[e];if(r||(r=J[e]={}),!(n.indexOf(r)>=0)){if(n.push(r),B[e])return B[e];z.o(z.S,e)||(z.S[e]={});var t=z.S[e],o=function(e){"u">typeof console&&console.warn&&console.warn(e)},i=z.initializeSharingData.uniqueName,u=function(e,n,r,o){var u=t[e]=t[e]||{},a=u[n];(!a||!a.loaded&&(!o!=!a.eager?o:i>a.from))&&(u[n]={get:r,from:i,eager:!!o})},a=function(r){var t=function(e){o("Initialization of sharing external failed: "+e)};try{var i=z(r);if(!i)return;var u=function(r){return r&&r.init&&r.init(z.S[e],n)};if(i.then)return c.push(i.then(u,t));var a=u(i);if(a&&a.then)return c.push(a.catch(t))}catch(e){t(e)}},c=[],l=z.initializeSharingData.scopeToSharingDataMapping;return(l[e]&&l[e].forEach(function(e){"object"==typeof e?u(e.name,e.version,e.factory,e.eager):a(e)}),c.length)?B[e]=Promise.all(c).then(function(){return B[e]=1}):B[e]=1}},z.g.importScripts&&(K=z.g.location+"");var I,R,U,B,J,K,Y=z.g.document;if(!K&&Y&&(Y.currentScript&&"SCRIPT"===Y.currentScript.tagName.toUpperCase()&&(K=Y.currentScript.src),!K)){var F=Y.getElementsByTagName("script");if(F.length)for(var X=F.length-1;X>-1&&(!K||!/^http(s?):/.test(K));)K=F[X--].src}if(!K)throw Error("Automatic publicPath is not supported in this browser");z.p=K=K.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),z.consumesLoadingData={chunkMapping:{261:["783","136"],280:["27"]},moduleIdToConsumeDataMapping:{136:{shareScope:"default",shareKey:"@lumino/keyboard",import:null,requiredVersion:"^2.0.0",strictVersion:!1,singleton:!0,eager:!1,fallback:void 0,treeShakingMode:null},27:{shareScope:"default",shareKey:"@replit/codemirror-vim",import:null,requiredVersion:"^6.2.1",strictVersion:!1,singleton:!1,eager:!1,fallback:void 0,treeShakingMode:null},783:{shareScope:"default",shareKey:"@jupyterlab/settingregistry",import:null,requiredVersion:"^4.6.3",strictVersion:!1,singleton:!0,eager:!1,fallback:void 0,treeShakingMode:null}},initialConsumes:[]},e=function(e){return e.split(".").map(function(e){return+e==e?+e:e})},n=function(n){var r=function(n){var r=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(n),t=r[1]?[0].concat(e(r[1])):[0];r[2]&&(t.length++,t.push.apply(t,e(r[2])));let o=t[t.length-1];for(;t.length&&(void 0===o||/^[*xX]$/.test(o));)t.pop(),o=t[t.length-1];return t},t=function(e){return 1===e.length?[0]:2===e.length?[1].concat(e.slice(1)):3===e.length?[2].concat(e.slice(1)):[e.length].concat(e.slice(1))},o=function(e){return[-e[0]-1].concat(e.slice(1))},i=function(e){let n=/^(\^|~|<=|<|>=|>|=|v|!)/.exec(e),i=n?n[0]:"",u=r(i.length?e.slice(i.length).trim():e.trim());switch(i){case"^":if(u.length>1&&0===u[1]){if(u.length>2&&0===u[2])return[3].concat(u.slice(1));return[2].concat(u.slice(1))}return[1].concat(u.slice(1));case"~":return[2].concat(u.slice(1));case">=":return u;case"=":case"v":case"":return t(u);case"<":return o(u);case">":return[,t(u),0,u,2];case"<=":return[,t(u),o(u),1];case"!":return[,t(u),0];default:throw Error("Unexpected start value")}},u=function(e,n){if(1===e.length)return e[0];let r=[];for(let n of e.slice().reverse())0 in n?r.push(n):r.push.apply(r,n.slice(1));return[,].concat(r,e.slice(1).map(()=>n))};return u(n.split(/\s*\|\|\s*/).map(function(e){let n=e.split(/\s+-\s+/);if(1===n.length){e=e.trim();let n=[],r=/[-0-9A-Za-z]\s+/g;for(var a,c=0;a=r.exec(e);){let r=a.index+1;n.push(i(e.slice(c,r).trim())),c=r}return n.push(i(e.slice(c).trim())),u(n,2)}let l=r(n[0]),f=r(n[1]);return[,t(f),o(f),1,l,2]}),1)},r=function(n){var r=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(n),t=r[1]?e(r[1]):[];return r[2]&&(t.length++,t.push.apply(t,e(r[2]))),r[3]&&(t.push([]),t.push.apply(t,e(r[3]))),t},t=function(e,n){e=r(e),n=r(n);for(var t=0;;){if(t>=e.length)return t<n.length&&"u"!=(typeof n[t])[0];var o=e[t],i=(typeof o)[0];if(t>=n.length)return"u"==i;var u=n[t],a=(typeof u)[0];if(i==a){if("o"!=i&&"u"!=i&&o!=u)return o<u;t++}else{if("o"==i&&"n"==a)return!0;return"s"==a||"u"==i}}},o=function(e){var n=e[0],r="";if(1===e.length)return"*";if(n+.5){r+=0==n?">=":-1==n?"<":1==n?"^":2==n?"~":n>0?"=":"!=";for(var t=1,i=1;i<e.length;i++){var u=e[i],a=(typeof u)[0];t--,r+="u"==a?"-":(t>0?".":"")+(t=2,u)}return r}for(var c=[],i=1;i<e.length;i++){var u=e[i];c.push(0===u?"not("+l()+")":1===u?"("+l()+" || "+l()+")":2===u?c.pop()+" "+c.pop():o(u))}return l();function l(){return c.pop().replace(/^\((.+)\)$/,"$1")}},i=function(e,n){if(0 in e){n=r(n);var t=e[0],o=t<0;o&&(t=-t-1);for(var u=0,a=1,c=!0;;a++,u++){var l,f,s=a<e.length?(typeof e[a])[0]:"";if(u>=n.length||"o"==(f=(typeof(l=n[u]))[0])){if(!c)return!0;if("u"==s)return a>t&&!o;return""==s!=o}if("u"==f){if(!c||"u"!=s)return!1}else if(c)if(s==f)if(a<=t){if(l!=e[a])return!1}else{if(o?l>e[a]:l<e[a])return!1;l!=e[a]&&(c=!1)}else if("s"!=s&&"n"!=s){if(o||a<=t)return!1;c=!1,a--}else{if(a<=t||f<s!=o)return!1;c=!1}else"s"!=s&&"n"!=s&&(c=!1,a--)}}for(var p=[],h=p.pop.bind(p),u=1;u<e.length;u++){var d=e[u];p.push(1==d?h()|h():2==d?h()&h():d?i(d,n):!h())}return!!h()},u=function(e,n){var r=z.S[e];if(!r||!z.o(r,n))throw Error("Shared module "+n+" doesn't exist in shared scope "+e);return r},a=function(e,n){var r=e[n],n=Object.keys(r).reduce(function(e,n){return!e||t(e,n)?n:e},0);return n&&r[n]},c=function(e,n){var r=e[n];return Object.keys(r).reduce(function(e,n){return!e||!r[e].loaded&&t(e,n)?n:e},0)},l=function(e,n,r,t){return"Unsatisfied version "+r+" from "+(r&&e[n][r].from)+" of shared singleton module "+n+" (required "+o(t)+")"},f=function(e,n,r,t){var o=c(e,r);return y(e[r][o])},s=function(e,n,r,t){var o=c(e,r);return i(t,o)||v(l(e,r,o,t)),y(e[r][o])},p=function(e,n,r,t){var o=c(e,r);if(!i(t,o))throw Error(l(e,r,o,t));return y(e[r][o])},h=function(e,n,r){var o=e[n],n=Object.keys(o).reduce(function(e,n){return i(r,n)&&(!e||t(e,n))?n:e},0);return n&&o[n]},d=function(e,n,r,t){var i=e[r];return"No satisfying version ("+o(t)+") of shared module "+r+" found in shared scope "+n+".\nAvailable versions: "+Object.keys(i).map(function(e){return e+" from "+i[e].from}).join(", ")},g=function(e,n,r,t){var o=h(e,r,t);if(o)return y(o);throw Error(d(e,n,r,t))},v=function(e){"u">typeof console&&console.warn&&console.warn(e)},m=function(e,n,r,t){v(d(e,n,r,t))},y=function(e){return e.loaded=1,e.get()},S=(b=function(e){return function(n,r,t,o){var i=z.I(n);return i&&i.then?i.then(e.bind(e,n,z.S[n],r,t,o)):e(n,z.S[n],r,t,o)}})(function(e,n,r){return u(e,r),y(a(n,r))}),j=b(function(e,n,r,t){return n&&z.o(n,r)?y(a(n,r)):t()}),k=b(function(e,n,r,t){return u(e,r),y(h(n,r,t)||m(n,e,r,t)||a(n,r))}),w=b(function(e,n,r){return u(e,r),f(n,e,r)}),E=b(function(e,n,r,t){return u(e,r),s(n,e,r,t)}),x=b(function(e,n,r,t){return u(e,r),g(n,e,r,t)}),O=b(function(e,n,r,t){return u(e,r),p(n,e,r,t)}),_=b(function(e,n,r,t,o){return n&&z.o(n,r)?y(h(n,r,t)||m(n,e,r,t)||a(n,r)):o()}),P=b(function(e,n,r,t){return n&&z.o(n,r)?f(n,e,r):t()}),T=b(function(e,n,r,t,o){return n&&z.o(n,r)?s(n,e,r,t):o()}),M=b(function(e,n,r,t,o){var i=n&&z.o(n,r)&&h(n,r,t);return i?y(i):o()}),A=b(function(e,n,r,t,o){return n&&z.o(n,r)?p(n,e,r,t):o()}),C=function(e){var r=!1,t=!1,o=!1,i=!1,u=[e.shareScope,e.shareKey];return(e.requiredVersion?(e.strictVersion&&(r=!0),e.singleton&&(t=!0),u.push(n(e.requiredVersion)),o=!0):e.singleton&&(t=!0),e.fallback&&(i=!0,u.push(e.fallback)),r&&t&&o&&i)?function(){return A.apply(null,u)}:r&&o&&i?function(){return M.apply(null,u)}:t&&o&&i?function(){return T.apply(null,u)}:r&&t&&o?function(){return O.apply(null,u)}:t&&i?function(){return P.apply(null,u)}:o&&i?function(){return _.apply(null,u)}:r&&o?function(){return x.apply(null,u)}:t&&o?function(){return E.apply(null,u)}:t?function(){return w.apply(null,u)}:o?function(){return k.apply(null,u)}:i?function(){return j.apply(null,u)}:function(){return S.apply(null,u)}},D={},z.f.consumes=function(e,n){var r=z.consumesLoadingData.moduleIdToConsumeDataMapping,t=z.consumesLoadingData.chunkMapping;z.o(t,e)&&t[e].forEach(function(e){if(z.o(D,e))return n.push(D[e]);var t=function(n){D[e]=0,z.m[e]=function(r){delete z.c[e],r.exports=n()}},o=function(n){delete D[e],z.m[e]=function(r){throw delete z.c[e],n}};try{var i=C(r[e])();i.then?n.push(D[e]=i.then(t).catch(o)):t(i)}catch(e){o(e)}})},q={610:0},z.f.j=function(e,n){var r=z.o(q,e)?q[e]:void 0;if(0!==r)if(r)n.push(r[2]);else if(280!=e){var t=new Promise((n,t)=>r=q[e]=[n,t]);n.push(r[2]=t);var o=z.p+z.u(e),i=Error();z.l(o,function(n){if(z.o(q,e)&&(0!==(r=q[e])&&(q[e]=void 0),r)){var t=n&&("load"===n.type?"missing":n.type),o=n&&n.target&&n.target.src;i.message="Loading chunk "+e+" failed.\n("+t+": "+o+")",i.name="ChunkLoadError",i.type=t,i.request=o,r[1](i)}},"chunk-"+e,e)}else q[e]=0},L=(e,n)=>{var r,t,[o,i,u]=n,a=0;if(o.some(e=>0!==q[e])){for(r in i)z.o(i,r)&&(z.m[r]=i[r]);u&&u(z)}for(e&&e(n);a<o.length;a++)t=o[a],z.o(q,t)&&q[t]&&q[t][0](),q[t]=0},(N=self.rspackChunkjupyterlab_vim_langmap=self.rspackChunkjupyterlab_vim_langmap||[]).forEach(L.bind(null,0)),N.push=L.bind(null,N.push.bind(N));var Z=z(547);(_JUPYTERLAB=void 0===_JUPYTERLAB?{}:_JUPYTERLAB)["jupyterlab-vim-langmap"]=Z})();
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"packages": [
|
|
3
|
+
{
|
|
4
|
+
"name": "css-loader",
|
|
5
|
+
"versionInfo": "7.1.5",
|
|
6
|
+
"licenseId": "MIT",
|
|
7
|
+
"extractedText": "Copyright JS Foundation and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"name": "style-loader",
|
|
11
|
+
"versionInfo": "4.0.0",
|
|
12
|
+
"licenseId": "MIT",
|
|
13
|
+
"extractedText": "Copyright JS Foundation and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: jupyterlab_vim_langmap
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Remap vim command-mode keys back to QWERTY positions when the OS emulates Dvorak
|
|
5
|
+
Project-URL: Homepage, https://github.com/yvvakimoto/jupyterlab-vim-langmap
|
|
6
|
+
Project-URL: Bug Tracker, https://github.com/yvvakimoto/jupyterlab-vim-langmap/issues
|
|
7
|
+
Project-URL: Repository, https://github.com/yvvakimoto/jupyterlab-vim-langmap.git
|
|
8
|
+
Author-email: yvvakimoto <yvvakimoto@ymail.ne.jp>
|
|
9
|
+
License-Expression: BSD-3-Clause
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Keywords: codemirror,dvorak,jupyter,jupyterlab,jupyterlab-extension,keyboard-layout,langmap,vim
|
|
12
|
+
Classifier: Framework :: Jupyter
|
|
13
|
+
Classifier: Framework :: Jupyter :: JupyterLab
|
|
14
|
+
Classifier: Framework :: Jupyter :: JupyterLab :: 4
|
|
15
|
+
Classifier: Framework :: Jupyter :: JupyterLab :: Extensions
|
|
16
|
+
Classifier: Framework :: Jupyter :: JupyterLab :: Extensions :: Prebuilt
|
|
17
|
+
Classifier: Programming Language :: Python
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
24
|
+
Requires-Python: >=3.10
|
|
25
|
+
Requires-Dist: jupyterlab-vim>=4.1
|
|
26
|
+
Requires-Dist: jupyterlab<5,>=4.2
|
|
27
|
+
Provides-Extra: dev
|
|
28
|
+
Requires-Dist: jupyter-builder>=1.2.0; extra == 'dev'
|
|
29
|
+
Requires-Dist: jupyterlab>=4; extra == 'dev'
|
|
30
|
+
Description-Content-Type: text/markdown
|
|
31
|
+
|
|
32
|
+
# jupyterlab-vim-langmap
|
|
33
|
+
|
|
34
|
+
Put vim's command keys back on their QWERTY physical positions, without touching what you type.
|
|
35
|
+
|
|
36
|
+
If you emulate Dvorak (or any other layout) at the OS level — Yamabuki R, PowerToys, `setxkbmap`, a programmable keyboard — then [jupyterlab-vim](https://github.com/jupyterlab-contrib/jupyterlab-vim) sees the remapped characters, so `hjkl` lands wherever Dvorak puts those letters rather than under your fingers. Vim solves this with `langmap` and VSCodeVim exposes it as `vim.langmap`, but jupyterlab-vim has no equivalent setting.
|
|
37
|
+
|
|
38
|
+
This extension takes one langmap string and applies it to both layers of JupyterLab that read the keyboard.
|
|
39
|
+
|
|
40
|
+
## What it changes
|
|
41
|
+
|
|
42
|
+
| Layer | Keys | Mechanism |
|
|
43
|
+
| ---------- | ---------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- |
|
|
44
|
+
| vim | Normal, Visual and operator-pending, inside cell and file editors | `Vim.langmap()`, built into `@replit/codemirror-vim` |
|
|
45
|
+
| JupyterLab | Jupyter Command mode (`dd`, `x`, `c`, `v`, `a`, `b`, `z`), the command palette, menu mnemonics | swaps the `@lumino/keyboard` layout, which resolves every binding |
|
|
46
|
+
|
|
47
|
+
## What it leaves alone
|
|
48
|
+
|
|
49
|
+
- **Text you type in Insert mode.** The langmap only feeds command matching; the character itself is still inserted by the browser from the original key event.
|
|
50
|
+
- **The Ex and search prompts.** `:w` and `/pattern` are typed in your actual layout, matching vim's own behaviour.
|
|
51
|
+
- **Character arguments** of `f`, `t`, `r`, `m`, registers and marks. The vim layer suppresses translation for the key right after those commands, so `fx` searches for a real `x`.
|
|
52
|
+
|
|
53
|
+
Counts, operators and operator-pending motions all work, because the langmap is applied when the key event is turned into a key name — before any command matching happens.
|
|
54
|
+
|
|
55
|
+
## Install
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
pip install jupyterlab-vim-langmap
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
jupyterlab-vim comes along as a dependency. Reload the browser tab afterwards.
|
|
62
|
+
|
|
63
|
+
## Settings
|
|
64
|
+
|
|
65
|
+
Settings → Advanced Settings Editor → **Vim langmap**.
|
|
66
|
+
|
|
67
|
+
| Setting | Default | Meaning |
|
|
68
|
+
| ------------------------- | ---------- | ----------------------------------------------------------------------------- |
|
|
69
|
+
| `enabled` | `true` | Master switch. Turning it off restores both layers to their defaults. |
|
|
70
|
+
| `preset` | `"dvorak"` | The built-in Dvorak → QWERTY mapping, or `"custom"` to use `langmap` below. |
|
|
71
|
+
| `langmap` | `""` | Any vim `langmap` string. Only read when `preset` is `"custom"`. |
|
|
72
|
+
| `remapCtrl` | `true` | Also remap Ctrl/Alt/Meta combinations, so `Ctrl-d` stays on the physical `d`. |
|
|
73
|
+
| `applyToVim` | `true` | The vim half. |
|
|
74
|
+
| `applyToJupyterShortcuts` | `true` | The JupyterLab half. |
|
|
75
|
+
|
|
76
|
+
The `langmap` format is the one from vim's `:set langmap=` and VSCodeVim's `vim.langmap`: comma-separated parts, each either a run of from/to character pairs (`aAbB`) or `fromlist;tolist` (`abc;ABC`). Escape a literal comma or semicolon with a backslash.
|
|
77
|
+
|
|
78
|
+
### The built-in preset vs. VSCodeVim's `vim.langmap`
|
|
79
|
+
|
|
80
|
+
The `dvorak` preset is the Dvorak string that circulates for VSCodeVim **plus the two pairs it omits**, `{_` and `}+`.
|
|
81
|
+
|
|
82
|
+
Without them the physical `-` and `=` keys still emit `{` and `}` when shifted, which vim reads as the paragraph motions. So those motions fire from two different physical keys while `_` and `+` are unreachable where QWERTY puts them. If you would rather match your VSCode configuration exactly, set `preset` to `"custom"` and paste the original string into `langmap`.
|
|
83
|
+
|
|
84
|
+
### When to turn `applyToJupyterShortcuts` off
|
|
85
|
+
|
|
86
|
+
JupyterLab's own keybindings are resolved from `event.keyCode`. Some OS-level remappers rewrite the virtual key code, others leave it on the physical key — and in the second case JupyterLab's shortcuts are already in QWERTY positions, so remapping them again would move them off.
|
|
87
|
+
|
|
88
|
+
To find out which kind you have, download [`tools/keylog.html`](https://github.com/yvvakimoto/jupyterlab-vim-langmap/blob/main/tools/keylog.html) and open it in a browser. With your remapper on, press a few letter keys and then the same keys with Ctrl held: it reports `event.key`, `event.code` and `event.keyCode` for each, and tells you which settings you need. (The file ships in the repository, not in the wheel.)
|
|
89
|
+
|
|
90
|
+
## Development
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
pip install -e ".[dev]"
|
|
94
|
+
jupyter labextension develop --overwrite .
|
|
95
|
+
jlpm watch
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Then run `jupyter lab` in another terminal.
|
|
99
|
+
|
|
100
|
+
To check the pure logic — the langmap parser, and that the keycode remap is a permutation of the main key block so no shortcut becomes unreachable:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
npx tsc --module commonjs --target ES2018 --rootDir . --outDir .check-build src/langmap.ts src/keycodes.ts
|
|
104
|
+
node tools/check-langmap.cjs .check-build/src
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Design notes
|
|
108
|
+
|
|
109
|
+
The vim `langmap` lives in module-level state inside `@replit/codemirror-vim`, so this extension has to touch the **same module instance** jupyterlab-vim uses. `package.json` declares
|
|
110
|
+
|
|
111
|
+
```json
|
|
112
|
+
"sharedPackages": { "@replit/codemirror-vim": { "bundled": false } }
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
which tells webpack to consume the copy jupyterlab-vim contributes to the module federation share scope rather than bundling one. The consequence is that a future jupyterlab-vim which moves outside `^6.2.1` would leave the vim half inactive — it logs a warning to the console when that happens.
|
|
116
|
+
|
|
117
|
+
The langmap sits in a different layer from key mappings (`Vim.map` / `Vim.mapclear`), so jupyterlab-vim's `mapclear` at startup does not wipe it and plugin activation order does not matter.
|
|
118
|
+
|
|
119
|
+
On the JupyterLab side, `@lumino/keyboard` resolves every keybinding through a single `keyCode → key name` table, so one permuted table covers Command mode, the palette and menu mnemonics at once — no per-shortcut overrides. Only the unshifted half of a langmap is used there, because `event.keyCode` carries no shift state.
|
|
120
|
+
|
|
121
|
+
## License
|
|
122
|
+
|
|
123
|
+
BSD-3-Clause
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
jupyterlab_vim_langmap/__init__.py,sha256=99oS6EYJTk__78jEFhrGRN361ru8Guzq31uHNeOMuQc,602
|
|
2
|
+
jupyterlab_vim_langmap/_version.py,sha256=CXJl0vWHa-zfZJ_mhGVB60E0diyNNF7RIidcWrfQJOA,175
|
|
3
|
+
jupyterlab_vim_langmap-0.1.0.data/data/share/jupyter/labextensions/jupyterlab-vim-langmap/package.json,sha256=zU7LORabD0hTq5BiJV_IO41VBb9Gmwgh8WXNVhZCd3A,4824
|
|
4
|
+
jupyterlab_vim_langmap-0.1.0.data/data/share/jupyter/labextensions/jupyterlab-vim-langmap/schemas/jupyterlab-vim-langmap/package.json.orig,sha256=lUsnakfPZm9YJK3b0SmhApFV19G6tNkTBKagRpacu2g,5402
|
|
5
|
+
jupyterlab_vim_langmap-0.1.0.data/data/share/jupyter/labextensions/jupyterlab-vim-langmap/schemas/jupyterlab-vim-langmap/plugin.json,sha256=MVKMcRoUTHQzZiTyA94RohSwE5wnab2dTGbe_-2NB-s,2473
|
|
6
|
+
jupyterlab_vim_langmap-0.1.0.data/data/share/jupyter/labextensions/jupyterlab-vim-langmap/static/232.3a830cce50e41a8e.js,sha256=O_OvYwxqEGUhA6pkfU5hix7aoXnJmfcYXY6z5E9L_qM,3889
|
|
7
|
+
jupyterlab_vim_langmap-0.1.0.data/data/share/jupyter/labextensions/jupyterlab-vim-langmap/static/261.ddf51921894263e0.js,sha256=Ls3XUGEOeEsDESh63YBmQQirtBZaJKwZ7tYEj74yDkY,3660
|
|
8
|
+
jupyterlab_vim_langmap-0.1.0.data/data/share/jupyter/labextensions/jupyterlab-vim-langmap/static/remoteEntry.ab3889f3dd7f6561.js,sha256=uLImU_GWI0IpDUBVmxfPbbCDetD2xL0B5TD0Oa6eSH0,12079
|
|
9
|
+
jupyterlab_vim_langmap-0.1.0.data/data/share/jupyter/labextensions/jupyterlab-vim-langmap/static/style.js,sha256=TbnlXBcaXPzfJarQ6ELgj_2E4-4LI2pHpNxxhL8LPOg,162
|
|
10
|
+
jupyterlab_vim_langmap-0.1.0.data/data/share/jupyter/labextensions/jupyterlab-vim-langmap/static/third-party-licenses.json,sha256=h8NCshKcUEEo1ImHGADuAVUZatWyiXjwXUGzGxIN-TE,2452
|
|
11
|
+
jupyterlab_vim_langmap-0.1.0.data/data/share/jupyter/labextensions/jupyterlab-vim-langmap/install.json,sha256=wemwkWvDmc5cFDx2PZz9MML9INQlNq73FDCo-KkYXRU,205
|
|
12
|
+
jupyterlab_vim_langmap-0.1.0.dist-info/METADATA,sha256=3UaTCjCLKRBBJP4lWalQDZA38mDNdMxF-NQb51ISHAg,7883
|
|
13
|
+
jupyterlab_vim_langmap-0.1.0.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
|
|
14
|
+
jupyterlab_vim_langmap-0.1.0.dist-info/licenses/LICENSE,sha256=2YGYMwqjSrhXrFGnXHvf30XRy6SZeiic_Xap_AnUQDQ,1547
|
|
15
|
+
jupyterlab_vim_langmap-0.1.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
BSD 3-Clause License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026, yvvakimoto
|
|
4
|
+
All rights reserved.
|
|
5
|
+
|
|
6
|
+
Redistribution and use in source and binary forms, with or without
|
|
7
|
+
modification, are permitted provided that the following conditions are met:
|
|
8
|
+
|
|
9
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
10
|
+
list of conditions and the following disclaimer.
|
|
11
|
+
|
|
12
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
13
|
+
this list of conditions and the following disclaimer in the documentation
|
|
14
|
+
and/or other materials provided with the distribution.
|
|
15
|
+
|
|
16
|
+
3. Neither the name of the copyright holder nor the names of its
|
|
17
|
+
contributors may be used to endorse or promote products derived from
|
|
18
|
+
this software without specific prior written permission.
|
|
19
|
+
|
|
20
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
21
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
22
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
23
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
24
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
25
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
26
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
27
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
28
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
29
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|