diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5eb5b5d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.vscode/ +node_modules/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 6db9fa2..b14c572 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,3 +18,6 @@ - Add configurations to set `WParam` and `lParam` for `WM_IME_CONTROL` - Add `shiftIm.debug`(*Shift IM: Debug*) command which will help you set Params. +## [0.0.7] +- Fix `command 'shiftIM.debug' not found` Error. + diff --git a/README.md b/README.md index ab006af..58b2148 100644 --- a/README.md +++ b/README.md @@ -15,4 +15,12 @@ Upgrade from `Ultra IME for VSCode` Extension which is now deprecated. ## 📎 FAQ - My Input Mode can not be changed. - - Execute `shiftIm.debug` command. This command will help you set Params. If it still doesn't work, please raise an issue [HERE](https://github.com/yfzhao20/Shift-IM-for-VSCode/issues). \ No newline at end of file + - Execute `shiftIm.debug` command. This command will help you set Params. If it still doesn't work, please raise an issue [HERE](https://github.com/yfzhao20/Shift-IM-for-VSCode/issues). +- Not work on Remote/SSH/WSL/Docker + - Add following configuration to settings and reinstall the extension: + ```json + "remote.extensionKind": { + "yfzhao.hscopes-booster": ["ui"], + "yfzhao.shift-im-for-math": ["ui"], + } + ``` \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 06c39c5..ae98e54 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,14 +1,17 @@ { "name": "shift-im-for-math", - "version": "0.0.4", + "version": "0.0.7", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "shift-im-for-math", - "version": "0.0.4", + "version": "0.0.7", + "os": [ + "win32" + ], "dependencies": { - "ffi-napi": "^4.0.3" + "koffi": "^2.6.6" }, "devDependencies": { "@types/glob": "^7.2.0", @@ -447,6 +450,7 @@ "version": "4.3.4", "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -697,23 +701,6 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, - "node_modules/ffi-napi": { - "version": "4.0.3", - "resolved": "https://registry.npmmirror.com/ffi-napi/-/ffi-napi-4.0.3.tgz", - "integrity": "sha512-PMdLCIvDY9mS32RxZ0XGb95sonPRal8aqRhLbeEtWKZTe2A87qRFG9HjOhvG8EX2UmQw5XNRMIOT+1MYlWmdeg==", - "hasInstallScript": true, - "dependencies": { - "debug": "^4.1.1", - "get-uv-event-loop-napi-h": "^1.0.5", - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.1", - "ref-napi": "^2.0.1 || ^3.0.2", - "ref-struct-di": "^1.1.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -827,19 +814,6 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-symbol-from-current-process-h": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/get-symbol-from-current-process-h/-/get-symbol-from-current-process-h-1.0.2.tgz", - "integrity": "sha512-syloC6fsCt62ELLrr1VKBM1ggOpMdetX9hTrdW77UQdcApPHLmf7CI7OKcN1c9kYuNxKcDe4iJ4FY9sX3aw2xw==" - }, - "node_modules/get-uv-event-loop-napi-h": { - "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/get-uv-event-loop-napi-h/-/get-uv-event-loop-napi-h-1.0.6.tgz", - "integrity": "sha512-t5c9VNR84nRoF+eLiz6wFrEp1SE2Acg0wS+Ysa2zF0eROes+LzOfuTaVHxGy8AbS8rq7FHEJzjnCZo1BupwdJg==", - "dependencies": { - "get-symbol-from-current-process-h": "^1.0.1" - } - }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.0.tgz", @@ -1093,6 +1067,12 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "node_modules/koffi": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/koffi/-/koffi-2.8.0.tgz", + "integrity": "sha512-EXhiH9Ya4f+o4+24+uV4vFAMyPEskARVUaY8VHbIYWqkQVPTDyYJCBNfxp0Kxw6WdhaMwXeR8xIUyz8R2H8Rew==", + "hasInstallScript": true + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz", @@ -1268,7 +1248,8 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "node_modules/nanoid": { "version": "3.3.1", @@ -1288,21 +1269,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" - }, - "node_modules/node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", @@ -1476,37 +1442,6 @@ "node": ">=8.10.0" } }, - "node_modules/ref-napi": { - "version": "3.0.3", - "resolved": "https://registry.npmmirror.com/ref-napi/-/ref-napi-3.0.3.tgz", - "integrity": "sha512-LiMq/XDGcgodTYOMppikEtJelWsKQERbLQsYm0IOOnzhwE9xYZC7x8txNnFC9wJNOkPferQI4vD4ZkC0mDyrOA==", - "hasInstallScript": true, - "dependencies": { - "debug": "^4.1.1", - "get-symbol-from-current-process-h": "^1.0.2", - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.1" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/ref-struct-di": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/ref-struct-di/-/ref-struct-di-1.1.1.tgz", - "integrity": "sha512-2Xyn/0Qgz89VT+++WP0sTosdm9oeowLP23wRJYhG4BFdMUrLj3jhwHZNEytYNYgtPKLNTP3KJX4HEgBvM1/Y2g==", - "dependencies": { - "debug": "^3.1.0" - } - }, - "node_modules/ref-struct-di/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/regexpp": { "version": "3.2.0", "resolved": "https://registry.npmmirror.com/regexpp/-/regexpp-3.2.0.tgz", @@ -2207,6 +2142,7 @@ "version": "4.3.4", "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "requires": { "ms": "2.1.2" } @@ -2400,19 +2336,6 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, - "ffi-napi": { - "version": "4.0.3", - "resolved": "https://registry.npmmirror.com/ffi-napi/-/ffi-napi-4.0.3.tgz", - "integrity": "sha512-PMdLCIvDY9mS32RxZ0XGb95sonPRal8aqRhLbeEtWKZTe2A87qRFG9HjOhvG8EX2UmQw5XNRMIOT+1MYlWmdeg==", - "requires": { - "debug": "^4.1.1", - "get-uv-event-loop-napi-h": "^1.0.5", - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.1", - "ref-napi": "^2.0.1 || ^3.0.2", - "ref-struct-di": "^1.1.0" - } - }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -2504,19 +2427,6 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, - "get-symbol-from-current-process-h": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/get-symbol-from-current-process-h/-/get-symbol-from-current-process-h-1.0.2.tgz", - "integrity": "sha512-syloC6fsCt62ELLrr1VKBM1ggOpMdetX9hTrdW77UQdcApPHLmf7CI7OKcN1c9kYuNxKcDe4iJ4FY9sX3aw2xw==" - }, - "get-uv-event-loop-napi-h": { - "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/get-uv-event-loop-napi-h/-/get-uv-event-loop-napi-h-1.0.6.tgz", - "integrity": "sha512-t5c9VNR84nRoF+eLiz6wFrEp1SE2Acg0wS+Ysa2zF0eROes+LzOfuTaVHxGy8AbS8rq7FHEJzjnCZo1BupwdJg==", - "requires": { - "get-symbol-from-current-process-h": "^1.0.1" - } - }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.0.tgz", @@ -2713,6 +2623,11 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "koffi": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/koffi/-/koffi-2.8.0.tgz", + "integrity": "sha512-EXhiH9Ya4f+o4+24+uV4vFAMyPEskARVUaY8VHbIYWqkQVPTDyYJCBNfxp0Kxw6WdhaMwXeR8xIUyz8R2H8Rew==" + }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz", @@ -2856,7 +2771,8 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "nanoid": { "version": "3.3.1", @@ -2870,16 +2786,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" - }, - "node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==" - }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", @@ -3019,35 +2925,6 @@ "picomatch": "^2.2.1" } }, - "ref-napi": { - "version": "3.0.3", - "resolved": "https://registry.npmmirror.com/ref-napi/-/ref-napi-3.0.3.tgz", - "integrity": "sha512-LiMq/XDGcgodTYOMppikEtJelWsKQERbLQsYm0IOOnzhwE9xYZC7x8txNnFC9wJNOkPferQI4vD4ZkC0mDyrOA==", - "requires": { - "debug": "^4.1.1", - "get-symbol-from-current-process-h": "^1.0.2", - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.1" - } - }, - "ref-struct-di": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/ref-struct-di/-/ref-struct-di-1.1.1.tgz", - "integrity": "sha512-2Xyn/0Qgz89VT+++WP0sTosdm9oeowLP23wRJYhG4BFdMUrLj3jhwHZNEytYNYgtPKLNTP3KJX4HEgBvM1/Y2g==", - "requires": { - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmmirror.com/regexpp/-/regexpp-3.2.0.tgz", diff --git a/package.json b/package.json index f26d5f7..5f36a6d 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "shift-im-for-math", "displayName": "Shift IM for Math", "description": "An extension for automatically shift IM(Input Method) mode. Make it easier to input LaTeX in VSCode.", - "version": "0.0.6", + "version": "0.0.7", "keywords": [ "input method", "latex", @@ -83,6 +83,6 @@ "typescript": "^4.5.5" }, "dependencies": { - "ffi-napi": "^4.0.3" + "koffi": "^2.6.6" } } diff --git a/shift-im-for-math-0.0.7.vsix b/shift-im-for-math-0.0.7.vsix new file mode 100644 index 0000000..9a1223b Binary files /dev/null and b/shift-im-for-math-0.0.7.vsix differ diff --git a/src/shiftIME.js b/src/shiftIME.js index 334c49b..6b9de1e 100644 --- a/src/shiftIME.js +++ b/src/shiftIME.js @@ -2,7 +2,7 @@ const vscode = require('vscode') const hscopes = require('./hscopes') -const ffi = require('ffi-napi'); +const koffi = require('koffi'); let cnLParam = vscode.workspace.getConfiguration().get("Settings.ChineseModeCode") ?? 1025 let enLParam = vscode.workspace.getConfiguration().get("Settings.EnglishModeCode") ?? 0 @@ -33,23 +33,21 @@ function activate(context) { // win32api //////////////////////////////////////////////// // Import user32 -const user32 = new ffi.Library("user32", { - "SendMessageW": ['int32', ['long', 'int32', 'int32', 'int32']], - "GetForegroundWindow":["int32",[]] - }); - -const imm = new ffi.Library("imm32" ,{ - "ImmGetDefaultIMEWnd": ["int32" , ["int32"]] -}); +const user32 = koffi.load('user32.dll') +const imm32 = koffi.load('imm32.dll') + +const GetForegroundWindow = user32.stdcall("GetForegroundWindow", "int32", []) +const SendMessageW = user32.stdcall("SendMessageW", 'int32', ['long', 'int32', 'int32', 'int32']) +const ImmGetDefaultIMEWnd = imm32.stdcall("ImmGetDefaultIMEWnd", "int32", ["int32"]) /** * @param {number} wParam wParam for WM_IME_CONTROL * @param {number} lParam lParam for WM_IME_CONTROL */ function imcController(wParam, lParam){ - var hwnd = user32.GetForegroundWindow() - var defaultIMEWnd = imm.ImmGetDefaultIMEWnd(hwnd) - return user32.SendMessageW(defaultIMEWnd,0x283,wParam,lParam); + var hwnd = GetForegroundWindow() + var defaultIMEWnd = ImmGetDefaultIMEWnd(hwnd) + return SendMessageW(defaultIMEWnd,0x283,wParam,lParam); } // main /////////////////////////////////////////////////////