Skip to content

Commit

Permalink
0119
Browse files Browse the repository at this point in the history
  • Loading branch information
LincZero committed Jan 19, 2025
1 parent 23f56c0 commit 5b56e76
Show file tree
Hide file tree
Showing 7 changed files with 356 additions and 42 deletions.
117 changes: 117 additions & 0 deletions .github/workflows/webpage.yml
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
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ create_time: 2022‎-11‎-‎11‎
(只翻译了一部分,看原文很有必要。像Vault这种东西翻译版就没有)
- 推荐链接
- **由 Obsidian 团队提供的资源:**
- [Obsidian Sample Plugin](https://github.com/obsidianmd/obsidian-sample-plugin)
- [Obsidian API](https://github.com/obsidianmd/obsidian-api)
- [Obsidian Sample Plugin](https://github.com/obsidianmd/obsidian-sample-plugin)
- [Obsidian API](https://github.com/obsidianmd/obsidian-api)
- **由社区成员提供的资源:**
- [for Plugin Developers](https://publish.obsidian.md/hub/04+-+Guides%2C+Workflows%2C+%26+Courses/for+Plugin+Developers) in Obsidian Hub
- [Plugins mini FAQ](https://forum.obsidian.md/t/plugins-mini-faq/7737)
- [How to create a plugin for Obsidian](https://www.youtube.com/watch?v=XaES2G3PVpg) by [@phibr0](https://github.com/phibr0)
- [Create Your Own Obsidian Plugin](https://www.youtube.com/watch?v=9lA-jaMNS0k) by [Antone Heyward](https://www.youtube.com/channel/UC9w43btR2UUsfR6ZUf3AlqQ)
- [Unofficial API FAQ](https://liamca.in/Obsidian/API+FAQ/index) by [Liam Cain](https://liamca.in)
- [Obsidian Tools](https://github.com/obsidian-tools/obsidian-tools)
- [Getting Started with CodeMirror 6](https://github.com/nothingislost/obsidian-cm6-attributes#getting-started-with-codemirror-6) by [NothingIsLost](https://github.com/nothingislost)
- [for Plugin Developers](https://publish.obsidian.md/hub/04+-+Guides%2C+Workflows%2C+%26+Courses/for+Plugin+Developers) in Obsidian Hub
- [Plugins mini FAQ](https://forum.obsidian.md/t/plugins-mini-faq/7737)
- [How to create a plugin for Obsidian](https://www.youtube.com/watch?v=XaES2G3PVpg) by [@phibr0](https://github.com/phibr0)
- [Create Your Own Obsidian Plugin](https://www.youtube.com/watch?v=9lA-jaMNS0k) by [Antone Heyward](https://www.youtube.com/channel/UC9w43btR2UUsfR6ZUf3AlqQ)
- [Unofficial API FAQ](https://liamca.in/Obsidian/API+FAQ/index) by [Liam Cain](https://liamca.in)
- [Obsidian Tools](https://github.com/obsidian-tools/obsidian-tools)
- [Getting Started with CodeMirror 6](https://github.com/nothingislost/obsidian-cm6-attributes#getting-started-with-codemirror-6) by [NothingIsLost](https://github.com/nothingislost)
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# 优秀插件

这里指的不是在使用上的“优秀插件”,而是指可以供学习和参考的“优秀插件”

即:

- 代码风格好、架构简单、易于读懂和学习
- 代码涉及的功能多,涉及常用功能,可供查看插件是如何使用api/如何实现某功能的

这一部分我主要是clone并做代码注释,没有记在文本笔记里

(现在想来,我应该建一个学习用的组织,然后fork到该组织中,然后进行代码注释。这样会更好,更容易日后复习和查阅。clone做不到这点)

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"
}
```

## 详细文档

5 changes: 5 additions & 0 deletions 02. SubjectAndKnowledge/07. 理学/01. 数学/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# 数学.重定向.README

这里的记录可能有所欠缺,如果你对数学部分感兴趣,可以见另一个网站:

https://pkm-er.github.io/Pkmer-Math/
Loading

0 comments on commit 5b56e76

Please sign in to comment.