diff --git a/main.js b/main.js
index 6a8a8ff..ce850bf 100644
--- a/main.js
+++ b/main.js
@@ -6,11 +6,12 @@ var obsidian = require('obsidian');
使用声明
ZH增强编辑插件借鉴多款社区插件开发而成,蚕子水平有限,代码或有缺陷,不能保证任何操作均会正常,请在使用之前备份库笔记,谢谢配合。
开发:蚕子 QQ:312815311 更新时间:2023-10-31
+pull request: xjl456852 更新时间:2024-01-10 功能:增加单行和多行公式刷功能
***************************************************************************** */
-const 当前版本 = '0.6.4';
-const 功能更新 = '当前版本\n- 增加「标签双链互转 Ctrl+Alt+Shift+3」功能\n- 增加按ESC键关闭格式刷功能 \n- 优化功能菜单项及说明文档 \n- 补充修复外来文本功能 \n- 修正插件功能的说明文字(感谢 disjuno) \n- 增加一、二级标题格式刷功能 \n- 去除插入制表符「Tab」功能 \n- 优化「列表转图示」功能 \n- 增加「获取当前字符数」功能 \n- 增加「插入有效空行」功能 \n- 增加「空格转为空行」功能 \n- 状态栏显示Markdown及Html语法格式刷 \n- 状态栏显示实用功能菜单 \n- 增加「获取搜索结果(列表)」功能 \n- ...';
+const 当前版本 = '0.6.4.1';
+const 功能更新 = '当前版本\n- 增加 单行公式刷和多行公式刷 功能\n「标签转为内链 Ctrl+Alt+Shift+3」功能\n- 增加按ESC键关闭格式刷功能 \n- 优化功能菜单项及说明文档 \n- 补充修复外来文本功能 \n- 修正插件功能的说明文字(感谢 disjuno) \n- 增加一、二级标题格式刷功能 \n- 去除插入制表符「Tab」功能 \n- 优化「列表转图示」功能 \n- 增加「获取当前字符数」功能 \n- 增加「插入有效空行」功能 \n- 增加「空格转为空行」功能 \n- 状态栏显示Markdown及Html语法格式刷 \n- 状态栏显示实用功能菜单 \n- 增加「获取搜索结果(列表)」功能 \n- ...';
const 宣传页面 = '查看 Github 页面,联系蚕子';
const 上标图标 ='';
const 下标图标 = '';
@@ -74,6 +75,8 @@ var isbt2Txt = false;
var isText = false;
var isGLS = false;
var isCTS = false;
+var isSLatex = false;
+var isMLatex = false;
var isXTS = false;
var isSCS = false;
var isXHS = false;
@@ -124,11 +127,16 @@ class MyPlugin extends obsidian.Plugin {
hotkeys: [{ modifiers: ["Alt","Shift"], key: "3" } ]
});
this.addCommand({
- id: 'tag-link-text',
- name: '标签双链互转',
- callback: () => this.标签双链互转(),
+ id: 'tag2link-text',
+ name: '标签转为内链',
+ callback: () => this.标签转为内链(),
hotkeys: [{ modifiers: ["Mod","Alt","Shift"], key: "3" } ]
});
+ this.addCommand({
+ id: 'link2tag-text',
+ name: '内链转为标签',
+ callback: () => this.内链转为标签()
+ });
/**/
this.addCommand({
@@ -304,6 +312,18 @@ class MyPlugin extends obsidian.Plugin {
new obsidian.Notice("已关闭格式刷!");
}
});
+ this.addCommand({
+ id: 'single-latex-format',
+ name: '$单行公式$格式刷',
+ callback: () => this.单行公式刷(),
+ hotkeys: [{ modifiers: ["Alt","Shift"], key: "P" } ]
+ });
+ this.addCommand({
+ id: 'multiple-latex-format',
+ name: '$多行公式$格式刷',
+ callback: () => this.多行公式刷(),
+ hotkeys: [{ modifiers: ["Alt","Shift"], key: "L" } ]
+ });
this.addCommand({
id: 'cuti-format',
name: '**粗体**格式刷',
@@ -798,29 +818,6 @@ class MyPlugin extends obsidian.Plugin {
hotkeys: [{ modifiers: ["Mod","Shift","Alt"], key: "D" } ]
});
- this.addCommand({
- id: 'promote-lines-level',
- name: '调高所有标题级别',
- callback: () => this.调高所有标题级别()
- });
- this.addCommand({
- id: 'Down-lines-level',
- name: '调低所有标题级别',
- callback: () => this.调低所有标题级别()
- });
- /*
- this.addCommand({
- id: 'promote-texts-level',
- name: '调高所选标题级别',
- callback: () => this.调高所选标题级别()
- });
- this.addCommand({
- id: 'Down-texts-level',
- name: '调低所选标题级别',
- callback: () => this.调低所选标题级别()
- });
- */
-
this.addCommand({
id: 'modify-link-showname',
name: '修改内部链接的显示名称',
@@ -893,12 +890,12 @@ class MyPlugin extends obsidian.Plugin {
});
this.addCommand({
id: 'add-twoSpace',
- name: '全文行首缩进/取消缩进',
+ name: '全文缩进',
callback: () => this.全文首行缩进()
});
this.addCommand({
id: 'this-twoSpace',
- name: '当前行缩进/取消缩进两字符',
+ name: '当前行缩进',
callback: () => this.当前行缩进()
});
this.addCommand({
@@ -981,6 +978,10 @@ class MyPlugin extends obsidian.Plugin {
this.转换高亮2();
}else if(isGLS3){
this.转换高亮3();
+ }else if(isSLatex){
+ this.转换公式();
+ }else if(isMLatex){
+ this.转换公式1();
}else if(isCTS){
this.转换粗体();
}else if(isXTS){
@@ -1006,7 +1007,7 @@ class MyPlugin extends obsidian.Plugin {
//};
}
- }else if(isText||isCTxt ||isBgC ||isCTS || isGLS || isGLS1 ||isGLS2 ||isGLS3 ||isSB || isSCS || isXB || isXHS || isXTS || isTHS ||isTCS||isWKS || isbt2Txt || isbt1Txt){
+ }else if(isText||isCTxt ||isBgC ||isCTS || isSLatex || isMLatex || isGLS || isGLS1 ||isGLS2 ||isGLS3 ||isSB || isSCS || isXB || isXHS || isXTS || isTHS ||isTCS||isWKS || isbt2Txt || isbt1Txt){
this.关闭格式刷();
newNotice = new obsidian.Notice("已关闭格式刷!");
}
@@ -1034,7 +1035,7 @@ class MyPlugin extends obsidian.Plugin {
isShift =true;
}
if(e.key == "Esc" || e.key == "Escape"){
- if(isText||isCTxt ||isBgC ||isCTS || isGLS || isGLS1 ||isGLS2 ||isGLS3 ||isSB || isSCS || isXB || isXHS || isXTS || isTHS ||isTCS||isWKS || isbt2Txt || isbt1Txt){
+ if(isText||isCTxt ||isBgC ||isCTS || isSLatex || isMLatex || isGLS || isGLS1 ||isGLS2 ||isGLS3 ||isSB || isSCS || isXB || isXHS || isXTS || isTHS ||isTCS||isWKS || isbt2Txt || isbt1Txt){
this.关闭格式刷();
newNotice = new obsidian.Notice("已关闭格式刷!");
}
@@ -1193,16 +1194,7 @@ class MyPlugin extends obsidian.Plugin {
item.setIcon("double-up-arrow-glyph");
item.onClick(() =>this.折叠同级标题());
});
- menu.addItem((item) => {
- item.setTitle("提升多个标题等级");
- item.setIcon("double-up-arrow-glyph");
- item.onClick(() =>this.调高所有标题级别());
- });
- menu.addItem((item) => {
- item.setTitle("下调多个标题等级");
- item.setIcon("double-down-arrow-glyph");
- item.onClick(() =>this.调低所有标题级别());
- });
+
menu.addItem((item) => {
item.setTitle("嵌入当前网址");
item.setIcon("link");
@@ -1296,7 +1288,7 @@ class MyPlugin extends obsidian.Plugin {
if(当前模式.state.mode == "preview"){
this.app.commands.executeCommandById("markdown:toggle-preview");
};
- if(isCTxt ||isBgC ||isCTS || isGLS ||isGLS1 ||isGLS2 ||isGLS3 || isSB || isSCS || isXB || isXHS || isXTS|| isTHS ||isTCS||isWKS){
+ if(isCTxt ||isBgC ||isCTS || isSLatex || isMLatex || isGLS ||isGLS1 ||isGLS2 ||isGLS3 || isSB || isSCS || isXB || isXHS || isXTS|| isTHS ||isTCS||isWKS){
this.关闭格式刷();
new obsidian.Notice("已关闭格式刷!");
}
@@ -1357,7 +1349,18 @@ class MyPlugin extends obsidian.Plugin {
new obsidian.Notice("二级标题格式刷 已打开!")
});
});
-
+ menu.addItem((item) => {
+ item.setTitle("$单行公式刷$");
+ item.setIcon("普通格式刷");
+ item.setSection("format");
+ item.onClick(() =>this.单行公式刷());
+ });
+ menu.addItem((item) => {
+ item.setTitle("$$多行公式刷$$");
+ item.setIcon("普通格式刷");
+ item.setSection("format");
+ item.onClick(() =>this.多行公式刷());
+ });
menu.addItem((item) => {
item.setTitle("**粗体**");
item.setIcon("普通格式刷");
@@ -1543,8 +1546,8 @@ class MyPlugin extends obsidian.Plugin {
}
async loadSettings() {
- console.log('加载了配置');
- console.log(this.app.customCss.themes);
+ console.log('增强编辑 已完成加载,有问题请联系蚕子(qq:312815311)');
+ //console.log(this.app.customCss.themes);
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
}
@@ -1682,7 +1685,7 @@ class MyPlugin extends obsidian.Plugin {
}else{
return;
}
- console.log('表达式 '+表达式);
+ //console.log('表达式 '+表达式);
//逐行判断是否符合指定表达式
for (var i=1;i<=末行行号;i++){
var 新行号;
@@ -1720,7 +1723,7 @@ class MyPlugin extends obsidian.Plugin {
}else{
表达式 = 所选文本;
}
- console.log('表达式 '+表达式);
+ //console.log('表达式 '+表达式);
选至文首 = 编辑模式.getRange({line:0,ch:0},当前光标);
var 以前字数 = 选至文首.length;
var 返回位置 = 0;
@@ -1805,6 +1808,8 @@ class MyPlugin extends obsidian.Plugin {
isGLS1 =false; ///*==多彩高亮==*
isGLS2 =false; ///**==多彩高亮==**
isGLS3 =false; ///***==多彩高亮==***
+ isSLatex = false; //单行公式$
+ isMLatex = false; //多行公式$$
isCTS =false; //**粗体**
isXTS = false; //*斜体*
isSCS = false; //~~删除线~~
@@ -1905,20 +1910,35 @@ class MyPlugin extends obsidian.Plugin {
this.替换所选文本 (所选文本);
};
- 标签双链互转() {
+ 标签转为内链() {
this.获取编辑器信息 ();
if(所选文本 == ""){
return;
};
- let tagReg = /(^|\s*)#([^#\s\/]+)(\s|[^\/]|\r*\n|$)/g;
- let linkReg = /\[\[([^\[\]]+)\]\]/g;
+ let tagReg = /(?<=(^|\s?))#([^#\s\/]+)(?=(\s|[^\/]|\r*\n|$))/g;
if (tagReg.test(所选文本)) {
所选文本 = 所选文本.replace(tagReg, "[[$2]]");
- }else if(linkReg.test(所选文本)){
+ this.替换所选文本 (所选文本);
+ }else{
+ return
+ }
+
+ };
+
+ 内链转为标签() {
+ this.获取编辑器信息 ();
+ if(所选文本 == ""){
+ return;
+ };
+
+ let linkReg = / ?\[\[([^\[\]]+)\]\] ?/g;
+ if(linkReg.test(所选文本)){
所选文本 = 所选文本.replace(linkReg, " #$1 ");
- }
- this.替换所选文本 (所选文本);
+ this.替换所选文本 (所选文本);
+ }else{
+ return
+ }
};
切换模式() {
@@ -2023,7 +2043,7 @@ class MyPlugin extends obsidian.Plugin {
for (const file of this.app.vault.getMarkdownFiles()) {
if(file.name != 当前文件名){
fileNameAry.push(file.basename);
- console.log(file.name)
+ //console.log(file.name)
}
};
fileNameAry.sort().reverse();
@@ -2087,6 +2107,34 @@ class MyPlugin extends obsidian.Plugin {
}
};
+ 单行公式刷() {
+ this.获取编辑器信息 ();
+ if(所选文本 == ""){
+ if(isSLatex){
+ isSLatex = false;
+ this.关闭格式刷();
+ new obsidian.Notice("已关闭单行公式刷!");
+ }else{
+ this.关闭格式刷();
+ isSLatex = true;
+ newNotice = new obsidian.Notice("$单行公式刷$ 已打开!",0);
+ };
+ };
+ };
+ 多行公式刷() {
+ this.获取编辑器信息 ();
+ if(所选文本 == ""){
+ if(isMLatex){
+ isMLatex = false;
+ this.关闭格式刷();
+ new obsidian.Notice("已多行公式刷!");
+ }else{
+ this.关闭格式刷();
+ isMLatex = true;
+ newNotice = new obsidian.Notice("$$多行公式刷$$ 已打开!",0);
+ };
+ };
+ };
粗体格式刷() {
this.获取编辑器信息 ();
if(所选文本 == ""){
@@ -2134,6 +2182,61 @@ class MyPlugin extends obsidian.Plugin {
}
}
};
+ 转换公式() {
+ this.获取编辑器信息 ();
+ if(所选文本 == ""){
+ if(isSLatex){
+ isSLatex = false;
+ newNotice.hide();
+ new obsidian.Notice("已关闭单行公式刷!");
+ }
+ 笔记全文.replaceRange("****", 当前光标, 当前光标);
+ 编辑模式.exec("goRight");
+ 编辑模式.exec("goRight");
+ }else{
+ var link = /.*(\$)([^\$]*)(\$).*/g; //是否包含公式符号
+ var link1 = /^[^\$](\$)[^\$]*$/; //是否只包含一侧的$
+ if (link1.test(所选文本)){
+ return; //new obsidian.Notice("只有一侧出现==符号");
+ }else if (link.test(所选文本)){
+ 所选文本 = 所选文本.replace(/(\$)/g,""); //new obsidian.Notice("成对出现$符号");
+ this.替换所选文本 (所选文本);
+ }else{
+
+ 所选文本 = 所选文本.replace(/^([\t\s]*)([^\t\s])/mg,"$1$$$2").replace(/([^\t\s])([\t\s]*)$/mg,"$1$$$2");
+ 所选文本 = 所选文本.replace(/^\$\$$/mg,"");
+
+ this.替换所选文本 (所选文本);
+ 编辑模式.exec("goRight");
+ }
+ }
+ };
+ 转换公式1() {
+ this.获取编辑器信息 ();
+ if(所选文本 == ""){
+ if(isMLatex){
+ isMLatex = false;
+ newNotice.hide();
+ new obsidian.Notice("已关闭多行公式刷!");
+ }
+ 笔记全文.replaceRange("****", 当前光标, 当前光标);
+ 编辑模式.exec("goRight");
+ 编辑模式.exec("goRight");
+ }else{
+ var link = /.*(\$\$)([^\$]*)(\$\$).*/g; //是否包含公式符号
+ var link1 = /^[^\$](\$\$)[^\$]*$/; //是否只包含一侧的$$
+ if (link1.test(所选文本)){
+ return; //new obsidian.Notice("只有一侧出现==符号");
+ }else if (link.test(所选文本)){
+ 所选文本 = 所选文本.replace(/(\$\$\n?|\n?\$\$)/g,""); //new obsidian.Notice("成对出现$$符号");
+ this.替换所选文本 (所选文本);
+ }else{
+ 所选文本 = 所选文本.replace(/^([\t\s]*)([^\t\s])/g,"$1$$$$\n$2").replace(/([^\t\s])([\t\s]*)$/g,"$1\n$$$$$2");
+ this.替换所选文本 (所选文本);
+ 编辑模式.exec("goRight");
+ }
+ }
+ };
高亮格式刷() {
this.获取编辑器信息 ();
@@ -2971,7 +3074,7 @@ class MyPlugin extends obsidian.Plugin {
新文本 = 当前行文本.replace(/^(\>*(\[[!\w]+\])?\s*)#+\s/,"$1");
}else{ //列表、引用,先转为普通文本,再转为标题
新文本 = 当前行文本.replace(/^\s*(#*|\>|\-|\d+\.)\s*/m,"");
- console.log(新文本);
+ //console.log(新文本);
新文本 = _str+" "+新文本;
}
//笔记全文.replaceRange(新文本, {line:当前行号,ch:0}, {line:当前行号,ch:当前行文本.length});
@@ -2981,28 +3084,167 @@ class MyPlugin extends obsidian.Plugin {
调节标题级别(增加) {
this.获取编辑器信息 ();
- let 新文本 = "";
- let 位置 = 选至行首.length;
- if(增加){
- if(/^##+\s/.test(当前行文本)){
- 新文本 = 当前行文本.replace(/(^\s*)##/,"$1#");
- 位置--
+ if(所选文本 == ""){
+ let 新文本 = "";
+ let 位置 = 选至行首.length;
+ if(增加){
+ if(/^#+ /.test(当前行文本)){
+ this.app.commands.executeCommandById('editor:unfold-all');
+ let _str = 当前行文本.replace(/^(#{2,6}) .*$/,"$1"); //获取前面的多个#号
+ //new obsidian.Notice("当前为标题行 "+_str);
+ // 如果 前缀# >= 2 个,替换掉首个#符号,即提升一级
+ let 新标题 = 当前行文本.replace(/^#/,"")
+ 笔记全文.replaceRange(新标题,{line:当前行号,ch:0},{line:当前行号,ch:当前行文本.length});
+ var 末行行号 = 编辑模式.lastLine();
+ //console.log(当前行号+" "+末行行号);
+ let 临时行文本
+ for (var i = 当前行号+1; i <= 末行行号; i++) {
+ 临时行文本 = 编辑模式.getLine(i);
+ if(/^#+ /.test(临时行文本)){
+ //console.log(i+" "+临时行文本);
+ // 临时行文本包含当前标题的 前缀# 符号组,代表下级标题
+ if(eval("/^"+_str+"(?=#)/").test(临时行文本)){
+ let 提升标题 = 临时行文本.replace(/^#/,"")
+ 笔记全文.replaceRange(提升标题,{line:i,ch:0},{line:i,ch:临时行文本.length});
+ }else{
+ break
+ }
+ }
+ }
+ }
}else{
- return;
+ if(/^#+ /.test(当前行文本)){
+ this.app.commands.executeCommandById('editor:unfold-all');
+ let _str = 当前行文本.replace(/^(#{1,5}) .*$/,"$1"); //获取前面的多个#号
+ //new obsidian.Notice("当前为标题行 "+_str);
+ // 如果 前缀# >= 2 个,替换掉首个#符号,即提升一级
+ let 新标题 = 当前行文本.replace(/^/,"#")
+ 笔记全文.replaceRange(新标题,{line:当前行号,ch:0},{line:当前行号,ch:当前行文本.length});
+ var 末行行号 = 编辑模式.lastLine();
+ //console.log(当前行号+" "+末行行号);
+ let 临时行文本
+ for (var i = 当前行号+1; i <= 末行行号; i++) {
+ 临时行文本 = 编辑模式.getLine(i);
+ if(/^#{1,5} /.test(临时行文本)){
+ //console.log(i+" "+临时行文本);
+ // 临时行文本包含当前标题的 前缀# 符号组,代表下级标题
+ if(eval("/^"+_str+"(?=#)/").test(临时行文本)){
+ let 提升标题 = 临时行文本.replace(/^/,"#")
+ 笔记全文.replaceRange(提升标题,{line:i,ch:0},{line:i,ch:临时行文本.length});
+ }else{
+ break
+ }
+ }
+ }
+ }
}
+ //笔记全文.replaceRange(新文本, {line:当前行号,ch:0}, {line:当前行号,ch:当前行文本.length});
+ 编辑模式.setLine(当前行号,新文本);
+ 编辑模式.setCursor({line:当前行号,ch:位置});
}else{
- if(/^#{1,5}\s/.test(当前行文本)){
- 新文本 = 当前行文本.replace(/(^[ ]*)#/,"$1##");
- 位置++
+ if(增加){
+ if (!所选文本) return;
+ 所选文本 = 所选文本.replace(/(?<=^#+)# /mg," ");
+ this.替换所选文本 (所选文本);
}else{
- return;
+ if (!所选文本) return;
+ 所选文本 = 所选文本.replace(/(?<=^#*)# /mg,"## ");
+ this.替换所选文本 (所选文本);
}
}
- //笔记全文.replaceRange(新文本, {line:当前行号,ch:0}, {line:当前行号,ch:当前行文本.length});
- 编辑模式.setLine(当前行号,新文本);
- 编辑模式.setCursor({line:当前行号,ch:位置});
};
+ /*
+ 调高多个标题级别() {
+ this.获取编辑器信息 ();
+ if (!笔记全文) return;
+ if(/^#+ /.test(当前行文本)){
+ this.app.commands.executeCommandById('editor:unfold-all');
+ let _str = 当前行文本.replace(/^(#{2,6}) .*$/,"$1"); //获取前面的多个#号
+ //new obsidian.Notice("当前为标题行 "+_str);
+ // 如果 前缀# >= 2 个,替换掉首个#符号,即提升一级
+ let 新标题 = 当前行文本.replace(/^#/,"")
+ 笔记全文.replaceRange(新标题,{line:当前行号,ch:0},{line:当前行号,ch:当前行文本.length});
+ var 末行行号 = 编辑模式.lastLine();
+ //console.log(当前行号+" "+末行行号);
+ let 临时行文本
+ for (var i = 当前行号+1; i <= 末行行号; i++) {
+ 临时行文本 = 编辑模式.getLine(i);
+ if(/^#+ /.test(临时行文本)){
+ //console.log(i+" "+临时行文本);
+ // 临时行文本包含当前标题的 前缀# 符号组,代表下级标题
+ if(eval("/^"+_str+"(?=#)/").test(临时行文本)){
+ let 提升标题 = 临时行文本.replace(/^#/,"")
+ 笔记全文.replaceRange(提升标题,{line:i,ch:0},{line:i,ch:临时行文本.length});
+ }else{
+ break
+ }
+ }
+ }
+ }
+ };
+
+ 调低多个标题级别() {
+ this.获取编辑器信息 ();
+ if (!笔记全文) return;
+ if(/^#+ /.test(当前行文本)){
+ this.app.commands.executeCommandById('editor:unfold-all');
+ let _str = 当前行文本.replace(/^(#{1,5}) .*$/,"$1"); //获取前面的多个#号
+ //new obsidian.Notice("当前为标题行 "+_str);
+ // 如果 前缀# >= 2 个,替换掉首个#符号,即提升一级
+ let 新标题 = 当前行文本.replace(/^/,"#")
+ 笔记全文.replaceRange(新标题,{line:当前行号,ch:0},{line:当前行号,ch:当前行文本.length});
+ var 末行行号 = 编辑模式.lastLine();
+ //console.log(当前行号+" "+末行行号);
+ let 临时行文本
+ for (var i = 当前行号+1; i <= 末行行号; i++) {
+ 临时行文本 = 编辑模式.getLine(i);
+ if(/^#{1,5} /.test(临时行文本)){
+ //console.log(i+" "+临时行文本);
+ // 临时行文本包含当前标题的 前缀# 符号组,代表下级标题
+ if(eval("/^"+_str+"(?=#)/").test(临时行文本)){
+ let 提升标题 = 临时行文本.replace(/^/,"#")
+ 笔记全文.replaceRange(提升标题,{line:i,ch:0},{line:i,ch:临时行文本.length});
+ }else{
+ break
+ }
+ }
+ }
+ }
+ };
+
+ 调高所有标题级别() {
+ this.获取编辑器信息 ();
+ if (!笔记正文) return;
+ 笔记正文 = 笔记正文.replace(/(?<=^#+)# /mg," ");
+ this.替换笔记正文 (笔记正文);
+ };
+
+ 调低所有标题级别() {
+ this.获取编辑器信息 ();
+ if (!笔记正文) return;
+ 笔记正文 = 笔记正文.replace(/(?<=^#*)# /mg,"## ");
+ this.替换笔记正文 (笔记正文);
+ };
+ */
+
+ /*
+ 以下修改所选范围的标题行级别,代码失败,不能很好的获取到选区的首行和末行,处理后无法恢复选区范围
+ 调高所选标题级别() {
+ this.获取编辑器信息 ();
+ if (!所选文本) return;
+ 所选文本 = 所选文本.replace(/(?<=^#+)# /mg," ");
+ this.替换所选文本 (所选文本);
+ };
+
+ 调低所有标题级别() {
+ this.获取编辑器信息 ();
+ if (!所选文本) return;
+ 所选文本 = 所选文本.replace(/(?<=^#*)# /mg,"## ");
+ this.替换所选文本 (所选文本);
+ };
+ */
+
彩字格式刷(_color){
this.关闭格式刷();
isCTxt = true;
@@ -3212,7 +3454,7 @@ class MyPlugin extends obsidian.Plugin {
this.获取编辑器信息 ();
let reg = /^[\t\s]*\d+(?=\.\s[^\s])/mg;
if(当前行文本.match(reg)==null){
- console.log("当前不是列表");
+ //console.log("当前不是列表");
let reg1 =/^(.*\[\[)[^\[]+$/;
let reg2 = /^[^\]]+(\]\].*)$/;
@@ -3277,11 +3519,11 @@ class MyPlugin extends obsidian.Plugin {
所选文本 = 所选文本.replace(/\n/g,"↫");
if(所选文本.includes(">[!")){
//new obsidian.Notice("需要去除>符号");
- 所选文本 = 所选文本.replace(/↫?>\[![^↫]+(?=↫)/m,"");
+ 所选文本 = 所选文本.replace(/↫?\>\[![^↫]+(?=↫)/m,"");
所选文本 = 所选文本.replace(/↫\>/g,"\n");
}else{
//new obsidian.Notice("需要补充>符号");
- 所选文本 = 所选文本.replace(/^(.*)$/m,">[!note]↫$1");
+ 所选文本 = 所选文本.replace(/^(.+)$/m,">[!note]↫$1");
所选文本 = 所选文本.replace(/↫/g,"\n>");
}
this.替换所选文本 (所选文本);
@@ -3358,7 +3600,7 @@ class MyPlugin extends obsidian.Plugin {
//navigator.clipboard.writeText(所选文本);
//this.app.workspace.activeLeaf.replaceSelection(所选文本);
this.app.vault.adapter.rename(当前文件路径, 所选文本+".md"); //强行重命名,不能全局更新
- console.log(当前文件路径+"\n"+所选文本);
+ new obsidian.Notice(当前文件路径+"\n"+所选文本);
};
获取相对路径 () {
@@ -3424,7 +3666,7 @@ class MyPlugin extends obsidian.Plugin {
clipText = clipText.replace(/(?<=\|)(?=\|)/g," ");
new obsidian.Notice("剪贴板数据已转为MD语法表格!");
}else if(htmlReg.test(tmpText)){
- console.log('获取到富文本');
+ new obsidian.Notice('获取到富文本');
}else/* if(codeReg.test(tmpText))*/{
clipText = "```\n"+clipText+"\n```\n"
new obsidian.Notice("剪贴板数据已转为代码块格式!");
@@ -3786,37 +4028,6 @@ class MyPlugin extends obsidian.Plugin {
}
}
};
-
- 调高所有标题级别() {
- this.获取编辑器信息 ();
- if (!笔记正文) return;
- 笔记正文 = 笔记正文.replace(/(?<=^#+)# /mg," ");
- this.替换笔记正文 (笔记正文);
- };
-
- 调低所有标题级别() {
- this.获取编辑器信息 ();
- if (!笔记正文) return;
- 笔记正文 = 笔记正文.replace(/(?<=^#*)# /mg,"## ");
- this.替换笔记正文 (笔记正文);
- };
-
- /*
- 以下修改所选范围的标题行级别,代码失败,不能很好的获取到选区的首行和末行,处理后无法恢复选区范围
- 调高所选标题级别() {
- this.获取编辑器信息 ();
- if (!所选文本) return;
- 所选文本 = 所选文本.replace(/(?<=^#+)# /mg," ");
- this.替换所选文本 (所选文本);
- };
-
- 调低所有标题级别() {
- this.获取编辑器信息 ();
- if (!所选文本) return;
- 所选文本 = 所选文本.replace(/(?<=^#*)# /mg,"## ");
- this.替换所选文本 (所选文本);
- };
- */
//火冷添加
@@ -3968,7 +4179,7 @@ class MyPlugin extends obsidian.Plugin {
//new obsidian.Notice(笔记正文);
if(isIndent){
笔记正文 = 笔记正文.replace(/^[ ]+/mg,"");
- 笔记正文 = 笔记正文.replace(/^(?!(\s*\d+\.\s|\s*\-\.\s|[\n\s\>#]+|```|\-\-\-|\|[^\|]|\*\*\*))/mg," ");
+ 笔记正文 = 笔记正文.replace(/^(?!(\s*\d+\.\s|[a-zA-Z一-龟]+:|\s*\-\.?\s|[\n\s\>#]+|```|\-\-\-|\|[^\|]|\*\*\*))/mg," ");
isIndent = false;
}else{
笔记正文 = 笔记正文.replace(/^[ ]+/mg,"");
@@ -4358,47 +4569,51 @@ class editSettingsTab extends obsidian.PluginSettingTab {
cls: 'recent-files-donation',
});
var mdText = document.createDocumentFragment();
- mdText.appendText('转换标题语法「待设置」:指定或取消当前行文本为N级标题;');
+ mdText.appendText('转换标题语法「待设置」:指定或取消当前行文本为N级标题');
mdText.appendChild(document.createElement('br'));
- mdText.appendText('修改内部链接的显示名称「待设置」:从内部链接里路径中提取名称做为 [[|名称]] 显示。感谢火冷(85399416)增强相关功能;');
+ mdText.appendText('修改内部链接的显示名称「待设置」:从内部链接里路径中提取名称做为 [[|名称]] 显示,感谢火冷(85399416)增强相关功能');
mdText.appendChild(document.createElement('br'));
- mdText.appendText('调高标题级别「待设置」:将当前标题级别调高一级(最高为一级);');
+ mdText.appendText('调高标题级别「待设置」:将当前行标题(及子标题)或所选范围的标题级别调高。建议:空(1977878681)');
mdText.appendChild(document.createElement('br'));
- mdText.appendText('调低标题级别「待设置」:将当前标题级别调低一级(最低为六级);');
+ mdText.appendText('调低标题级别「待设置」:将当前行标题(及子标题)或所选范围的标题级别调低。建议:空(1977878681)');
mdText.appendChild(document.createElement('br'));
- mdText.appendText('调高所有标题级别「待设置」:将所有标题的级别调高一级(最高为一级)。建议:空 QQ:1977878681;');
+ //mdText.appendText('调高所有标题级别「待设置」:将所有标题的级别调高一级(最高为一级)。');
+ //mdText.appendChild(document.createElement('br'));
+ //mdText.appendText('调低所有标题级别「待设置」:将所有标题的级别调低一级(最低为六级)。建议:空 QQ:1977878681');
+ //mdText.appendChild(document.createElement('br'));
+ mdText.appendText('转换标签语法「Alt+Shift+3」:将选文转为或去除 #标签 效果');
mdText.appendChild(document.createElement('br'));
- mdText.appendText('调低所有标题级别「待设置」:将所有标题的级别调低一级(最低为六级)。建议:空 QQ:1977878681;');
+ mdText.appendText('标签转为链接「Ctrl+Alt+Shift+3」:将 [[笔记名]] 与 #笔记名 效果互转');
mdText.appendChild(document.createElement('br'));
- mdText.appendText('转换标签语法「Alt+Shift+3」:将选文转为或去除 #标签 效果;');
+ mdText.appendText('转换粗体语法「Alt+C」:将选文转为或去除 **粗体** 效果');
mdText.appendChild(document.createElement('br'));
- mdText.appendText('标签双链互转「Ctrl+Alt+Shift+3」:将 [[笔记名]] 与 #笔记名 效果互转;');
+ mdText.appendText('转换单行公式语法「Alt+Shift+P」:将选文转为或去除 $公式$ 效果');
mdText.appendChild(document.createElement('br'));
- mdText.appendText('转换粗体语法「Alt+C」:将选文转为或去除 **粗体** 效果;');
+ mdText.appendText('转换多行公式语法「Alt+Shift+L」:将选文转为或去除 $$公式$$ 效果');
mdText.appendChild(document.createElement('br'));
- mdText.appendText('转换斜体语法「Alt+X」:将选文转为或去除 *斜体* 效果;');
+ mdText.appendText('转换斜体语法「Alt+X」:将选文转为或去除 *斜体* 效果');
mdText.appendChild(document.createElement('br'));
- //mdText.appendText('转换行内代码「Alt+D」:将选文转为或去除 `行内代码` 效果;');
+ //mdText.appendText('转换行内代码「Alt+D」:将选文转为或去除 `行内代码` 效果');
//mdText.appendChild(document.createElement('br'));
- mdText.appendText('转换删除线「Alt+S」:将选文转为或去除 ~~删除线~~ 效果;');
+ mdText.appendText('转换删除线「Alt+S」:将选文转为或去除 ~~删除线~~ 效果');
mdText.appendChild(document.createElement('br'));
- mdText.appendText('转换下划线「Alt+H」:将选文转为或去除 下划线 效果;');
+ mdText.appendText('转换下划线「Alt+H」:将选文转为或去除 下划线 效果');
mdText.appendChild(document.createElement('br'));
- mdText.appendText('转换代码块「待设置」:将选文转为或去除 ```代码块``` 效果;');
+ mdText.appendText('转换代码块「待设置」:将选文转为或去除 ```代码块``` 效果');
mdText.appendChild(document.createElement('br'));
- mdText.appendText('转换上标语法「待设置」:将选文转为或去除 上标 效果;');
+ mdText.appendText('转换上标语法「待设置」:将选文转为或去除 上标 效果');
mdText.appendChild(document.createElement('br'));
- mdText.appendText('转换下标语法「待设置」:将选文转为或去除 下标 效果;');
+ mdText.appendText('转换下标语法「待设置」:将选文转为或去除 下标 效果');
mdText.appendChild(document.createElement('br'));
- mdText.appendText('[[]]转为[]()语法「待设置」:将划选文本中的[[内部链接]]语法转为[超](链接)语法;');
+ mdText.appendText('[[]]转为[]()语法「待设置」:将划选文本中的[[内部链接]]语法转为[超](链接)语法');
mdText.appendChild(document.createElement('br'));
- mdText.appendText('[]()转为[[]]语法「待设置」:将划选文本中的[超](链接)语法转为[[内部链接]]语法;');
+ mdText.appendText('[]()转为[[]]语法「待设置」:将划选文本中的[超](链接)语法转为[[内部链接]]语法');
mdText.appendChild(document.createElement('br'));
- mdText.appendText('去除超链接语法「待设置」:将划选文本中的[]()超链接样式恢复为普通文本,即只保留[]内的内容;');
+ mdText.appendText('去除超链接语法「待设置」:将划选文本中的[]()超链接样式恢复为普通文本,即只保留[]内的内容');
mdText.appendChild(document.createElement('br'));
- mdText.appendText('转换无语法文本「Ctrl+Alt+Z」:鼠标点击或划选文本的语法部分,可去除相应的MarkDown语法字符;');
+ mdText.appendText('转换无语法文本「Ctrl+Alt+Z」:鼠标点击或划选文本的语法部分,可去除相应的MarkDown语法字符');
mdText.appendChild(document.createElement('br'));
- mdText.appendText('获取无语法文本「Ctrl+Alt+C」:去除划选文本中的所有MarkDown语法字符,并写入剪贴板;');
+ mdText.appendText('获取无语法文本「Ctrl+Alt+C」:去除划选文本中的所有MarkDown语法字符,并写入剪贴板');
mdText.appendChild(document.createElement('br'));
div1.appendChild(mdText);
@@ -4574,33 +4789,33 @@ class editSettingsTab extends obsidian.PluginSettingTab {
cls: 'recent-files-donation',
});
var charText = document.createDocumentFragment();
- charText.appendText('修复外来文本「待设置」:对 PDF 或 OCR 识别的大段文本进行修复(断行、标点)。感谢 zhl111 建议;');
+ charText.appendText('修复外来文本「待设置」:对 PDF 或 OCR 识别的大段文本进行修复(断行、标点),感谢 zhl111 建议');
charText.appendChild(document.createElement('br'));
- charText.appendText('修复错误标点「待设置」:将笔记中的汉字中间的英文标点修复为中文标点。感谢叶茜彬(7424863)参与;');
+ charText.appendText('修复错误标点「待设置」:将笔记中的汉字中间的英文标点修复为中文标点,感谢叶茜彬(7424863)参与');
charText.appendChild(document.createElement('br'));
- charText.appendText('修复错误语法「待设置」:修复错误的MD语法,如1。列表、【】()链接、[[]]()回链等;');
+ charText.appendText('修复错误语法「待设置」:修复错误的MD语法,如1。列表、【】()链接、[[]]()回链等');
charText.appendChild(document.createElement('br'));
- charText.appendText('转换路径语法「待设置」:将 c:\\windows 与 [](file:///c:\/windows) 路径语法相互转换;');
+ charText.appendText('转换路径语法「待设置」:将 c:\\windows 与 [](file:///c:\/windows) 路径语法相互转换');
charText.appendChild(document.createElement('br'));
- charText.appendText('简体转为繁体「待设置」:将笔记中的简体汉字转换为繁体汉字;');
+ charText.appendText('简体转为繁体「待设置」:将笔记中的简体汉字转换为繁体汉字');
charText.appendChild(document.createElement('br'));
- charText.appendText('繁体转为简体「待设置」:将笔记中的繁体汉字转换为简体汉字;');
+ charText.appendText('繁体转为简体「待设置」:将笔记中的繁体汉字转换为简体汉字');
charText.appendChild(document.createElement('br'));
- charText.appendText('列表转为图示「待设置」:选中列表文本,转换为相应层级的MerMaid语法图示,支持修改列表后更新图示;');
+ charText.appendText('列表转为图示「待设置」:选中列表文本,转换为相应层级的MerMaid语法图示,支持修改列表后更新图示');
charText.appendChild(document.createElement('br'));
- charText.appendText('转换待办状态「待设置」:转换选文行首的待办状态,顺序为 -[ x-!?><+] 效果;');
+ charText.appendText('转换待办状态「待设置」:转换选文行首的待办状态,顺序为 -[ x-!?><+] 效果');
charText.appendChild(document.createElement('br'));
- charText.appendText('转换callout语法「待设置」:转换选文为callout语法样式,即行首补加>[!note]及>符号;');
+ charText.appendText('转换callout语法「待设置」:转换选文为callout语法样式,即行首补加>[!note]及>符号');
charText.appendChild(document.createElement('br'));
- charText.appendText('转换填空「待设置」:将选文转为或去除 {{c1::选文}} 效果;');
+ charText.appendText('转换填空「待设置」:将选文转为或去除 {{c1::选文}} 效果');
//charText.appendChild(document.createElement('br'));
- //charText.appendText('【选文】「待设置」:在选文两端添加或去除 【】符号;');
+ //charText.appendText('【选文】「待设置」:在选文两端添加或去除 【】符号');
//charText.appendChild(document.createElement('br'));
- //charText.appendText('(选文)「待设置」:在选文两端添加或去除 ()符号;');
+ //charText.appendText('(选文)「待设置」:在选文两端添加或去除 ()符号');
//charText.appendChild(document.createElement('br'));
- //charText.appendText('「选文」「待设置」:在选文两端添加或去除 「」符号;');
+ //charText.appendText('「选文」「待设置」:在选文两端添加或去除 「」符号');
//charText.appendChild(document.createElement('br'));
- //charText.appendText('《选文》「待设置」:在选文两端添加或去除 《》符号;');
+ //charText.appendText('《选文》「待设置」:在选文两端添加或去除 《》符号');
div3.appendChild(charText);
new obsidian.Setting(containerEl)
@@ -4610,29 +4825,29 @@ class editSettingsTab extends obsidian.PluginSettingTab {
cls: 'recent-files-donation',
});
var toolText = document.createDocumentFragment();
- toolText.appendText('计算所选结果「F9」:计算所选的四则运算式的结果,并写入剪贴板以备粘贴;');
+ toolText.appendText('计算所选结果「F9」:计算所选的四则运算式的结果,并写入剪贴板以备粘贴');
toolText.appendChild(document.createElement('br'));
- toolText.appendText('修复意外断行「待设置」:修复笔记中的意外断行(删除结尾不是句式标点的换行符);');
+ toolText.appendText('修复意外断行「待设置」:修复笔记中的意外断行(删除结尾不是句式标点的换行符)');
toolText.appendChild(document.createElement('br'));
- toolText.appendText('搜索当前文本「待设置」:通过搜索面板在当前文档中搜索划选内容;');
+ toolText.appendText('搜索当前文本「待设置」:通过搜索面板在当前文档中搜索划选内容');
toolText.appendChild(document.createElement('br'));
- toolText.appendText('选择当前整段「待设置」:选择光标所在的当前整段文本;');
+ toolText.appendText('选择当前整段「待设置」:选择光标所在的当前整段文本');
toolText.appendChild(document.createElement('br'));
- toolText.appendText('选择当前整句「待设置」:选择光标所在的当前整句(中文)文本;');
+ toolText.appendText('选择当前整句「待设置」:选择光标所在的当前整句(中文)文本');
toolText.appendChild(document.createElement('br'));
- toolText.appendText('选择当前语法「Alt+Shift+K」:选择光标所处的MrakDown语法文本(如加粗、高亮、删除、链接等效果);');
+ toolText.appendText('选择当前语法「Alt+Shift+K」:选择光标所处的MrakDown语法文本(如加粗、高亮、删除、链接等效果)');
toolText.appendChild(document.createElement('br'));
- toolText.appendText('获取标注文本「待设置」:获取标题、高亮、注释及前缀(#标注\批注\反思)等文本内容;');
+ toolText.appendText('获取标注文本「待设置」:获取标题、高亮、注释及前缀(#标注\批注\反思)等文本内容');
toolText.appendChild(document.createElement('br'));
- toolText.appendText('获取当前字符数「待设置」:计算页面中可见字符(汉字、字母、数字、标点)和不可见字符(空格等)个数;');
+ toolText.appendText('获取当前字符数「待设置」:计算页面中可见字符(汉字、字母、数字、标点)和不可见字符(空格等)个数');
toolText.appendChild(document.createElement('br'));
- toolText.appendText('自动设置标题「待设置」:将选文中的单行文本(末尾非标点或数字)转为标题;');
+ toolText.appendText('自动设置标题「待设置」:将选文中的单行文本(末尾非标点或数字)转为标题');
toolText.appendChild(document.createElement('br'));
- toolText.appendText('指定当前文件名「待设置」:划选文字后指定为当前笔记的文件名;');
+ toolText.appendText('指定当前文件名「待设置」:划选文字后指定为当前笔记的文件名');
toolText.appendChild(document.createElement('br'));
- toolText.appendText('嵌入当前网址页面「待设置」:在行末插入iframe代码来嵌入所选网址页面;');
+ toolText.appendText('嵌入当前网址页面「待设置」:在行末插入iframe代码来嵌入所选网址页面');
toolText.appendChild(document.createElement('br'));
- toolText.appendText('获取相对路径「待设置」:获取当前笔记在库目录内的相对路径;');
+ toolText.appendText('获取相对路径「待设置」:获取当前笔记在库目录内的相对路径');
toolText.appendChild(document.createElement('br'));
div4.appendChild(toolText);
@@ -4644,39 +4859,39 @@ class editSettingsTab extends obsidian.PluginSettingTab {
cls: 'recent-files-donation',
});
var lineText = document.createDocumentFragment();
- lineText.appendText('折叠同级标题「Ctrl+Shift+Alt+D」:判断当前行的标题层级,将正文中同级标题一次性折叠起来;');
+ lineText.appendText('折叠同级标题「Ctrl+Shift+Alt+D」:判断当前行的标题层级,将正文中同级标题一次性折叠起来');
lineText.appendChild(document.createElement('br'));
- lineText.appendText('折叠某级别标题「待设置」:将正文中某一层级的标题一次性折叠起来。感谢火冷(85399416)增强相关功能;');
+ lineText.appendText('折叠某级别标题「待设置」:将正文中某一层级的标题一次性折叠起来,感谢火冷(85399416)增强相关功能');
lineText.appendChild(document.createElement('br'));
- lineText.appendText('删除当前段落「Ctrl+D」:删除当前段落;若在[[]]内会先删除链接内容、在有序列表项内会自动调小后面序号;');
+ lineText.appendText('删除当前段落「Ctrl+D」:删除当前段落;若在[[]]内会先删除链接内容、在有序列表项内会自动调小后面序号');
lineText.appendChild(document.createElement('br'));
- lineText.appendText('插入有效空行「Ctrl+Shift+Alt+Enter」:插入带有全角空格的空白行,保证渲染时占据一行;');
+ lineText.appendText('插入有效空行「Ctrl+Shift+Alt+Enter」:插入带有全角空格的空白行,保证渲染时占据一行');
lineText.appendChild(document.createElement('br'));
- lineText.appendText('空格转为空行「待设置」:将两个汉字中间的空格或制表符转为空白行;');
+ lineText.appendText('空格转为空行「待设置」:将两个汉字中间的空格或制表符转为空白行');
lineText.appendChild(document.createElement('br'));
- lineText.appendText('批量插入空行「Ctrl+Shift+L」:在划选的文本行或全文中间批量插入空白行;');
+ lineText.appendText('批量插入空行「Ctrl+Shift+L」:在划选的文本行或全文中间批量插入空白行');
lineText.appendChild(document.createElement('br'));
- lineText.appendText('批量去除空行「Ctrl+Alt+L」:批量去除划选文本或全文中的空白行;');
+ lineText.appendText('批量去除空行「Ctrl+Alt+L」:批量去除划选文本或全文中的空白行');
lineText.appendChild(document.createElement('br'));
- lineText.appendText('上方插入空行「待设置」:在当前文本行的上行插入空白行;');
+ lineText.appendText('上方插入空行「待设置」:在当前文本行的上行插入空白行');
lineText.appendChild(document.createElement('br'));
- lineText.appendText('下方插入空行「待设置」:在当前文本行的下行插入空白行;');
+ lineText.appendText('下方插入空行「待设置」:在当前文本行的下行插入空白行');
lineText.appendChild(document.createElement('br'));
- lineText.appendText('全文首行缩进「待设置」:在全文的每个行首添加两个全角空格,产生缩进效果;');
+ lineText.appendText('全文缩进「待设置」:在全文的每个行首添加两个全角空格,产生缩进效果');
lineText.appendChild(document.createElement('br'));
- lineText.appendText('当前行缩进「待设置」:在当前行文本的行首添加两个全角空格,产生缩进效果;');
+ lineText.appendText('当前行缩进「待设置」:在当前行文本的行首添加两个全角空格,产生缩进效果');
lineText.appendChild(document.createElement('br'));
- lineText.appendText('行首添加空格「待设置」:在每行文本的行首添加两个空格;');
+ lineText.appendText('行首添加空格「待设置」:在每行文本的行首添加两个空格');
lineText.appendChild(document.createElement('br'));
- lineText.appendText('去除行首空格「待设置」:批量去除每行文本的行首空格字符;');
+ lineText.appendText('去除行首空格「待设置」:批量去除每行文本的行首空格字符');
lineText.appendChild(document.createElement('br'));
- lineText.appendText('末尾追加空格「待设置」:在每行文本的末尾追加两个空格;');
+ lineText.appendText('末尾追加空格「待设置」:在每行文本的末尾追加两个空格');
lineText.appendChild(document.createElement('br'));
- lineText.appendText('去除末尾空格「待设置」:批量去除每行文本的末尾空格字符;');
+ lineText.appendText('去除末尾空格「待设置」:批量去除每行文本的末尾空格字符');
lineText.appendChild(document.createElement('br'));
- lineText.appendText('添加间隔空格「待设置」:在正文的汉字与字母之间批量添加空格,如 china 中国;');
+ lineText.appendText('添加间隔空格「待设置」:在正文的汉字与字母之间批量添加空格,如 china 中国');
lineText.appendChild(document.createElement('br'));
- lineText.appendText('去除所有空格「待设置」:去除正文中所有的全、半角空格。');
+ lineText.appendText('去除所有空格「待设置」:去除正文中所有的全、半角空格');
lineText.appendChild(document.createElement('br'));
div5.appendChild(lineText);