-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
7 changed files
with
356 additions
and
42 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
name: 部署文档 | ||
|
||
on: | ||
push: | ||
branches: ["main"] # 确保这是你正在使用的分支名称 | ||
workflow_dispatch: | ||
|
||
permissions: | ||
contents: write | ||
|
||
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. | ||
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. | ||
concurrency: | ||
group: "pages" | ||
cancel-in-progress: false | ||
|
||
jobs: | ||
deploy-gh-pages: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: 环境 - 构建库 | ||
uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 1 | ||
repository: LincZero/LincZero.github.io | ||
ref: 'main' # 分支,旧raw | ||
|
||
- name: 环境 - 安装 pnpm | ||
uses: pnpm/action-setup@v2 | ||
with: | ||
run_install: true | ||
version: 8 | ||
|
||
- name: 环境 - 设置 Node.js | ||
uses: actions/setup-node@v3 | ||
with: | ||
node-version: 20 | ||
cache: pnpm | ||
|
||
# 获取仓库的相关配置 | ||
# https://docs.github.com/zh/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables#default-environment-variables | ||
# TODO:若 “仓库无前缀名” 是.github.io结尾,则设置为"/" | ||
- name: 配置 - 获取仓库配置 | ||
id: config1 # 用于给其他步骤引用 | ||
working-directory: ./scripts/ | ||
run: | | ||
> git_config.json # 先清空 | ||
echo "{" >> git_config.json | ||
echo " \"GITHUB_WORKSPACE\": \"${GITHUB_WORKSPACE}\"," >> git_config.json # 工作路径 | ||
echo " \"GITHUB_ACTION_PATH\": \"${GITHUB_ACTION_PATH}\"," >> git_config.json # action路径 | ||
echo " \"GITHUB_ACTION_REPOSITORY\": \"${GITHUB_ACTION_REPOSITORY}\"," >> git_config.json # action仓库 | ||
echo " \"GITHUB_REPOSITORY_OWNER\": \"${GITHUB_REPOSITORY_OWNER}\"," >> git_config.json # 仓库所属(格式: 可以是组织) | ||
echo " \"GITHUB_ACTOR\": \"${GITHUB_ACTOR}\"," >> git_config.json # 仓库作者(格式: 不会是组织) | ||
echo " \"GITHUB_REPOSITORY\": \"${GITHUB_REPOSITORY}\"," >> git_config.json # 仓库标识(格式: 个人或组织/仓库名) | ||
echo " \"CALC_URL\": \"${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/\"," >> git_config.json # 仓库url | ||
REPO_NAME=$(echo "${GITHUB_REPOSITORY}" | cut -d"/" -f2) | ||
echo " \"CALC_REPO_NAME\": \"${REPO_NAME}\"" >> git_config.json # 仓库无前缀名 | ||
echo "}" >> git_config.json | ||
echo "::set-output name=REPO_NAME::$REPO_NAME" | ||
- name: 文档 - 文档库克隆 | ||
working-directory: ./src/ | ||
run: | | ||
rm -f README.md | ||
# 文档的克隆、构建、部署。注意 `clone --depth 1` 只拉最近一次提交,减少时间 | ||
# git clone --depth 1 https://github.com/${GITHUB_REPOSITORY}.git # 如果有多个clone项则替换成这个,避免冲突 | ||
git clone --depth 1 https://github.com/${GITHUB_REPOSITORY}.git temp_repo | ||
# 该仓库为代理仓库,使用链接仓库而非此仓库 | ||
if [ -f temp_repo/agency ]; then | ||
GIT_LINK=$(head -n 1 temp_repo/agency) | ||
rm -rf temp_repo | ||
git clone --depth 1 $GIT_LINK temp_repo | ||
echo "with agency" | ||
else | ||
echo "without agency" | ||
fi | ||
- name: 文档 - 文档库docs文件夹的处理 | ||
working-directory: ./src/ | ||
run: | | ||
if [ -d temp_repo/docs ]; then | ||
find temp_repo/* -maxdepth 0 -name docs -prune -o -exec rm -rf {} \; | ||
mv temp_repo/docs/* . | ||
rm -rf temp_repo | ||
echo "with docs" | ||
else | ||
rsync -a temp_repo/ . | ||
rm -rf temp_repo | ||
echo "without docs" | ||
fi | ||
# [!code] 根据实际情况修改 (需要在仓库配置写入以及和文档仓库clone这两个步骤的后面) | ||
- name: 配置 - 设置 | ||
working-directory: ./ | ||
run: | | ||
# sed -i 's/base: \"\/\"/base: \"\/${{steps.config1.outputs.REPO_NAME}}\/\"/g' ./src/.vuepress/config.ts | ||
cat ./scripts/git_config.json | ||
rm -f ./src/.vuepress/config_cover.js | ||
rm -f ./src/.vuepress/theme_cover.js | ||
pnpm run gen-config | ||
- name: 文档 - 构建 | ||
env: | ||
NODE_OPTIONS: --max_old_space_size=20480 | ||
run: |- | ||
node -e 'console.log(v8.getHeapStatistics())' | ||
pnpm run docs:build | ||
> src/.vuepress/dist/.nojekyll | ||
- name: 文档 - 部署 | ||
uses: JamesIves/github-pages-deploy-action@v4 | ||
with: | ||
# 这是文档部署到的分支名称 | ||
branch: gh-pages | ||
folder: src/.vuepress/dist |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
# 优秀插件 | ||
|
||
这里指的不是在使用上的“优秀插件”,而是指可以供学习和参考的“优秀插件” | ||
|
||
即: | ||
|
||
- 代码风格好、架构简单、易于读懂和学习 | ||
- 代码涉及的功能多,涉及常用功能,可供查看插件是如何使用api/如何实现某功能的 | ||
|
||
这一部分我主要是clone并做代码注释,没有记在文本笔记里 | ||
|
||
(现在想来,我应该建一个学习用的组织,然后fork到该组织中,然后进行代码注释。这样会更好,更容易日后复习和查阅。clone做不到这点) | ||
|
171 changes: 171 additions & 0 deletions
171
...op/04. Project/Type/Doc/MarkdwonAbout/01. Soft And Frame/Obsidian/插件开发/插件间通信.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,171 @@ | ||
--- | ||
create_time: 2025-01-14 | ||
Author: LincZero | ||
--- | ||
# 插件间通信 | ||
|
||
## GPT调研 | ||
|
||
kimi gpt: | ||
|
||
::: note | ||
|
||
Obsidian 插件之间可以互相通信,但需要通过一定的方法和 API 来实现。以下是一些相关的方法和 API: | ||
|
||
### 直接插件间通信 | ||
|
||
- **插件 API**:Obsidian 提供了一个插件 API,允许插件之间进行通信和交互。插件可以通过 API 访问其他插件的功能和数据。例如,插件可以注册命令、监听事件、访问其他插件的状态等- 。 | ||
- **插件状态共享**:插件可以将数据存储在 Obsidian 的全局状态中,其他插件可以访问和修改这些状态。这样,不同插件之间可以共享数据,实现通信。 | ||
|
||
### 通过外部API通信 | ||
|
||
- **Local REST API 插件**:这个插件为 Obsidian 提供了一个本地的 REST API 服务,允许外部工具和插件通过 HTTP 请求与 Obsidian 进行交互。例如,一个插件可以通过发送 HTTP 请求调用另一个插件提供的 API,实现功能的调用和数据的交换- 。 | ||
- **APIRequest 插件**:这个插件允许 Obsidian 向外部 API 发送请求,并以 JSON 块或 Obsidian 变量的格式接收响应。插件之间可以通过调用外部 API 来实现间接的通信和数据交换。 | ||
|
||
### 通过事件监听通信 | ||
|
||
- **事件系统**:Obsidian 的插件 API 提供了一个事件系统,插件可以监听和触发各种事件。例如,一个插件可以触发一个自定义事件,另一个插件监听该事件并执行相应的操作。通过这种方式,插件之间可以实现基于事件的通信。 | ||
|
||
### 通过插件扩展通信 | ||
|
||
- **编辑器扩展**:对于编辑器相关的插件,可以通过扩展 Obsidian 的编辑器来实现通信。例如,一个插件可以创建一个编辑器扩展,并通过该扩展与其他插件进行交互。 | ||
|
||
总之,Obsidian 插件之间可以通过插件 API、外部 API、事件系统和插件扩展等多种方式实现互相通信。开发者可以根据具体的需求和场景选择合适的方法来实现插件之间的通信和协作 | ||
|
||
::: | ||
|
||
后来又问了一遍 | ||
|
||
::: note | ||
|
||
在Obsidian中,插件之间可以通过以下几种方式实现通信: | ||
|
||
### 1. 使用事件系统 | ||
|
||
Obsidian的API提供了一个事件系统,插件可以注册监听特定的事件,也可以触发事件。当一个插件触发事件时,其他插件可以监听到这个事件并作出相应的响应 | ||
|
||
- **注册事件监听器**:插件可以注册一个事件监听器,当特定事件发生时,执行相应的回调函数。 | ||
- **触发事件**:插件可以在适当的时候触发一个事件,通知其他插件某个动作已经发生或即将发生。 | ||
|
||
### 2. 使用插件API | ||
|
||
Obsidian的API为插件提供了许多可以调用的方法和属性,插件可以通过这些API与其他插件进行通信。 | ||
|
||
- **获取插件实例**:插件可以通过API获取其他插件的实例,然后调用这些插件提供的方法或访问其属性。 | ||
- **调用插件方法**:如果一个插件公开了一些方法,其他插件可以直接调用这些方法来实现通信。 | ||
|
||
### 3. 使用全局状态 | ||
|
||
Obsidian提供了一些全局状态,插件可以读取或修改这些状态,从而实现插件之间的通信。 | ||
|
||
- **读取全局状态**:插件可以读取全局状态中的数据,了解其他插件的状态或行为。 | ||
- **修改全局状态**:插件可以修改全局状态,其他插件可以通过监听状态的变化来做出响应。 | ||
|
||
### 4. 使用插件之间的协议 | ||
|
||
一些插件可能会定义自己的通信协议,其他插件可以通过遵循这些协议来实现通信。 | ||
|
||
- **定义协议**:一个插件可以定义一套通信协议,包括数据格式、通信方式等。 | ||
- **遵循协议**:其他插件在与该插件通信时,需要遵循其定义的协议。 | ||
|
||
### 5. 使用HTTP API接口 | ||
|
||
对于一些需要与其他系统或插件进行复杂通信的场景,插件可以通过HTTP API接口实现。 | ||
|
||
- **提供API接口**:插件可以提供HTTP API接口,其他插件或系统可以通过这些接口发送请求。 | ||
- **调用API接口**:插件可以调用其他插件提供的HTTP API接口,获取数据或触发动作。 | ||
|
||
通过以上几种方式,Obsidian的插件之间可以实现灵活的通信,从而扩展和增强Obsidian的功能。开发者可以根据具体的需求和场景选择合适的通信方式。 | ||
|
||
::: | ||
|
||
## 可供参考的插件/文档 | ||
|
||
这里对之前调研的方式做一些归纳,以及补充 | ||
|
||
### Http方式 | ||
|
||
这里有两个可供参考的插件: | ||
|
||
- Local Rest API | ||
- APIRequest | ||
|
||
这两个插件我会在后面进行剖析、原理分析 | ||
|
||
### 事件注册方式 | ||
|
||
- | ||
|
||
### 获取其他插件实例 | ||
|
||
- | ||
|
||
### 全局状态方式 | ||
|
||
暂时不研究,因为不打算使用这种方式。 | ||
|
||
全局状态一般只适合分享一些比较小且固定、预定好的几个状态变量,不满足我的当前需求。 | ||
|
||
## 参考插件深入剖析 | ||
|
||
#### Local Rest API - 插件 | ||
|
||
- 接收外部的http请求,以执行一些操作。可用于自动化 | ||
- github: https://github.com/coddingtonbear/obsidian-local-rest-api star 712 | ||
- 其文档: https://coddingtonbear.github.io/obsidian-local-rest-api/ | ||
|
||
#### Local Rest API - 原理分析 | ||
|
||
- | ||
|
||
#### APIRequest - 插件 | ||
|
||
- 发送http请求到外部,并获取响应值 | ||
- 官网 | ||
- github: https://github.com/Rooyca/obsidian-api-request star 126 | ||
- 文档: https://rooyca.github.io/obsidian-api-request/ | ||
- 我的fork (中文注释) | ||
- github: https://github.dev/LincDemo/obsidian-api-request | ||
- 文档: https://lincdocs.github.io/obsidian-api-request/ | ||
|
||
#### APIRequest - 原理分析 | ||
|
||
(部分在注释fork中) | ||
|
||
[dir] | ||
|
||
- .github/ | ||
- docs/ | ||
- src/ | ||
- functions/ | ||
- HtmlSanitizer.js | ||
- frontmatterUtils.ts | 解析前辅文 | ||
- general.ts | ||
- mdparse.js | ||
- regx.ts | ||
- settings/ | ||
- settingsData.ts | 设置项定义 | ||
- settingsTab.ts | 设置菜单,class APRSettings extends PluginSettingTab | ||
- main.ts | ||
- (some files)/ | ||
- README.md | ||
- README.es.md | ||
- README.zh.md | ||
|
||
依赖 (package.json),并没有使用什么特别的库 | ||
|
||
```json | ||
"devDependencies": { | ||
"@types/node": "^16.11.6", | ||
"@typescript-eslint/eslint-plugin": "^5.59.2", | ||
"@typescript-eslint/parser": "5.29.0", | ||
"builtin-modules": "3.3.0", | ||
"esbuild": "0.17.3", | ||
"obsidian": "latest", | ||
"tslib": "2.4.0", | ||
"typescript": "4.7.4" | ||
} | ||
``` | ||
|
||
## 详细文档 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# 数学.重定向.README | ||
|
||
这里的记录可能有所欠缺,如果你对数学部分感兴趣,可以见另一个网站: | ||
|
||
https://pkm-er.github.io/Pkmer-Math/ |
Oops, something went wrong.