diff --git a/.github/workflows/ci-linux.yml b/.github/workflows/ci-linux.yml
index 66aba01b1c..e99908d2a5 100644
--- a/.github/workflows/ci-linux.yml
+++ b/.github/workflows/ci-linux.yml
@@ -10,7 +10,7 @@ on:
workflow_dispatch:
env:
- VNOTE_VER: 3.3.0
+ VNOTE_VER: 3.4.0
jobs:
build-linux:
diff --git a/.github/workflows/ci-macos.yml b/.github/workflows/ci-macos.yml
index e87914716d..0148b2dd4a 100644
--- a/.github/workflows/ci-macos.yml
+++ b/.github/workflows/ci-macos.yml
@@ -10,7 +10,7 @@ on:
workflow_dispatch:
env:
- VNOTE_VER: 3.3.0
+ VNOTE_VER: 3.4.0
jobs:
build-linux:
diff --git a/.github/workflows/ci-win.yml b/.github/workflows/ci-win.yml
index 73ee8068de..28632c1aca 100644
--- a/.github/workflows/ci-win.yml
+++ b/.github/workflows/ci-win.yml
@@ -10,7 +10,7 @@ on:
workflow_dispatch:
env:
- VNOTE_VER: 3.3.0
+ VNOTE_VER: 3.4.0
jobs:
build:
diff --git a/changes.md b/changes.md
index 1f1f671a7d..451eea0484 100644
--- a/changes.md
+++ b/changes.md
@@ -1,4 +1,12 @@
# Changes
+## v3.4.0
+* Support Snippet
+ * `Ctrl+G S` to insert a snippet
+ * `%snippet_name%` to insert a snippet (the legacy Magic Word)
+ * Snippet is supported in some dialogs (such as creating a new note)
+* Support note template (snippet is supported)
+* Remove `'` and `"` from auot-brackets
+
## v3.3.0
* Editor: support auto indent, auto list
* Support opening notes with external programs
diff --git a/src/data/core/translations/vnote_zh_CN.qm b/src/data/core/translations/vnote_zh_CN.qm
index 7f6b6abb2a..efbaf61d0e 100644
Binary files a/src/data/core/translations/vnote_zh_CN.qm and b/src/data/core/translations/vnote_zh_CN.qm differ
diff --git a/src/data/core/translations/vnote_zh_CN.ts b/src/data/core/translations/vnote_zh_CN.ts
index 2935d98f95..db64c3080a 100644
--- a/src/data/core/translations/vnote_zh_CN.ts
+++ b/src/data/core/translations/vnote_zh_CN.ts
@@ -89,6 +89,25 @@
+
+ ViewWindow
+
+
+ 片段已应用: %1
+
+
+
+ 无法找到片段 (%1)
+
+
+
+ 没有可用片段
+
+
+
+ 选择片段
+
+
vnotex::AppearancePage
@@ -758,22 +777,22 @@
vnotex::FolderPropertiesDialog
-
+
属性
-
+
请为文件夹指定一个名字。
-
+
名字和已有文件夹冲突。
-
+
无法保存笔记本 (%2) 中的文件夹 (%1) (%3)。
@@ -867,37 +886,37 @@
vnotex::ImageInsertDialog
-
+
源:
-
+
浏览(&B)
-
+
标题:
-
+
替换文本:
-
+
缩放宽度:
-
+
选择图片插入
-
+
图片 (*.png *.xpm *.jpg *.bmp *.gif *.svg *.webp);;全部文件 (*.*)
@@ -1046,6 +1065,14 @@
无法导入笔记本 (%1)。
+
+ vnotex::LineEditWithSnippet
+
+
+
+ 支持通过 "%名字%" 使用片段
+
+
vnotex::LinkInsertDialog
@@ -1085,12 +1112,12 @@
文本
-
+
清空
-
+
%n 项
@@ -1100,22 +1127,27 @@
vnotex::MainWindow
-
+
导航
-
+
大纲
-
+
搜索
-
+
+
+ 片段
+
+
+
位置列表
@@ -1124,23 +1156,23 @@
笔记本
-
+
关闭时,是否将 %1 最小化到系统托盘而非退出?
-
+
稍后可以在设置里面更改。
-
+
%1 仍然在此运行。
-
-
+
+
全局
@@ -1353,17 +1385,22 @@
+
+ %1 主页
+
+
+
反馈和讨论
-
+
关于
-
+
@@ -1372,7 +1409,7 @@
-
+
关于 Qt
@@ -1415,7 +1452,7 @@
vnotex::ManageNotebooksDialog
-
+
关闭
@@ -1424,7 +1461,7 @@
删除
-
+
管理笔记本
@@ -1433,49 +1470,54 @@
关闭笔记本 %1?
-
+
删除(危险)
-
+
+
+ 请为笔记本指定一个名字。
+
+
+
关闭笔记本 (%1)?
-
+
稍后可以重新导入该笔记本。
-
+
笔记本路径: %1
-
+
无法关闭笔记本 (%1)
-
+
从磁盘中删除笔记本 (%1)?
-
+
冷静!冷静!冷静!这会从磁盘中删除该笔记本相关的全部文件。该操作会跳过系统的回收站,危险!
-
+
笔记本位置: %1
如果仅要从 %2 中移除该该笔记本,请使用“关闭”按钮。
-
+
无法删除笔记本 (%1)
@@ -1488,7 +1530,7 @@ Use the "Close" button if you just want to remove it from %2.
这会从磁盘中删除该笔记本相关的全部文件。该操作会跳过系统的回收站,危险!
-
+
当前笔记本有尚未保存的更改。
@@ -1603,22 +1645,22 @@ Use the "Close" button if you just want to remove it from %2.
解析为 Markodwn 并粘贴
-
+
正在获取图片到本地...
-
+
终止
-
+
获取图片到本地
-
+
正在获取图片 (%1)
@@ -2007,22 +2049,22 @@ Use the "Close" button if you just want to remove it from %2.
vnotex::NewFolderDialog
-
+
新建文件夹
-
+
请为文件夹指定一个名字。
-
+
名字和已有文件夹冲突。
-
+
无法在笔记本 (%2) 中文件夹 (%1) 下创建文件夹 (%3)。
@@ -2030,70 +2072,94 @@ Use the "Close" button if you just want to remove it from %2.
vnotex::NewNoteDialog
-
+
新建笔记
-
- 请为笔记指定一个名字。
+ 请为笔记指定一个名字。
-
+
+
+ 模板:
+
+
+
+
+ 管理
+
+
+
+
+ 请为笔记指定一个有效名字。
+
+
+
名字和已有笔记冲突。
-
+
无法在笔记本 (%2) 中文件夹 (%1) 下创建笔记 (%3)。
-
+
笔记
+
+
+
+ 无
+
+
+
+
+ 无法加载模板 (%1) (%2)。
+
vnotex::NewNotebookDialog
-
+
新建笔记本
-
+
<br/>支持绝对路径和相对路径。~ 和环境变量暂时不支持。
-
+
请为笔记本指定一个名字。
-
+
请为笔记本指定一个有效的根文件夹。
-
+
笔记本根文件夹必须为空。如果需要导入已有数据,请尝试其他操作。
-
+
根文件夹应该为一个目录。
-
+
已经存在一个使用相同根文件夹的笔记本 (%1)。
-
+
无法在 (%1) 创建笔记本 (%2)。
@@ -2131,35 +2197,58 @@ Use the "Close" button if you just want to remove it from %2.
无法在 (%1) 创建笔记本 (%2)。
+
+ vnotex::NewSnippetDialog
+
+
+
+ 新建片段
+
+
+
+
+ 无法添加片段 (%1) (%2)。
+
+
+
+
+ 请为片段指定一个名字。
+
+
+
+
+ 名字和已有片段冲突。
+
+
vnotex::NodeInfoWidget
-
+
笔记本:
-
+
路径:
-
+
文件类型:
-
+
名字:
-
+
创建时间:
-
+
修改时间:
@@ -2180,22 +2269,30 @@ Use the "Close" button if you just want to remove it from %2.
vnotex::NotePropertiesDialog
-
- 属性
+ 属性
-
- 请为笔记指定一个名字。
+ 请为笔记指定一个名字。
+
+
+
+
+ %1 属性
+
+
+
+
+ 请为笔记指定一个有效名字。
-
+
名字和已有笔记冲突。
-
+
无法保存笔记本 (%2) 中的笔记 (%1) (%3)。
@@ -2218,96 +2315,96 @@ Use the "Close" button if you just want to remove it from %2.
该标题栏包含管理笔记本和笔记的按钮和菜单。
-
+
查看
-
+
显示/隐藏回收站节点
-
+
管理笔记本(&M)
-
+
外部文件
-
+
显示外部文件
-
+
激活时自动导入外部文件
-
-
+
+
无法在回收站内创建文件夹。
-
-
+
+
无法在回收站内创建笔记。
-
+
请先创建一个笔记本来保存数据。
-
+
选择文件导入
-
+
无法添加文件 (%1) 为节点 (%2)。
-
+
按配置查看
-
+
按名字查看
-
+
按名字倒序查看
-
+
按创建时间查看
-
+
按创建时间倒序查看
-
+
按修改时间查看
-
+
按修改时间倒序查看
@@ -2315,130 +2412,130 @@ Use the "Close" button if you just want to remove it from %2.
vnotex::NotebookInfoWidget
-
+
基本信息
-
+
类型:
-
+
笔记本名字
-
+
名字:
-
+
图标:
-
+
笔记本描述
-
+
描述:
-
+
根文件夹:
-
+
笔记本类型
-
+
指定笔记本类型。<br/>
-
-
-
-
+
+
+
+
<b>%1</b>: %2<br/>
-
+
笔记本根文件夹路径
-
+
<b>笔记本根文件夹</b>是在 %1 中包含一个笔记本的全部数据。
-
+
浏览
-
+
选择笔记本根文件夹
-
+
高级信息
-
+
配置管理器:
-
+
版本管理:
-
+
后端:
-
+
笔记本的配置管理器
-
+
指定笔记本的配置管理器。<br/>
-
+
笔记本的版本管理
-
+
指定笔记本的版本管理。<br/>
-
+
笔记本后端
-
+
指定笔记本后端。<br/>
@@ -2614,12 +2711,12 @@ Use the "Close" button if you just want to remove it from %2.
修改时间
-
+
无效的节点 (%1)。
-
+
请检查该节点在磁盘上是否存在。
@@ -2734,17 +2831,17 @@ Use the "Close" button if you just want to remove it from %2.
文件不会被改动,仅仅是从笔记本索引中移除。
-
+
打开方式(&W)
-
+
系统默认程序
-
+
添加外部程序
@@ -2780,17 +2877,17 @@ Description: %3
vnotex::OutlineViewer
-
+
减小扩展层级
-
+
增大扩展层级
-
+
扩展层级: %1
@@ -2798,33 +2895,38 @@ Description: %3
vnotex::QuickAccessPage
-
-
+
+
快速访问
-
+
灵犀页
-
+
灵犀页位置(用户可以复制笔记的路径并粘贴在此)
-
+
灵犀页:
-
+
+
+ 选择灵犀页文件
+
+
+
编辑固定到快速访问的文件(一行一个文件)
-
+
快速访问:
@@ -3122,6 +3224,281 @@ Description: %3
输入以开始查找
+
+ vnotex::SnippetInfoWidget
+
+
+
+ 名字:
+
+
+
+
+ 描述:
+
+
+
+
+ 类型:
+
+
+
+
+ 快捷键:
+
+
+
+
+ 一个用于在片段内容中指定应用片段后光标位置的标记
+
+
+
+
+ 光标标记:
+
+
+
+
+ 一个用于在片段内容中指代应用片段前所选择文本的标记
+
+
+
+
+ 选择标记:
+
+
+
+
+ 与第一行同步缩进
+
+
+
+
+ 内容:
+
+
+
+
+ 文本
+
+
+
+
+ 动态
+
+
+
+
+ 无
+
+
+
+ vnotex::SnippetMgr
+
+
+
+ 没有前导零的日期数字 (`1` 到 `31`)
+
+
+
+
+ 带前导零的日期数字 (`01` 到 `31`)
+
+
+
+
+ 缩写的本地化日期名字 (如 `一` 到 `日`)
+
+
+
+
+ 本地化日期名字 (如 `星期一` 到 `星期日`)
+
+
+
+
+ 没有前导零的月份数字 (如 `1` 到 `12`)
+
+
+
+
+ 带前导零的月份数字 (`01` 到 `12`)
+
+
+
+
+ 缩写的本地化月份名字 (如 `一` 到 `十二`)
+
+
+
+
+ 本地化月份名字 (如 `一月` 到 `十二月`)
+
+
+
+
+ 两位数的年份数字 (`00` 到 `99`)
+
+
+
+
+ 四位数的年份数字
+
+
+
+
+ 星期数字 (`1` 到 `53`)
+
+
+
+
+ 没有前导零的小时 (`0` 到 `23`)
+
+
+
+
+ 带前导零的小时 (`00` 到 `23`)
+
+
+
+
+ 没有前导零的分 (`0` 到 `59`)
+
+
+
+
+ 带前导零的分 (`00` 到 `59`)
+
+
+
+
+ 没有前导零的秒 (`0` 到 `59`)
+
+
+
+
+ 带前导零的秒 (`00` 到 `59`)
+
+
+
+
+ 日期 (`2021-02-24`)
+
+
+
+
+ 缩写的日期 (`20210224`)
+
+
+
+
+ 时间 (`16:51:02`)
+
+
+
+
+ 日期时间 (`2021-02-24_16:51:02`)
+
+
+
+
+ 当前笔记名字
+
+
+
+
+
+ [没有可用值]
+
+
+
+
+ 当前笔记的完整基本名字
+
+
+
+ vnotex::SnippetPanel
+
+
+
+ 新建片段
+
+
+
+
+ 打开文件夹
+
+
+
+
+
+ %n 项
+
+
+
+
+
+ %1%2 [%3]
+
+
+
+
+ 应用(&A)
+
+
+
+
+ 删除(&D)
+
+
+
+
+ 属性(重命名)(&P)
+
+
+
+
+ 确认删除
+
+
+
+
+ 永久删除这些片段?
+
+
+
+
+ 文件将会被永久删除,即使在操作系统的回收站中也无法找回。
+
+
+
+
+ 无法删除片段 (%1) (%2)。
+
+
+
+ vnotex::SnippetPropertiesDialog
+
+
+
+ %1 属性
+
+
+
+
+ 请为片段指定一个名字。
+
+
+
+
+ 名字和已有片段冲突。
+
+
+
+
+ 无法更新片段 (%1) (%2)。
+
+
vnotex::SortDialog
@@ -3552,6 +3929,11 @@ Description: %3
定位节点
+
+
+
+ 固定到快速访问
+
vnotex::ViewWindow
@@ -3563,39 +3945,39 @@ Description: %3
-
-
+
+
[无缓冲区]
-
+
关闭笔记 (%1) 前是否保存更改?
-
-
+
+
笔记路径 (%1)。
-
+
放弃对笔记 (%1) 的更改?
-
+
发现文件 (%2) 的备份文件 (%1)。是否要从备份文件中恢复?
-
+
“是” 以从备份文件中恢复,“否” 以放弃该备份文件,“取消” 以退出。
-
+
备份文件最后修改时间: %2
-
+
拖拽文件以添加为附件
-
+
文件在磁盘中丢失 (%1)。
-
+
是否强制保存缓冲区内容到文件?
-
+
该文件可能已经被删除。请选择将缓冲区的内容保存为新文件或者放弃缓冲区。
-
+
文件被更改 (%1)。
-
+
是否保存缓冲区覆盖到文件,或者放弃缓冲区?
@@ -3640,238 +4022,258 @@ Backup file last modified time: %2
是否用缓冲区的内容覆盖该文件?
-
+
该文件已经被更改。请选择保存缓冲区到该文件或者放弃缓冲区并重新加载文件。
-
+
这是一个只读笔记 (%1),不支持修改。
-
+
请保存更改到另一个笔记。
-
+
无法保存笔记 (%1)。
-
+
请检查文件 (%1) 并重试。
-
+
可能该文件正在被第三方应用临时占用。
-
+
缩放: %1%
-
+
缩放: %1%2
-
-
+
+
无法找到模式: %1
-
+
找到匹配: %1/%2
-
+
替换 %n 处匹配
-
+
保存
-
+
编辑
-
+
阅读
-
+
放弃
-
+
标题
-
+
标题1
-
+
标题2
-
+
标题3
-
+
标题4
-
+
标题5
-
+
标题6
-
+
清空
-
+
粗体
-
+
斜体
-
+
删除线
-
+
无序列表
-
+
有序列表
-
+
待办列表
-
+
已完成待办列表
-
+
代码
-
+
代码块
-
+
数学公式
-
+
数学公式块
-
+
引用块
-
+
链接
-
+
图片
-
+
表格
-
+
标记
-
+
附件
-
+
大纲
-
+
查找替换
-
+
小节序号
-
+
跟随配置
-
+
启用
-
+
禁用
+
+
+
+ 片段已应用: %1
+
+
+
+
+ 无法找到片段 (%1)
+
+
+
+
+ 没有可用片段
+
+
+
+
+ 选择片段
+
vnotex::WebViewExporter
diff --git a/src/data/core/vnotex.json b/src/data/core/vnotex.json
index 7c3aa83c88..ccbaef69c8 100644
--- a/src/data/core/vnotex.json
+++ b/src/data/core/vnotex.json
@@ -3,7 +3,7 @@
"metadata" : {
"//comment": "When releasing new version, please go through the following configs to check if override is needed.",
"//Comment": "markdown_editor#override_viewer_resource",
- "version" : "3.3.0"
+ "version" : "3.4.0"
},
"core" : {
"theme" : "pure",
diff --git a/src/widgets/lineeditwithsnippet.cpp b/src/widgets/lineeditwithsnippet.cpp
index df0b03543e..59dfa41442 100644
--- a/src/widgets/lineeditwithsnippet.cpp
+++ b/src/widgets/lineeditwithsnippet.cpp
@@ -18,7 +18,7 @@ LineEditWithSnippet::LineEditWithSnippet(const QString &p_contents, QWidget *p_p
void LineEditWithSnippet::setTips()
{
- const auto tips = tr("Snippet is supported via %name%");
+ const auto tips = tr("Snippet is supported via \"%name%\"");
setToolTip(tips);
setPlaceholderText(tips);
}
diff --git a/src/widgets/textviewwindowhelper.h b/src/widgets/textviewwindowhelper.h
index 3b8c693376..dd21b4036a 100644
--- a/src/widgets/textviewwindowhelper.h
+++ b/src/widgets/textviewwindowhelper.h
@@ -200,7 +200,7 @@ namespace vnotex
p_win->m_editor->getTextEdit(),
SnippetMgr::generateOverrides(p_win->getBuffer()));
p_win->m_editor->enterInsertModeIfApplicable();
- p_win->showMessage(ViewWindow::tr("Snippet applied: %1").arg(p_name));
+ p_win->showMessage(vnotex::ViewWindow::tr("Snippet applied: %1").arg(p_name));
}
template
@@ -227,7 +227,7 @@ namespace vnotex
// Found one symbol under current cursor.
snippetName = match.captured(1);
if (!SnippetMgr::getInst().find(snippetName)) {
- p_win->showMessage(ViewWindow::tr("Snippet (%1) not found").arg(snippetName));
+ p_win->showMessage(vnotex::ViewWindow::tr("Snippet (%1) not found").arg(snippetName));
return;
}
@@ -254,7 +254,7 @@ namespace vnotex
{
const auto snippets = SnippetMgr::getInst().getSnippets();
if (snippets.isEmpty()) {
- p_win->showMessage(ViewWindow::tr("Snippet not available"));
+ p_win->showMessage(vnotex::ViewWindow::tr("Snippet not available"));
return QString();
}
@@ -267,7 +267,7 @@ namespace vnotex
}
// Ownership will be transferred to showFloatingWidget().
- auto selector = new QuickSelector(ViewWindow::tr("Select Snippet"),
+ auto selector = new QuickSelector(vnotex::ViewWindow::tr("Select Snippet"),
items,
true,
p_win);
diff --git a/src/widgets/toolbarhelper.cpp b/src/widgets/toolbarhelper.cpp
index 3dfece6123..534c3a367f 100644
--- a/src/widgets/toolbarhelper.cpp
+++ b/src/widgets/toolbarhelper.cpp
@@ -491,6 +491,12 @@ QToolBar *ToolBarHelper::setupSettingsToolBar(MainWindow *p_win, QToolBar *p_too
menu->addSeparator();
+ menu->addAction(MainWindow::tr("%1 Home Page").arg(qApp->applicationDisplayName()),
+ menu,
+ []() {
+ WidgetUtils::openUrlByDesktop(QUrl("https://vnotex.github.io/vnote"));
+ });
+
menu->addAction(MainWindow::tr("Feedback And Discussions"),
menu,
[]() {