refactor: remove Platform enum and update keybinding logic

This commit is contained in:
exoticknight 2025-03-16 17:41:41 +08:00
parent 94da6baf9b
commit 524ec4d678
10 changed files with 2645 additions and 2694 deletions

55
README.ja.md Normal file
View file

@ -0,0 +1,55 @@
# Quick Nav
[English](./README.md) | [中文](./README.zh-cn.md) | 日本語
ショートカットキーの隠れた力を解放し、編集体験を向上させます。
## 使い方
Quick Nav は強力なナビゲーション操作を提供しますが、デフォルトのショートカットキーは設定されていません。これにより、お好みに合わせて自由に編集体験をカスタマイズすることができます。
以下は**推奨されるショートカットキーの設定**です。Obsidianのホットキー設定で設定できます
### 推奨カーソル移動ショートカット
- **カーソルを上に移動**: `Alt + I` (Windows/Linux), `Ctrl + I` (MacOS)
- **カーソルを下に移動**: `Alt + K` (Windows/Linux), `Ctrl + K` (MacOS)
- **カーソルを左に移動**: `Alt + J` (Windows/Linux), `Ctrl + J` (MacOS)
- **カーソルを右に移動**: `Alt + L` (Windows/Linux), `Ctrl + L` (MacOS)
- **ページを上にスクロール**: `Alt + U` (Windows/Linux), `Ctrl + U` (MacOS)
- **ページを下にスクロール**: `Alt + O` (Windows/Linux), `Ctrl + O` (MacOS)
- **行頭に移動**: `Alt + H` (Windows/Linux), `Ctrl + H` (MacOS)
- **行末に移動**: `Alt + ;` (Windows/Linux), `Ctrl + ;` (MacOS)
### 推奨テキスト選択ショートカット
- **上に選択**: `Alt + Shift + I` (Windows/Linux), `Ctrl + Shift + I` (MacOS)
- **下に選択**: `Alt + Shift + K` (Windows/Linux), `Ctrl + Shift + K` (MacOS)
- **左に選択**: `Alt + Shift + J` (Windows/Linux), `Ctrl + Shift + J` (MacOS)
- **右に選択**: `Alt + Shift + L` (Windows/Linux), `Ctrl + Shift + L` (MacOS)
- **行頭まで選択**: `Alt + Shift + H` (Windows/Linux), `Ctrl + Shift + H` (MacOS)
- **行末まで選択**: `Alt + Shift + ;` (Windows/Linux), `Ctrl + Shift + ;` (MacOS)
### ショートカットキーの設定方法
1. Obsidianの設定を開く
2. 「ホットキー」オプションに移動
3. 「Quick Nav」を検索
4. 各操作にお好みのショートカットキーを割り当てる
## インストール方法
### 方法 1: Obsidian設定からインストール
1. Obsidianを開き、「設定」に移動します。
2. 「サードパーティプラグイン」タブを選択します。
3. 「閲覧」をクリックし、「Quick Nav」を検索します。
4. 「インストール」をクリックし、その後「有効化」をクリックします。
### 方法 2: 手動インストール
1. [GitHubリポジトリ](https://github.com/exoticknight/quick-nav/releases)から最新リリースをダウンロードします。
2. ファイルを解凍します。
3. 解凍したフォルダをObsidianの保管庫のプラグインディレクトリにコピーします`/path/to/your/vault/.obsidian/plugins/`
4. Obsidianを開き、「設定」に移動します。
5. 「サードパーティプラグイン」タブで「Quick Nav」を有効にします。

View file

@ -1,12 +1,16 @@
# Quick Nav # Quick Nav
English | [中文](./README.zh-cn.md) English | [中文](./README.zh-cn.md) | [日本語](./README.ja.md)
Swift cursor navigation plugin to enhance editing. Enhance your editing experience by unleashing the hidden power of shortcuts.
## Usage ## Usage
### Cursor Move Quick Nav exposes powerful navigation operations without binding default shortcuts. This gives you the freedom to customize your editing experience according to your preferences.
Below are our **recommended shortcut bindings** that you can set up in Obsidian's Hotkeys settings:
### Recommended Cursor Movement Shortcuts
- **Move Cursor Up**: `Alt + I` (Windows/Linux), `Ctrl + I` (MacOS) - **Move Cursor Up**: `Alt + I` (Windows/Linux), `Ctrl + I` (MacOS)
- **Move Cursor Down**: `Alt + K` (Windows/Linux), `Ctrl + K` (MacOS) - **Move Cursor Down**: `Alt + K` (Windows/Linux), `Ctrl + K` (MacOS)
@ -17,7 +21,7 @@ Swift cursor navigation plugin to enhance editing.
- **Move Cursor Left End**: `Alt + H` (Windows/Linux), `Ctrl + H` (MacOS) - **Move Cursor Left End**: `Alt + H` (Windows/Linux), `Ctrl + H` (MacOS)
- **Move Cursor Right End**: `Alt + ;` (Windows/Linux), `Ctrl + ;` (MacOS) - **Move Cursor Right End**: `Alt + ;` (Windows/Linux), `Ctrl + ;` (MacOS)
### Cursor Select ### Recommended Cursor Selection Shortcuts
- **Select Cursor Up**: `Alt + Shift + I` (Windows/Linux), `Ctrl + Shift + I` (MacOS) - **Select Cursor Up**: `Alt + Shift + I` (Windows/Linux), `Ctrl + Shift + I` (MacOS)
- **Select Cursor Down**: `Alt + Shift + K` (Windows/Linux), `Ctrl + Shift + K` (MacOS) - **Select Cursor Down**: `Alt + Shift + K` (Windows/Linux), `Ctrl + Shift + K` (MacOS)
@ -26,6 +30,13 @@ Swift cursor navigation plugin to enhance editing.
- **Select Cursor Left End**: `Alt + Shift + H` (Windows/Linux), `Ctrl + Shift + H` (MacOS) - **Select Cursor Left End**: `Alt + Shift + H` (Windows/Linux), `Ctrl + Shift + H` (MacOS)
- **Select Cursor Right End**: `Alt + Shift + ;` (Windows/Linux), `Ctrl + Shift + ;` (MacOS) - **Select Cursor Right End**: `Alt + Shift + ;` (Windows/Linux), `Ctrl + Shift + ;` (MacOS)
### Setting Up Your Shortcuts
1. Open Obsidian Settings
2. Go to "Hotkeys"
3. Search for "Quick Nav"
4. Assign your preferred shortcuts to each operation
## Installation ## Installation
### Method 1: Install via Obsidian Settings ### Method 1: Install via Obsidian Settings

View file

@ -1,12 +1,16 @@
# Quick Nav # Quick Nav
[English](./README.md) | 中文 [English](./README.md) | 中文 | [日本語](./README.ja.md)
快速光标导航插件以增强编辑功能 通过释放快捷键的隐藏力量,增强您的编辑体验
## 使用方法 ## 使用方法
### 光标移动 Quick Nav 提供强大的导航操作,但不绑定默认快捷键。这让您可以根据自己的偏好自由定制编辑体验。
以下是我们**推荐的快捷键绑定**,您可以在 Obsidian 的热键设置中进行设置:
### 推荐的光标移动快捷键
- **向上移动光标**: `Alt + I` (Windows/Linux), `Ctrl + I` (MacOS) - **向上移动光标**: `Alt + I` (Windows/Linux), `Ctrl + I` (MacOS)
- **向下移动光标**: `Alt + K` (Windows/Linux), `Ctrl + K` (MacOS) - **向下移动光标**: `Alt + K` (Windows/Linux), `Ctrl + K` (MacOS)
@ -14,31 +18,38 @@
- **向右移动光标**: `Alt + L` (Windows/Linux), `Ctrl + L` (MacOS) - **向右移动光标**: `Alt + L` (Windows/Linux), `Ctrl + L` (MacOS)
- **向上翻页**: `Alt + U` (Windows/Linux), `Ctrl + U` (MacOS) - **向上翻页**: `Alt + U` (Windows/Linux), `Ctrl + U` (MacOS)
- **向下翻页**: `Alt + O` (Windows/Linux), `Ctrl + O` (MacOS) - **向下翻页**: `Alt + O` (Windows/Linux), `Ctrl + O` (MacOS)
- **移动到行首**: `Alt + H` (Windows/Linux), `Ctrl + H` (MacOS) - **移行首**: `Alt + H` (Windows/Linux), `Ctrl + H` (MacOS)
- **移动到行尾**: `Alt + ;` (Windows/Linux), `Ctrl + ;` (MacOS) - **移行尾**: `Alt + ;` (Windows/Linux), `Ctrl + ;` (MacOS)
### 光标选择 ### 推荐的光标选择快捷键
- **向上选择光标**: `Alt + Shift + I` (Windows/Linux), `Ctrl + Shift + I` (MacOS) - **向上选择**: `Alt + Shift + I` (Windows/Linux), `Ctrl + Shift + I` (MacOS)
- **向下选择光标**: `Alt + Shift + K` (Windows/Linux), `Ctrl + Shift + K` (MacOS) - **向下选择**: `Alt + Shift + K` (Windows/Linux), `Ctrl + Shift + K` (MacOS)
- **向左选择光标**: `Alt + Shift + J` (Windows/Linux), `Ctrl + Shift + J` (MacOS) - **向左选择**: `Alt + Shift + J` (Windows/Linux), `Ctrl + Shift + J` (MacOS)
- **向右选择光标**: `Alt + Shift + L` (Windows/Linux), `Ctrl + Shift + L` (MacOS) - **向右选择**: `Alt + Shift + L` (Windows/Linux), `Ctrl + Shift + L` (MacOS)
- **选择到行首**: `Alt + Shift + H` (Windows/Linux), `Ctrl + Shift + H` (MacOS) - **选择至行首**: `Alt + Shift + H` (Windows/Linux), `Ctrl + Shift + H` (MacOS)
- **选择到行尾**: `Alt + Shift + ;` (Windows/Linux), `Ctrl + Shift + ;` (MacOS) - **选择至行尾**: `Alt + Shift + ;` (Windows/Linux), `Ctrl + Shift + ;` (MacOS)
### 设置您的快捷键
1. 打开 Obsidian 设置
2. 前往"热键"选项
3. 搜索"Quick Nav"
4. 为每个操作分配您喜欢的快捷键
## 安装方法 ## 安装方法
### 方法一: 通过 Obsidian 设置安装 ### 方法 1: 通过 Obsidian 设置安装
1. 打开 Obsidian 并进入 `设置` 1. 打开 Obsidian 并进入`设置`。
2. 导航到 `第三方插件` 标签。 2. 导航至`第三方插件`选项卡
3. 点击 `浏览` 并搜索 `Quick Nav` 3. 点击`浏览`并搜索`Quick Nav`。
4. 点击 `安装` 然后 `启用` 4. 点击`安装`然后`启用`。
### 方法: 手动安装 ### 方法 2: 手动安装
1. 从 [GitHub 仓库](https://github.com/exoticknight/quick-nav/releases) 下载最新版本。 1. 从 [GitHub 仓库](https://github.com/exoticknight/quick-nav/releases) 下载最新发布版本。
2. 解压 zip 文件内容 2. 解压缩文件
3. 将解压后的文件夹复制到你的 Obsidian vault 的插件目录:`/path/to/your/vault/.obsidian/plugins/`。 3. 将解压后的文件夹复制到您的 Obsidian 保管库的插件目录:`/path/to/your/vault/.obsidian/plugins/`。
4. 打开 Obsidian 并进入 `设置` 4. 打开 Obsidian 并进入`设置`。
5. 导航`第三方插件` 标签并启用 `Quick Nav` 5. 导航至`第三方插件`选项卡并启用`Quick Nav`

View file

@ -1,11 +1,11 @@
{ {
"id": "quick-nav", "id": "quick-nav",
"name": "Quick Nav", "name": "Quick Nav",
"version": "1.0.2", "version": "1.0.2",
"minAppVersion": "0.15.0", "minAppVersion": "0.15.0",
"description": "Swift cursor navigation plugin to enhance editing", "description": "Swift cursor navigation plugin to enhance editing",
"author": "ExoticKnight", "author": "ExoticKnight",
"authorUrl": "https://github.com/exoticknight", "authorUrl": "https://github.com/exoticknight",
"fundingUrl": "https://github.com/exoticknight", "fundingUrl": "https://github.com/exoticknight",
"isDesktopOnly": true "isDesktopOnly": true
} }

4894
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,26 +1,26 @@
{ {
"name": "quick-nav", "name": "quick-nav",
"version": "1.0.2", "version": "1.0.2",
"description": "Swift cursor navigation plugin to enhance editing", "description": "Swift cursor navigation plugin to enhance editing",
"main": "main.js", "main": "main.js",
"scripts": { "scripts": {
"dev": "node esbuild.config.mjs", "dev": "node esbuild.config.mjs",
"lint": "eslint ./src/", "lint": "eslint ./src/",
"build": "tsc -noEmit -skipLibCheck && node esbuild.config.mjs production", "build": "tsc -noEmit -skipLibCheck && node esbuild.config.mjs production",
"version": "node version-bump.mjs && git add manifest.json versions.json" "version": "node version-bump.mjs && git add manifest.json versions.json"
}, },
"keywords": [], "keywords": [],
"author": "", "author": "",
"license": "MIT", "license": "MIT",
"devDependencies": { "devDependencies": {
"@codemirror/commands": "^6.8.0", "@codemirror/commands": "^6.8.0",
"@types/node": "^16.11.6", "@types/node": "^16.11.6",
"@typescript-eslint/eslint-plugin": "5.29.0", "@typescript-eslint/eslint-plugin": "5.29.0",
"@typescript-eslint/parser": "5.29.0", "@typescript-eslint/parser": "5.29.0",
"builtin-modules": "3.3.0", "builtin-modules": "3.3.0",
"esbuild": "0.17.3", "esbuild": "0.17.3",
"obsidian": "latest", "obsidian": "latest",
"tslib": "2.4.0", "tslib": "2.4.0",
"typescript": "4.7.4" "typescript": "4.7.4"
} }
} }

View file

@ -10,105 +10,50 @@ import {
cursorLineBoundaryLeft, cursorLineBoundaryLeft,
cursorLineBoundaryRight, cursorLineBoundaryRight,
} from "@codemirror/commands"; } from "@codemirror/commands";
import { Platform } from "src/constraints";
export const CursorMove: { export const CursorMove: {
id: string; id: string;
name: string; name: string;
modifiers: {
[Platform.Windows]: Modifier[];
[Platform.MacOS]: Modifier[];
[Platform.Linux]: Modifier[];
};
key: string;
commandFn: Command; commandFn: Command;
}[] = [ }[] = [
{ {
id: "quick-nav-move-cursor-up", id: "quick-nav-move-cursor-up",
name: "Move Cursor Up", name: "Move Cursor Up",
modifiers: { commandFn: cursorLineUp,
[Platform.Windows]: ["Alt"],
[Platform.MacOS]: ["Ctrl"],
[Platform.Linux]: ["Alt"],
}, },
key: "I", {
commandFn: cursorLineUp, id: "quick-nav-move-cursor-down",
}, name: "Move Cursor Down",
{ commandFn: cursorLineDown,
id: "quick-nav-move-cursor-down",
name: "Move Cursor Down",
modifiers: {
[Platform.Windows]: ["Alt"],
[Platform.MacOS]: ["Ctrl"],
[Platform.Linux]: ["Alt"],
}, },
key: "K", {
commandFn: cursorLineDown, id: "quick-nav-move-cursor-left",
}, name: "Move Cursor Left",
{ commandFn: cursorCharLeft,
id: "quick-nav-move-cursor-left",
name: "Move Cursor Left",
modifiers: {
[Platform.Windows]: ["Alt"],
[Platform.MacOS]: ["Ctrl"],
[Platform.Linux]: ["Alt"],
}, },
key: "J", {
commandFn: cursorCharLeft, id: "quick-nav-move-cursor-right",
}, name: "Move Cursor Right",
{ commandFn: cursorCharRight,
id: "quick-nav-move-cursor-right",
name: "Move Cursor Right",
modifiers: {
[Platform.Windows]: ["Alt"],
[Platform.MacOS]: ["Ctrl"],
[Platform.Linux]: ["Alt"],
}, },
key: "L", {
commandFn: cursorCharRight, id: "quick-nav-move-cursor-page-up",
}, name: "Move Cursor Page Up",
{ commandFn: cursorPageUp,
id: "quick-nav-move-cursor-page-up",
name: "Move Cursor Page Up",
modifiers: {
[Platform.Windows]: ["Alt"],
[Platform.MacOS]: ["Ctrl"],
[Platform.Linux]: ["Alt"],
}, },
key: "U", {
commandFn: cursorPageUp, id: "quick-nav-move-cursor-page-down",
}, name: "Move Cursor Page Down",
{ commandFn: cursorPageDown,
id: "quick-nav-move-cursor-page-down",
name: "Move Cursor Page Down",
modifiers: {
[Platform.Windows]: ["Alt"],
[Platform.MacOS]: ["Ctrl"],
[Platform.Linux]: ["Alt"],
}, },
key: "O", {
commandFn: cursorPageDown, id: "quick-nav-move-cursor-left-end",
}, name: "Move Cursor Left End",
{ commandFn: cursorLineBoundaryLeft,
id: "quick-nav-move-cursor-left-end",
name: "Move Cursor Left End",
modifiers: {
[Platform.Windows]: ["Alt"],
[Platform.MacOS]: ["Ctrl"],
[Platform.Linux]: ["Alt"],
}, },
key: "H", {
commandFn: cursorLineBoundaryLeft, id: "quick-nav-move-cursor-right-end",
}, name: "Move Cursor Right End",
{ commandFn: cursorLineBoundaryRight,
id: "quick-nav-move-cursor-right-end",
name: "Move Cursor Right End",
modifiers: {
[Platform.Windows]: ["Alt"],
[Platform.MacOS]: ["Ctrl"],
[Platform.Linux]: ["Alt"],
}, },
key: ";", ];
commandFn: cursorLineBoundaryRight,
},
];

View file

@ -8,83 +8,40 @@ import {
selectLineBoundaryLeft, selectLineBoundaryLeft,
selectLineBoundaryRight, selectLineBoundaryRight,
} from "@codemirror/commands"; } from "@codemirror/commands";
import { Platform } from "src/constraints";
export const CursorSelect: { export const CursorSelect: {
id: string; id: string;
name: string; name: string;
modifiers: {
[Platform.Windows]: Modifier[];
[Platform.MacOS]: Modifier[];
[Platform.Linux]: Modifier[];
};
key: string;
commandFn: Command; commandFn: Command;
}[] = [ }[] = [
{ {
id: "quick-nav-select-cursor-up", id: "quick-nav-select-cursor-up",
name: "Select Cursor Up", name: "Select Cursor Up",
modifiers: { commandFn: selectLineUp,
[Platform.Windows]: ["Alt", "Shift"],
[Platform.MacOS]: ["Ctrl", "Shift"],
[Platform.Linux]: ["Alt", "Shift"],
}, },
key: "I", {
commandFn: selectLineUp, id: "quick-nav-select-cursor-down",
}, name: "Select Cursor Down",
{ commandFn: selectLineDown,
id: "quick-nav-select-cursor-down",
name: "Select Cursor Down",
modifiers: {
[Platform.Windows]: ["Alt", "Shift"],
[Platform.MacOS]: ["Ctrl", "Shift"],
[Platform.Linux]: ["Alt", "Shift"],
}, },
key: "K", {
commandFn: selectLineDown, id: "quick-nav-select-cursor-left",
}, name: "Select Cursor Left",
{ commandFn: selectCharLeft,
id: "quick-nav-select-cursor-left",
name: "Select Cursor Left",
modifiers: {
[Platform.Windows]: ["Alt", "Shift"],
[Platform.MacOS]: ["Ctrl", "Shift"],
[Platform.Linux]: ["Alt", "Shift"],
}, },
key: "J", {
commandFn: selectCharLeft, id: "quick-nav-select-cursor-right",
}, name: "Select Cursor Right",
{ commandFn: selectCharRight,
id: "quick-nav-select-cursor-right",
name: "Select Cursor Right",
modifiers: {
[Platform.Windows]: ["Alt", "Shift"],
[Platform.MacOS]: ["Ctrl", "Shift"],
[Platform.Linux]: ["Alt", "Shift"],
}, },
key: "L", {
commandFn: selectCharRight, id: "quick-nav-select-cursor-left-end",
}, name: "Select Cursor Left End",
{ commandFn: selectLineBoundaryLeft,
id: "quick-nav-select-cursor-left-end",
name: "Select Cursor Left End",
modifiers: {
[Platform.Windows]: ["Alt", "Shift"],
[Platform.MacOS]: ["Ctrl", "Shift"],
[Platform.Linux]: ["Alt", "Shift"],
}, },
key: "H", {
commandFn: selectLineBoundaryLeft, id: "quick-nav-select-cursor-right-end",
}, name: "Select Cursor Right End",
{ commandFn: selectLineBoundaryRight,
id: "quick-nav-select-cursor-right-end",
name: "Select Cursor Right End",
modifiers: {
[Platform.Windows]: ["Alt", "Shift"],
[Platform.MacOS]: ["Ctrl", "Shift"],
[Platform.Linux]: ["Alt", "Shift"],
}, },
key: ";", ];
commandFn: selectLineBoundaryRight,
},
];

View file

@ -1,5 +0,0 @@
export enum Platform {
Windows = "win",
MacOS = "mac",
Linux = "linux",
}

View file

@ -1,30 +1,17 @@
import { import {
MarkdownView, MarkdownView,
Modifier,
Plugin, Plugin,
Platform as OBPlatform,
} from "obsidian"; } from "obsidian";
import { Command, EditorView } from "@codemirror/view"; import { Command, EditorView } from "@codemirror/view";
import { CursorMove, CursorSelect } from "./codeMirrorCommand"; import { CursorMove, CursorSelect } from "./codeMirrorCommand";
import { Platform } from "./constraints";
export default class QuickNavPlugin extends Plugin { export default class QuickNavPlugin extends Plugin {
async onload() { async onload() {
let platform: Platform = Platform.Windows;
if (OBPlatform.isMacOS) {
platform = Platform.MacOS;
}
if (OBPlatform.isLinux) {
platform = Platform.Linux;
}
CursorMove.forEach((cursorMove) => { CursorMove.forEach((cursorMove) => {
this.registerKeybindToCMCommand( this.registerKeybindToCMCommand(
cursorMove.id, cursorMove.id,
cursorMove.name, cursorMove.name,
cursorMove.modifiers[platform],
cursorMove.key,
cursorMove.commandFn cursorMove.commandFn
); );
}); });
@ -33,8 +20,6 @@ export default class QuickNavPlugin extends Plugin {
this.registerKeybindToCMCommand( this.registerKeybindToCMCommand(
cursorSelect.id, cursorSelect.id,
cursorSelect.name, cursorSelect.name,
cursorSelect.modifiers[platform],
cursorSelect.key,
cursorSelect.commandFn cursorSelect.commandFn
); );
}); });
@ -43,20 +28,12 @@ export default class QuickNavPlugin extends Plugin {
registerKeybindToCMCommand( registerKeybindToCMCommand(
id: string, id: string,
name: string, name: string,
modifiers: Modifier[],
key: string,
commandFn: Command commandFn: Command
) { ) {
this.addCommand({ this.addCommand({
id, id,
name, name,
callback: () => this.getEditorViewToExecCommand(commandFn), callback: () => this.getEditorViewToExecCommand(commandFn),
hotkeys: [
{
modifiers,
key,
},
],
}); });
} }
@ -70,5 +47,5 @@ export default class QuickNavPlugin extends Plugin {
return false; return false;
} }
onunload() {} onunload() { }
} }