8.1 KiB
任务
VNote支持一个类似于VSCode Tasks的简单任务系统,可以方便地执行第三方程序。
加载任务
VNote会尝试从下面三个位置加载任务:
默认配置文件夹/tasks
包含内置的任务用户配置文件夹/tasks
包含用户定义的任务笔记本配置文件夹/tasks
包含该笔记本定义的任务
一个任务由一个*.json
的入口文件给出定义。
一个简单的任务
点击任务菜单中的添加任务
,打开用户定义的任务文件夹。
新建一个文件夹hello
并在其下面新建一个文件hello.json
。编辑该文件如下:
{
"command": "echo 'Hello Tasks'"
}
重新加载任务,我们可以看到菜单里面列出了一个新的任务hello
。点击运行该任务。
自定义菜单项
{
"label": "Hello",
"icon": "tasks-solid.svg",
"shortcut": "Alt+H, T",
"command": "echo",
"args": [
"Hello tasks!"
]
}
其中的图标文件tasks-solid.svg
需要保存在JSON入口文件同目录。
子任务
任务可以无限嵌套。子任务会继承父任务的大部分属性。
{
"label": "Hello Tasks",
"icon": "tasks-solid.svg",
"shortcut": "Alt+H, T",
"command": "echo",
"args": ["Hello tasks!"],
"tasks": [
{
"label": "Hello Cat",
"icon": "cat-solid.svg",
"shortcut": "Alt+H, C",
"args": ["Hello cat!"]
},
{
"label": "Hello Dove",
"icon": "dove-solid.svg",
"shortcut": "Alt+H, D",
"args": ["Hello dove!"]
},
{
"label": "Hello Fish",
"icon": "fish-solid.svg",
"shortcut": "Alt+H, F",
"args": ["Hello fish!"]
}
]
}
命令类型
任务的type
属性定义了该任务的命令是如何被执行的。
shell
: 默认,将命令作为一个shell命令执行process
: 将命令作为一个独立的程序执行
{
"type": "process",
"label": "Open File with",
"args": ["${buffer}"],
"tasks": [
{
"label": "Typora",
"icon": "Typora.svg",
"command": "C:\\Programs\\Typora0.9.98\\x64\\Typora.exe"
},
{
"label": "VS Code",
"icon": "vscode.svg",
"command": "C:\\Users\\tootal\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe"
}
]
}
::: alert-info
是的,tootal
就是那个发起VNote任务系统的贡献者!
:::
VNote没有提供一个终端。我们可能需要使用start
或者gnome-terminal
或者konsole
来在终端里面运行某些程序。
{
"label": "Vim",
"icon": "vim.svg",
"type": "process",
"command": "gnome-terminal",
"args": [
"--execute",
"vim",
"${buffer}"
]
}
本地化和平台依赖选项
可以通过一个区域字符串JSON对象来提供本地化。
{
"label": {
"en_US": "Hello",
"zh_CN": "你好"
}
}
可以使用windows
/linux
/osx
关键词来指明不同平台的选项。
{
"type": "process",
"label": "Open File with",
"args": ["${buffer}"],
"tasks": [
{
"label": "Typora",
"icon": "Typora.svg",
"windows": {
"command": "C:\\Programs\\Typora0.9.98\\x64\\Typora.exe"
},
"linux": {
"command": "/usr/bin/typora"
}
},
{
"label": "VS Code",
"icon": "vscode.svg",
"windows": {
"command": "C:\\Users\\tootal\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe"
},
"linux": {
"command": "/usr/bin/code"
}
}
]
}
任务选项
一个任务可以有多个选项,其中有一些是必须的。
我们使用[m]
来标记必须选项,[l]
来标记支持本地化的选项。
version
: 任务文件的版本label[l]
: 任务的名字type
: 任务的类型,shell
(默认)或者process
command[l]
: 需要执行的命令args[l]
: 传递给命令的参数options
: 运行任务的选项cwd
: 运行任务时的当前工作目录;如果不指定,会顺序尝试当前笔记本根文件夹,然后当前缓冲区所在文件夹,然后是当前任务文件所在文件夹env
: 运行任务的环境变量shell
:shell
类型的任务的选项executable
: shell可执行文件;Windows上默认为Powershell.exe
,Linux/macOS上默认为/bin/bash
args
: 启动shell的参数
tasks
: 定义子任务inputs
: 定义输入变量id[m]
: 输入变量的IDtype
:promptString
(默认,会提示用户输入),pickString
(提示用户选择)description[l]
: 输入变量的描述default[l]
: 默认值password
:promptString
类型下,是否启用密码模式options[l]
:pickString
类型下提供的选项
windows
: 指定Windows系统的选项linux
: 指定Linux系统的选项osx
: 指定macOS系统的选项
变量
一个任务可以通过形式${variableName}
来使用VNote提供的变量。变量可以在任务运行时提供有用的信息。
变量可以在选项command
/args
/options.cwd
/options.env
中使用。
内建变量
笔记本相关变量:
notebookFolder
: 笔记本根文件夹路径notebookFolderName
notebookName
notebookDescription
缓冲区相关变量:
buffer
: 当前缓冲区路径bufferNotebookFolder
: 当前缓冲区所属笔记本的根文件夹路径bufferRelativePath
bufferName
bufferBaseName
bufferDir
: 当前缓冲区所在目录bufferExt
: 当前缓冲区的扩展名后缀selectedText
: 当前缓冲区查看窗口的所选文本
任务相关变量:
cwd
: 当前工作目录taskFile
: 任务入口文件路径taskDir
: 任务入口文件所在目录exeFile
: VNote可执行文件路径pathSeparator
: 平台相关的路径分隔符notebookTaskFolder
: 当前笔记本任务文件夹路径userTaskFolder
: 用户任务文件夹路径appTaskFolder
: 默认任务文件夹路径userThemeFolder
: 用户主题文件夹路径appThemeFolder
: 默认主题文件夹路径userDocsFolder
: 用户文档文件夹路径appDocsFolder
: 默认文档文件夹路径
其他特殊变量:
- 通过
${magic:snippet_name}
引用VNote的片段 - 通过
${env:env_name}
访问环境变量 - 通过
${config:[main|session].json_object_path}
访问VNote的配置选项main
对应读取自vnotex.json
的主要配置,session
对应读取自session.json
的会话配置- 使用
arr[index]
来访问一个JSON数组 - 例如
${config:main.core.shortcuts.FullScreen}
可以读取FullScreen
对应的快捷键
输入变量
一个任务可以通过${input:input_id}
使用输入变量来提示用户提供输入
目前有两种类型的输入变量:
promptString
pickString
{
"command": "echo",
"args": ["${input:what}"],
"inputs": [
{
"id": "what",
"type": "promptString",
"description": "Type something, it will show in output panel."
}
]
}
Shell变量
一个任务可以通过${shell:shell_command}
使用shell变量来执行一个shell命令并获取其输出。
${shell:git rev-parse --abbrev-ref HEAD}
→master
${shell:whoami}
→tootal
${shell:dig github.com -4 +short}
→52.69.186.44
示例
在默认配置任务文件夹中有一个内建的Git
任务。
编译并运行:
{
"command": "g++ \"${buffer}\" -o \"${bufferBaseName}\"; if ($?) { start cmd \"/c `\"${bufferBaseName}`\" & pause\" }"
}
运行一个HTTP服务:
{
"command": "start cmd.exe \"/c python -m http.server\" ; start http://localhost:8000"
}