From 36c97b061684add2762e251ca8827b7e42cda382 Mon Sep 17 00:00:00 2001 From: douboer Date: Tue, 4 Nov 2025 20:59:23 +0800 Subject: [PATCH] update at 2025-11-04 20:59:23 --- deploy.sh | 120 ++++---- vim-im-switch-plugin/main.js | 465 +++++++++++++++++++++++++++++ vim-im-switch-plugin/manifest.json | 10 + vim-im-switch-plugin/styles.css | 2 + 4 files changed, 547 insertions(+), 50 deletions(-) create mode 100644 vim-im-switch-plugin/main.js create mode 100644 vim-im-switch-plugin/manifest.json create mode 100644 vim-im-switch-plugin/styles.css diff --git a/deploy.sh b/deploy.sh index 6734da0..e113f64 100755 --- a/deploy.sh +++ b/deploy.sh @@ -1,83 +1,103 @@ #!/bin/bash -# Obsidian Vim IM Switch Plugin 一键部署脚本 -# 编译并复制插件文件到 Obsidian 插件目录 +# Obsidian + Vim plugin one-click deploy script +set -e -set -e # 遇到错误时退出 - -# 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' -NC='\033[0m' # No Color +NC='\033[0m' -# 配置 SOURCE_DIR="/Users/gavin/vim-im-switch" TARGET_DIR="/Users/gavin/myweb/.obsidian/plugins/vim-im-switch" -echo -e "${BLUE}🚀 开始部署 Obsidian Vim IM Switch Plugin...${NC}" +echo -e "${BLUE}🚀 Start deploy...${NC}" -# 检查源目录 if [ ! -d "$SOURCE_DIR" ]; then - echo -e "${RED}❌ 源目录不存在: $SOURCE_DIR${NC}" + echo -e "${RED}❌ Source dir not found: $SOURCE_DIR${NC}" exit 1 fi -# 进入源目录 cd "$SOURCE_DIR" -echo -e "${YELLOW}📁 当前目录: $(pwd)${NC}" +echo -e "${YELLOW}📁 Current: $(pwd)${NC}" -# 编译项目 -echo -e "${YELLOW}🔨 开始编译项目...${NC}" +echo -e "${YELLOW}🔨 Build project...${NC}" if npm run build; then - echo -e "${GREEN}✅ 编译成功${NC}" + echo -e "${GREEN}✅ Build success${NC}" else - echo -e "${RED}❌ 编译失败${NC}" + echo -e "${RED}❌ Build failed${NC}" exit 1 fi -# 检查编译产物(构建产物位于项目根,确保 main.js manifest.json styles.css 可用) -if [ ! -f "main.js" ] || [ ! -f "manifest.json" ] || [ ! -f "styles.css" ]; then - echo -e "${RED}❌ 编译产物缺失: 期待 main.js, manifest.json, styles.css 在项目根目录下${NC}" - ls -la | sed -n '1,200p' +if [ ! -f "main.js" ] && [ ! -f "vim-im-switch-plugin/main.js" ]; then + echo -e "${RED}❌ main.js not found in project or vim-im-switch-plugin/ (build output)${NC}" exit 1 fi -# 创建目标目录 -echo -e "${YELLOW}📂 创建目标目录...${NC}" +echo -e "${YELLOW}📂 Creating target dir...${NC}" mkdir -p "$TARGET_DIR" -# 复制文件 -echo -e "${YELLOW}📋 复制插件文件...${NC}" +echo -e "${YELLOW}📋 Copying plugin files...${NC}" -# 复制必需的文件到 Obsidian 插件目录 -cp -f main.js "$TARGET_DIR/" -cp -f manifest.json "$TARGET_DIR/" -cp -f styles.css "$TARGET_DIR/" - -echo -e "${GREEN}✅ Obsidian 插件文件复制完成:${NC}" -echo -e " • main.js" -echo -e " • manifest.json" -echo -e " • styles.css" - -# 复制 Vim 插件(fcitx-osx.vim) -echo -e "${YELLOW}📋 复制 Vim 插件...${NC}" -mkdir -p ~/.vim/plugin -if [ -f "fcitx-osx.vim" ]; then - cp -f fcitx-osx.vim ~/.vim/plugin/ - echo -e "${GREEN}✅ Vim 插件复制完成:${NC}" - echo -e " • fcitx-osx.vim → ~/.vim/plugin/" +# If build outputs are in vim-im-switch-plugin, prefer that directory +SRC_PLUGIN_DIR="$SOURCE_DIR" +if [ -d "$SOURCE_DIR/vim-im-switch-plugin" ]; then + SRC_PLUGIN_DIR="$SOURCE_DIR/vim-im-switch-plugin" else - echo -e "${YELLOW}⚠️ 未找到 fcitx-osx.vim,跳过 Vim 插件复制(确定文件存在于仓库根)${NC}" + # If build outputs are at project root, copy them into vim-im-switch-plugin for release + mkdir -p "$SOURCE_DIR/vim-im-switch-plugin" + for f in main.js manifest.json styles.css; do + if [ -f "$SOURCE_DIR/$f" ]; then + cp -f "$SOURCE_DIR/$f" "$SOURCE_DIR/vim-im-switch-plugin/" + echo -e "${GREEN}✔ Move $f -> $SOURCE_DIR/vim-im-switch-plugin/${NC}" + fi + done + SRC_PLUGIN_DIR="$SOURCE_DIR/vim-im-switch-plugin" fi -# 验证文件 -echo -e "${YELLOW}🔍 验证复制的文件...${NC}" -ls -la "$TARGET_DIR" +echo -e "${YELLOW}🔍 Using source dir: $SRC_PLUGIN_DIR${NC}" -echo -e "${GREEN}🎉 部署完成!${NC}" -echo -e "${BLUE}📍 Obsidian 插件已部署到: $TARGET_DIR${NC}" -echo -e "${BLUE}📍 Vim 插件已部署到: ~/.vim/plugin/${NC}" -echo -e "${YELLOW}💡 请重启 Obsidian 或重新加载插件以使更改生效${NC}" -echo -e "${YELLOW}💡 Vim 插件将在下次启动 Vim 时自动加载${NC}" +for f in main.js manifest.json styles.css; do + if [ -f "$SRC_PLUGIN_DIR/$f" ]; then + cp -f "$SRC_PLUGIN_DIR/$f" "$TARGET_DIR/" + echo -e "${GREEN}✔ Copied $f -> $TARGET_DIR/${NC}" + else + echo -e "${YELLOW}⚠️ Not found: $SRC_PLUGIN_DIR/$f (skipped)${NC}" + fi +done + +echo -e "${GREEN}✅ Obsidian plugin files copied (if available)${NC}" + +# Ensure repo-level release directory (vim-im-switch-plugin) contains the built files +RELEASE_DIR="$SOURCE_DIR/vim-im-switch-plugin" +mkdir -p "$RELEASE_DIR" +echo -e "${YELLOW}📦 Updating release dir: $RELEASE_DIR${NC}" +for f in main.js manifest.json styles.css; do + if [ -f "$SOURCE_DIR/$f" ]; then + cp -f "$SOURCE_DIR/$f" "$RELEASE_DIR/" + echo -e "${GREEN}✔ Copied $SOURCE_DIR/$f -> $RELEASE_DIR/${NC}" + else + if [ -f "$RELEASE_DIR/$f" ]; then + echo -e "${YELLOW}ℹ Using existing $RELEASE_DIR/$f${NC}" + else + echo -e "${RED}⚠️ Missing build output: $f (not found in project root or $RELEASE_DIR)${NC}" + fi + fi +done + +echo -e "${YELLOW}📋 Copying plugin files to Obsidian plugin dir: $TARGET_DIR${NC}" +for f in main.js manifest.json styles.css; do + if [ -f "$RELEASE_DIR/$f" ]; then + cp -f "$RELEASE_DIR/$f" "$TARGET_DIR/" + echo -e "${GREEN}✔ Copied $RELEASE_DIR/$f -> $TARGET_DIR/${NC}" + else + echo -e "${YELLOW}⚠️ Not found in release dir: $RELEASE_DIR/$f (skipped)${NC}" + fi +done + +echo -e "${GREEN}🎉 Deploy complete!${NC}" +echo -e " • Obsidian plugin -> $TARGET_DIR" +echo -e " • Release copy -> $RELEASE_DIR" + +echo -e "${YELLOW}💡 Restart Obsidian or reload plugin to take effect.${NC}" diff --git a/vim-im-switch-plugin/main.js b/vim-im-switch-plugin/main.js new file mode 100644 index 0000000..bb96b36 --- /dev/null +++ b/vim-im-switch-plugin/main.js @@ -0,0 +1,465 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ROLLUP +if you want to view the source visit the plugins github repository +*/ + +'use strict'; + +var obsidian = require('obsidian'); +var child_process = require('child_process'); +var util = require('util'); + +/****************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { + var e = new Error(message); + return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; +}; + +const DEFAULT_SETTINGS = { + fcitxRemotePath_macOS: '/usr/local/bin/fcitx-remote', + fcitxRemotePath_windows: 'C:\\Program Files\\bin\\fcitx-remote', + fcitxRemotePath_linux: '/usr/bin/fcitx-remote', + englishInputMethod: 'com.apple.keylayout.ABC', + chineseInputMethod: 'auto-detect', // 将自动检测当前中文输入法 +}; +const pexec = util.promisify(child_process.exec); +var IMStatus; +(function (IMStatus) { + IMStatus[IMStatus["None"] = 0] = "None"; + IMStatus[IMStatus["Activate"] = 1] = "Activate"; + IMStatus[IMStatus["Deactivate"] = 2] = "Deactivate"; +})(IMStatus || (IMStatus = {})); +class VimIMSwitchPlugin extends obsidian.Plugin { + constructor() { + super(...arguments); + this.imStatus = IMStatus.None; + this.fcitxRemotePath = ""; + this.editorMode = null; + this.initialized = false; + this.cmEditor = null; + this.lastInsertModeIMStatus = IMStatus.None; // 记住上一次insert模式的输入法状态 + this.keyboardListenerSetup = false; // 防止重复设置键盘监听器 + this.lastKeyTime = 0; // 防抖:记录上次按键时间 + this.currentVimMode = 'normal'; // 跟踪当前vim模式 + this.onVimModeChange = (cm) => __awaiter(this, void 0, void 0, function* () { + // 防止短时间内重复处理相同的模式切换 + const currentTime = Date.now(); + if (cm.mode === this.currentVimMode && currentTime - this.lastKeyTime < 100) { + return; + } + // 更新当前vim模式状态 + this.currentVimMode = cm.mode; + if (cm.mode == "normal" || cm.mode == "visual") { + // 进入normal/visual模式前,先保存当前输入法状态 + yield this.getFcitxRemoteStatus(); + if (this.imStatus == IMStatus.Activate) { + this.lastInsertModeIMStatus = IMStatus.Activate; + } + console.log("🔤 [VimIMSwitch] → English"); + yield this.deactivateIM(); + } + else if (cm.mode == "insert" || cm.mode == "replace") { + // 进入insert模式时,恢复上次的输入法状态 + if (this.lastInsertModeIMStatus == IMStatus.Activate) { + console.log("🈳 [VimIMSwitch] → Chinese"); + yield this.activateIM(); + } + else { + console.log("🔤 [VimIMSwitch] → English"); + yield this.deactivateIM(); + } + } + }); + } + onload() { + return __awaiter(this, void 0, void 0, function* () { + console.log('🚀 [VimIMSwitch] Loading plugin...'); + yield this.loadSettings(); + // 尽早设置全局键盘监听器 + this.setupObsidianEditorEvents(); + this.addSettingTab(new IMSwitchSettingTab(this.app, this)); + this.addCommand({ + id: 'test-im-switch-to-english', + name: 'Test: Switch to English', + callback: () => { + this.deactivateIM(); + } + }); + this.addCommand({ + id: 'test-im-switch-to-chinese', + name: 'Test: Switch to Chinese', + callback: () => { + this.activateIM(); + } + }); + this.addCommand({ + id: 'test-check-im-status', + name: 'Test: Check IM Status', + callback: () => { + this.getFcitxRemoteStatus(); + } + }); + this.app.workspace.on('file-open', (file) => __awaiter(this, void 0, void 0, function* () { + if (!this.initialized) { + yield this.initialize(); + } + if (this.cmEditor) { + yield this.getFcitxRemoteStatus(); + this.lastInsertModeIMStatus = this.imStatus; + yield this.deactivateIM(); + if (typeof this.cmEditor.off === 'function') { + this.cmEditor.off("vim-mode-change", this.onVimModeChange); + } + if (typeof this.cmEditor.on === 'function') { + this.cmEditor.on("vim-mode-change", this.onVimModeChange); + } + } + })); + this.app.workspace.on('active-leaf-change', (leaf) => __awaiter(this, void 0, void 0, function* () { + if (this.app.workspace.activeLeaf.view.getViewType() == "markdown") { + if (!this.initialized) { + yield this.initialize(); + } + if (this.cmEditor) { + yield this.getFcitxRemoteStatus(); + this.lastInsertModeIMStatus = this.imStatus; + yield this.deactivateIM(); + this.setupObsidianEditorEvents(); + } + } + })); + }); + } + initialize() { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l; + return __awaiter(this, void 0, void 0, function* () { + if (this.initialized) { + return; + } + if ('editor:toggle-source' in this.app.commands.editorCommands) { + this.editorMode = 'cm6'; + } + else { + this.editorMode = 'cm5'; + } + const view = this.app.workspace.getActiveViewOfType(obsidian.MarkdownView); + if (view) { + if (this.editorMode == 'cm6') { + const possiblePaths = [ + (_c = (_b = (_a = view.sourceMode) === null || _a === void 0 ? void 0 : _a.cmEditor) === null || _b === void 0 ? void 0 : _b.cm) === null || _c === void 0 ? void 0 : _c.cm, + (_e = (_d = view.sourceMode) === null || _d === void 0 ? void 0 : _d.cmEditor) === null || _e === void 0 ? void 0 : _e.cm, + (_f = view.sourceMode) === null || _f === void 0 ? void 0 : _f.cmEditor, + (_g = view.editor) === null || _g === void 0 ? void 0 : _g.cm, + (_h = view.editor) === null || _h === void 0 ? void 0 : _h.cm + ]; + for (let i = 0; i < possiblePaths.length; i++) { + const path = possiblePaths[i]; + if (path && !this.cmEditor) { + this.cmEditor = path; + break; + } + } + } + else { + const possiblePaths = [ + (_j = view.sourceMode) === null || _j === void 0 ? void 0 : _j.cmEditor, + (_k = view.editor) === null || _k === void 0 ? void 0 : _k.cm, + (_l = view.editor) === null || _l === void 0 ? void 0 : _l.cm + ]; + for (let i = 0; i < possiblePaths.length; i++) { + const path = possiblePaths[i]; + if (path && !this.cmEditor) { + this.cmEditor = path; + break; + } + } + } + } + }); + } + setupVimModePolling() { + // 防止重复设置轮询 + if (this.vimModePollingInterval) { + clearInterval(this.vimModePollingInterval); + } + let lastMode = ""; + const pollInterval = setInterval(() => { + var _a, _b; + if (!this.cmEditor) { + return; + } + try { + const realCM = this.cmEditor.cm; + const currentMode = ((_b = (_a = realCM === null || realCM === void 0 ? void 0 : realCM.state) === null || _a === void 0 ? void 0 : _a.vim) === null || _b === void 0 ? void 0 : _b.mode) || ""; + if (currentMode && currentMode !== lastMode) { + this.onVimModeChange({ mode: currentMode }); + lastMode = currentMode; + } + } + catch (error) { + // 忽略轮询错误 + } + }, 100); + this.vimModePollingInterval = pollInterval; + } + setupObsidianEditorEvents() { + if (this.keyboardListenerSetup) { + return; + } + const handleKeyDown = (event) => __awaiter(this, void 0, void 0, function* () { + const currentTime = Date.now(); + // 防抖:100ms内只处理一次 + if (currentTime - this.lastKeyTime < 100) { + return; + } + this.lastKeyTime = currentTime; + // 处理ESC键:退出到normal模式 + if (event.key === 'Escape') { + // 退出insert模式前,先保存当前输入法状态 + const beforeIM = yield this.runCmd(this.fcitxRemotePath, ["-n"]); + const currentIMName = beforeIM.trim(); + // 检查当前输入法是中文还是英文 + if (currentIMName === this.settings.chineseInputMethod) { + this.lastInsertModeIMStatus = IMStatus.Activate; + console.log('🔤 [VimIMSwitch] ESC → English (saved Chinese)'); + } + else { + this.lastInsertModeIMStatus = IMStatus.Deactivate; + console.log('🔤 [VimIMSwitch] ESC → English (saved English)'); + } + // 切换到英文输入法 + this.currentVimMode = 'normal'; + yield this.deactivateIM(); + } + // 处理进入insert模式的按键(只在normal模式下) + else if (this.currentVimMode === 'normal' && + ['i', 'I', 'a', 'A', 'o', 'O', 's', 'S', 'c', 'C'].includes(event.key) && + !event.ctrlKey && !event.metaKey && !event.altKey) { + // 延迟一下,让Vim先切换模式 + setTimeout(() => __awaiter(this, void 0, void 0, function* () { + this.currentVimMode = 'insert'; + // 恢复上次的输入法状态 + if (this.lastInsertModeIMStatus == IMStatus.Activate) { + console.log("🈳 [VimIMSwitch] → Chinese"); + yield this.activateIM(); + } + else { + console.log("🔤 [VimIMSwitch] → English"); + yield this.deactivateIM(); + } + }), 10); + } + }); + // 移除旧的监听器 + if (this.obsidianKeyDownListener) { + document.removeEventListener('keydown', this.obsidianKeyDownListener, { capture: true }); + } + // 使用capture模式确保更早接收事件 + this.obsidianKeyDownListener = handleKeyDown; + document.addEventListener('keydown', handleKeyDown, { capture: true }); + this.keyboardListenerSetup = true; + } + runCmd(cmd, args = []) { + return __awaiter(this, void 0, void 0, function* () { + const output = yield pexec(`${cmd} ${args.join(" ")}`); + return output.stdout; + }); + } + getFcitxRemoteStatus() { + return __awaiter(this, void 0, void 0, function* () { + if (this.fcitxRemotePath == "") { + console.log("❌ [VimIMSwitch] Cannot get fcitx-remote path, please set it correctly."); + return; + } + try { + let fcitxRemoteOutput = yield this.runCmd(this.fcitxRemotePath); + fcitxRemoteOutput = fcitxRemoteOutput.trimRight(); + if (fcitxRemoteOutput == "1") { + this.imStatus = IMStatus.Deactivate; + } + else if (fcitxRemoteOutput == "2") { + this.imStatus = IMStatus.Activate; + } + else { + this.imStatus = IMStatus.None; + } + } + catch (error) { + console.log(`❌ [VimIMSwitch] Error getting IM status:`, error); + } + }); + } + activateIM() { + return __awaiter(this, void 0, void 0, function* () { + if (this.fcitxRemotePath == "") { + console.log("❌ [VimIMSwitch] Cannot get fcitx-remote path, please set it correctly."); + return; + } + try { + yield this.runCmd(this.fcitxRemotePath, ["-s", this.settings.chineseInputMethod]); + yield new Promise(resolve => setTimeout(resolve, 100)); + } + catch (error) { + console.log("❌ [VimIMSwitch] Error activating IM:", error); + } + }); + } + deactivateIM() { + return __awaiter(this, void 0, void 0, function* () { + if (this.fcitxRemotePath == "") { + console.log("❌ [VimIMSwitch] Cannot get fcitx-remote path, please set it correctly."); + return; + } + try { + yield this.runCmd(this.fcitxRemotePath, ["-s", this.settings.englishInputMethod]); + yield new Promise(resolve => setTimeout(resolve, 100)); + } + catch (error) { + console.log("❌ [VimIMSwitch] Error deactivating IM:", error); + } + }); + } + onunload() { + // 清理 CodeMirror 事件监听器 + if (this.cmEditor && typeof this.cmEditor.off === 'function') { + this.cmEditor.off("vim-mode-change", this.onVimModeChange); + } + // 清理轮询定时器 + if (this.vimModePollingInterval) { + clearInterval(this.vimModePollingInterval); + } + // 清理键盘事件监听器 + if (this.obsidianKeyDownListener) { + document.removeEventListener('keydown', this.obsidianKeyDownListener, { capture: true }); + this.keyboardListenerSetup = false; + } + } + loadSettings() { + return __awaiter(this, void 0, void 0, function* () { + this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData()); + yield this.updateCurrentPath(); + yield this.detectInputMethods(); + }); + } + detectInputMethods() { + return __awaiter(this, void 0, void 0, function* () { + if (this.settings.chineseInputMethod === 'auto-detect') { + try { + const currentIM = yield this.runCmd(this.fcitxRemotePath, ["-n"]); + const currentName = currentIM.trim(); + if (currentName.includes('pinyin') || + currentName.includes('chinese') || + currentName.includes('tencent') || + currentName.includes('sogou') || + currentName.includes('baidu')) { + this.settings.chineseInputMethod = currentName; + } + else { + this.settings.chineseInputMethod = 'com.tencent.inputmethod.wetype.pinyin'; + } + } + catch (error) { + this.settings.chineseInputMethod = 'com.tencent.inputmethod.wetype.pinyin'; + } + } + }); + } + updateCurrentPath() { + return __awaiter(this, void 0, void 0, function* () { + console.log(`🖥️ [VimIMSwitch] Platform detected: ${process.platform}`); + switch (process.platform) { + case 'darwin': + this.fcitxRemotePath = this.settings.fcitxRemotePath_macOS; + console.log(`🍎 [VimIMSwitch] Using macOS path: ${this.fcitxRemotePath}`); + break; + case 'linux': + this.fcitxRemotePath = this.settings.fcitxRemotePath_linux; + console.log(`🐧 [VimIMSwitch] Using Linux path: ${this.fcitxRemotePath}`); + break; + case 'win32': + this.fcitxRemotePath = this.settings.fcitxRemotePath_windows; + console.log(`🪟 [VimIMSwitch] Using Windows path: ${this.fcitxRemotePath}`); + break; + default: + console.log(`❌ [VimIMSwitch] Platform ${process.platform} is not supported currently.`); + break; + } + }); + } + saveSettings() { + return __awaiter(this, void 0, void 0, function* () { + yield this.saveData(this.settings); + }); + } +} +class IMSwitchSettingTab extends obsidian.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + } + display() { + let { containerEl } = this; + containerEl.empty(); + containerEl.createEl('h2', { text: 'Settings for Vim IM Switch plugin.' }); + new obsidian.Setting(containerEl) + .setName('Fcitx Remote Path for macOS') + .setDesc('The absolute path to fcitx-remote bin file on macOS.') + .addText(text => text + .setPlaceholder(DEFAULT_SETTINGS.fcitxRemotePath_macOS) + .setValue(this.plugin.settings.fcitxRemotePath_macOS) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.fcitxRemotePath_macOS = value; + this.plugin.updateCurrentPath(); + yield this.plugin.saveSettings(); + }))); + new obsidian.Setting(containerEl) + .setName('Fcitx Remote Path for Linux') + .setDesc('The absolute path to fcitx-remote bin file on Linux.') + .addText(text => text + .setPlaceholder(DEFAULT_SETTINGS.fcitxRemotePath_linux) + .setValue(this.plugin.settings.fcitxRemotePath_linux) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.fcitxRemotePath_linux = value; + this.plugin.updateCurrentPath(); + yield this.plugin.saveSettings(); + }))); + new obsidian.Setting(containerEl) + .setName('Fcitx Remote Path for Windows') + .setDesc('The absolute path to fcitx-remote bin file on Windows.') + .addText(text => text + .setPlaceholder(DEFAULT_SETTINGS.fcitxRemotePath_windows) + .setValue(this.plugin.settings.fcitxRemotePath_windows) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.fcitxRemotePath_windows = value; + this.plugin.updateCurrentPath(); + yield this.plugin.saveSettings(); + }))); + } +} + +module.exports = VimIMSwitchPlugin; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm1haW4udHMiXSwic291cmNlc0NvbnRlbnQiOm51bGwsIm5hbWVzIjpbInByb21pc2lmeSIsImV4ZWMiLCJQbHVnaW4iLCJNYXJrZG93blZpZXciLCJQbHVnaW5TZXR0aW5nVGFiIiwiU2V0dGluZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBb0dBO0FBQ08sU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFO0FBQzdELElBQUksU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxLQUFLLFlBQVksQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxVQUFVLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQ2hILElBQUksT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsVUFBVSxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQy9ELFFBQVEsU0FBUyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtBQUNuRyxRQUFRLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENB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 diff --git a/vim-im-switch-plugin/manifest.json b/vim-im-switch-plugin/manifest.json new file mode 100644 index 0000000..af77345 --- /dev/null +++ b/vim-im-switch-plugin/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "obsidian-vim-im-switch-plugin", + "name": "Vim Input Method Switch", + "version": "1.0.8", + "minAppVersion": "0.9.12", + "description": "Switch input method with fcitx-remote when Vim keymap is enabled.", + "author": "Yuan Chen", + "authorUrl": "https://github.com/yuanotes", + "isDesktopOnly": true +} diff --git a/vim-im-switch-plugin/styles.css b/vim-im-switch-plugin/styles.css new file mode 100644 index 0000000..47e1dc8 --- /dev/null +++ b/vim-im-switch-plugin/styles.css @@ -0,0 +1,2 @@ +body { +} \ No newline at end of file