终极版本的Typora上传到博客园和csdn

激活插件

下载网址是这个:

https://codeload.github.com/obgnail/typora_plugin/zip/refs/tags/1.9.4

解压之后这样的:

image-20240619181438204

解压之后将plugin,复制到自己的安装目录下的resources

image-20240619181337244

点击安装即可:

image-20240619181538228

更改配置文件

image-20240619181134062

"dependencies": {
        "chromedriver": "^125.0.2",
        "marked": "^12.0.2",
        "selenium-webdriver": "^4.21.0"
    }

安装自己的浏览器chrome,看自己的安装版本

链接:https://pan.baidu.com/s/1-JXLXd5HMlCACj8kpnUjlQ?pwd=xa0d 提取码:xa0d

可以参照这样

然后在自己的文件夹下面复制一个参数版本

image-20240619182141298

copy里面的内容是这样的

image-20240619182211061

在这个路径下面npm i 一下

image-20240619182307981

然后再将自己复制的依赖复制到新的node_module下面就好了

然后再将我给你的

image-20240619182438801

替换进去就好了

参数配置

参考

image-20240619182600407

打开之后改成这个样子:

#  如果您对 toml 格式不太了解,可以花三分钟时间学习一下:https://toml.io/cn/v1.0.0
#  插件使用说明:https://github.com/obgnail/typora_plugin
#  所有插件都允许单独开启/关闭,开发者鼓励您修改配置,以符合自身需求
#-------------------------------------------------------------------------
#  请勿修改【custom_plugin.default.toml】文件,请阅读本目录下的【请读我.md】文件
#  请勿修改【custom_plugin.default.toml】文件,请阅读本目录下的【请读我.md】文件
#  请勿修改【custom_plugin.default.toml】文件,请阅读本目录下的【请读我.md】文件
#-------------------------------------------------------------------------


############### kanban ###############
[kanban]
# 右键菜单中展示的名称
name = "Kanban"
# 是否启用此二级插件
enable = true
# 是否在右键菜单中隐藏
hide = false
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[kanban.config]
# 代码块语言
# 强烈建议不要修改。如果要修改,请跟着修改TEMPLATE选项里的语言
LANGUAGE = "kanban"
# 严格模式:不会忽略存在语法错误的代码行,直接在页面上报错(此选项用于控制所有看板,如果设置为true,那么会强制所有看板进入严格模式)
# 也可以在代码块首行添加use strict,进入严格模式(此操作用于控制单个看板)
STRICT_MODE = false
# 默认处于交互模式(处于交互模式下,鼠标click图表并不会展开代码块)
INTERACTIVE_MODE = true
# 当描述为空时隐藏描述框
HIDE_DESC_WHEN_EMPTY = true
# 看板最大高度(单位:px)(若<0,则全部显示)
KANBAN_MAX_HEIGHT = 700
# 看板的宽度(单位:px)
KANBAN_WIDTH = 250
# 看板任务描述框的最大高度(单位:em)(若<0,则全部显示)
KANBAN_TASK_DESC_MAX_HEIGHT = -1
# 当看板数量太多时是否换行显示
WRAP = false
# 当鼠标位于看板时,ctrl+wheel滚动看板
CTRL_WHEEL_TO_SCROLL = true
# 允许在描述框使用markdown内联样式(code、strong、em、del、link、img)
ALLOW_MARKDOWN_INLINE_STYLE = true
# 看板框的颜色(请保持 KANBAN_COLOR 和 TASK_COLOR 数量一致,否则颜色会乱套,就不好看了)
KANBAN_COLOR = ["#FFE0B2", "#DAE9F4", "#FEDCCC", "#C6E5D9", "#FFF1B9"]
# 任务框的颜色
TASK_COLOR = ["#FFFDE7", "#F8FAFF", "#FFFFF2", "#FFFCF0", "#FFFFF5"]
# 自动插入的模板
TEMPLATE = """```kanban
use strict
# Today's task

## Todo
* 语法说明(一级标题表示看板标题\\n二级标题表示看板\\n- 或 * 表示任务)
- 描述框样式(支持在描述框添加 markdown 行内样式:\\n**加粗**,*斜体*,`代码`,~~删除~~,[链接](https://github.com/obgnail/typora_plugin),![图片](https://avatars.githubusercontent.com/u/48992887?s=96&v=4))
- 严格模式(在首行添加 use strict 进入严格模式,将不会忽略语法错误)
- 当描述为空时隐藏描述框

## In-Progress
- 数量、配色(看板和任务都可以无限添加\\n\\n可以前往配置修改你喜欢的颜色)
- 当任务数量太多,出现滚动条时(可以将鼠标置于看板下,使用【鼠标滚轮】滚动任务)
- 当看板数量太多,出现滚动条时(可以将鼠标置于看板下,使用【ctrl+鼠标滚轮】滚动看板)

## Completed
- NOTE(语法是插件开发者定义的,无法通用,只建议【每日任务】临时使用)
```
"""


############### chat ###############
[chat]
# 右键菜单中展示的名称
name = "Chat"
# 是否启用此二级插件
enable = true
# 是否在右键菜单中隐藏
hide = false
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[chat.config]
# 代码块语言
# 强烈建议不要修改。如果要修改,请跟着修改TEMPLATE选项里的语言
LANGUAGE = "chat"
# 默认处于交互模式(处于交互模式下,鼠标click图表并不会展开代码块)
INTERACTIVE_MODE = true
# 默认的选项
DEFAULT_OPIONS = { useStrict = true, showNickname = true, showAvatar = true, notAllowShowTime = false, allowMarkdown = true, senderNickname = "me", timeNickname = "time" }
# 自动插入的模板
TEMPLATE = """```chat
---
# 配置
# 进入严格模式(不忽略语法错误)
useStrict: false
# 展示用户名
showNickname: true
# 展示头像
showAvatar: true
# 不允许展示时间
notAllowShowTime: false
# 允许使用markdown语法
allowMarkdown: true
# 右侧发送者的用户名
senderNickname: me
# 时间的用户名
timeNickname: time
# 用户头像
avatars:
  me: https://avatars.githubusercontent.com/u/48992887?s=96&v=4
  nickname1: ./assets/1.jpg
---

time: 昨天 18:21

testUser1: 使用冒号分割用户名和消息

me: 右侧的用户名为 me,时间为 time。

me: 支持部分 markdown 语法。比如 **加粗**,*斜体*,`代码`,~~删除~~,[链接](https://github.com/obgnail/typora_plugin),\\n![图片](https://avatars.githubusercontent.com/u/48992887?s=96&v=4)

nickname1: 支持使用 yaml 格式的 front matter 修改配置(就和 markdown 一样)\\n\\n其中的 avatars 选项用于配置用户的头像,如果没有配置头像,默认为用户名的首字符\\n\\n你可以试试在本文件所属目录下添加 `./assets/1.jpg` 文件,便可以看到对应用户的头像被修改了

注意: 支持导出成 HTML、PDF 等格式。语法是插件开发者自定义的,不具备通用性

"""


############### timeline ###############
[timeline]
# 右键菜单中展示的名称
name = "Timeline"
# 是否启用此二级插件
enable = true
# 是否在右键菜单中隐藏
hide = false
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[timeline.config]
# 代码块语言
# 强烈建议不要修改。如果要修改,请跟着修改TEMPLATE选项里的语言
LANGUAGE = "timeline"
# 默认处于交互模式(处于交互模式下,鼠标click图表并不会展开代码块)
INTERACTIVE_MODE = true
# 图表背景颜色
BACKGROUND_COLOR = "#fafafa"
# 标题的字体颜色
TITLE_COLOR = "#555"
# 标题的字体大小
TITLE_FONT_SIZE = "1.5rem"
# 标题的字宽
TITLE_FONT_WEIGHT = "bold"
# 左侧时间线的颜色
LINE_COLOR = "#eee"
# 左侧时间线的宽度
LINE_WIDTH = "2px"
# 时间圆点的颜色
CIRCLE_COLOR = "#999"
# 时间圆点的直径
CIRCLE_DIAMETER = "0.7em"
# 时间圆点的位置: top
CIRCLE_TOP = "0.6em"
# 时间的字体颜色
TIME_COLOR = "#555"
# 自动插入的模板
TEMPLATE = """```timeline
# 使用一级标题表示 timeline 的标题

## 2022-10-1
### 使用二级标题表示时间,三到六级标题表示内容
支持简单的 markdown 语法
- 这是无序列表项 1
- 这是无序列表项 2
---
支持 **加粗**,*斜体*,`代码`,~~删除~~,[链接](https://github.com/obgnail/typora_plugin),![图片](https://avatars.githubusercontent.com/u/48992887?s=96&v=4)
不支持代码块,因为开发者不希望代码块发生嵌套

## 2023-10-1
语法是开发者自定义的,谨慎使用。

"""


############### echarts ###############
[echarts]
# 右键菜单中展示的名称
name = "Echarts"
# 是否启用此二级插件
enable = true
# 是否在右键菜单中隐藏
hide = false
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[echarts.config]
# 代码块语言
# 强烈建议不要修改。如果要修改,请跟着修改TEMPLATE选项里的语言
LANGUAGE = "echarts"
# 默认处于交互模式(处于交互模式下,鼠标click图表并不会展开代码块)
INTERACTIVE_MODE = true
# 渲染器: canvas/svg(参考:https://echarts.apache.org/handbook/zh/best-practices/canvas-vs-svg/)
RENDERER = "svg"
# 导出时echarts转成什么格式
# 可选: png/jpg/svg
# 注意: png/jpg只有在canvas渲染器的时候可用,svg只有在使用svg渲染器的时候可用
EXPORT_TYPE = "svg"
# 图表默认高度
DEFAULT_FENCE_HEIGHT = "300px"
# 图表背景颜色
DEFAULT_FENCE_BACKGROUND_COLOR = "#f8f8f8"
# 自动插入的模板
TEMPLATE = """```echarts
// 提供内置变量:
//   1. myChart: echarts实例
//   2. echarts: echarts模块
//   3. option:  echarts实例的option
//   4. this:    echarts插件实例
// 更多示例:https://echarts.apache.org/examples/zh/index.html#chart-type-line
// 代码块里的所有内容都会被eval,请注意安全问题
// 可以使用如下注释设置图表宽高(否则使用默认):
// {height: "300px", width: ""}

option = {
    tooltip: { trigger: 'item' },
    legend: { top: '5%', left: 'center' },
    series: [{
        name: 'Access From',
        type: 'pie',
        radius: ['40%', '70%'],
        avoidLabelOverlap: false,
        label: { show: false, position: 'center' },
        emphasis: { label: { show: true,  fontSize: 40,  fontWeight: 'bold' } },
        labelLine: { show: false },
        data: [
            {value: 1548, name: 'Search Engine'},
            {value: 735, name: 'Direct'},
            {value: 580, name: 'Email'},
            {value: 484, name: 'Union Ads'},
            {value: 310, name: 'Video Ads'}
        ]
    }]
}
```
"""


############### chart ###############
[chart]
# 右键菜单中展示的名称
name = "Chart"
# 是否启用此二级插件
enable = true
# 是否在右键菜单中隐藏
hide = false
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[chart.config]
# 代码块语言
# 强烈建议不要修改。如果要修改,请跟着修改TEMPLATE选项里的语言
LANGUAGE = "chart"
# 默认处于交互模式(处于交互模式下,鼠标click图表并不会展开代码块)
INTERACTIVE_MODE = true
# 图表默认高度
DEFAULT_FENCE_HEIGHT = "300px"
# 图表背景颜色
DEFAULT_FENCE_BACKGROUND_COLOR = "#f8f8f8"
# 自动插入的模板
TEMPLATE = """```chart
// 提供内置变量:
//   1. myChart: chart实例
//   2. Chart:   chart类
//   3. config:  chart的config
//   4. this:    chart插件实例
// API:https://chart.nodejs.cn/docs/latest/developers/api.html
// 代码块里的所有内容都会被eval,请注意安全问题
// 可以使用如下注释设置图表宽高(否则使用默认):
// {height: "300px", width: ""}

config = {
  type: "bar",
  data: {
    labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
    datasets: [{
      label: "# of Votes",
      data: [12, 19, 3, 5, 2, 3],
      backgroundColor: [
        "rgba(255, 99, 132, 0.2)", "rgba(54, 162, 235, 0.2)", "rgba(255, 206, 86, 0.2)",
        "rgba(75, 192, 192, 0.2)", "rgba(153, 102, 255, 0.2)", "rgba(255, 159, 64, 0.2)"
      ],
      borderColor: [
        "rgba(255, 99, 132, 1)", "rgba(54, 162, 235, 1)", "rgba(255, 206, 86, 1)",
        "rgba(75, 192, 192, 1)", "rgba(153, 102, 255, 1)", "rgba(255, 159, 64, 1)"
      ],
      borderWidth: 1
    }]
  },
  // 添加事件
  // options: {
  //   onClick: e => {
  //     const canvasPosition = Chart.helpers.getRelativePosition(e, myChart);
  //     confirm(`你点击了位置: (${canvasPosition.x},${canvasPosition.y})`);
  //   }
  // }
}
```
"""


############### calendar ###############
[calendar]
# 右键菜单中展示的名称
name = "Calendar"
# 是否启用此二级插件
enable = true
# 是否在右键菜单中隐藏
hide = false
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[calendar.config]
# 代码块语言
# 强烈建议不要修改。如果要修改,请跟着修改TEMPLATE选项里的语言
LANGUAGE = "calendar"
# 默认处于交互模式(处于交互模式下,鼠标click图表并不会展开代码块)
INTERACTIVE_MODE = true
# 图表默认高度
DEFAULT_FENCE_HEIGHT = "800px"
# 图表背景颜色
DEFAULT_FENCE_BACKGROUND_COLOR = "#f8f8f8"
# 自动插入的模板
TEMPLATE = """```calendar
// 提供内置变量:
//   1. calendar: calendar实例
//   2. Calendar: Calendar类
//   3. option:   calendar的option
//   4. this:     calendar插件实例
// example:https://nhn.github.io/tui.calendar/latest/tutorial-06-daily-view
// API: https://github.com/nhn/tui.calendar/blob/main/docs/en/apis/options.md
// 代码块里的所有内容都会被eval,请注意安全问题
// 可以使用如下注释设置图表宽高(否则使用默认):
// {height: "800px", width: ""}

const today = new Date();
const yesterday = new Date(today.getTime() - 24 * 60 * 60 * 1000);
const nextMonth = new Date(today.getFullYear(), today.getMonth() + 1, 1);

option = {defaultView: 'week'};
calendar.createEvents([
    {id: 'event1', calendarId: 'cal2', title: 'meeting', start: yesterday, end: today},
    {id: 'event2', calendarId: 'cal1', title: 'appointment', start: yesterday, end: nextMonth},
]);
```
"""


############### abc ###############
[abc]
# 右键菜单中展示的名称
name = "ABC"
# 是否启用此二级插件
enable = true
# 是否在右键菜单中隐藏
hide = false
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[abc.config]
# 代码块语言
# 强烈建议不要修改。如果要修改,请跟着修改TEMPLATE选项里的语言
LANGUAGE = "abc"
# 默认处于交互模式(处于交互模式下,鼠标click图表并不会展开代码块)
INTERACTIVE_MODE = true
# 乐谱的可视化选项,请参考: https://paulrosen.github.io/abcjs/visual/render-abc-options.html
# 常用的配置:
#   - scale: 用于指定乐谱的缩放比例。
#   - staffwidth: 用于指定乐谱谱表的宽度。
#   - responsive: 用于指定乐谱在响应式布局中的行为,例如 "resize" 表示在窗口大小改变时重新渲染乐谱。
VISUAL_OPTIONS = { scale = 1.0, staffwidth = 400, responsive = "resize" }
# 图表默认高度
DEFAULT_FENCE_HEIGHT = "300px"
# 图表背景颜色
DEFAULT_FENCE_BACKGROUND_COLOR = "#f8f8f8"
# 自动插入的模板
TEMPLATE = """```abc
X:1
T:Twinkle, Twinkle, Little Star
M:4/4
L:1/4
K:C
G2 G2|A2 A2|B2 B2|c3 z|G2 G2|A2 A2|B2 G2|c3 z||
```
"""


############### callouts ###############
[callouts]
# 右键菜单中展示的名称
name = "Callouts"
# 是否启用此二级插件
# typora1.8版本已经原生支持callouts,但是:
#   1. 其仅支持五种类型的callouts,
#   2. 其不支持fold callouts(如: > [!NOTE]-)。
#   3. 此插件兼容原生callouts
enable = true
# 是否在右键菜单中隐藏
hide = false
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[callouts.config]
# callout的阴影
box_shadow = "0 0.2rem 0.5rem #0000000d, 0 0 0.05rem #0000001a"
# 为标题设置颜色(和left_line_color一样)
set_title_color = true
# 鼠标悬停在fold callout时展示其内容
hover_to_show_fold_callout = true
# 自动插入的模板
template = "> [!NOTE]\n> this is note"
# 使用的字体。一旦修改此选项,就需要修改下面所有的icon
# 具体的icon值请参考:
#   旧版本Typora:Typora/resources/app/style/font-awesome-4.1.0/css/font-awesome.css
#   新版本Typora:Typora/resources/style/font-awesome-4.1.0/css/font-awesome.css
#   所有的icon及其对应的值:https://www.adfwebmagazine.jp/wp-content/uploads/test_v4.1.pdf
font_family = "FontAwesome"

# 所有【类型不属于list选项的callouts】都会使用默认的样式
# 默认的背景颜色
default_background_color = "#fafafa"
# 默认的左边线颜色
default_left_line_color = "#777777"
# 默认的icon
default_icon = "\\f075"

# callout的类型:
#  - type:            自定义的类型
#  - background_color:背景颜色
#  - left_line_color: 左侧竖线颜色
#  - icon:            图标
list = [
    { type = "tip", background_color = "#d8f2e5", left_line_color = "#3abd7e", icon = "\\f02c" },
    { type = "bug", background_color = "#feeed3", left_line_color = "#E0AC00", icon = "\\f188" },
    { type = "info", background_color = "#dff6dd", left_line_color = "#3abd7e", icon = "\\f05a" },
    { type = "note", background_color = "#e1d1eb", left_line_color = "#6a1b9a", icon = "\\f040" },
    { type = "quote", background_color = "#fafafa", left_line_color = "#777777", icon = "\\f10d" },
    { type = "example", background_color = "#f1edfd", left_line_color = "#777777", icon = "\\f133" },
    { type = "caution", background_color = "#fde7e9", left_line_color = "#c62828", icon = "\\f024" },
    { type = "failure", background_color = "#f4d4d4", left_line_color = "#c62828", icon = "\\f00d" },
    { type = "warning", background_color = "#feeed3", left_line_color = "#E0AC00", icon = "\\f071" },
    { type = "success", background_color = "#d8f2e5", left_line_color = "#3abd7e", icon = "\\f00c" },
    { type = "question", background_color = "#fff4ce", left_line_color = "#E0AC00", icon = "\\f128" },
    { type = "abstract", background_color = "#e5f8f8", left_line_color = "#777777", icon = "\\f00b" },
    { type = "important", background_color = "#d8e6f3", left_line_color = "#3b83c1", icon = "\\f132" },
]


############### marp ###############
[marp]
# 右键菜单中展示的名称
name = "Marp"
# 是否启用此二级插件
enable = true
# 是否在右键菜单中隐藏
hide = false
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[marp.config]
# 代码块语言
# 强烈建议不要修改。如果要修改,请跟着修改TEMPLATE选项里的语言
LANGUAGE = "marp"
# 默认处于交互模式(处于交互模式下,鼠标click图表并不会展开代码块)
INTERACTIVE_MODE = true
# 自动插入的模板
TEMPLATE = """```marp
---
theme: gaia
_class: lead
paginate: true
backgroundColor: #fff
backgroundImage: url('https://marp.app/assets/hero-background.svg')
---

![bg left:40% 80%](https://marp.app/assets/marp.svg)

# **Marp**

Markdown Presentation Ecosystem

https://marp.app/

---

# How to write slides

Split pages by horizontal ruler (`---`). It's very simple! :satisfied:

"""


############### darkMode ###############
[darkMode]
# 右键菜单中展示的名称
name = "夜间模式"
# 是否启用此二级插件
enable = true
# 是否在右键菜单中隐藏
hide = false
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[darkMode.config]
# 快捷键
hotkey = ""
# 默认进入夜间模式
default_dark_mode = false


############### noImageMode ###############
[noImageMode]
# 右键菜单中展示的名称
name = "无图模式"
# 是否启用此二级插件
enable = true
# 是否在右键菜单中隐藏
hide = false
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[noImageMode.config]
# 快捷键
hotkey = ""
# 当处于无图模式时,鼠标悬停时重新显示图片
reshow_when_hover = true
# 默认进入无图模式
default_no_image_mode = false
# 动画持续时间(单位:ms)
transition_duration = 300
# 延迟动画时间(单位:ms)
transition_delay = 0


############### fullPathCopy ###############
[fullPathCopy]
# 右键菜单中展示的名称
name = "复制标题路径"
# 是否启用此二级插件
enable = true
# 是否在右键菜单中隐藏
hide = false
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[fullPathCopy.config]
# 快捷键
hotkey = "ctrl+shift+y"
# 如果在空白页调用此插件,使用的文件名(因为尚不存在该文件,需要用一个默认的文件名代替)
untitled_file_name = "untitled"
# 跳过空白的标题
ignore_empty_header = false
# 标题和提示之前添加空格
add_space = true
# 使用绝对路径
full_file_path = false


############### extractRangeToNewFile ###############
[extractRangeToNewFile]
# 右键菜单中展示的名称
name = "提取选区文字到新文件"
# 是否启用此二级插件
enable = true
# 是否在右键菜单中隐藏
hide = false
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[extractRangeToNewFile.config]
# 快捷键
hotkey = ""
# 展示窗口
show_modal = true
# 自动打开新文件
auto_open = true
# 删除原文件中提取的内容
delete_content = false


############### templater ###############
[templater]
# 右键菜单中展示的名称
name = "文件模板"
# 是否启用此二级插件
enable = true
# 是否在右键菜单中隐藏
hide = false
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[templater.config]
# 快捷键
hotkey = ""
# 自动打开新文件
auto_open = true
# 除了默认的模板变量,还可以自定义模板变量(如果您不了解javascript,请勿修改此选项)
#   - enable   是否启用
#   - name     模板变量名(必须唯一)
#   - callback 回调函数的字符串
template_variables = [
    # 使用模板变量的方式很简单,和javascript中调用函数基本一样,有两点不同:
    #   1. 前后需要两个大括号包裹: myFunc(arg1, arg2) => {{ myFunc(arg1, arg2) }}
    #   2. 若无实参,可去掉小括号: {{ myFunc() }} 等同于 {{ myFunc }}
    # 例如(使用前记得将enable置为true):
    #   {{ author }}             =>  obgnail
    #   {{ sum(1, 2) }}          =>  3
    #   {{ sum }}                =>  300
    #   {{ sumList([1, 2]) }}    =>  3
    #   {{ contact("a", "b") }}  =>  a-b
    { enable = false, name = "author", callback = "() => 'obgnail'" },
    { enable = false, name = "sum", callback = "(v1 = 100, v2 = 200) => v1 + v2" },
    { enable = false, name = "sumList", callback = "args => args.reduce((x, y) => x + y, 0)" },
    { enable = false, name = "contact", callback = "(...args) => args.join('-')" },
]
# 模板
# 默认的模板变量:
#   {{ date }}               当前日期
#   {{ time }}               当前时间
#   {{ datetime }}           当前日期时间
#   {{ timestamp }}          当前时间戳
#   {{ weekday }}            当前周几
#   {{ yesterday }}          昨天日期
#   {{ tomorrow }}           明天日期
#   {{ dateOffset(2) }}      2天后的日期(-2表示2天前的日期)
#   {{ random }}             范围为0-1的随机浮点数
#   {{ randomInt(2, 100) }}  范围为2-100的随机整数
#   {{ randomStr }}          由字母和数字组成的随机字符串
#   {{ title }}              新建文件的标题
#   {{ filepath }}           新建文件的路径
#   {{ folder }}             当前文件的目录
#   {{ mountFolder }}        当前文件的挂载目录
#   {{ username }}           当前电脑的用户名
#   {{ range }}              当前选取的文字
#   {{ uuid }}               uuid
[[templater.config.template]]
name = "标准模板"
text = """---
title: {{title}}
date: {{date}}
tags:
---

"""
[[templater.config.template]]
name = "日记"
text = """---
title: {{title}}
date: {{date}} {{weekday}}
---

"""
[[templater.config.template]]
name = "文章写作"
text = """---
author: {{username}}
created: {{datetime}}
aliases: {{title}}
description:
tags:
---
## 关键字




## 概述和背景



## 注释


"""


############### chineseSymbolAutoPairer ###############
[chineseSymbolAutoPairer]
# 右键菜单中展示的名称
name = "中文符号自动补全"
# 是否启用此二级插件
# 注意:此插件受Typora本身配置【匹配括号和引号】的影响,如果此配置为false,那么此插件自动禁用
enable = true
# 是否在右键菜单中隐藏
hide = true
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[chineseSymbolAutoPairer.config]
# 兼容以前的行为:当用户输入【】时,不会变成【】】,而是将光标跳到】的右边
auto_skip = true
# 当光标在中间,左右两边都是成对符号,如:【|】;且用户键入Backspace时,同时删除左右两边的符号
auto_delete_pair = true
# 当框选文字时,键入中文符号,自动包裹框选文字
auto_surround_pair = true
# 自动包裹框选文字后,自动框选文字
auto_select_after_surround = true
# 需要自动补全的符号(第一项为输入符号,第二项为补全符号)
# NOTE:其实有个问题我不知道要不要修复:中文的前后引号是不一样的,如果你键入的是后引号,此时便无法正常配对补全(好像搜狗输入法就没有修复此问题)
auto_pair_symbols = [
    ["(", ")"],
    ["《", "》"],
    ["‘", "’"],
    ["“", "”"],
    ["【", "】"],
    ["「", "」"],
    ["『", "』"],
]


############### toc ###############
[toc]
# 右键菜单中展示的名称
name = "大纲目录"
# 是否启用此二级插件
enable = true
# 是否在右键菜单中隐藏
hide = false
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[toc.config]
# 快捷键
hotkey = ""
# 是否转义标题内容
escape_header = true
# 右键侧边栏的【大纲】按钮触发
right_click_outline_button_to_toggle = true
# 当pin到页面右侧时,占据页面的20%宽度
width_percent_when_pin_right = 20
# 每次打开 Typora 时,默认弹出右侧菜单栏
default_show_toc = false


############### resourceOperation ###############
[resourceOperation]
# 右键菜单中展示的名称
name = "资源管理"
# 是否启用此二级插件
enable = true
# 是否在右键菜单中隐藏
hide = false
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[resourceOperation.config]
# 快捷键
hotkey = ""
# 弹窗位于页面从左往右的5%位置
modal_left_percent = 5
# 弹窗占据页面的90%宽度
modal_width_percent = 90
# 弹窗占据页面的70%高度
modal_height_percent = 70
# 本插件是通过后缀名来判断是否是资源的
# 什么后缀判定为资源
resource_suffix = [".jpg", ".jpeg", ".png", ".gif", ".svg", ".webp", ".webm", ".bmp", ".mp3", ".mp4", ".ogg", ".image", ".jfif", ".gif!large"]
# 忽略的目录
ignore_folders = [".git", "node_modules"]
# 对于无后缀名的文件是否加入资源列表
collect_file_without_suffix = true
# 是否忽略html标签<img src="example.jpg">里的资源(markdown是支持插入html的,此选项问是否要忽略img标签)
ignore_img_html_element = false
# 什么后缀判定为md文件
markdown_suffix = [".md", ".markdown", ".mdown", ".mmd", ".rmarkdown", ".mkd", ".mdwn", ".mdtxt", ".rmd", ".mdtext"]
# 自动打开报告文件
auto_open = true


############### scrollBookmarker ###############
[scrollBookmarker]
# 右键菜单中展示的名称
name = "书签管理器"
# 是否启用此二级插件(此插件仅在window_tab插件启用时生效)
enable = true
# 是否在右键菜单中隐藏
hide = false
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[scrollBookmarker.config]
# 快捷键
hotkey = ""
# 数据持久化(作为文件保存起来)
persistence = true
# 允许【ctrl+鼠标拖拽】拖动窗口
allow_drag = true
# 当alt+click时,自动弹出窗口
auto_popup_modal = true


############### bingSpeech ###############
[bingSpeech]
# 右键菜单中展示的名称
name = "必应朗读"
# 是否启用此二级插件
#  1.实现原理:采用爬虫技术,盗取必应翻译的播放语音功能
#  2.功能完全依赖于外部环境,因此不能保证成功
#  3.开发者一时兴起做的,仅作娱乐使用
enable = true
# 是否在右键菜单中隐藏
hide = false
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[bingSpeech.config]
# 快捷键
hotkey = ""
# 配音。可选:
#   zh-CN-YunxiNeural
#   zh-CN-XiaoxiaoNeural
#   zh-CN-XiaoyiNeural
#   zh-CN-YunjianNeural
#   zh-CN-YunxiaNeural
#   zh-CN-YunyangNeural
#   zh-CN-liaoning-XiaobeiNeural
#   zh-CN-shaanxi-XiaoniNeural
#   zh-HK-HiuMaanNeural
#   zh-HK-WanLungNeural
#   zh-HK-HiuGaaiNeural
#   zh-TW-HsiaoChenNeural
#   zh-TW-YunJheNeural
#   zh-TW-HsiaoYuNeural
voice = "zh-CN-YunXiNeural"
# 语速(如: 20%、-50%、0%)
rate = "+20%"
# 语调(如: 20%、-50%、0%)
pitch = "0%"
# 语气。可选项请参考:https://learn.microsoft.com/zh-cn/azure/ai-services/speech-service/speech-synthesis-markup-voice#use-speaking-styles-and-roles
style = "neutral"
# 语气强度
#   0:最低程度的表达方式
#   1:中等程度的表达方式
#   2:最高程度的表达方式
style_degree = 1
# 源语言
from_language = "zh-Hans"
# 翻译语言
to_language = "en"
# 将3行文本作为一组数据发送给bing
group_lines = 3


############### imageReviewer ###############
[imageReviewer]
# 右键菜单中展示的名称
name = "图片查看器"
# 是否启用此二级插件
enable = true
# 是否在右键菜单中隐藏
hide = false
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[imageReviewer.config]
# 快捷键
hotkey = "ctrl+alt+i"
# 点击遮罩空白处退出
click_mask_to_exit = true
# 工具栏的位置:bottom/top
tool_position = "top"
# 进入查看器后,第一张图片是?
#   1. inViewBoxImage:     当前视图里第一张图片
#   2. closestViewBoxImage:距离当前视图中心最近的一张图片
#   3. firstImage:         整篇文档的第一张图片
# 为什么是个列表?答:优先级。
# ["inViewBoxImage", "firstImage"]:首先寻找当前视图里第一张图片,若找不到,则使用文档的第一张图片
first_image_strategies = ["inViewBoxImage", "firstImage"]
# 在工具栏左侧,展示的图片信息:
#   1. index: 第几张图片
#   2. title: 图片名称
#   3. size:  图片大小
show_message = ["index", "title", "size"]
# 每次缩放的比率
zoom_scale = 0.1
# 每次旋转的角度
rotate_scale = 10
# 每次倾斜的角度
skew_scale = 1
# 每次移动的像素
translate_scale = 10
# 轮播图片时的停留时间(单位:s)
play_second = 3
# 遮罩层的不透明度
mask_background_opacity = 0.6
# 图片最多占据80%的页面宽度
image_max_width = 80
# 图片最多占据80%的页面高度度
image_max_height = 80
# 背景模糊等级: 数值越大越模糊(为0则不模糊)
blur_level = 6

# 图片支持以下操作:
#   - dummy:          无功能
#   - close:          关闭
#   - download:       下载网络图片(若此图片是本地图片,则失效)
#   - scroll:         定位到文档
#   - play:           轮播
#   - location:       打开图片路径
#   - nextImage:      下张图
#   - previousImage:  上张图
#   - firstImage:     第一张图
#   - lastImage:      最后一张图
#   - zoomIn:         放大图片
#   - zoomOut:        缩小图片
#   - rotateLeft:     图片向左旋转
#   - rotateRight:    图片向右旋转
#   - hFlip:          水平翻转图片
#   - vFlip:          垂直翻转图片
#   - translateLeft:  向左移动
#   - translateRight: 向右移动
#   - translateUp:    向上移动
#   - translateDown:  向下移动
#   - incHSkew:       图片增大水平倾斜
#   - decHSkew:       图片减小水平倾斜
#   - incVSkew:       图片增大垂直倾斜
#   - decVSkew:       图片减小垂直倾斜
#   - originSize:     还原图片尺寸
#   - fixScreen:      图片大小适配屏幕
#   - autoSize:       图片大小在【原先尺寸】和【适配屏幕】之间切换
#   - restore:        图片恢复为最初状态

# 图片的操作提供多个入口:
#   - 工具栏按钮
#   - 鼠标左中右键(可同时配合ctrl、shift、alt等修饰按键)
#   - 快捷键

# 工具栏按钮
# 有两点需要注意:
#   1. 可选项比上面的功能多了一个info,用于提示
#   2. 若是本地图片,download按钮会自动隐藏
tool_function = ["info", "download", "play", "vFlip", "hFlip", "autoSize", "rotateRight", "scroll", "location", "close"]

# 鼠标点击图片绑定的功能
# 三项分别为左键、中键、右键
mousedown_function = ["nextImage", "close", "previousImage"]
# ctrl+鼠标图片时,绑定的功能
ctrl_mousedown_function = ["hFlip", "dummy", "vFlip"]
# shift+鼠标图片时,绑定的功能
shift_mousedown_function = ["autoSize", "dummy", "dummy"]
# alt+鼠标图片时,绑定的功能
alt_mousedown_function = ["restore", "location", "dummy"]

# 当鼠标位于图片时,上下滚动绑定的功能
# 两项分别为向上滚动、向下滚动
wheel_function = ["zoomIn", "zoomOut"]
# 当鼠标位于图片时,ctrl+上下滚动绑定的功能
ctrl_wheel_function = ["rotateRight", "rotateLeft"]
# 当鼠标位于图片时,shift+上下滚动绑定的功能
shift_wheel_function = ["incHSkew", "decHSkew"]
# 当鼠标位于图片时,alt+上下滚动绑定的功能
alt_wheel_function = ["incVSkew", "decVSkew"]

# 快捷键(仅在进入查看器后可用)
# 第一项为快捷键,第二项为绑定的功能
hotkey_function = [
    # 基础
    ["j", "nextImage"],
    ["k", "previousImage"],
    ["=", "nextImage"],
    ["-", "previousImage"],
    ["shift+j", "lastImage"],
    ["shift+k", "firstImage"],
    ["l", "scroll"],
    ["q", "close"],
    ["escape", "close"],
    [" ", "play"],
    # 翻转
    ["h", "hFlip"],
    ["v", "vFlip"],
    # 旋转
    ["r", "rotateRight"],
    ["shift+r", "rotateLeft"],
    # 移动
    ["ArrowUp", "translateUp"],
    ["ArrowDown", "translateDown"],
    ["ArrowLeft", "translateLeft"],
    ["ArrowRight", "translateRight"],
    ["w", "translateUp"],
    ["s", "translateDown"],
    ["a", "translateLeft"],
    ["d", "translateRight"],
    # 大小
    ["z", "originSize"],
    ["x", "zoomIn"],
    ["c", "zoomOut"],
    ["shift++", "zoomIn"],
    ["shift+_", "zoomOut"],
]


############### markdownLint ###############
[markdownLint]
# 右键菜单中展示的名称
name = "md格式规范检测"
# 是否启用此二级插件
enable = true
# 是否在右键菜单中隐藏
hide = false
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[markdownLint.config]
# 快捷键
hotkey = ""
# 禁用的检测规则(参考:https://github.com/markdownlint/markdownlint/blob/main/docs/RULES.md)
disable_rules = ["MD009", "MD010", "MD012", "MD013", "MD033", "MD041"]
# 将检测规则的案文翻译为中文
translate = true
# 防抖时间,在编辑后多长时间重新检测一次(单位:ms)
# 最低为1000,若<1000,则自动置为1000
debounce_interval = 1000
# 允许【ctrl+鼠标拖拽】拖动窗口
allow_drag = true
# lint通过时的提示文本
pass_text = "该文件符合规范要求"
# 弹窗的宽度
#   1. auto:  根据文字自适应
#   2. 500px: 500像素(不一定是500,可以任何正整数)
modal_width = "auto"
# 弹窗的最大高度
modal_max_height = "500px"
# 弹窗的字体大小
modal_font_size = "14px"
# 弹窗的文字行高
modal_line_height = 1.4
# 在右上角添加一个方块,用以提示lint状态(类似于idea)
# 若置为false,以下配置全部失效
use_button = true
# 方块的宽度
button_width = "12px"
# 方块的高度
button_height = "12px"
# lint通过时方块的颜色
pass_color = "#499c54"
# lint未通过时方块的颜色
error_color = "#be9117"
# 快捷键:尽力修复规范
# 目前支持修复的规范:
#   - MD031: 单独的代码块前后需要用空行隔开
#   - MD047: 文档末尾需要一个空行结尾
hotkey_fix_lint_error = ""
# 在列表中填入你希望修复的规范
try_fix_lint_error = ["MD031", "MD047"]


############### reopenClosedFiles ###############
[reopenClosedFiles]
# 右键菜单中展示的名称
name = "打开上次退出时尚未关闭的标签页"
# 是否启用此二级插件(此插件仅在window_tab插件启用时生效)
enable = true
# 是否在右键菜单中隐藏
hide = false
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[reopenClosedFiles.config]
# 快捷键
hotkey = ""
# 打开Typora(打开可丢弃的无标题的标签时)自动恢复上次退出时尚未关闭的标签页
# 注意:只当双击typora.exe打开Typora时生效(因为打开特定文件时,自动恢复上次退出时尚未关闭的标签页,明显不符合用户预期)
auto_reopen_when_init = false


############### hotkeyHub ###############
[hotkeyHub]
# 右键菜单中展示的名称
name = "快捷键中心"
# 是否启用此二级插件(此插件仅对有javascript基础的用户开放)
# 若要修改hotkeyHub的配置请前往同目录下的hoteykey.user.toml
# 注意:若置为false,那么hoteykey.toml的配置将失效
enable = true
# 是否在右键菜单中隐藏
hide = false
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[hotkeyHub.config]
# 查看注册的快捷键列表的快捷键
hotkey = ""


############### quickButton ###############
[quickButton]
# 右键菜单中展示的名称
name = "快速按钮"
# 是否启用此二级插件
enable = true
# 是否在右键菜单中隐藏
hide = false
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[quickButton.config]
# 切换按钮显示状态的快捷键
hotkey = ""
# 是否支持右键(右键点击按钮后,其他按钮将被隐藏)
support_right_click = true
# 按钮的尺寸
button_size = "35px"
# 按钮的圆角半径
button_border_radius = "8px"
# 按钮的阴影
button_box_shadow = "0px 1px 20px 0px rgba(0,0,0,0.1), inset 0px -1px 0px 0px rgba(0,0,0,0.1)"
# 按钮之间的间隔
button_gap = "10px"
# 按钮距离右边框的距离
position_right = "30px"
# 按钮距离底边框的距离
position_bottom = "50px"
# 是否隐藏按钮的hint,若为true,则下面buttons配置的hint选项都将失效
hide_button_hint = false
# 如果您没有javascript基础,请不要修改以下配置
# 添加的按钮:
#   disable:      禁用此按钮
#   coordinate:   按钮坐标。往上为x轴正方向,往左为y轴正方向,从零开始计数
#   icon:         按钮图标。填入css class。支持font-awesome-4.1.0和ionicons-2.0.1,所有的图标及其对应的css class请参考:https://www.adfwebmagazine.jp/wp-content/uploads/test_v4.1.pdf  和  https://ionic.io/ionicons/v2
#   size(可选):    图标大小。默认17px
#   color(可选):   图标颜色。默认跟随当前主题的配色方案
#   bgColor(可选): 图标背景色。默认跟随当前主题的配色方案
#   hint:         提示信息
#   callback:     回调函数。采用pluginName.MethodName的形式(功能就像hotkey.default.toml中的plugin参数和function参数的合体)
#                     MethodName请通过阅读源码查找。如果您不懂代码,但还是想添加按钮,有个碰运气技巧:在【右键菜单->常用插件->二级插件】的插件基本都是XXX.callback,其余插件基本都是XXX.call
#   evil(危险):    自定义回调函数。功能同hotkey.default.toml中的evil参数(它能用的,这里也能用)。这里的文本内容会被eval()。如果设置此参数,callback参数会失效
buttons = [
    { disable = false, coordinate = [0, 0], hint = "直达底部", size = "24px", icon = "fa fa-caret-down", callback = "go_top.goBottom" },
    { disable = false, coordinate = [1, 0], hint = "直达顶部", size = "24px", icon = "fa fa-caret-up", callback = "go_top.goTop" },
    { disable = false, coordinate = [2, 0], hint = "文字风格", size = "17px", icon = "fa fa-font", callback = "text_stylize.call" },
    { disable = false, coordinate = [3, 0], hint = "混排优化", size = "17px", icon = "fa fa-align-justify", callback = "md_padding.call" },
    { disable = false, coordinate = [0, 1], hint = "思维导图", size = "18px", icon = "fa fa-sitemap", callback = "markmap.onButtonClick" },
    { disable = false, coordinate = [1, 1], hint = "图片管理", size = "17px", icon = "fa fa-image", callback = "imageReviewer.callback" },
    { disable = false, coordinate = [2, 1], hint = "书签管理", size = "17px", icon = "fa fa-bookmark", callback = "scrollBookmarker.callback" },
    { disable = false, coordinate = [3, 1], hint = "高亮搜索", size = "17px", icon = "fa fa-search", callback = "search_multi.call" },
    { disable = true, coordinate = [4, 1], hint = "语法优化", size = "17px", icon = "fa fa-book", callback = "markdownLint.fixLintError" },
    # evil使用示例(更多示例请参考hotkey.default.toml):
    #   弹窗提示
    { disable = true, coordinate = [4, 0], hint = "危险操作", size = "17px", icon = "ion-asterisk", color = "#f0f8ff", bgColor = "#ff4500", evil = "() => window.confirm('this is message')" },
    #   在光标处插入javascript代码块
    { disable = true, coordinate = [4, 1], hint = "危险操作", size = "17px", icon = "ion-alert-circled", evil = '() => this.utils.insertText(null, "```javascript\n```", false);' },
    #   打开windows计算器
    { disable = true, coordinate = [5, 0], hint = "危险操作", size = "17px", icon = "ion-bug", evil = "() => this.utils.Package.ChildProcess.exec('cmd /C calc')" },
    #   打开网址
    { disable = true, coordinate = [5, 1], hint = "危险操作", size = "17px", icon = "ion-alert", evil = "() => this.utils.openUrl('https://github.com/obgnail/typora_plugin')" },
]


############### blockSideBySide ###############
[blockSideBySide]
# 右键菜单中展示的名称
name = "并列显示活动块"
# 是否启用此二级插件
enable = false
# 是否在右键菜单中隐藏
hide = true
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
[blockSideBySide.config]
# 切换的快捷键
hotkey = ""


############### autoTrailingWhiteSpace ###############
# 此插件是为了满足Markdown换行语法,除非有特殊需求,否则不建议开启此插件
# 参考:https://markdown.com.cn/basic-syntax/line-breaks.html
# issue:https://github.com/obgnail/typora_plugin/issues/202
[autoTrailingWhiteSpace]
# 右键菜单中展示的名称
name = "为文档添加结尾空格"
# 是否启用此二级插件
enable = false
# 是否在右键菜单中隐藏
hide = false
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[autoTrailingWhiteSpace.config]
# 快捷键
hotkey = ""


############### redirectLocalRootUrl ###############
# 如果你主要使用obsidian或joplin来管理文件,偶尔用typora打开文件。
# 就会遇到一个问题:obsidian或joplin都是将本地资源放在同一个目录中(vault),这导致在typora打开后文件由于路径错误,无法访问本地资源。
# 此插件就是为了解决此问题,重定向本地资源根目录。
# 除非你有此需求,否则不建议开启此插件
# issue: https://github.com/obgnail/typora_plugin/issues/259
[redirectLocalRootUrl]
# 右键菜单中展示的名称
name = "重定向本地资源根目录"
# 是否启用此二级插件
# 注意:【文件的front matter的typora-root-url参数】的优先级大于【此插件】。也就是说:若文件的front matter显式设置了typora-root-url,那么此插件在该文件失效
enable = false
# 是否在右键菜单中隐藏
hide = true
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[redirectLocalRootUrl.config]
# 资源根目录,支持绝对路径(如D:\\tmp\\img)和相对路径(如.\\assets),填写时请注意转义反斜线(若为空,则此插件失效)
root = "./"
# 过滤的正则表达式:只有文件路径命中filter_regexp匹配的文件才使用此插件(若为空,则全部文件都使用此插件)
filter_regexp = ""


############### openInTotalCommander ###############
[openInTotalCommander]
# 右键菜单中展示的名称
name = "TC打开"
# 是否启用此二级插件(若要使用此插件,请先修改tc_path选项)
enable = false
# 是否在右键菜单中隐藏
hide = false
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[openInTotalCommander.config]
# 快捷键
hotkey = ""
# tc路径(请修改为你电脑上的路径)
tc_path = "D:\\software\\TotalCMD_64bit_10.52\\TOTALCMD64.EXE"
# tc命令参数(参考:https://www.ghisler.ch/wiki/index.php/Command_line_parameters)
# 提供内置环境变量:
#   1. $f: 当前文件路径
#   2. $d: 当前文件所属目录
#   3. $m: 当前挂载目录(侧边栏的根目录)
tc_args = '/O /T /P=L  /L="$f"'


############### pluginUpdater ###############
[pluginUpdater]
# 右键菜单中展示的名称
name = "升级插件"
# 是否启用此二级插件
# 注意:此插件目前仅支持windows系统,若为其他系统,则此插件失效
# 注意:此插件依赖于commander插件,若禁用了commander,则此插件失效
# 注意:若您删除了文件./plugin/updater/updater.exe,则此插件失效
enable = true
# 是否在右键菜单中隐藏
hide = false
# 在右键菜单中的出现顺序(越大越排到后面,允许负数)
order = 1
# 插件配置
[pluginUpdater.config]
# 快捷键
hotkey = ""
# 众所周知,有些地区无法裸连github,需要使用代理(如:http://127.0.0.1:7890)
# 若值为空,则将弹出窗口,让用户填入代理;若值不为空,则将直接使用此代理,不再弹出窗口
# 除非你固定使用某代理,否则不建议使用此配置
proxy = ""
# 手动升级时是否弹窗
#   - always : 总是弹出(等待程序执行完毕后一次性弹出)
#   - error  : 只在异常时弹出
#   - silent : 总是静默
#   - echo   : 立即回显
exec_show = "echo"
# 是否启用自动静默升级(若为false,则以下配置全部失效)
# 自动升级有两个策略:
#   - 策略一:打开Typora一段时间后,执行一次升级流程
#   - 策略二:每隔一段时间,执行一次升级流程
auto_update = true
# 策略一(单位:ms,若<0,则不使用此策略)
start_update_interval = 300000   # 1000 * 60 * 5
# 策略二(单位:ms,若<0,则不使用此策略)
update_loop_interval = -1
# 自动升级时使用的回显方式(可选项和exec_show相同)
auto_exec_show = "silent"

然后这个

image-20240619182721353

改成,

-

"""


############### auto_number ###############
[auto_number]
# 是否启用插件
ENABLE = true
# 在右键菜单中展示的名称
NAME = "自动编号"
# 是否在右键菜单中可点击
CLICKABLE = true
# 启用侧边栏自动编号
ENABLE_SIDE_BAR = true
# 启用正文自动编号
ENABLE_CONTENT = true
# 启用TOC自动编号
ENABLE_TOC = true
# 启用表格自动编号
ENABLE_TABLE = true
# 启用图片自动编号
ENABLE_IMAGE = true
# 启用代码块自动编号
ENABLE_FENCE = true
# 导出时运用样式
ENABLE_WHEN_EXPORT = true
# 编号的下标使用的字体
FONT_FAMILY = "monospace"
# 编号的下标的位置:left/right/center
ALIGN = "center"
# 编号的下标名称
NAMES = { table = "Table", image = "Figure", fence = "Fence" }


############### fence_enhance ###############
[fence_enhance]
# 是否启用插件
ENABLE = true
# 在右键菜单中展示的名称
NAME = "代码块增强"
# 是否在右键菜单中可点击
CLICKABLE = true

# fence_enhance插件包含三个功能:button、hotkey、other。此为button,功能:在代码块右上角添加按钮
# 若置为false,以下配置全部失效
ENABLE_BUTTON = true
# 按钮的大小
BUTTON_SIZE = "1.2em"
# 按钮的间距
BUTTON_MARGIN = "0.4em"
# 按钮的位置: top
BUTTON_TOP = "0.3em"
# 按钮的位置: right
BUTTON_RIGHT = "0.5em"
# 按钮的不透明度
BUTTON_OPACITY = 0.5
# 鼠标悬停时按钮的不透明度
BUTTON_OPACITY_HOVER = 0.8
# 去掉按钮上的功能提示
REMOVE_BUTTON_HINT = false
# 自动隐藏按钮,鼠标移动到代码块才显示(注意:就算置为true,在折叠状态下的代码块也不会自动隐藏按钮。因为必须提醒用户这个代码块处于折叠状态)
AUTO_HIDE = false
# 启用复制代码功能
ENABLE_COPY = true
# 启用代码调整缩进功能(低版本Typora不可使用此功能)
ENABLE_INDENT = true
# 启用折叠代码功能
ENABLE_FOLD = true
# 折叠形式:
#   - hidden: 隐藏除第一行外的所有行
#   - scroll: 添加滚动条(可视高度只有一行,所以非常反人类)
FOLD_OVERFLOW = "hidden"
# 默认折叠所有代码块
FOLD_DEFAULT = false
# 操作成功时,icon提示的保持时间(单位:ms)
# 比如当你点击【复制代码】按钮后,icon会变成【✔】,并在保持一段时间后自动恢复。此选项就是设置这个保持时间
WAIT_RECOVER_INTERVAL = 1000
# 节流时间(单位:ms)
# 300毫秒内多次点击【复制代码】按钮,只会执行一次(此选项其实没啥意义,添加此选项只是出于强迫症)
CLICK_CHECK_INTERVAL = 300
# 自定义按钮
# 目前此插件有三个按钮:复制,缩进,折叠。此选项可以新增按钮
# 此配置是【风险】配置,如果您没有javascript基础,请不要修改此配置
#   DISABLE:   是否禁用此按钮
#   ICON:      按钮图标。填入css class。支持font-awesome-4.1.0。所有的图标及其对应的css class请参考:https://www.adfwebmagazine.jp/wp-content/uploads/test_v4.1.pdf
#   HINT:      提示信息
#   ON_INIT:   初始化函数的字符串,此函数只会最开始时被调用一次。传入的参数为:plugin,即:插件实例。例如:plu => console.log('custom fence button has init')。如果不需要,请置为空。
#   ON_RENDER: 渲染后的回调函数的字符串,页面每渲染一个代码块,都会自动调用此函数。传入的参数为:buttonElement,即:按钮标签。例如: btn => console.log('btn has render')。如果不需要,请置为空。
#   ON_CLICK:  鼠标点击时的回调函数的字符串,传入的参数为:{ev, btn, cont, fence, cid, plu},即:click事件,按钮标签,代码块文本,代码块元素,cid,插件实例。例如:({cont}) => console.log(cont)。不可为空。
CUSTOM_BUTTONS = [
    { DISABLE = true, ICON = "fa fa-bomb", HINT = "demo", ON_INIT = "", ON_RENDER = "", ON_CLICK = "({cont}) => console.log(cont)" },
]

# fence_enhance插件包含三个功能:button、hotkey、other。此为hotkey,功能:为代码块添加快捷键
# 若置为false,以下配置全部失效
ENABLE_HOTKEY = true
# 注意:此处的快捷键使用的是codeMirror的方式(参考: https://codemirror.net/5/doc/manual.html#keymaps)

# 不建议修改下面的快捷键,原因有二:
#   1. 和很多ide的快捷键保持一致
#   2. typora强制绑定了很多快捷键,实际可修改的快捷键并不多
# typora强制绑定的快捷键如下:
#   1. Ctrl-A:         "selectAll",
#   2. Ctrl-Up:        "goDocStart",
#   3. Ctrl-Down:      "goDocEnd",
#   4. Ctrl-Left:      "goGroupLeft",
#   5. Ctrl-Right:     "goGroupRight",
#   6. Alt-Left:       "goLineStart",
#   7. Alt-Right:      "goLineEnd",
#   8. Ctrl-Backspace: "delGroupBefore",
#   9. Ctrl-Delete:    "delGroupAfter",
#   10.Ctrl-[:         "indentLess",
#   11.Ctrl-]:         "indentMore",
#   12.Ctrl-U:         "undoSelection",
#   13.Shift-Ctrl-U:   "redoSelection",
#   14.Alt-U:          "redoSelection",

# 如果不想使用某个功能,请置为""
# 将当前行和上一行互换
SWAP_PREVIOUS_LINE = "Shift-Alt-Up"
# 将当前行和下一行互换
SWAP_NEXT_LINE = "Shift-Alt-Down"
# 复制当前行到下一行
COPY_PREVIOUS_LINE = "Ctrl-Alt-Up"
# 复制当前行到上一行
COPY_NEXT_LINE = "Ctrl-Alt-Down"
# 直接在下面新建一行
INSERT_LINE_NEXT = "Ctrl-Enter"
# 直接在上面新建一行
INSERT_LINE_PREVIOUS = "Shift-Ctrl-Enter"

# fence_enhance插件包含三个功能:button、hotkey、other。此为other
# 在右键菜单中启用有风险的功能(此功能会消耗巨量资源并导致Typora长时间(几秒到几十秒)失去响应)
# 目前支持的风险功能:
#   1. 调整所有代码块的缩进
#   2. 为所有无语言代码块添加语言
#   3. 批量替换代码块语言
ENABLE_DANGEROUS_FEATURES = false
# 长文本的换行会保持相同的缩进
#   1. 详见:https://github.com/codemirror/codemirror5/issues/2085
#   2. 不建议开启此功能,有较大的性能损失,会消耗大量时间去计算缩进
INDENTED_WRAPPED_LINE = false
# 高亮鼠标悬停的代码行(我嫌弃晃眼就没有开启,如果你总是找不到光标,可以开启)
HIGHLIGHT_WHEN_HOVER = false
# 通过代码块的语言设置高亮行
# 使用方法:在语言后面添加小括号,小括号注明需要高亮的行
# 举例:```js(2, 5-8, 10-12)```  表示:高亮js代码块的第2行,第5-8,10-12行
HIGHLIGHT_BY_LANGUAGE = false
# 代码行高亮时的颜色
HIGHLIGHT_LINE_COLOR = "rgba(176, 178, 180, 0.4)"


############### collapse_paragraph ###############
[collapse_paragraph]
# 是否启用插件
ENABLE = true
# 在右键菜单中展示的名称
NAME = "章节折叠"
# 是否在右键菜单中可点击
CLICKABLE = true
# 严格模式
# - true:  只当点击到h1~h6时,才触发折叠/展开
# - false: 若没有点击到h1~h6,会自动向上寻找最近的h1~h6,并触发折叠/展开。非严格模式可能会出现意想不到的事:ctrl+click在typora是非常常用的,当你不小心点错位置,标题就被折叠起来了
STRICT_MODE = true
# 在右键菜单中使用严格模式
# 此选项是STRICT_MODE的特别情况,是考虑到方便使用才添加此选项的
# 若置为false,那么右键菜单不再严格限制光标必须在标题行中,在正文区域任意位置右键就可以显示所有菜单选项
STRICT_MODE_IN_CONTEXT_MENU = false
# 记住章节是否折叠(直到关闭typora)
RECORD_COLLAPSE = true
# 各个功能对应的修饰键
#   1. 支持ctrl/alt/shift的随意组合(如"shift+alt","ctrl+shift")
#   2. 但是不能为"alt"(因为alt+click已经被【scrollBookmarker】插件占用),也不能为"shift"(因为shift+click被系统自带的【框选】功能占用)
#   3. 若为"",表示不启用此功能
#   4. 例如【COLLAPSE_SIBLINGS = "ctrl+alt"】:当用户同时按住键盘ctrl和alt,并且鼠标click标题时,会折叠/展开父章节下所有同级的章节
# 功能:
#   - COLLAPSE_SINGLE       :折叠/展开 单个章节
#   - COLLAPSE_SIBLINGS     :折叠/展开 父章节下所有同级的章节
#   - COLLAPSE_ALL_SIBLINGS :折叠/展开 当前文件所有同级的章节
#   - COLLAPSE_RECURSIVE    :递归折叠/展开 当前章节
MODIFIER_KEY = { COLLAPSE_SINGLE = "ctrl", COLLAPSE_SIBLINGS = "ctrl+alt", COLLAPSE_ALL_SIBLINGS = "ctrl+shift+alt", COLLAPSE_RECURSIVE = "" }


############### collapse_list ###############
[collapse_list]
# 是否启用插件
ENABLE = false
# 在右键菜单中展示的名称
NAME = "列表折叠"
# 是否在右键菜单中可点击
CLICKABLE = true
# 缩放标志的颜色,若为空,则跟随系统配色
TRIANGLE_COLOR = ""
# 记住章节是否折叠(直到关闭typora)
RECORD_COLLAPSE = true


############### collapse_table ###############
[collapse_table]
# 是否启用插件
ENABLE = true
# 在右键菜单中展示的名称
NAME = "表格折叠"
# 是否在右键菜单中可点击
CLICKABLE = true
# 记住章节是否折叠(直到关闭typora)
RECORD_COLLAPSE = true


############### truncate_text ###############
[truncate_text]
# 是否启用插件
ENABLE = true
# 在右键菜单中展示的名称
NAME = "文段截断"
# 是否在右键菜单中可点击
CLICKABLE = true
# 快捷键:隐藏前面的文本段
HIDE_FRONT_HOTKEY = ""
# 快捷键:显示全部的文本段
SHOW_ALL_HOTKEY = ""
# 快捷键:根据当前视图隐藏文本段
HIDE_BASE_VIEW_HOTKEY = ""
# hide_front截断后剩余文本段的数量
REMAIN_LENGTH = 80


############### export_enhance ###############
[export_enhance]
# 是否启用插件
ENABLE = true
# 在右键菜单中展示的名称
NAME = "导出增强"
# 是否在右键菜单中可点击
CLICKABLE = true
# 是否下载网络图片(若为true,有可能因为网络问题导致导出超时)
# 若置为false,则DOWNLOAD_THREADS选项失效
DOWNLOAD_NETWORK_IMAGE = false
# 下载网络图片的并发量(不建议设置得太高,否则可能触发网站/图床的反爬策略)
DOWNLOAD_THREADS = 10


############### resize_table ###############
[resize_table]
# 是否启用插件
ENABLE = true
# 在右键菜单中展示的名称
NAME = "表格调整"
# 是否在右键菜单中可点击
CLICKABLE = true
# 是否去除表格单元格最小宽度限制
REMOVE_MIX_WIDTH = true
# 单元格边线的拖拽范围(单位:px)
THRESHOLD = 20
# 记住表格放缩状态(直到关闭typora)
RECORD_RESIZE = true


############### text_stylize ###############
[text_stylize]
# 是否启用插件
ENABLE = true
# 在右键菜单中展示的名称
NAME = "文字风格化"
# 是否在右键菜单中可点击
CLICKABLE = true
# 面板的背景颜色。若为"",则跟随主题的配色方案
MODAL_BACKGROUND_COLOR = ""
# 弹出面板的快捷键
SHOW_MODAL_HOTKEY = ""
# 工具栏的按钮:
#   - weight:                加粗
#   - italic:                斜体
#   - underline:             下划线
#   - throughline:           中划线
#   - overline:              上划线
#   - superScript:           上标
#   - subScript:             下标
#   - emphasis:              强调符号
#   - title:                 标题尺寸
#   - increaseSize:          增大尺寸
#   - decreaseSize:          减小尺寸
#   - increaseLetterSpacing: 增大间隙
#   - decreaseLetterSpacing: 减小间隙
#   - family:                字体
#   - foregroundColor:       前景色
#   - backgroundColor:       背景色
#   - borderColor:           边框
#   - erase:                 移除格式
#   - blank:                 无功能,用于占位
#   - setBrush:              设置格式刷
#   - useBrush:              使用格式刷
#   - move:                  移动工具栏
#   - close:                 关闭工具栏
TOOLBAR = [
    "weight", "italic", "underline", "throughline", "overline", "title", "superScript", "subScript",
    "emphasis", "increaseLetterSpacing", "decreaseLetterSpacing", "increaseSize", "decreaseSize", "family",
    "foregroundColor", "backgroundColor", "borderColor", "setBrush", "useBrush", "erase", "blank", "move", "close"
]
# 设置样式的快捷键
#   1. hotkey: 快捷键
#   2. action: 上述的工具栏按钮
ACTION_HOTKEYS = [
    { hotkey = "", action = "foregroundColor" },
    { hotkey = "", action = "backgroundColor" },
]
# 颜色列表(由于markdown支持的html语法限制, 不支持rgb、rgba格式的颜色)
COLORS = [
    "#330000", "#331900", "#333300", "#193300", "#003300", "#003319", "#003333", "#001933", "#000033", "#190033", "#330033", "#330019", "#000000",
    "#660000", "#663300", "#666600", "#336600", "#006600", "#006633", "#006666", "#003366", "#000066", "#330066", "#660066", "#660033", "#202020",
    "#990000", "#994C00", "#999900", "#4C9900", "#009900", "#00994C", "#009999", "#004C99", "#000099", "#4C0099", "#990099", "#99004C", "#404040",
    "#CC0000", "#CC6600", "#CCCC00", "#66CC00", "#00CC00", "#00CC66", "#00CCCC", "#0066CC", "#0000CC", "#6600CC", "#CC00CC", "#CC0066", "#606060",
    "#FF0000", "#FF8000", "#FFFF00", "#80FF00", "#00FF00", "#00FF80", "#00FFFF", "#0080FF", "#0000FF", "#7F00FF", "#FF00FF", "#FF007F", "#808080",
    "#FF3333", "#FF9933", "#FFFF33", "#99FF33", "#33FF33", "#33FF99", "#33FFFF", "#3399FF", "#3333FF", "#9933FF", "#FF33FF", "#FF3399", "#A0A0A0",
    "#FF6666", "#FFB266", "#FFFF66", "#B2FF66", "#66FF66", "#66FFB2", "#66FFFF", "#66B2FF", "#6666FF", "#B266FF", "#FF66FF", "#FF66B2", "#C0C0C0",
    "#FF9999", "#FFCC99", "#FFFF99", "#CCFF99", "#99FF99", "#99FFCC", "#99FFFF", "#99CCFF", "#9999FF", "#CC99FF", "#FF99FF", "#FF99CC", "#E0E0E0",
    "#FFCCCC", "#FFE5CC", "#FFFFCC", "#E5FFCC", "#CCFFCC", "#CCFFE5", "#CCFFFF", "#CCE5FF", "#CCCCFF", "#E5CCFF", "#FFCCFF", "#FFCCE5", "#FFFFFF",
]
# 每13个颜色一行
NUM_PER_LINE = 13
# 默认颜色
DEFAULT_COLORS = { FOREGROUND = "#330000", BACKGROUND = "#FFFFFF", BORDER = "#330000" }


############### cipher ###############
[cipher]
# 是否启用插件
ENABLE = true
# 在右键菜单中展示的名称
NAME = "加密文件"
# 是否在右键菜单中可点击
CLICKABLE = true
# 加密快捷键
ENCRYPT_HOTKEY = ""
# 解密快捷键
DECRYPT_HOTKEY = ""
# 弹出提示弹窗
SHOW_HINT_MODAL = true


############### custom ###############
[custom]
# 是否启用插件
# 若置为false,那么所有二级插件都会失效
# 若要修改二级插件的配置请前往同目录下的custom_plugin.user.toml
ENABLE = true
# 在右键菜单中展示的名称
NAME = "二级插件"
# 是否在右键菜单中可点击
# 若置为false,则:不影响所有二级插件的启用状态,但是无法在右键菜单中触及
CLICKABLE = true
# 有些插件在当前光标位置下临时处于不可用状态,是否隐藏它
# 不建议置为true,原因有二:
#   1. 处于不可用状态的插件会在鼠标悬停时提示不可用的原因
#   2. 一直隐藏处于不可用状态的插件,可能导致你忘记该插件的存在
HIDE_DISABLE_PLUGINS = false
# 允许在settings.user.toml中设置custom_plugin.user.toml中的选项。若在两处皆有定义,settings.user.toml的优先级高于custom_plugin.user.toml
# 本来【二级插件】的选项应该在custom_plugin.user.toml中设置的,但是一直有收到反馈,总是有用户错误地写在了settings.user.toml。无奈只能作此兼容
# 1.如果你不理解我在说什么,并且不想弄懂,请将此选项置为true
# 2.如果你不理解我在说什么,并且想弄懂,建议查看本目录下的【请读我.md】中的【settings.XXX.toml和custom_plugin.XXX.toml的区别是什么?】章节
# 3.如果能理解我在说什么,并且知道settings.user.toml和custom_plugin.user.toml的区别,建议将此选项置为false
ALLOW_SET_CONFIG_IN_SETTINGS_TOML = true


############### slash_commands ###############
[slash_commands]
# 是否启用插件
ENABLE = true
# 在右键菜单中展示的名称
NAME = "斜杠命令"
# 是否在右键菜单中可点击
CLICKABLE = true
# 什么样的用户输入触发显示命令列表(若您不了解正则表达式,请勿修改此配置)
#  注意:keyword需要使用命名捕获组kw
#  默认值:匹配一个字符串,该字符串以/或\或、开头,后面紧跟任意数量的非/或\或、字符,且该字符串前面不可有<
TRIGGER_REGEXP = "(?<!<)[\\/、\\\\](?<kw>[^\\/、\\\\]*)$"
# 匹配策略:
#  - prefix: 前缀。即:用户输入的字符串必须是keyword的前缀。比如:用户输入para即可找到paragraph
#  - substr: 子串。即:用户输入的字符串必须是keyword的子串。比如:用户输入graph即可找到paragraph
#  - abbr:   缩写。即:用户输入的每个字符必须都存在于keyword中,并且其在keyword的索引递增。比如:用户输入pgh即可找到paragraph
MATCH_STRATEGY = "abbr"
# 命令列表
#  - enable:    是否启用
#  - type:      snippet/command/gen-snp(snippet: 在调用时插入文字片段;command: 在调用时执行逻辑命令;gen-snp: 在调用时执行函数,返回待插入的文字片段,适用于插入动态内容)
#  - icon(可选): 使用emoji作为图标
#  - hint(可选): 提示信息
#  - keyword:   关键词,必须唯一
#  - callback:  若type=snippet,则填入需要插入的文字片段;若type=command,则填入回调函数;若type=gen-snp,则填入返回字符串的函数
COMMANDS = [
    { enable = true, type = "command", icon = "📝", hint = "一级标题", keyword = "H1", callback = "() => File.editor.stylize.changeBlock('header1', undefined, true)" },
    { enable = true, type = "command", icon = "📝", hint = "二级标题", keyword = "H2", callback = "() => File.editor.stylize.changeBlock('header2', undefined, true)" },
    { enable = true, type = "command", icon = "📝", hint = "三级标题", keyword = "H3", callback = "() => File.editor.stylize.changeBlock('header3', undefined, true)" },
    { enable = true, type = "command", icon = "📝", hint = "四级标题", keyword = "H4", callback = "() => File.editor.stylize.changeBlock('header4', undefined, true)" },
    { enable = true, type = "command", icon = "📝", hint = "五级标题", keyword = "H5", callback = "() => File.editor.stylize.changeBlock('header5', undefined, true)" },
    { enable = true, type = "command", icon = "📝", hint = "六级标题", keyword = "H6", callback = "() => File.editor.stylize.changeBlock('header6', undefined, true)" },
    { enable = true, type = "command", icon = "📝", hint = "段落", keyword = "Paragraph", callback = "() => File.editor.stylize.changeBlock('paragraph')" },
    { enable = true, type = "command", icon = "📝", hint = "提升标题等级", keyword = "IncreaseHeaderLevel", callback = "() => File.editor.stylize.increaseHeaderLevel()" },
    { enable = true, type = "command", icon = "📝", hint = "降低标题等级", keyword = "DecreaseHeaderLevel", callback = "() => File.editor.stylize.decreaseHeaderLevel()" },
    { enable = true, type = "command", icon = "📝", hint = "表格", keyword = "Table", callback = "() => File.editor.tableEdit.insertTable()" },
    { enable = true, type = "command", icon = "📝", hint = "公式块", keyword = "BlockMath", callback = "() => File.editor.stylize.toggleMathBlock()" },
    { enable = true, type = "command", icon = "📝", hint = "代码块", keyword = "BlockCode", callback = "() => File.editor.stylize.toggleFences()" },
    { enable = true, type = "command", icon = "📝", hint = "引用", keyword = "Blockquote", callback = "() => File.editor.stylize.toggleIndent('blockquote')" },
    { enable = true, type = "command", icon = "📝", hint = "有序列表", keyword = "OrderedList", callback = "() => File.editor.stylize.toggleIndent('ol')" },
    { enable = true, type = "command", icon = "📝", hint = "无序列表", keyword = "UnorderedList", callback = "() => File.editor.stylize.toggleIndent('ul')" },
    { enable = true, type = "command", icon = "📝", hint = "任务列表", keyword = "Tasklist", callback = "() => File.editor.stylize.toggleIndent('tasklist')" },
    { enable = true, type = "command", icon = "📝", hint = "增加列表缩进", keyword = "ListMoreIndent", callback = "() => File.editor.UserOp.moreIndent(File.editor)" },
    { enable = true, type = "command", icon = "📝", hint = "减少列表缩进", keyword = "ListLessIndent", callback = "() => File.editor.UserOp.lessIndent(File.editor)" },
    { enable = true, type = "command", icon = "📝", hint = "在上方插入段落", keyword = "InsertParagraphAbove", callback = "() => File.editor.UserOp.insertParagraph(true)" },
    { enable = true, type = "command", icon = "📝", hint = "在下方插入段落", keyword = "InsertParagraphBelow", callback = "() => File.editor.UserOp.insertParagraph(false)" },
    { enable = true, type = "command", icon = "📝", hint = "链接引用", keyword = "DefLink", callback = "() => File.editor.stylize.insertBlock('def_link')" },
    { enable = true, type = "command", icon = "📝", hint = "脚注", keyword = "DefFootnote", callback = "() => File.editor.stylize.insertBlock('def_footnote')" },
    { enable = true, type = "command", icon = "📝", hint = "水平分割线", keyword = "Hr", callback = "() => File.editor.stylize.insertBlock('hr')" },
    { enable = true, type = "command", icon = "📝", hint = "内容目录", keyword = "Toc", callback = "() => File.editor.stylize.insertBlock('toc')" },
    { enable = true, type = "command", icon = "📝", hint = "元信息", keyword = "FrontMatter", callback = "() => File.editor.stylize.insertMetaBlock()" },
    { enable = true, type = "command", icon = "👕", hint = "粗体", keyword = "Strong", callback = "() => File.editor.stylize.toggleStyle('strong')" },
    { enable = true, type = "command", icon = "👕", hint = "斜体", keyword = "Em", callback = "() => File.editor.stylize.toggleStyle('em')" },
    { enable = true, type = "command", icon = "👕", hint = "下划线", keyword = "Underline", callback = "() => File.editor.stylize.toggleStyle('underline')" },
    { enable = true, type = "command", icon = "👕", hint = "代码", keyword = "Code", callback = "() => File.editor.stylize.toggleStyle('code')" },
    { enable = true, type = "command", icon = "👕", hint = "内联公式", keyword = "InlineMath", callback = "() => File.editor.stylize.toggleStyle('inline_math')" },
    { enable = true, type = "command", icon = "👕", hint = "删除线", keyword = "Delete", callback = "() =>File.editor.stylize.toggleStyle('del')" },
    { enable = true, type = "command", icon = "👕", hint = "注释", keyword = "Comment", callback = "() => File.editor.stylize.toggleStyle('comment')" },
    { enable = true, type = "command", icon = "👕", hint = "超链接", keyword = "Link", callback = "() => File.editor.stylize.toggleStyle('link')" },
    { enable = true, type = "command", icon = "👕", hint = "图像", keyword = "Image", callback = "() => File.editor.stylize.toggleStyle('image')" },
    { enable = true, type = "command", icon = "👕", hint = "清除样式", keyword = "ClearStyle", callback = "() => File.editor.stylize.clearStyle()" },
    { enable = true, type = "command", icon = "🧰", hint = "至顶部", keyword = "JumpTop", callback = "() => File.editor.selection.jumpTop()" },
    { enable = true, type = "command", icon = "🧰", hint = "至底部", keyword = "JumpBottom", callback = "() => File.editor.selection.jumpBottom()" },
    { enable = true, type = "command", icon = "🧰", hint = "至行首", keyword = "JumpToLineStart", callback = "() => File.editor.selection.jumpToLineStart()" },
    { enable = true, type = "command", icon = "🧰", hint = "至行尾", keyword = "JumpToLineEnd", callback = "() => File.editor.selection.jumpToLineEnd()" },
    { enable = true, type = "command", icon = "🧰", hint = "帮助", keyword = "Help", callback = "() => this.call()" },
    { enable = true, type = "gen-snp", icon = "🧩", hint = "日期时间", keyword = "Datetime", callback = "() => (new Date()).toLocaleString('chinese', {hour12: false})" },
    { enable = true, type = "gen-snp", icon = "🧩", hint = "日期", keyword = "Date", callback = "() => {let day = new Date(); return `${day.getFullYear()}/${day.getMonth() + 1}/${day.getDate()}`}" },
    { enable = true, type = "gen-snp", icon = "🧩", hint = "时间", keyword = "Time", callback = "() => {let day = new Date(); return `${day.getHours()}:${day.getMinutes()}:${day.getSeconds()}`}" },
    { enable = true, type = "gen-snp", icon = "🧩", hint = "时间戳", keyword = "Timestamp", callback = "() => (new Date()).getTime().toString()" },
    { enable = true, type = "gen-snp", icon = "🧩", hint = "星期", keyword = "Week", callback = "() => '星期' + '日一二三四五六'.charAt((new Date()).getDay())" },
    { enable = true, type = "snippet", icon = "🧩", hint = "示例片段", keyword = "SnippetExample", callback = "https://github.com/obgnail/typora_plugin" },
]


############### right_click_menu ###############
[right_click_menu]
# 是否启用插件
ENABLE = true
# 在右键菜单中展示的名称
NAME = "右键菜单"
# 是否在右键菜单中可点击
CLICKABLE = true
# 点击后是否隐藏菜单(此选项不必在此调整,可以在UI中设置)
DO_NOT_HIDE = false
# 右键二~三级菜单的最小宽度
# 很多用户使用小屏幕,三个等级的右键菜单可能占据了大量的空间。此选项用于设置二~三级菜单的最小宽度,减少占据空间(为什么不包括一级?答:那是theme该做的事)
#  - default: 保持默认(和第一级菜单相同宽度)
#  - auto   : 最小宽度根据文本长度自适应
#  - 232px  : 最小宽度为232px(不一定是232,可以是任何正整数)
MENU_MIN_WIDTH = "default"
# 移除右键菜单中除了插件以外的选项(如果你之前从不使用右键菜单,可以置为true)
HIDE_OTHER_OPTIONS = false
# 对于【启用但是没有出现在下面MENUS选项】的插件,自动将其加入到最后一个MENU
# 强烈不建议将此选项置为false,若置为false,且在MENUS中删去那些处于启用状态的插件,那么:
#   1. 那些插件依旧处于启用状态,但是就不能通过右键菜单调用了
#   2. 如果插件系统后续新增了插件,那么你就根本无法感知到新增插件的存在
FIND_LOST_PLUGIN = true
# 自定义右键菜单
# 每一个MENUS对应一个一级菜单,允许无限添加一级菜单,允许重复添加同一个插件
#   NAME: 一级菜单的名称
#   LIST: 二级菜单的插件列表("---":代表在页面上插入一个分隔横线)
#         允许填入pluginName(插件,如:help)或者 pluginName.callArg(插件的其中一个选项,如:help.donate)
[[right_click_menu.MENUS]]
NAME = "少用插件"
LIST = [
    "window_tab",
    "fence_enhance",
    "mindmap",
    "auto_number",
    "datatables",
    "resize_image",
    "resize_table",
    "collapse_list",
    "collapse_table",
    "truncate_text",
    "export_enhance",
    "cipher",
    "right_click_menu",
    "help",
    "---",
    "pie_menu",
    "go_top",
    "text_stylize",
    "toolbar",
    "slash_commands",
    "article_uploader",
    "preferences",
    "---",
    "file_counter",
    "json_rpc",
    "mermaid_replace",
    "test",
]
[[right_click_menu.MENUS]]
NAME = "常用插件"
LIST = [
    "commander",
    "markmap",
    "collapse_paragraph",
    "custom",
    "---",
    "search_multi",
    "multi_highlighter",
    "outline",
    "md_padding",
    "blur",
    "read_only",
]


############### pie_menu ###############
[pie_menu]
# 是否启用插件
ENABLE = true
# 在右键菜单中展示的名称
NAME = "圆盘菜单"
# 是否在右键菜单中可点击
CLICKABLE = true
# 快捷键
HOTKEY = ""
# 修饰键。支持ctrl/alt/shift的随意组合(如"shift+alt","ctrl+shift")。举例:若为ctrl,则 ctrl+鼠标右击 调出圆盘菜单
MODIFIER_KEY = "ctrl"
# 按钮(强制少于16个,前8个在内圈,后8个在外圈)
#  - ICON    : 图标的css class
#  - CALLABCK: 填入pluginName.callArg(插件的其中一个选项,如:help.donate。如果插件只有一个选项,那么无需callArg。二级插件前面要加【custom.】)
BUTTONS = [
    { ICON = "fa fa-book", CALLBACK = "read_only" },
    { ICON = "fa fa-asterisk", CALLBACK = "blur" },
    { ICON = "fa fa-eye", CALLBACK = "custom.noImageMode" },
    { ICON = "fa fa-adjust", CALLBACK = "custom.darkMode" },
    { ICON = "fa fa-file-text", CALLBACK = "custom.templater" },
    { ICON = "fa fa-align-justify", CALLBACK = "md_padding" },
    { ICON = "fa fa-paste", CALLBACK = "custom.fullPathCopy" },
    { ICON = "fa fa-th-list", CALLBACK = "custom.toc" },
    { ICON = "fa fa-sitemap", CALLBACK = "markmap.toggle_toc" },
    { ICON = "fa fa-font", CALLBACK = "text_stylize" },
    { ICON = "fa fa-search", CALLBACK = "search_multi" },
    { ICON = "fa fa-image", CALLBACK = "custom.imageReviewer" },
    { ICON = "fa fa-filter", CALLBACK = "custom.resourceOperation" },
    { ICON = "fa fa-wrench", CALLBACK = "preferences" },
    { ICON = "fa fa-calendar", CALLBACK = "outline" },
    { ICON = "fa fa-code", CALLBACK = "commander" }
]


############### preferences ###############
[preferences]
# 是否启用插件
ENABLE = true
# 在右键菜单中展示的名称
NAME = "启停插件"
# 是否在右键菜单中可点击
CLICKABLE = true
# 快捷键
HOTKEY = ""
# 不允许通过此插件修改启停的插件
IGNORE_PLUGINS = ["preferences", "right_click_menu", "custom", "json_rpc", "mermaid_replace", "openInTotalCommander", "redirectLocalRootUrl", "article_uploader"]


############### file_counter ###############
[file_counter]
# 是否启用插件
ENABLE = true
# 在右键菜单中展示的名称
NAME = "文件计数"
# 是否在右键菜单中可点击
CLICKABLE = false
# 当目录下的文件数量少于等于IGNORE_MIN_NUM时,忽略此目录
IGNORE_MIN_NUM = 0
# Typora允许打开小于2000000(即MAX_FILE_SIZE)的文件,大于maxSize的文件在搜索时将被忽略。若maxSize<0则不过滤
MAX_SIZE = 2000000
# Typora允许打开的文件的后缀名,此外的文件在搜索时将被忽略
ALLOW_EXT = ["", "md", "markdown", "mdown", "mmd", "text", "txt", "rmarkdown", "mkd", "mdwn", "mdtxt", "rmd", "mdtext", "apib"]
# 忽略的目录名
IGNORE_FOLDERS = [".git", "node_modules"]
# 当侧边栏出现横向滚动条时,允许ctrl+wheel进行横向滚动
CTRL_WHEEL_TO_SCROLL_SIDEBAR_MENU = true
# 文本字体粗细(填入font-weight的CSS值,保持默认则填入"")
FONT_WEIGHT = "bold"
# 文本字体颜色(填入color的CSS值,保持默认则填入"")
COLOR = ""
# 文本背景颜色(填入background-color的CSS值,保持默认则填入"")
BACKGROUND_COLOR = ""
# 文本插入前缀
BEFORE_TEXT = ""


############### help ###############
[help]
# 是否启用插件
ENABLE = true
# 在右键菜单中展示的名称
NAME = "帮助"
# 是否在右键菜单中可点击
CLICKABLE = true


############### article_uploader ###############
[article_uploader]
# 是否启用插件
ENABLE = true
# 插件名称
NAME = "文章上传"
# 在右键菜单隐藏
HIDE = false
# 是否在右键菜单中可点击
CLICKABLE = true
# 快捷键配置
UPLOAD_ALL_HOTKEY = "ctrl+shift+1"
UPLOAD_WORDPRESS_HOTKEY = "ctrl+shift+2"
UPLOAD_CNBLOG_HOTKEY = "ctrl+shift+3"
UPLOAD_CSDN_HOTKEY = "ctrl+shift+4"
# 上传相关配置
[article_uploader.upload]
# 是否在上传之前弹出确认框(防误触)
reconfirm = true
# 改为false你可以看到selenium是怎么在浏览器中操作发表文章的
selenium = { headless = true }
# enabled: 置为false则在上传所有平台中不会上传到该平台
# hostname: 域名或ip:如137.2.3.1
# loginUrl: wordpress后台登录地址
wordpress = { enabled = true, hostname = "https://blog.bugdesigner.cn", loginUrl = "https://blog.bugdesigner.cn/superman/", username = "demo", password = "demo1" }
cnblog = { enabled = true, username = "15328642699@163.com", password = "password" }
# # cookie可能需要定期更新,f12随便找一个异步请求的,把cookie值粘过来就行,目前两天安全下车,预计两周——一个月失效
csdn = { enabled = true, cookie = "自己的cookie" }



[[right_click_menu.MENUS]]
NAME = "上传到所有平台"
LIST = [
    "article_uploader.upload_to_all_site"
]
[[right_click_menu.MENUS]]
NAME = "上传到单个平台"
LIST = [
    "article_uploader.upload_to_csdn",
    "article_uploader.upload_to_cn_blog"
]

############### json_rpc ###############
[json_rpc]
# 是否启用插件
# 警告:开启此插件后,外部将拥有node、browser两套环境,能完全控制电脑,因此如果您不是开发人员,请勿开启此插件
ENABLE = false
# 在右键菜单中展示的名称
NAME = "外部操纵Typora"
# 是否在右键菜单中可点击
CLICKABLE = false
# rpc server选项
SERVER_OPTIONS = { port = 5080, host = "127.0.0.1", path = "/", strict = false }


############### mermaid_replace ###############
[mermaid_replace]
# 是否启用插件
# 此插件目前已经处于半废弃状态,请勿开启
ENABLE = false
# 在右键菜单中展示的名称
NAME = "mermaid组件替换"
# 是否在右键菜单中可点击
CLICKABLE = false


############### test ###############
[test]
# 是否启用插件
# 此插件乃开发者于开发阶段使用,请勿开启
ENABLE = false
# 在右键菜单中展示的名称
NAME = "测试专用"
# 是否在右键菜单中可点击
CLICKABLE = false

注意,这里是自己

image-20240619182846405

这里也是

image-20240619183008954

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/724872.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

24年新版!这份Excel+Python飞速搞定数据分析手册,简直可以让Excel飞起来

前⾔ 微软在 UserVoice 上运营着⼀个反馈论坛&#xff0c;每个⼈都可以在这⾥提交新点⼦供他⼈投票。票数最⾼的功能请求是“将 Python 作为Excel 的⼀门脚本语⾔”&#xff0c;其得票数差不多是第⼆名的两倍。尽管⾃2015 年这个点⼦发布以来并没有什么实质性进展&#xff0c;…

软件产品进行确认测试有什么好处?第三方软件测试机构分享

软件确认测试是一项旨在验证软件是否符合预期需求和规格的测试活动。通过确认测试&#xff0c;您可以确保软件的功能、性能和用户界面的符合程度&#xff0c;从而降低软件发布后出现问题的风险。 一、软件产品进行确认测试的好处   1、减少软件发布后修复问题的成本。通过及…

Postman如何在本地测试服务接口

项目架构及背景&#xff1a; 网关微服务多个业务微服务 服务部署在阿里云上&#xff0c;文件服务器用的是OSS。配置参数用Nacos进行统一管理。通过构建docker镜像包部署各业务微服务以及网关服务。 需求&#xff1a; 某一个业务微服务中开发了若干接口&#xff0c;需要在本地…

场外个股期权通道业务是什么意思?

今天带你了解场外个股期权通道业务是什么意思&#xff1f;场外个股期权业务是指在沪深交易所之外进行的个股期权交易。它是一种非标准化的合约&#xff0c;不在交易所内进行交割。 场外个股期权通道业务&#xff0c;是指投资者通过与场外个股期权机构通道签订合约&#xff0c;购…

初识形式化验证工具——CPN tools

安装链接&#xff1a;https://cpntools.org/category/downloads/ 学习链接&#xff1a;https://cs.au.dk/cpnets/industrial-use 成功安装软件&#xff1a; 右键新建/打开项目&#xff1a; 导入项目&#xff1a; 交互工具&#xff1a; 仿真运行&#xff1a;也是拖拽出来后&am…

探索Web Components

title: 探索Web Components date: 2024/6/16 updated: 2024/6/16 author: cmdragon excerpt: 这篇文章介绍了Web Components技术&#xff0c;它允许开发者创建可复用、封装良好的自定义HTML元素&#xff0c;并直接在浏览器中运行&#xff0c;无需依赖外部库。通过组合HTML模…

CNAS软件测试报告全国通用吗?如何获取CNAS软件测试报告?

CNAS是中国合格评定国家认可委员会的英文缩写&#xff0c;是我国负责认可和监管合格评定机构的国家级组织。CNAS软件测试报告是经过CNAS认可的软件测试机构出具的报告&#xff0c;它详细记录了被测试软件的测试结果、缺陷情况以及整体质量评估。 企业和用户通过查看CNAS软件测…

多环境镜像晋级/复用最佳实践

作者&#xff1a;木烟 本文主要介绍镜像构建部署场景&#xff0c;多环境镜像晋级/复用最佳实践&#xff0c;保证“所发即所测”。 场景介绍 应用研发场景有效地管理镜像产物是确保软件快速、安全、可靠部署的关键环节。通常一个应用研发需要经过测试、预发、生产各个阶段&am…

地图上绘制地铁线路

需求背景 不管是之前的pms 地铁还是location都会有需求涉及到地图上绘制地铁线路&#xff0c;来查看当前位置是否靠近地铁口&#xff0c;常规的交互可以看下高德地图&#xff0c;如图所示&#xff1a; 需求分析 不管是高德地图还是百度地图都提供了简易版的地铁线路图&#x…

【AI】通义千问使用指南:让你快速上手,成为问题解决高手!

大家好&#xff0c;我是木头左。 近日&#xff0c;继文心一言和讯飞星火之后&#xff0c;阿里虽迟但到&#xff0c;直接宣布开源两款“通义千问”大模型。作为国内首个开源且可商用的人工智能大模型&#xff0c;这会给我们带来哪些变化呢&#xff1f; 如何申请阿里通义千问&am…

RK3568技术笔记十二 Android编译方法

Android源码说明 Android源码在SAIL-RK3568开发板光盘->Android->源代码中&#xff0c;由于android源码太大&#xff0c;在进行压缩时&#xff0c;进行分包压缩&#xff0c;因此有4部分&#xff0c;如图所示&#xff1a; 进行解压时&#xff0c;需将4部分压缩包放置同一…

Redis的安装及详解

1.Redis介绍&#xff1f; 1.1 Redis是什么&#xff1f; Redis&#xff08;Remote Dictionary Server,远程字典服务器&#xff09;是一个开源免费的&#xff0c;用C语言编写的一个高性能的分布式内存数据库&#xff0c;基于内存运行并支持持久化的NoSQL数据库。是当前最热门的…

若依RuoYi-Vue分离版—富文本Quill的图片支持伸缩大小及布局

若依RuoYi-Vue分离版—富文本Quill的图片支持伸缩大小及布局、工具栏带中文提示 1.在vue.config.js 文件中添加 一下内容2.下载安装插件3.在Editor组件中引入插件4.使用Editor组件&#xff08;特别注意要的加 v-if &#xff09;5.bug 之 imageResize的 img的style丢失1.先创建一…

山东大学软件学院创新项目实训开发日志——收尾篇

山东大学软件学院创新项目实训开发日志——收尾篇 项目名称&#xff1a;ModuFusion Visionary&#xff1a;实现跨模态文本与视觉的相关推荐 -------项目目标&#xff1a; 本项目旨在开发一款跨模态交互式应用&#xff0c;用户可以上传图片或视频&#xff0c;并使用文本、点、…

Canonical Juju 的一个奇怪编排部署

一周前的一个项目扩容出现了异常&#xff0c;进行了操作回滚&#xff0c;未对线上业务造成损失。 现象是这样的&#xff1a; 通过基于 Canonical Juju-GUI 在一组节点上部署了某个组件&#xff0c;在把这组节点添加到集群后&#xff0c;有4个节点上出现了同一组件的2个instanc…

WDF驱动开发-计时器

WDF可以使用框架的内置计时器支持。 它适用于 Kernel-Mode Driver Framework (KMDF) 驱动程序&#xff0c;以及从版本 2 开始的 User-Mode Driver Framework (UMDF) 驱动程序。 框架提供了一个 计时器对象 &#xff0c;使驱动程序能够创建计时器。 在驱动程序创建计时器对象并…

Scala语言:大数据开发的未来之星 - 零基础到精通入门指南

前言 随着大数据时代的到来&#xff0c;数据量的急剧增长为软件开发带来了新的挑战和机遇。Scala语言因其函数式编程和面向对象的特性&#xff0c;以及与Apache Spark的完美协作&#xff0c;在大数据开发领域迅速崛起&#xff0c;成为该领域的新兴宠儿。本篇将从零基础开始&…

Vue59-全局事件总线:任意组件间通信

一、原理图 只是总结出的经验&#xff0c;不是新的API&#xff01; 二、x的要求&#xff1a; 1、保证x被所有组件看见&#xff1b; 2、x可以调用的到$on&#xff0c;才能绑定事件&#xff0c;还能调用到&#xff1a;$of&#xff0c; $emit&#xff1b; 三、x的创建&#xff…

手把手教你创建并启动一个Vue3项目(Windows版)

一、Node安装 1、下载地址&#xff1a;Node.js — Run JavaScript Everywhere 2、安装Node&#xff0c;双击启动一直Next 3、验证安装Node是否成功&#xff0c;打开CMD命令窗口&#xff0c;输入node -v&#xff0c;显示版本就表示成功 4、验证安装npm是否成功&#xff0c;npm是…

sqlite3指令操作-linux

1.查看当前数据库位置 2.查看当前数据库文件下有哪些表 3.显示 某表创建时的SQL语句 4.打开、关闭显示列标题&#xff1b; 5.列对齐显示 6.列以‘&#xff0c;’分隔显示 .separator 7.查询表信息 8.插入消息 9.删除某一行内容 10.修改某行某列内容 11.修改表名字 alter tab…