Compare commits

...

44 Commits

Author SHA1 Message Date
oskar d57b5ad160 MacBook-Pro-de-Oscar.local 2026-6-13:19:24:58 2026-06-13 19:24:58 +02:00
oskar 095fc50a14 MacBook-Pro-de-Oscar.local 2026-6-13:18:24:58 2026-06-13 18:24:59 +02:00
oskar e23a1dead0 MacBook-Pro-de-Oscar.local 2026-6-13:17:14:51 2026-06-13 17:14:52 +02:00
oskar 883daa8600 MacBook-Pro-de-Oscar.local 2026-6-12:0:42:54 2026-06-12 00:42:54 +02:00
oskar ee01f694d1 MacBook-Pro-de-Oscar.local 2026-6-11:18:42:53 2026-06-11 18:42:54 +02:00
oskar 8024ed17b4 MacBook-Pro-de-Oscar.local 2026-6-11:0:35:19 2026-06-11 00:35:19 +02:00
oskar 5141bf6508 MacBook-Pro-de-Oscar.local 2026-6-10:19:27:55 2026-06-10 19:27:55 +02:00
oskar af7dc45db0 MacBook-Pro-de-Oscar.local 2026-6-10:17:27:54 2026-06-10 17:27:54 +02:00
oskar bc15c851be MacBook-Pro-de-Oscar.local 2026-6-10:15:27:54 2026-06-10 15:27:54 +02:00
oskar a05fadfc75 MacBook-Pro-de-Oscar.local 2026-6-10:3:16:12 2026-06-10 03:16:13 +02:00
oskar 779cfecf28 MacBook-Pro-de-Oscar.local 2026-6-9:1:48:5 2026-06-09 01:48:05 +02:00
oskar 2e3ad73faf MacBook-Pro-de-Oscar.local 2026-6-8:21:48:4 2026-06-08 21:48:04 +02:00
oskar 3040f5c7ea MacBook-Pro-de-Oscar.local 2026-6-8:1:51:52 2026-06-08 01:51:52 +02:00
oskar 2d1a43d447 MacBook-Pro-de-Oscar.local 2026-6-8:0:51:52 2026-06-08 00:51:52 +02:00
oskar 308b7ba5d3 MacBook-Pro-de-Oscar.local 2026-6-7:22:51:52 2026-06-07 22:51:52 +02:00
oskar c4ce611a63 MacBook-Pro-de-Oscar.local 2026-6-7:20:51:52 2026-06-07 20:51:52 +02:00
oskar 3079b4854c MacBookPro.lan 2026-6-6:23:23:47 2026-06-06 23:23:47 +02:00
oskar f575ec76ff MacBookPro.lan 2026-6-6:22:23:47 2026-06-06 22:23:47 +02:00
oskar ab29549a71 MacBookPro.lan 2026-6-6:21:23:47 2026-06-06 21:23:47 +02:00
oskar 15f4b20152 MacBookPro.lan 2026-6-6:20:23:47 2026-06-06 20:23:47 +02:00
oskar 3f088fc13d MacBookPro.lan 2026-6-6:19:23:47 2026-06-06 19:23:47 +02:00
oskar 6337e0e32e MacBookPro.lan 2026-6-5:18:2:16 2026-06-05 18:02:16 +02:00
oskar 17d6cff644 MacBookPro.lan 2026-6-5:1:5:57 2026-06-05 01:05:58 +02:00
oskar 3926ea5536 MacBookPro.lan 2026-6-4:18:34:1 2026-06-04 18:34:01 +02:00
oskar c36ea200bb MacBook-Pro-de-Oscar.local 2026-6-3:22:7:20 2026-06-03 22:07:20 +02:00
oskar aa3f49c476 MacBook-Pro-de-Oscar.local 2026-6-3:18:37:44 2026-06-03 18:37:45 +02:00
oskar 1f889a4459 MacBook-Pro-de-Oscar.local 2026-6-3:3:10:33 2026-06-03 03:10:34 +02:00
oskar 937bef48f5 MacBook-Pro-de-Oscar.local 2026-6-3:2:10:34 2026-06-03 02:10:34 +02:00
oskar c1dfba0c57 MacBookPro.lan 2026-5-31:20:45:58 2026-05-31 20:45:59 +02:00
oskar 2608232f5b MacBookPro.lan 2026-5-31:19:45:55 2026-05-31 19:45:55 +02:00
oskar f3252e2341 MacBookPro.lan 2026-5-31:18:45:55 2026-05-31 18:45:55 +02:00
oskar d7291bd730 MacBookPro.lan 2026-5-31:17:45:55 2026-05-31 17:45:55 +02:00
oskar 285872340f MacBookPro.lan 2026-5-31:16:45:55 2026-05-31 16:45:55 +02:00
oskar 12797b14e9 MacBookPro.lan 2026-5-31:15:45:55 2026-05-31 15:45:55 +02:00
oskar 3110cf066a MacBookPro.lan 2026-5-31:14:45:55 2026-05-31 14:45:55 +02:00
oskar 7e26ea4279 MacBookPro.lan 2026-5-30:15:15:45 2026-05-30 15:15:45 +02:00
oskar 9f0e6503ba MacBookPro.lan 2026-5-29:22:59:30 2026-05-29 22:59:31 +02:00
oskar 93e929944d MacBookPro.lan 2026-5-29:20:58:21 2026-05-29 20:58:22 +02:00
oskar 3cbc984e09 MacBookPro.lan 2026-5-29:2:4:41 2026-05-29 02:04:41 +02:00
oskar 0ac1f1f485 MacBookPro.lan 2026-5-29:0:4:41 2026-05-29 00:04:41 +02:00
oskar 438c9f3fda macbook-pro-de-oscar.home 2026-5-26:19:19:34 2026-05-26 19:19:34 +02:00
oskar 7c69be107e MacBook-Pro-de-Oscar.local 2026-5-26:14:22:40 2026-05-26 14:22:41 +02:00
oskar 9ffe120f6a macbook-pro-de-oscar.home 2026-5-26:1:15:26 2026-05-26 01:15:27 +02:00
oskar 4caab595f9 macbook-pro-de-oscar.home 2026-5-25:23:12:53 2026-05-25 23:12:53 +02:00
202 changed files with 23814 additions and 46554 deletions
Vendored
BIN
View File
Binary file not shown.
+2 -2
View File
@@ -26,7 +26,6 @@
"pdf-plus",
"breadcrumbs",
"obsidian-day-planner",
"obsidian-advanced-slides",
"calendar",
"obsidian-completr",
"dataview",
@@ -42,5 +41,6 @@
"obsidian-pandoc",
"break-page",
"obsidian-list-callouts",
"better-export-pdf"
"math-in-callout",
"zotlit"
]
+1 -1
View File
@@ -130,6 +130,6 @@
"repelStrength": 5.263671875,
"linkStrength": 1,
"linkDistance": 30,
"scale": 0.1345612381098431,
"scale": 0.31211118817502304,
"close": true
}
+10 -1
View File
@@ -1069,5 +1069,14 @@
],
"key": "L"
}
]
],
"breadcrumbs:rebuild-graph": [
{
"modifiers": [
"Mod"
],
"key": "R"
}
],
"wikilinks-to-mdlinks-obsidian:toggle-wiki-md-links": []
}
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "better-export-pdf",
"name": "Better Export PDF",
"version": "1.11.0",
"version": "2.0.2",
"minAppVersion": "0.15.0",
"description": "Export your notes to PDF, support export preview, add bookmarks outline and header/footer.",
"author": "l1xnan",
+110 -56
View File
@@ -2,66 +2,120 @@
display: flex;
flex-direction: row;
height: 75vh;
.print-preview {
flex: 1;
overflow-x: hidden;
overflow-y: scroll;
position: relative;
display: flex;
flex-direction: column;
align-content: flex-start;
}
.setting-wrapper {
width: 320px;
margin-left: 16px;
}
.setting-wrapper .setting-item[hidden] {
display: none;
}
}
#better-export-pdf .pdf-preview {
flex: auto;
position: relative;
display: flex;
flex-direction: column;
overflow-x: hidden;
overflow-y: scroll;
align-content: flex-start;
#better-export-pdf .print-preview {
.webview-wrapper {
position: relative;
height: 100%;
width: 100%;
}
.print-size {
position: absolute;
right: 8px;
top: 36px;
z-index: 99;
font-size: 0.6rem;
white-space: pre-wrap;
text-align: center;
}
& > div {
flex: 1;
height: 100%;
width: 100%;
}
& > div.progress {
flex: none;
height: auto;
width: 100%;
text-align: left;
}
.filename {
font-size: 0.75rem;
color: var(--color-base-60);
text-align: center;
padding-bottom: calc(var(--p-spacing) / 4);
}
.filename:not(:first-child) {
padding-top: calc(var(--p-spacing) / 2);
}
}
#better-export-pdf .pdf-preview .webview-wrapper {
position: relative;
height: 100%;
width: 100%;
#better-export-pdf {
.print-preview-container {
.print-preview-item {
border: 1px solid var(--background-modifier-border, #f2f2f2);
height: calc(var(--modal-scale) * 100%);
width: calc(var(--modal-scale) * 100%);
transform: scale(calc(1 / var(--modal-scale)), calc(1 / var(--modal-scale)));
transform-origin: top left;
}
}
.preview-wrapper {
position: relative;
height: 100%;
width: 100%;
}
.pdf-canvas-page {
width: 100%;
height: 100%;
border: 1px solid var(--background-modifier-border);
}
.pdf-canvas-page :global(canvas) {
width: 100% !important;
height: auto !important;
display: block;
}
.icon svg {
width: var(--icon-xs) !important;
height: var(--icon-xs) !important;
}
}
#better-export-pdf .pdf-preview .print-size {
position: absolute;
right: 8px;
top: 8px;
z-index: 99;
font-size: 0.6rem;
white-space: pre-wrap;
text-align: right;
visibility: hidden;
}
#better-export-pdf .pdf-preview > div {
flex: 1;
height: 100%;
width: 100%;
}
#better-export-pdf .pdf-preview > div.progress {
flex: none;
height: auto;
width: 100%;
text-align: left;
}
#better-export-pdf .pdf-preview .filename {
font-size: 0.75rem;
color: var(--color-base-60);
}
#better-export-pdf .pdf-preview .filename:not(:first-child) {
padding-top: calc(var(--p-spacing));
}
#better-export-pdf webview {
flex: 1;
height: 100%;
width: 100%;
}
#better-export-pdf .setting-wrapper {
width: 320px;
margin-left: 16px;
}
#better-export-pdf .setting-wrapper .setting-item[hidden] {
display: none;
/* 必须有此样式, 否则大纲锚点失效 */
@media print {
.print .markdown-preview-view {
height: auto !important;
}
.md-print-anchor,
.blockid {
white-space: pre !important;
border-left: none !important;
border-right: none !important;
border-top: none !important;
border-bottom: none !important;
display: inline-block !important;
position: absolute !important;
width: 1px !important;
height: 1px !important;
right: 0 !important;
outline: 0 !important;
background: 0 0 !important;
text-decoration: initial !important;
text-shadow: initial !important;
}
}
+69 -10
View File
@@ -27,6 +27,9 @@
},
{
"label": "part"
},
{
"label": "sibling"
}
],
"edge_field_groups": [
@@ -49,7 +52,8 @@
{
"label": "sames",
"fields": [
"same"
"same",
"sibling"
]
},
{
@@ -152,7 +156,8 @@
"default_neighbour_field": ""
},
"tag_note": {
"default_field": "up"
"default_field": "up",
"default_sibling_field": ""
},
"regex_note": {
"default_field": "up"
@@ -161,18 +166,52 @@
"enabled": false,
"delimiter": ".",
"default_field": "up",
"display_trimmed": false
"display_trimmed": false,
"default_sibling_field": ""
},
"johnny_decimal_note": {
"enabled": false,
"delimiter": ".",
"default_field": "up"
"default_field": "up",
"default_sibling_field": ""
},
"date_note": {
"enabled": false,
"date_format": "yyyy-MM-dd",
"default_field": "next",
"stretch_to_existing": false
"stretch_to_existing": false,
"week_start": "monday",
"week": {
"enabled": false,
"date_format": "kkkk-'W'WW",
"folder": "",
"next_field": "next",
"up_field": "up"
},
"month": {
"enabled": false,
"date_format": "yyyy-MM",
"folder": "",
"next_field": "next",
"up_field": "up"
},
"quarter": {
"enabled": false,
"date_format": "yyyy-'Q'q",
"folder": "",
"next_field": "next",
"up_field": "up"
},
"year": {
"enabled": false,
"date_format": "yyyy",
"folder": "",
"next_field": "next",
"up_field": "up"
}
},
"traverse_note": {
"default_field": "up"
}
},
"views": {
@@ -188,7 +227,7 @@
"default_depth": 999,
"no_path_message": "",
"show_controls": false,
"merge_fields": false,
"merge_fields": true,
"field_group_labels": [
"ups"
],
@@ -210,8 +249,15 @@
"prevs"
],
"next": [
"nexts"
"nexts",
"sames"
]
},
"period_rows": {
"week": false,
"month": false,
"quarter": false,
"year": false
}
}
},
@@ -240,7 +286,7 @@
"prevs"
],
"lock_view": false,
"lock_path": "désintégration audioactive.md",
"lock_path": "daily/2026-06-13.md",
"custom_sort_fields": false,
"custom_sort_field_labels": []
},
@@ -249,8 +295,9 @@
"show_attributes": [],
"merge_fields": false,
"lock_view": false,
"lock_path": "désintégration audioactive.md",
"lock_path": "anneau intègre.md",
"field_group_labels": [
"ups",
"downs"
],
"edge_sort_id": {
@@ -261,7 +308,12 @@
"ext": false,
"folder": false,
"alias": false
}
},
"default_depth": 5,
"find_root": true,
"find_root_field_group_labels": [
"ups"
]
}
},
"codeblocks": {
@@ -322,5 +374,12 @@
},
"debug": {
"level": "INFO"
},
"self_is_sibling": [
"same"
],
"_bc_migrations": {
"tree_ups_with_downs_default": true,
"tree_find_root_default": true
}
}
+641 -93
View File
File diff suppressed because one or more lines are too long
+11 -8
View File
@@ -1,12 +1,15 @@
{
"id": "breadcrumbs",
"name": "Breadcrumbs",
"version": "4.5.0",
"minAppVersion": "1.0.0",
"description": "Add structured hierarchies to your notes",
"author": "SkepticMystic",
"authorUrl": "https://github.com/SkepticMystic/breadcrumbs",
"fundingUrl": "https://github.com/SkepticMystic/breadcrumbs#donations",
"helpUrl": "https://publish.obsidian.md/breadcrumbs-docs",
"version": "4.14.2",
"minAppVersion": "1.12.3",
"description": "Add structured hierarchies to your notes.",
"author": "MichaelPPorter",
"authorUrl": "https://github.com/michaelpporter",
"fundingUrl": {
"GitHub Sponsors": "https://github.com/sponsors/michaelpporter",
"Buy Me a Coffee": "https://www.buymeacoffee.com/michaelpporter"
},
"helpUrl": "https://breadcrumbs-docs.michaelpporter.com",
"isDesktopOnly": false
}
}
+2 -1
View File
@@ -1 +1,2 @@
.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.\!collapse{visibility:collapse!important}.collapse{visibility:collapse}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.bottom-2{bottom:.5rem}.left-2{left:.5rem}.right-2{right:.5rem}.top-2{top:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mb-1{margin-bottom:.25rem}.mb-4{margin-bottom:1rem}.block{display:block}.flex{display:flex}.grid{display:grid}.contents{display:contents}.hidden{display:none}.aspect-square{aspect-ratio:1/1}.h-32{height:8rem}.w-10{width:2.5rem}.w-48{width:12rem}.w-60{width:15rem}.w-8{width:2rem}.w-full{width:100%}.shrink{flex-shrink:1}.grow{flex-grow:1}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.scroll-mt-40{scroll-margin-top:10rem}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-7{gap:1.75rem}.border{border-width:1px}.p-1{padding:.25rem}.p-2{padding:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pl-2{padding-left:.5rem}.pl-4{padding-left:1rem}.pr-10{padding-right:2.5rem}.pr-2{padding-right:.5rem}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-semibold{font-weight:600}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.BC-matrix-view hr:last-child{display:none}.BC-page-views.BC-page-views-sticky{z-index:50;position:sticky;top:calc(var(--file-margins)*-1);background-color:var(--background-primary)}.text-faint{color:var(--text-faint)}.text-warning{color:var(--text-warning)}.text-error{color:var(--text-error)}
/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.container{width:100%}.mx-auto{margin-inline:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.list-item{display:list-item}.table{display:table}.aspect-square{aspect-ratio:1}.w-full{width:100%}.flex-1{flex:1}.shrink{flex-shrink:1}.grow{flex-grow:1}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.border{border-style:var(--tw-border-style);border-width:1px}.text-left{text-align:left}.text-right{text-align:right}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.opacity-20{opacity:.2}.opacity-60{opacity:.6}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.BC-matrix-view hr:last-child{display:none}.BC-page-views{pointer-events:none}.BC-page-views *{pointer-events:auto}.BC-page-views.BC-page-views-sticky{z-index:50;top:calc(var(--file-margins) * -1);background-color:var(--background-primary);position:sticky}.cm-scroller.BC-cm-scroller-inline-page-views:not(.banner-view-active){flex-wrap:wrap;align-content:flex-start}.cm-scroller.BC-cm-scroller-inline-page-views>.BC-page-views{box-sizing:border-box;flex:none;align-self:stretch;width:100%;max-width:100%}.cm-scroller.BC-cm-scroller-inline-page-views.banner-view-active>.cm-gutters{display:none}:root .cm-scroller.BC-cm-scroller-inline-page-views.banner-view-active>.banner-wrapper{width:100%;max-width:100%;margin-left:0;margin-right:0}:root .cm-scroller.BC-cm-scroller-inline-page-views.banner-view-active>.cm-sizer{width:100%;max-width:100%;margin-left:auto;margin-right:auto}.cm-scroller.BC-cm-scroller-inline-page-views>.banner-image{pointer-events:none;position:absolute}.markdown-source-view>.BC-page-views{width:100%;max-width:100%}.markdown-source-view.is-readable-line-width>.BC-page-views,.markdown-source-view.is-readable-line-width .BC-page-views-inner{max-width:var(--file-line-width);margin-left:auto;margin-right:auto}.markdown-source-view:not(.is-readable-line-width)>.BC-page-views.BC-page-views-sticky{max-width:700px;margin-left:auto;margin-right:auto}.markdown-source-view.is-readable-line-width .cm-scroller.BC-cm-scroller-inline-page-views.banner-view-active>.cm-sizer{max-width:700px}.markdown-source-view.is-readable-line-width .cm-scroller.BC-cm-scroller-inline-page-views.banner-view-active>.BC-page-views{max-width:700px;margin-left:auto;margin-right:auto}.text-faint{color:var(--text-faint)}.text-warning{color:var(--text-warning)}.text-error{color:var(--text-error)}.BC-prev-next-view .BC-next-prev-item{padding:.25rem}.BC-prev-next-view .BC-next-prev-item .BC-field{padding-left:.25rem;padding-right:.25rem}.BC-search-input-container{padding:var(--size-2-2) var(--size-4-2)}.BC-search-input-container input[type=search]{width:100%}.BC-codeblock-markmap svg foreignObject div{color:var(--text-normal)}.bc-date-note-setup-warning{background:var(--background-modifier-error);color:var(--text-error);border-radius:4px;margin-bottom:12px;padding:8px 12px}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}
File diff suppressed because one or more lines are too long
+3 -4
View File
@@ -1,9 +1,9 @@
{
"id": "crumbs-obsidian",
"name": "Crumbs",
"version": "0.1.2",
"version": "0.3.1",
"minAppVersion": "1.0.0",
"description": "Breadcrumb navigation in Obsidian",
"description": "Navigate files using breadcrumbs.",
"author": "Tony Grosinger",
"authorUrl": "https://grosinger.net",
"fundingUrl": {
@@ -11,6 +11,5 @@
"Buy me a Coffee": "https://buymeacoffee.com/tgrosinger",
"Paypal": "https://paypal.me/tgrosinger"
},
"isDesktopOnly": true,
"donation": "https://buymeacoffee.com/tgrosinger"
"isDesktopOnly": true
}
File diff suppressed because one or more lines are too long
+3 -3
View File
@@ -1,10 +1,10 @@
{
"id": "darlal-switcher-plus",
"name": "Quick Switcher++",
"version": "6.1.1",
"minAppVersion": "1.12.0",
"version": "6.1.3",
"minAppVersion": "1.12.7",
"description": "Enhanced Quick Switcher, search open panels, and symbols.",
"author": "darlal",
"authorUrl": "https://github.com/darlal/obsidian-switcher-plus",
"authorUrl": "https://github.com/darlal",
"isDesktopOnly": false
}
+4
View File
@@ -31,6 +31,10 @@
color: var(--text-error);
}
.qsp-hidden {
display: none;
}
.qsp-tag {
background-color: var(--background-modifier-hover);
border-radius: var(--radius-s);
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -1,8 +1,8 @@
{
"id": "default-template",
"name": "Default Template",
"version": "1.2.4",
"minAppVersion": "0.15.0",
"version": "1.2.6",
"minAppVersion": "1.4.10",
"description": "Automatically apply templates to new notes with user-configurable template selection.",
"author": "raeperd",
"authorUrl": "https://github.com/raeperd",
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "editing-toolbar",
"name": "Editing Toolbar",
"version": "4.0.6",
"version": "4.0.8",
"minAppVersion": "0.14.0",
"description": "The Obsidian Editing Toolbar is modified from cmenu, which provides more powerful customization settings and has many built-in editing commands to be a MS Word-like toolbar editing experience.",
"author": "Cuman",
+315 -11
View File
@@ -548,6 +548,7 @@ button[class^=editingToolbarCommandsubItem]::after {
align-items: center;
gap: 4px;
padding-right: 0px !important;
isolation: isolate;
}
@@ -581,14 +582,19 @@ button[class^=editingToolbarCommandsubItem]::after {
content: none;
}
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai > svg {
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai > svg,
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai svg.svg-icon {
flex-shrink: 0;
position: relative;
z-index: 1;
}
.editing-toolbar-ai-button-main {
display: inline-flex;
align-items: center;
min-width: 0;
position: relative;
z-index: 1;
}
.editing-toolbar-ai-button-label {
@@ -616,6 +622,8 @@ button[class^=editingToolbarCommandsubItem]::after {
font-size: 9px;
line-height: 1;
flex-shrink: 0;
position: relative;
z-index: 1;
}
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai.editing-toolbar-ai-button-fixed .editing-toolbar-ai-button-arrow {
@@ -650,28 +658,75 @@ button[class^=editingToolbarCommandsubItem]::after {
.workspace-leaf-content:has(.cm-ai-loading, .cm-ai-result-panel[data-phase="streaming"])
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai,
body[data-editing-toolbar-ai-busy="true"]
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai,
body:has(.workspace-leaf.mod-active .cm-ai-loading, .workspace-leaf.mod-active .cm-ai-result-panel[data-phase="streaming"])
:is(#editingToolbarModalBar[data-toolbar-style="fixed"], #editingToolbarModalBar[data-toolbar-style="mobile"], #editingToolbarPopoverBar[data-toolbar-style="fixed"], #editingToolbarPopoverBar[data-toolbar-style="mobile"]) button.editingToolbarCommandsubItem-ai {
opacity: 0.72;
opacity: 0.82;
pointer-events: none;
overflow: hidden;
}
.workspace-leaf-content:has(.cm-ai-loading, .cm-ai-result-panel[data-phase="streaming"])
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai::before,
body[data-editing-toolbar-ai-busy="true"]
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai::before,
body:has(.workspace-leaf.mod-active .cm-ai-loading, .workspace-leaf.mod-active .cm-ai-result-panel[data-phase="streaming"])
:is(#editingToolbarModalBar[data-toolbar-style="fixed"], #editingToolbarModalBar[data-toolbar-style="mobile"], #editingToolbarPopoverBar[data-toolbar-style="fixed"], #editingToolbarPopoverBar[data-toolbar-style="mobile"]) button.editingToolbarCommandsubItem-ai::before {
opacity: 1;
background: linear-gradient(135deg, color-mix(in srgb, var(--interactive-accent) 14%, transparent), color-mix(in srgb, var(--background-secondary) 90%, transparent));
box-shadow: 0 0 0 1px color-mix(in srgb, var(--interactive-accent) 14%, transparent), 0 8px 22px color-mix(in srgb, var(--interactive-accent) 10%, transparent), inset 0 1px 0 color-mix(in srgb, white 16%, transparent);
animation: cm-ai-toolbar-glow 2.1s ease-in-out infinite;
}
.workspace-leaf-content:has(.cm-ai-loading, .cm-ai-result-panel[data-phase="streaming"])
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai::after,
body[data-editing-toolbar-ai-busy="true"]
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai::after,
body:has(.workspace-leaf.mod-active .cm-ai-loading, .workspace-leaf.mod-active .cm-ai-result-panel[data-phase="streaming"])
:is(#editingToolbarModalBar[data-toolbar-style="fixed"], #editingToolbarModalBar[data-toolbar-style="mobile"], #editingToolbarPopoverBar[data-toolbar-style="fixed"], #editingToolbarPopoverBar[data-toolbar-style="mobile"]) button.editingToolbarCommandsubItem-ai::after {
content: "";
position: absolute;
inset: -1px;
border-radius: 12px;
background: linear-gradient(115deg, transparent 0%, transparent 34%, color-mix(in srgb, white 68%, transparent) 48%, transparent 62%, transparent 100%);
transform: translateX(-150%) skewX(-24deg);
opacity: 0;
animation: cm-ai-sheen 2.8s ease-in-out infinite;
pointer-events: none;
mix-blend-mode: screen;
}
.workspace-leaf-content:has(.cm-ai-loading, .cm-ai-result-panel[data-phase="streaming"])
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai > svg,
.workspace-leaf-content:has(.cm-ai-loading, .cm-ai-result-panel[data-phase="streaming"])
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai svg.svg-icon,
body[data-editing-toolbar-ai-busy="true"]
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai > svg,
body[data-editing-toolbar-ai-busy="true"]
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai svg.svg-icon,
body:has(.workspace-leaf.mod-active .cm-ai-loading, .workspace-leaf.mod-active .cm-ai-result-panel[data-phase="streaming"])
:is(#editingToolbarModalBar[data-toolbar-style="fixed"], #editingToolbarModalBar[data-toolbar-style="mobile"], #editingToolbarPopoverBar[data-toolbar-style="fixed"], #editingToolbarPopoverBar[data-toolbar-style="mobile"]) button.editingToolbarCommandsubItem-ai > svg {
animation: cm-ai-spin 0.8s linear infinite;
:is(#editingToolbarModalBar[data-toolbar-style="fixed"], #editingToolbarModalBar[data-toolbar-style="mobile"], #editingToolbarPopoverBar[data-toolbar-style="fixed"], #editingToolbarPopoverBar[data-toolbar-style="mobile"]) button.editingToolbarCommandsubItem-ai > svg,
body:has(.workspace-leaf.mod-active .cm-ai-loading, .workspace-leaf.mod-active .cm-ai-result-panel[data-phase="streaming"])
:is(#editingToolbarModalBar[data-toolbar-style="fixed"], #editingToolbarModalBar[data-toolbar-style="mobile"], #editingToolbarPopoverBar[data-toolbar-style="fixed"], #editingToolbarPopoverBar[data-toolbar-style="mobile"]) button.editingToolbarCommandsubItem-ai svg.svg-icon {
animation: cm-ai-toolbar-breathe 1.8s ease-in-out infinite;
filter: drop-shadow(0 0 8px color-mix(in srgb, var(--interactive-accent) 26%, transparent));
}
.workspace-leaf-content:has(.cm-ai-loading, .cm-ai-result-panel[data-phase="streaming"])
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai .editing-toolbar-ai-button-label,
.workspace-leaf-content:has(.cm-ai-loading, .cm-ai-result-panel[data-phase="streaming"])
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai .editing-toolbar-ai-button-arrow,
body[data-editing-toolbar-ai-busy="true"]
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai .editing-toolbar-ai-button-label,
body[data-editing-toolbar-ai-busy="true"]
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai .editing-toolbar-ai-button-arrow,
body:has(.workspace-leaf.mod-active .cm-ai-loading, .workspace-leaf.mod-active .cm-ai-result-panel[data-phase="streaming"])
:is(#editingToolbarModalBar[data-toolbar-style="fixed"], #editingToolbarModalBar[data-toolbar-style="mobile"], #editingToolbarPopoverBar[data-toolbar-style="fixed"], #editingToolbarPopoverBar[data-toolbar-style="mobile"]) button.editingToolbarCommandsubItem-ai .editing-toolbar-ai-button-label,
body:has(.workspace-leaf.mod-active .cm-ai-loading, .workspace-leaf.mod-active .cm-ai-result-panel[data-phase="streaming"])
:is(#editingToolbarModalBar[data-toolbar-style="fixed"], #editingToolbarModalBar[data-toolbar-style="mobile"], #editingToolbarPopoverBar[data-toolbar-style="fixed"], #editingToolbarPopoverBar[data-toolbar-style="mobile"]) button.editingToolbarCommandsubItem-ai .editing-toolbar-ai-button-arrow {
color: var(--text-muted);
animation: cm-ai-label-breathe 1.8s ease-in-out infinite;
}
.menu.editing-toolbar-ai-dropdown-menu .menu-item.is-disabled {
@@ -1452,10 +1507,10 @@ body:has(.workspace-leaf.mod-active .cm-ai-loading, .workspace-leaf.mod-active .
/* Some themes animate all workspace SVG icons. Opt toolbar controls out so
inherited visibility changes hide the whole toolbar in one frame. */
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) :is(.editingToolbarCommandItem, button[class^=editingToolbarCommandsubItem]):not(.editingToolbar-Divider-Line),
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) :is(.editingToolbarCommandItem, button[class^=editingToolbarCommandsubItem]):not(.editingToolbar-Divider-Line) *:not(.subitem),
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) svg.svg-icon,
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) svg.svg-icon * {
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) :is(.editingToolbarCommandItem, button[class^=editingToolbarCommandsubItem]):not(.editingToolbar-Divider-Line):not(.editingToolbarCommandsubItem-ai),
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) :is(.editingToolbarCommandItem, button[class^=editingToolbarCommandsubItem]):not(.editingToolbar-Divider-Line):not(.editingToolbarCommandsubItem-ai) *:not(.subitem),
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) :is(.editingToolbarCommandItem, button[class^=editingToolbarCommandsubItem]):not(.editingToolbar-Divider-Line):not(.editingToolbarCommandsubItem-ai) svg.svg-icon,
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) :is(.editingToolbarCommandItem, button[class^=editingToolbarCommandsubItem]):not(.editingToolbar-Divider-Line):not(.editingToolbarCommandsubItem-ai) svg.svg-icon * {
animation: none;
transition: none !important;
-webkit-transition: none !important;
@@ -2076,10 +2131,174 @@ body.auto-hide-header .workspace-tab-header-container + .workspace-tab-container
width: min(560px, calc(100vw - 32px));
}
.editing-toolbar-ai-consent {
.modal.editing-toolbar-text-input-modal-wide {
width: min(600px, calc(100vw - 40px));
}
.editing-toolbar-text-input-suggestions {
margin-top: 8px;
}
.editing-toolbar-text-input-suggestions-label {
margin-bottom: 10px;
color: var(--text-muted);
font-size: 12px;
font-weight: 600;
}
.editing-toolbar-text-input-suggestions-chips {
display: flex;
flex-direction: column;
gap: 16px;
flex-wrap: wrap;
gap: 8px;
}
.editing-toolbar-text-input-suggestion-chip {
padding: 7px 12px;
border: 1px solid var(--background-modifier-border);
border-radius: 999px;
background: var(--background-secondary);
color: var(--text-normal);
font-size: 12px;
line-height: 1.2;
cursor: pointer;
transition: background-color 0.15s ease, border-color 0.15s ease, transform 0.15s ease;
}
.editing-toolbar-text-input-suggestion-chip:hover {
background: color-mix(in srgb, var(--interactive-accent) 12%, var(--background-secondary));
border-color: color-mix(in srgb, var(--interactive-accent) 30%, var(--background-modifier-border));
transform: translateY(-1px);
}
.editing-toolbar-text-input-field-full {
position: relative;
margin: 12px 0;
}
.editing-toolbar-text-input-field-full input,
.editing-toolbar-text-input-field-full textarea {
width: 100%;
display: block;
box-sizing: border-box;
}
.editing-toolbar-text-input-linked-note-host {
position: relative;
}
.editing-toolbar-text-input-context {
margin: 8px 0 12px;
padding: 10px;
border: 1px solid var(--background-modifier-border);
border-radius: 12px;
background: var(--background-secondary);
}
.editing-toolbar-text-input-context-label {
margin-bottom: 8px;
color: var(--text-muted);
font-size: 12px;
font-weight: 600;
}
.editing-toolbar-text-input-context-item {
display: flex;
align-items: center;
gap: 10px;
padding: 6px 8px;
border-radius: 8px;
}
.editing-toolbar-text-input-context-item + .editing-toolbar-text-input-context-item {
margin-top: 4px;
}
.editing-toolbar-text-input-context-item:hover {
background: var(--background-modifier-hover);
}
.editing-toolbar-text-input-context-item-label {
flex-shrink: 0;
color: var(--text-accent);
font-weight: 500;
}
.editing-toolbar-text-input-context-item-preview {
min-width: 0;
color: var(--text-muted);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.editing-toolbar-textarea-input {
width: 100%;
min-height: 80px;
resize: vertical;
}
.editing-toolbar-text-input-footer-hint {
margin-top: 8px;
color: var(--text-muted);
font-size: 12px;
line-height: 1.5;
}
.editing-toolbar-text-input-mention-dropdown {
position: absolute;
top: calc(100% + 6px);
left: 0;
right: 0;
z-index: 20;
display: none;
max-height: 220px;
overflow-y: auto;
border: 1px solid var(--background-modifier-border);
border-radius: 10px;
background: var(--background-primary);
box-shadow: 0 12px 32px rgba(0, 0, 0, 0.18);
}
.editing-toolbar-text-input-mention-item {
display: flex;
align-items: center;
gap: 8px;
padding: 8px 10px;
cursor: pointer;
}
.editing-toolbar-text-input-mention-item + .editing-toolbar-text-input-mention-item {
border-top: 1px solid var(--background-modifier-border-hover);
}
.editing-toolbar-text-input-mention-item:hover,
.editing-toolbar-text-input-mention-item.selected {
background: var(--background-modifier-hover);
}
.editing-toolbar-text-input-mention-icon {
flex-shrink: 0;
}
.editing-toolbar-text-input-mention-name {
color: var(--text-normal);
font-weight: 500;
}
.editing-toolbar-text-input-mention-path {
min-width: 0;
margin-left: auto;
color: var(--text-faint);
font-size: 11px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.editing-toolbar-ai-consent {
display: flex;
flex-direction: column;
gap: 16px;
font-size: var(--font-ui-small);
}
@@ -2279,6 +2498,91 @@ body.auto-hide-header .workspace-tab-header-container + .workspace-tab-container
}
}
@keyframes cm-ai-pill-breathe {
0%, 100% {
transform: translateY(0);
box-shadow: 0 6px 20px color-mix(in srgb, var(--interactive-accent) 8%, transparent), inset 0 1px 0 color-mix(in srgb, white 18%, transparent);
}
50% {
transform: translateY(-0.5px);
box-shadow: 0 10px 28px color-mix(in srgb, var(--interactive-accent) 14%, transparent), 0 0 0 1px color-mix(in srgb, var(--interactive-accent) 10%, transparent), inset 0 1px 0 color-mix(in srgb, white 26%, transparent);
}
}
@keyframes cm-ai-breathe {
0%, 100% {
transform: scale(0.88);
opacity: 0.72;
}
50% {
transform: scale(1.05);
opacity: 1;
}
}
@keyframes cm-ai-toolbar-breathe {
0%, 100% {
transform: scale(0.9);
opacity: 0.78;
}
50% {
transform: scale(1.06);
opacity: 1;
}
}
@keyframes cm-ai-toolbar-glow {
0%, 100% {
opacity: 0.62;
transform: scale(0.985);
}
50% {
opacity: 1;
transform: scale(1.015);
}
}
@keyframes cm-ai-glow {
0%, 100% {
transform: scale(0.9);
opacity: 0.24;
}
50% {
transform: scale(1.28);
opacity: 0.56;
}
}
@keyframes cm-ai-label-breathe {
0%, 100% {
opacity: 0.78;
}
50% {
opacity: 1;
}
}
@keyframes cm-ai-sheen {
0% {
transform: translateX(-140%) skewX(-24deg);
opacity: 0;
}
18% {
opacity: 0;
}
38% {
opacity: 0.62;
}
58% {
opacity: 0;
}
100% {
transform: translateX(180%) skewX(-24deg);
opacity: 0;
}
}
.cm-tooltip {
z-index: 1000;
}
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "excalibrain",
"name": "ExcaliBrain",
"version": "0.2.17",
"version": "0.2.18",
"minAppVersion": "1.1.6",
"description": "A clean, intuitive and editable graph view for Obsidian",
"author": "Zsolt Viczian",
+60 -23
View File
@@ -4683,11 +4683,36 @@ var DEFAULT_SETTINGS = {
gitLocation: "",
syncinterval: 0,
isSyncOnLoad: false,
checkStatusOnLoad: true
checkStatusOnLoad: true,
noticeLevel: "ALL",
showSyncSuccessNotice: true
};
var GHSyncPlugin = class extends import_obsidian.Plugin {
shouldShowNotice(severity) {
switch (this.settings.noticeLevel) {
case "ERROR":
return severity === "ERROR";
case "WARNING":
return severity === "WARNING" || severity === "ERROR";
case "ALL":
default:
return true;
}
}
showNotice(message, severity, timeout) {
if (!this.shouldShowNotice(severity)) {
return;
}
const text = message instanceof Error ? message.message : String(message);
new import_obsidian.Notice(text, timeout);
}
showSyncSuccessNotice() {
if (!this.settings.showSyncSuccessNotice) {
return;
}
this.showNotice("github sync successful", "INFO");
}
async SyncNotes() {
new import_obsidian.Notice("Syncing to GitHub remote");
const remote = this.settings.remoteURL.trim();
simpleGitOptions = {
//@ts-ignore
@@ -4700,9 +4725,12 @@ var GHSyncPlugin = class extends import_obsidian.Plugin {
let os = require("os");
let hostname = os.hostname();
let statusResult = await git.status().catch((e) => {
new import_obsidian.Notice("Vault is not a Git repo or git binary cannot be found.", 1e4);
this.showNotice("Vault is not a Git repo or git binary cannot be found.", "ERROR", 1e4);
return;
});
if (!statusResult) {
return;
}
let clean = statusResult.isClean();
let date = new Date();
let msg = hostname + " " + date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() + ":" + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds();
@@ -4710,47 +4738,44 @@ var GHSyncPlugin = class extends import_obsidian.Plugin {
try {
await git.add("./*").commit(msg);
} catch (e) {
new import_obsidian.Notice(e);
this.showNotice(e, "ERROR", 1e4);
return;
}
} else {
new import_obsidian.Notice("Working branch clean");
}
try {
await git.removeRemote("origin").catch((e) => {
new import_obsidian.Notice(e);
this.showNotice(e, "ERROR", 1e4);
});
await git.addRemote("origin", remote).catch((e) => {
new import_obsidian.Notice(e);
this.showNotice(e, "ERROR", 1e4);
});
} catch (e) {
new import_obsidian.Notice(e);
this.showNotice(e, "ERROR", 1e4);
return;
}
try {
await git.fetch();
} catch (e) {
new import_obsidian.Notice(e + "\nGitHub Sync: Invalid remote URL.", 1e4);
this.showNotice(String(e) + "\nGitHub Sync: Invalid remote URL.", "ERROR", 1e4);
return;
}
new import_obsidian.Notice("GitHub Sync: Successfully set remote origin url");
try {
await git.pull("origin", "main", { "--no-rebase": null }, (err, update) => {
if (update) {
new import_obsidian.Notice("GitHub Sync: Pulled " + update.summary.changes + " changes");
}
});
} catch (e) {
let conflictStatus = await git.status().catch((e2) => {
new import_obsidian.Notice(e2, 1e4);
let conflictStatus = await git.status().catch((error) => {
this.showNotice(error, "ERROR", 1e4);
return;
});
if (!conflictStatus) {
return;
}
let conflictMsg = "Merge conflicts in:";
for (let c of conflictStatus.conflicted) {
conflictMsg += "\n " + c;
}
conflictMsg += "\nResolve them or click sync button again to push with unresolved conflicts.";
new import_obsidian.Notice(conflictMsg);
this.showNotice(conflictMsg, "WARNING");
for (let c of conflictStatus.conflicted) {
this.app.workspace.openLinkText("", c, true);
}
@@ -4758,12 +4783,13 @@ var GHSyncPlugin = class extends import_obsidian.Plugin {
}
if (!clean) {
try {
git.push("origin", "main", ["-u"]);
new import_obsidian.Notice("GitHub Sync: Pushed on " + msg);
await git.push("origin", "main", ["-u"]);
} catch (e) {
new import_obsidian.Notice(e, 1e4);
this.showNotice(e, "ERROR", 1e4);
return;
}
}
this.showSyncSuccessNotice();
}
async CheckStatusOnStart() {
try {
@@ -4781,10 +4807,10 @@ var GHSyncPlugin = class extends import_obsidian.Plugin {
if (this.settings.isSyncOnLoad == true) {
this.SyncNotes();
} else {
new import_obsidian.Notice("GitHub Sync: " + statusUponOpening.behind + " commits behind remote.\nClick the GitHub ribbon icon to sync.");
this.showNotice("GitHub Sync: " + statusUponOpening.behind + " commits behind remote.\nClick the GitHub ribbon icon to sync.", "WARNING");
}
} else {
new import_obsidian.Notice("GitHub Sync: up to date with remote.");
this.showNotice("GitHub Sync: up to date with remote.", "INFO");
}
} catch (e) {
}
@@ -4810,7 +4836,7 @@ var GHSyncPlugin = class extends import_obsidian.Plugin {
(0, import_set_interval_async.setIntervalAsync)(async () => {
await this.SyncNotes();
}, interval * 60 * 1e3);
new import_obsidian.Notice("Auto sync enabled");
this.showNotice("Auto sync enabled", "INFO");
} catch (e) {
}
}
@@ -4823,6 +4849,9 @@ var GHSyncPlugin = class extends import_obsidian.Plugin {
}
async loadSettings() {
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
if (this.settings.noticeLevel === "WARNINGS") {
this.settings.noticeLevel = "WARNING";
}
}
async saveSettings() {
await this.saveData(this.settings);
@@ -4852,6 +4881,14 @@ var GHSyncSettingTab = class extends import_obsidian.PluginSettingTab {
this.plugin.settings.gitLocation = value;
await this.plugin.saveSettings();
}).inputEl.addClass("my-plugin-setting-text2"));
new import_obsidian.Setting(containerEl).setName("Notice level").setDesc("Choose which GitHub Sync notices are shown in the Obsidian UI.").addDropdown((dropdown) => dropdown.addOption("ALL", "ALL").addOption("WARNING", "WARNING").addOption("ERROR", "ERROR").setValue(this.plugin.settings.noticeLevel).onChange(async (value) => {
this.plugin.settings.noticeLevel = value;
await this.plugin.saveSettings();
}));
new import_obsidian.Setting(containerEl).setName("Hide Success Message").setDesc("Hide the single success notice shown when a sync finishes successfully.").addToggle((toggle) => toggle.setValue(!this.plugin.settings.showSyncSuccessNotice).onChange(async (value) => {
this.plugin.settings.showSyncSuccessNotice = !value;
await this.plugin.saveSettings();
}));
new import_obsidian.Setting(containerEl).setName("Check status on startup").setDesc("Check to see if you are behind remote when you start Obsidian.").addToggle((toggle) => toggle.setValue(this.plugin.settings.checkStatusOnLoad).onChange(async (value) => {
this.plugin.settings.checkStatusOnLoad = value;
await this.plugin.saveSettings();
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "github-sync",
"name": "GitHub Sync",
"version": "1.0.6",
"version": "1.0.7",
"minAppVersion": "0.15.0",
"description": "Sync vault to personal GitHub.",
"author": "Kevin Chin",
+123 -74
View File
@@ -7601,7 +7601,7 @@ var require_lib = __commonJS({
};
})
});
var getAPI3 = (app) => {
var getAPI2 = (app) => {
var _a2;
if (app)
return (_a2 = app.plugins.plugins.dataview) === null || _a2 === void 0 ? void 0 : _a2.api;
@@ -7614,7 +7614,7 @@ var require_lib = __commonJS({
exports.EXPRESSION = EXPRESSION;
exports.KEYWORDS = KEYWORDS;
exports.QUERY_LANGUAGE = QUERY_LANGUAGE;
exports.getAPI = getAPI3;
exports.getAPI = getAPI2;
exports.isPluginEnabled = isPluginEnabled;
exports.parseField = parseField;
}
@@ -26559,11 +26559,11 @@ __export(main_exports, {
default: () => GraphLinkTypesPlugin
});
module.exports = __toCommonJS(main_exports);
var import_obsidian = require("obsidian");
var import_obsidian_dataview2 = __toESM(require_lib());
var import_obsidian2 = require("obsidian");
var import_obsidian_dataview = __toESM(require_lib());
// src/linkManager.ts
var import_obsidian_dataview = __toESM(require_lib());
var import_obsidian = require("obsidian");
// node_modules/@pixi/constants/lib/index.mjs
var ENV = /* @__PURE__ */ ((ENV2) => (ENV2[ENV2.WEBGL_LEGACY = 0] = "WEBGL_LEGACY", ENV2[ENV2.WEBGL = 1] = "WEBGL", ENV2[ENV2.WEBGL2 = 2] = "WEBGL2", ENV2))(ENV || {});
@@ -49272,7 +49272,7 @@ var import_markdown_link_extractor = __toESM(require_markdown_link_extractor());
var LinkManager = class {
// Space between the text and the start of the line
constructor() {
this.api = (0, import_obsidian_dataview.getAPI)();
this.api = null;
this.categoricalColors = [
16007990,
// Red
@@ -49335,20 +49335,20 @@ var LinkManager = class {
let lastTheme = "";
let lastStyleSheetHref = "";
let debounceTimer;
const updateThemeColors = () => {
var _a2, _b;
this.currentTheme = document.body.classList.contains("theme-dark") ? "theme-dark" : "theme-light";
const currentStyleSheetHref = (_b = (_a2 = document.querySelector('link[rel="stylesheet"][href*="theme"]')) == null ? void 0 : _a2.getAttribute("href")) != null ? _b : "";
if (this.currentTheme && this.currentTheme !== lastTheme || currentStyleSheetHref !== lastStyleSheetHref) {
this.textColor = this.getComputedColorFromClass(this.currentTheme, "--text-normal");
lastTheme = this.currentTheme;
lastStyleSheetHref = currentStyleSheetHref;
}
};
updateThemeColors();
const themeObserver = new MutationObserver(() => {
clearTimeout(debounceTimer);
debounceTimer = window.setTimeout(() => {
var _a2;
this.currentTheme = document.body.classList.contains("theme-dark") ? "theme-dark" : "theme-light";
const currentStyleSheetHref = (_a2 = document.querySelector('link[rel="stylesheet"][href*="theme"]')) == null ? void 0 : _a2.getAttribute("href");
if (this.currentTheme && this.currentTheme !== lastTheme || currentStyleSheetHref !== lastStyleSheetHref) {
this.textColor = this.getComputedColorFromClass(this.currentTheme, "--text-normal");
lastTheme = this.currentTheme;
if (currentStyleSheetHref) {
lastStyleSheetHref = currentStyleSheetHref;
}
}
}, 100);
debounceTimer = window.setTimeout(updateThemeColors, 100);
});
themeObserver.observe(document.body, { attributes: true, attributeFilter: ["class"] });
themeObserver.observe(document.head, { childList: true, subtree: true, attributes: true, attributeFilter: ["href"] });
@@ -49376,7 +49376,6 @@ var LinkManager = class {
pixiText: this.initializeLinkText(renderer, obLink, pairStatus),
pixiGraphics: tagColors ? this.initializeLinkGraphics(renderer, obLink, tagLegend) : null
};
console.log(obLink);
this.linksMap.set(key, newLink);
if (obLink.source.id !== obLink.target.id && this.linksMap.has(reverseKey)) {
const reverseLink = this.linksMap.get(reverseKey);
@@ -49429,7 +49428,12 @@ var LinkManager = class {
}
}
removeLinks(renderer, currentLinks) {
const currentKeys = new Set(currentLinks.map((link) => this.generateKey(link.source.id, link.target.id)));
const currentKeys = new Set(
currentLinks.filter((link) => {
var _a2, _b;
return Boolean(((_a2 = link == null ? void 0 : link.source) == null ? void 0 : _a2.id) && ((_b = link == null ? void 0 : link.target) == null ? void 0 : _b.id));
}).map((link) => this.generateKey(link.source.id, link.target.id))
);
this.linksMap.forEach((_, key) => {
if (!currentKeys.has(key)) {
const link = this.linksMap.get(key);
@@ -49571,7 +49575,7 @@ var LinkManager = class {
color,
legendText: textL,
legendGraphics: graphicsL,
nUsing: 0
nUsing: 1
};
this.tagColors.set(linkString, newLegendGraphic);
} else {
@@ -49591,25 +49595,6 @@ var LinkManager = class {
this.updateLinkGraphics(renderer, link);
return graphics;
}
// Utility function to extract the file path from a Markdown link
extractPathFromMarkdownLink(markdownLink) {
const links = (0, import_markdown_link_extractor.default)(markdownLink).links;
return links.length > 0 ? links[0] : "";
}
// Method to determine the type of a value, now a class method
determineDataviewLinkType(value) {
if (typeof value === "object" && value !== null && "path" in value) {
return 0 /* WikiLink */;
} else if (typeof value === "string" && value.includes("](")) {
return 1 /* MarkdownLink */;
} else if (typeof value === "string") {
return 2 /* String */;
} else if (Array.isArray(value)) {
return 3 /* Array */;
} else {
return 4 /* Other */;
}
}
// Remove all text nodes from the graph
destroyMap(renderer) {
if (this.linksMap.size > 0) {
@@ -49627,34 +49612,73 @@ var LinkManager = class {
if (value === null || value === void 0 || value === "") {
continue;
}
const valueType = this.determineDataviewLinkType(value);
switch (valueType) {
case 0 /* WikiLink */:
if (value.path === targetId) {
return key;
}
break;
case 1 /* MarkdownLink */:
if (this.extractPathFromMarkdownLink(value) === targetId) {
return key;
}
break;
case 3 /* Array */:
for (const item of value) {
if (this.determineDataviewLinkType(item) === 0 /* WikiLink */ && item.path === targetId) {
return key;
}
if (this.determineDataviewLinkType(item) === 1 /* MarkdownLink */ && this.extractPathFromMarkdownLink(item) === targetId) {
return key;
}
}
break;
default:
return null;
if (this.valueContainsTarget(value, sourceId, targetId)) {
return key;
}
}
return null;
}
valueContainsTarget(value, sourceId, targetId) {
if (this.isArrayLike(value)) {
return Array.from(value).some((item) => this.valueContainsTarget(item, sourceId, targetId));
}
if (this.isDataviewLink(value)) {
const candidates = /* @__PURE__ */ new Set();
candidates.add(value.path);
if (typeof value.obsidianLink === "function") {
candidates.add(value.obsidianLink());
}
if (typeof value.fileName === "function") {
candidates.add(value.fileName());
}
return Array.from(candidates).some((candidate) => this.linkPathMatchesTarget(candidate, sourceId, targetId));
}
if (typeof value === "string") {
return this.extractLinkPathsFromString(value).some((candidate) => this.linkPathMatchesTarget(candidate, sourceId, targetId));
}
return false;
}
isArrayLike(value) {
var _a2, _b;
return Array.isArray(value) || Boolean((_b = (_a2 = this.api) == null ? void 0 : _a2.isArray) == null ? void 0 : _b.call(_a2, value));
}
isDataviewLink(value) {
return typeof value === "object" && value !== null && typeof value.path === "string";
}
extractLinkPathsFromString(value) {
const paths = /* @__PURE__ */ new Set();
try {
for (const path2 of (0, import_markdown_link_extractor.default)(value).links) {
paths.add(path2);
}
} catch (e2) {
}
const wikiLinkPattern = /!?\[\[([^\]]+)\]\]/g;
let wikiLinkMatch;
while ((wikiLinkMatch = wikiLinkPattern.exec(value)) !== null) {
paths.add(wikiLinkMatch[1]);
}
return Array.from(paths);
}
linkPathMatchesTarget(rawLinkPath, sourceId, targetId) {
var _a2, _b, _c;
const candidate = this.normalizeLinkPath(rawLinkPath);
const normalizedTarget = (0, import_obsidian.normalizePath)(targetId);
if (candidate === normalizedTarget || `${candidate}.md` === normalizedTarget) {
return true;
}
const resolvedFile = (_c = (_b = (_a2 = this.api) == null ? void 0 : _a2.app) == null ? void 0 : _b.metadataCache) == null ? void 0 : _c.getFirstLinkpathDest(candidate, sourceId);
return (resolvedFile == null ? void 0 : resolvedFile.path) === normalizedTarget;
}
normalizeLinkPath(rawLinkPath) {
const withoutAlias = rawLinkPath.split("|", 1)[0];
let decoded = withoutAlias;
try {
decoded = decodeURIComponent(withoutAlias);
} catch (e2) {
}
return (0, import_obsidian.normalizePath)((0, import_obsidian.getLinkpath)(decoded.trim()));
}
// Function to calculate the coordinates for placing the link text.
getLinkToTextCoordinates(linkX, linkY, panX, panY, scale) {
return { x: linkX * scale + panX, y: linkY * scale + panY };
@@ -49686,7 +49710,7 @@ var DEFAULT_SETTINGS = {
tagNames: true,
tagLegend: true
};
var GraphLinkTypesSettingTab = class extends import_obsidian.PluginSettingTab {
var GraphLinkTypesSettingTab = class extends import_obsidian2.PluginSettingTab {
constructor(app, plugin) {
super(app, plugin);
this.plugin = plugin;
@@ -49694,27 +49718,27 @@ var GraphLinkTypesSettingTab = class extends import_obsidian.PluginSettingTab {
display() {
const { containerEl } = this;
containerEl.empty();
new import_obsidian.Setting(containerEl).setName("Type Names").setDesc("Toggle to enable or disable link type names in the graph view.").addToggle((toggle) => toggle.setValue(this.plugin.settings.tagNames).onChange(async (value) => {
new import_obsidian2.Setting(containerEl).setName("Type Names").setDesc("Toggle to enable or disable link type names in the graph view.").addToggle((toggle) => toggle.setValue(this.plugin.settings.tagNames).onChange(async (value) => {
this.plugin.settings.tagNames = value;
await this.plugin.saveSettings();
this.plugin.startUpdateLoop();
}));
new import_obsidian.Setting(containerEl).setName("Type Colors").setDesc("Toggle to enable or disable link type colors in the graph view.").addToggle((toggle) => toggle.setValue(this.plugin.settings.tagColors).onChange(async (value) => {
new import_obsidian2.Setting(containerEl).setName("Type Colors").setDesc("Toggle to enable or disable link type colors in the graph view.").addToggle((toggle) => toggle.setValue(this.plugin.settings.tagColors).onChange(async (value) => {
this.plugin.settings.tagColors = value;
await this.plugin.saveSettings();
this.plugin.startUpdateLoop();
}));
new import_obsidian.Setting(containerEl).setName("Show Legend").setDesc("Toggle to show or hide the legend for link type colors in the graph view.").addToggle((toggle) => toggle.setValue(this.plugin.settings.tagLegend).onChange(async (value) => {
new import_obsidian2.Setting(containerEl).setName("Show Legend").setDesc("Toggle to show or hide the legend for link type colors in the graph view.").addToggle((toggle) => toggle.setValue(this.plugin.settings.tagLegend).onChange(async (value) => {
this.plugin.settings.tagLegend = value;
await this.plugin.saveSettings();
this.plugin.startUpdateLoop();
}));
}
};
var GraphLinkTypesPlugin = class extends import_obsidian.Plugin {
var GraphLinkTypesPlugin = class extends import_obsidian2.Plugin {
constructor() {
super(...arguments);
this.api = (0, import_obsidian_dataview2.getAPI)();
this.api = null;
this.currentRenderer = null;
this.animationFrameId = null;
this.linkManager = new LinkManager();
@@ -49722,13 +49746,27 @@ var GraphLinkTypesPlugin = class extends import_obsidian.Plugin {
}
// Lifecycle method called when the plugin is loaded
async onload() {
var _a2;
await this.loadSettings();
this.addSettingTab(new GraphLinkTypesSettingTab(this.app, this));
this.api = (0, import_obsidian_dataview.getAPI)();
if (!this.api) {
console.error("Dataview plugin is not available.");
new import_obsidian.Notice("Data plugin is not available.");
this.registerEvent(this.app.metadataCache.on("dataview:api-ready", () => {
var _a3, _b;
this.api = (0, import_obsidian_dataview.getAPI)();
this.linkManager.api = this.api;
this.indexReady = Boolean((_b = (_a3 = this.api) == null ? void 0 : _a3.index) == null ? void 0 : _b.initialized);
this.initEventHandlers();
void this.handleLayoutChange();
}));
return;
}
this.linkManager.api = this.api;
this.indexReady = Boolean((_a2 = this.api.index) == null ? void 0 : _a2.initialized);
this.initEventHandlers();
await this.handleLayoutChange();
}
initEventHandlers() {
this.registerEvent(this.app.workspace.on("layout-change", () => {
this.handleLayoutChange();
}));
@@ -49740,6 +49778,12 @@ var GraphLinkTypesPlugin = class extends import_obsidian.Plugin {
this.handleLayoutChange();
}
}));
this.registerEvent(this.app.metadataCache.on("resolved", () => {
this.handleLayoutChange();
}));
this.registerEvent(this.app.vault.on("rename", () => {
this.handleLayoutChange();
}));
}
async loadSettings() {
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
@@ -49786,9 +49830,12 @@ var GraphLinkTypesPlugin = class extends import_obsidian.Plugin {
waitForRenderer() {
return new Promise((resolve2) => {
const checkInterval = 500;
const maxWait = 1e4;
let elapsed = 0;
const intervalId = setInterval(() => {
const renderer = this.findRenderer();
if (renderer) {
elapsed += checkInterval;
if (renderer || elapsed >= maxWait) {
clearInterval(intervalId);
resolve2();
}
@@ -49799,7 +49846,7 @@ var GraphLinkTypesPlugin = class extends import_obsidian.Plugin {
startUpdateLoop(verbosity = 0) {
if (!this.currentRenderer) {
if (verbosity > 0) {
new import_obsidian.Notice("No valid graph renderer found.");
new import_obsidian2.Notice("No valid graph renderer found.");
}
return;
}
@@ -49819,6 +49866,8 @@ var GraphLinkTypesPlugin = class extends import_obsidian.Plugin {
this.linkManager.removeLinks(renderer, renderer.links);
}
renderer.links.forEach((link) => {
if (!link || !link.source || !link.target)
return;
if (updateMap) {
const key = this.linkManager.generateKey(link.source.id, link.target.id);
if (!this.linkManager.linksMap.has(key)) {
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "graph-link-types",
"name": "Graph Link Types",
"version": "0.3.3",
"version": "0.3.4",
"minAppVersion": "1.5.0",
"description": "Link types for graph view.",
"author": "natefrisch01",
+8
View File
@@ -0,0 +1,8 @@
/*
This CSS file will be included with your plugin, and
available in the app when your plugin is enabled.
If your plugin does not need CSS, delete this file.
*/
+22 -23
View File
@@ -94,18 +94,24 @@ function removeHeaderNumber(text, splitor) {
function isHeader(text) {
return /^#{1,6} .*/.test(text.trim());
}
function updateCodeBlockState(line, isCodeBlock) {
const trimmedLine = line.trimStart();
if (!trimmedLine.startsWith("```")) {
return isCodeBlock;
}
isCodeBlock = !isCodeBlock;
if (trimmedLine.slice(3).includes("```")) {
isCodeBlock = !isCodeBlock;
}
return isCodeBlock;
}
function analyzeHeaderLevels(content) {
const lines = content.split("\n");
const usedLevels = /* @__PURE__ */ new Set();
let isCodeBlock = false;
let headerCount = 0;
for (const line of lines) {
if (line.startsWith("```")) {
isCodeBlock = !isCodeBlock;
if (line.slice(3).includes("```")) {
isCodeBlock = !isCodeBlock;
}
}
isCodeBlock = updateCodeBlockState(line, isCodeBlock);
if (isCodeBlock)
continue;
if (isHeader(line)) {
@@ -1083,10 +1089,7 @@ var init_dialogs = __esm({
let isInCodeBlock = false;
for (let i = 0; i < lines.length; i++) {
const line = lines[i];
if (line.startsWith("```")) {
isInCodeBlock = !isInCodeBlock;
continue;
}
isInCodeBlock = updateCodeBlockState(line, isInCodeBlock);
if (isInCodeBlock) {
continue;
}
@@ -1296,12 +1299,7 @@ var init_dialogs = __esm({
let isInCodeBlock = false;
for (let i = 0; i < lines.length; i++) {
const line = lines[i];
if (line.startsWith("```")) {
isInCodeBlock = !isInCodeBlock;
if (line.slice(3).contains("```")) {
isInCodeBlock = !isInCodeBlock;
}
}
isInCodeBlock = updateCodeBlockState(line, isInCodeBlock);
if (isInCodeBlock) {
continue;
}
@@ -2513,6 +2511,9 @@ var EditorHandlers = class {
key: "Backspace",
run: (view) => {
const state = view.state;
if (!state.selection.main.empty) {
return false;
}
const pos = state.selection.main.to;
const currentLine = state.doc.lineAt(pos);
if (!isHeader(currentLine.text)) {
@@ -2576,6 +2577,9 @@ var EditorHandlers = class {
handlePressBackspace(view) {
let state = view.state;
let doc = state.doc;
if (!state.selection.main.empty) {
return false;
}
const pos = state.selection.main.to;
const changes = [];
if (!isHeader(doc.lineAt(pos).text)) {
@@ -3282,12 +3286,7 @@ var HeaderEnhancerPlugin = class extends import_obsidian6.Plugin {
for (let i = 0; i <= lineCount; i++) {
const line = editor.getLine(i);
docCharCount += line.length;
if (line.startsWith("```")) {
isCodeBlock = !isCodeBlock;
if (line.slice(3).contains("```")) {
isCodeBlock = !isCodeBlock;
}
}
isCodeBlock = updateCodeBlockState(line, isCodeBlock);
if (isCodeBlock) {
continue;
}
@@ -3296,7 +3295,7 @@ var HeaderEnhancerPlugin = class extends import_obsidian6.Plugin {
line,
config.startLevel
);
if (headerLevel <= 0) {
if (headerLevel <= 0 || realHeaderLevel > config.endLevel) {
continue;
}
insertNumber = getNextNumber(insertNumber, headerLevel);
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "header-enhancer",
"name": "Header Enhancer",
"version": "0.5.1",
"version": "0.5.2",
"minAppVersion": "0.14.0",
"description": "Level up your headers, customize your notes. Header Enhancer makes your notes header better and more useful.",
"author": "Hobee Liu",
File diff suppressed because one or more lines are too long
+8 -8
View File
@@ -1,10 +1,10 @@
{
"id": "languagetool",
"name": "LanguageTool",
"version": "1.4.3",
"minAppVersion": "1.8.7",
"description": "Unofficial integration of the LanguageTool spell and grammar checker.",
"author": "Lars Wrenger, Clemens Ertle",
"authorUrl": "https://github.com/wrenger",
"isDesktopOnly": false
"id": "languagetool",
"name": "LanguageTool",
"version": "1.4.4",
"minAppVersion": "1.12.3",
"description": "Unofficial integration of the LanguageTool spell and grammar checker.",
"author": "Lars Wrenger, Clemens Ertle",
"authorUrl": "https://github.com/wrenger",
"isDesktopOnly": false
}
+14 -5
View File
@@ -585,7 +585,7 @@ class JumpToLink extends obsidian.Plugin {
this.settings = (yield this.loadData()) || new Settings();
this.addSettingTab(new SettingTab(this.app, this));
const markViewPlugin = this.markViewPlugin = view.ViewPlugin.fromClass(MarkPlugin, {
decorations: v => v.decorations
decorations: (v) => v.decorations
});
this.registerEditorExtension([markViewPlugin]);
this.watchForSelectionChange();
@@ -616,7 +616,10 @@ class JumpToLink extends obsidian.Plugin {
if (this.isLinkHintActive) {
return;
}
const activeViewOfType = app.workspace.getActiveViewOfType(obsidian.MarkdownView);
const activeViewOfType = this.app.workspace.getActiveViewOfType(obsidian.MarkdownView);
if (!activeViewOfType) {
return;
}
const currentView = this.currentView = activeViewOfType.leaf.view;
const mode = this.mode = this.getMode(this.currentView);
this.contentElement = activeViewOfType.contentEl;
@@ -643,6 +646,7 @@ class JumpToLink extends obsidian.Plugin {
}
}
getMode(currentView) {
var _a;
// @ts-ignore
const isLegacy = this.app.vault.getConfig("legacyEditor");
if (currentView.getState().mode === 'preview') {
@@ -652,9 +656,14 @@ class JumpToLink extends obsidian.Plugin {
return VIEW_MODE.LEGACY;
}
else if (currentView.getState().mode === 'source') {
const isLivePreview = currentView.editor.cm.state.field(obsidian.editorLivePreviewField);
if (isLivePreview)
return VIEW_MODE.LIVE_PREVIEW;
try {
const isLivePreview = (_a = currentView.editor.cm.state) === null || _a === void 0 ? void 0 : _a.field(obsidian.editorLivePreviewField);
if (isLivePreview)
return VIEW_MODE.LIVE_PREVIEW;
}
catch (e) {
console.error(e);
}
return VIEW_MODE.SOURCE;
}
}
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "mrj-jump-to-link",
"name": "Jump to link",
"version": "0.5.15",
"version": "0.5.16",
"description": "This plugin allows open a link in current document or regex based navigation in editor mode using hotkey",
"isDesktopOnly": false,
"author": "MrJackphil",
+27 -8
View File
@@ -114,12 +114,14 @@
"showInfoButtons": true,
"homepage": {
"source": "none",
"file": null
"file": null,
"createMissingPeriodicNote": true
},
"dualPane": false,
"dualPaneOrientation": "horizontal",
"showTooltips": false,
"showTooltipPath": true,
"showTooltipWordCount": false,
"desktopBackground": "separate",
"desktopScale": 1,
"mobileScale": 1,
@@ -156,6 +158,7 @@
"showNoteCount": true,
"separateNoteCounts": true,
"showIndentGuides": true,
"navCountLeaderStyle": "none",
"rootLevelSpacing": 0,
"navIndent": 16,
"navItemHeight": 28,
@@ -187,7 +190,8 @@
"enableFolderNoteLinks": true,
"hideFolderNoteInList": true,
"pinCreatedFolderNote": false,
"openFolderNotesInNewTab": false,
"folderNoteOpenLocation": "current-tab",
"showNearestFolderNoteInSidebar": true,
"showTags": true,
"showTagIcons": true,
"showAllTagsFolder": true,
@@ -207,14 +211,18 @@
"defaultFolderSort": "modified-desc",
"propertySortKey": "",
"propertySortSecondary": "title",
"manualSortPropertyKey": "sort_index",
"manualSortGroupHeaderProperty": "group_header",
"manualSortNewNotePlacement": "below-selected-note",
"confirmBeforeManualSort": true,
"revealFileOnListChanges": true,
"listPaneTitle": "header",
"noteGrouping": "date",
"showSelectedNavigationPills": false,
"stickyGroupHeaders": true,
"showFolderGroupPaths": true,
"showCurrentFolderFilesAtBottom": false,
"filterPinnedByFolder": false,
"showPinnedGroupHeader": true,
"showPinnedIcon": true,
"optimizeNoteHeight": true,
"compactItemHeight": 28,
"compactItemHeightScaleText": true,
"showQuickActions": true,
@@ -223,6 +231,7 @@
"quickActionAddToShortcuts": true,
"quickActionPinNote": true,
"quickActionOpenInNewTab": false,
"hideDrawingPreviewImages": true,
"useFrontmatterMetadata": false,
"frontmatterIconField": "icon",
"frontmatterColorField": "color",
@@ -235,11 +244,13 @@
"showFileBackgroundUnfinishedTask": false,
"unfinishedTaskBackgroundColor": "#ef000050",
"showFileIcons": true,
"useFolderIconForFiles": false,
"showFilenameMatchIcons": false,
"fileNameIconMap": {},
"showCategoryIcons": false,
"fileTypeIconMap": {},
"fileNameRows": 1,
"useFolderColorForTitles": false,
"showFilePreview": true,
"skipHeadingsInPreview": true,
"skipCodeBlocksInPreview": true,
@@ -267,10 +278,15 @@
"showPropertiesOnSeparateRows": false,
"enablePropertyInternalLinks": true,
"enablePropertyExternalLinks": true,
"notePropertyType": "none",
"textCountDisplay": "none",
"textCountPlacement": "title",
"characterCountSpaces": "include",
"wordCountTargetProperty": "word-goal",
"showWordCountPercentage": false,
"showFileDate": true,
"alphabeticalDateMode": "modified",
"showParentFolder": true,
"showParentFolderFullPath": false,
"parentFolderClickRevealsFile": false,
"showParentFolderColor": false,
"showParentFolderIcon": false,
@@ -289,6 +305,7 @@
"calendarLeftPlacement": "navigation",
"calendarWeeksToShow": 6,
"calendarIntegrationMode": "daily-notes",
"calendarPeriodicNotesLocaleSource": "calendar",
"calendarCustomFilePattern": "YYYY/YYYYMMDD",
"calendarCustomWeekPattern": "gggg/[W]ww",
"calendarCustomMonthPattern": "YYYY/YYYYMM",
@@ -453,6 +470,7 @@
},
"customVaultName": "",
"pinnedNotes": {},
"collapsedPinnedContexts": {},
"fileIcons": {},
"fileColors": {},
"fileBackgroundColors": {},
@@ -503,7 +521,7 @@
"#404040",
"#404040"
],
"lastShownVersion": "2.5.8",
"lastShownVersion": "3.1.2",
"rootFolderOrder": [
"sources",
"attachments",
@@ -534,7 +552,8 @@
"micrometa",
"obsidan_export",
"pocket",
"-#s"
"-#s",
"o"
],
"rootPropertyOrder": []
}
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -1,8 +1,8 @@
{
"id": "notebook-navigator",
"name": "Notebook Navigator",
"version": "2.5.8",
"minAppVersion": "1.8.7",
"version": "3.1.2",
"minAppVersion": "1.11.0",
"description": "Replace the default file explorer with a clean two-pane interface featuring folder tree, tag browsing, file previews, keyboard navigation, drag-and-drop, pinned notes, and customizable display options.",
"author": "Johan Sanneblad",
"authorUrl": "https://github.com/johansan",
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "obsidian-day-planner",
"name": "Day Planner",
"version": "0.28.0",
"version": "0.30.0",
"minAppVersion": "0.16.0",
"description": "A day planner with clean UI and readable syntax",
"author": "James Lynch, continued by Ivan Lednev",
File diff suppressed because one or more lines are too long
+282 -12
View File
@@ -1,7 +1,9 @@
{
"showTabTitlebarButtons": true,
"copyLinkToElemenetAnchorTo100": false,
"copyFrameLinkByName": false,
"disableDoubleClickTextEditing": false,
"phoneFooterSafeAreaPadding": false,
"folder": "Excalidraw",
"cropFolder": "",
"annotateFolder": "",
@@ -29,8 +31,10 @@
"annotateSuffix": "",
"annotatePrefix": "annotated_",
"annotatePreserveSize": false,
"displaySVGInPreview": false,
"previewImageType": "SVG",
"renderingConcurrency": 3,
"imageCacheRetentionDays": 30,
"allowImageCache": true,
"allowImageCacheInScene": true,
"displayExportedImageIfAvailable": false,
@@ -82,7 +86,7 @@
"pageTransclusionCharLimit": 200,
"wordWrappingDefault": 0,
"removeTransclusionQuoteSigns": true,
"iframelyAllowed": true,
"oEmbedAllowed": false,
"pngExportScale": 1,
"exportWithTheme": true,
"exportWithBackground": false,
@@ -96,6 +100,7 @@
"embedType": "excalidraw",
"embedMarkdownCommentLinks": true,
"embedWikiLink": true,
"embedPlaceholderImage": true,
"syncExcalidraw": false,
"experimentalFileType": false,
"experimentalFileTag": "✏️",
@@ -107,6 +112,8 @@
"addDummyTextElement": false,
"zoteroCompatibility": false,
"fieldSuggester": true,
"enableOnloadScripts": false,
"enableCommandLinks": false,
"compatibilityMode": false,
"drawingOpenCount": 0,
"library": "deprecated",
@@ -149,8 +156,9 @@
}
}
},
"previousRelease": "2.22.0",
"previousRelease": "2.23.12",
"showReleaseNotes": true,
"excalidrawMasteryPromoCollapsed": false,
"compareManifestToPluginVersion": true,
"showNewVersionNotification": true,
"latexBoilerplate": "",
@@ -507,15 +515,277 @@
"canvasImmersiveEmbed": true,
"startupScriptPath": "",
"aiEnabled": true,
"openAIAPIToken": "",
"openAIDefaultTextModel": "gpt-3.5-turbo-1106",
"openAIDefaultTextModelMaxTokens": 4096,
"openAIDefaultVisionModel": "gpt-4o",
"openAIDefaultImageGenerationModel": "dall-e-3",
"openAIURL": "https://api.openai.com/v1/chat/completions",
"openAIImageGenerationURL": "https://api.openai.com/v1/images/generations",
"openAIImageEditsURL": "https://api.openai.com/v1/images/edits",
"openAIImageVariationURL": "https://api.openai.com/v1/images/variations",
"aiVerboseLogging": false,
"aiProviderProfiles": {
"OpenAI": {
"provider": "openai",
"apiKey": "",
"baseURL": "https://api.openai.com/v1"
},
"Anthropic": {
"provider": "anthropic",
"apiKey": "",
"baseURL": "https://api.anthropic.com/v1"
},
"Google Gemini": {
"provider": "google",
"apiKey": "",
"baseURL": "https://generativelanguage.googleapis.com/v1beta"
},
"xAI": {
"provider": "xai",
"apiKey": "",
"baseURL": "https://api.x.ai/v1"
},
"OpenAI-compatible": {
"provider": "openai-compatible",
"apiKey": "",
"baseURL": "https://api.openai.com/v1"
}
},
"aiTextModelConfigs": {
"gpt-5-mini": {
"providerId": "OpenAI",
"model": "gpt-5-mini",
"endpoint": "",
"multimodalSupport": true
},
"claude-sonnet-4-5": {
"providerId": "Anthropic",
"model": "claude-sonnet-4-5",
"endpoint": "",
"multimodalSupport": true
},
"gemini-2.5-pro": {
"providerId": "Google Gemini",
"model": "gemini-2.5-pro",
"endpoint": "",
"multimodalSupport": true
},
"grok-4-fast": {
"providerId": "xAI",
"model": "grok-4-fast",
"endpoint": "",
"multimodalSupport": true
},
"gpt-3.5-turbo-1106": {
"providerId": "OpenAI",
"model": "gpt-3.5-turbo-1106",
"endpoint": "",
"multimodalSupport": true
}
},
"aiImageModelConfigs": {
"dall-e-2": {
"providerId": "OpenAI",
"model": "dall-e-2",
"supportedSizes": [
"256x256",
"512x512",
"1024x1024"
],
"supportsPromptImageTransforms": true,
"supportsMaskImageEdits": true
},
"dall-e-3": {
"providerId": "OpenAI",
"model": "dall-e-3",
"supportedSizes": [
"1024x1024",
"1792x1024",
"1024x1792"
],
"supportsPromptImageTransforms": false,
"supportsMaskImageEdits": false
},
"gpt-image-1": {
"providerId": "OpenAI",
"model": "gpt-image-1",
"supportedSizes": [
"1024x1024",
"1536x1024",
"1024x1536"
],
"supportsPromptImageTransforms": true,
"supportsMaskImageEdits": true
},
"gpt-image-1-mini": {
"providerId": "OpenAI",
"model": "gpt-image-1-mini",
"supportedSizes": [
"1024x1024",
"1536x1024",
"1024x1536"
],
"supportsPromptImageTransforms": true,
"supportsMaskImageEdits": true
},
"gpt-image-1.5": {
"providerId": "OpenAI",
"model": "gpt-image-1.5",
"supportedSizes": [
"1024x1024",
"1536x1024",
"1024x1536"
],
"supportsPromptImageTransforms": true,
"supportsMaskImageEdits": true
},
"gpt-image-2": {
"providerId": "OpenAI",
"model": "gpt-image-2",
"supportedSizes": [
"1024x1024",
"1536x1024",
"1024x1536",
"2048x2048"
],
"supportsPromptImageTransforms": true,
"supportsMaskImageEdits": true
},
"gemini-2.5-flash-image": {
"providerId": "Google Gemini",
"model": "gemini-2.5-flash-image",
"supportedSizes": [
"1024x1024",
"848x1264",
"1264x848",
"896x1200",
"1200x896",
"928x1152",
"1152x928",
"768x1376",
"1376x768",
"1584x672"
],
"supportsPromptImageTransforms": true,
"supportsMaskImageEdits": false
},
"gemini-3.1-flash-image-preview": {
"providerId": "Google Gemini",
"model": "gemini-3.1-flash-image-preview",
"supportedSizes": [
"512x512",
"1024x1024",
"2048x2048",
"4096x4096",
"424x632",
"848x1264",
"1696x2528",
"3392x5056",
"632x424",
"1264x848",
"2528x1696",
"5056x3392",
"448x600",
"896x1200",
"1792x2400",
"3584x4800",
"600x448",
"1200x896",
"2400x1792",
"4800x3584",
"464x576",
"928x1152",
"1856x2304",
"3712x4608",
"576x464",
"1152x928",
"2304x1856",
"4608x3712",
"384x688",
"768x1376",
"1536x2752",
"3072x5504",
"688x384",
"1376x768",
"2752x1536",
"5504x3072",
"792x168",
"1584x672",
"3168x1344",
"6336x2688",
"256x1024",
"512x2048",
"1024x4096",
"2048x8192",
"192x1536",
"384x3072",
"768x6144",
"1536x12288",
"1024x256",
"2048x512",
"4096x1024",
"8192x2048",
"1536x192",
"3072x384",
"6144x768",
"12288x1536"
],
"supportsPromptImageTransforms": true,
"supportsMaskImageEdits": false
},
"gemini-3-pro-image-preview": {
"providerId": "Google Gemini",
"model": "gemini-3-pro-image-preview",
"supportedSizes": [
"1024x1024",
"2048x2048",
"4096x4096",
"848x1264",
"1696x2528",
"3392x5056",
"1264x848",
"2528x1696",
"5056x3392",
"896x1200",
"1792x2400",
"3584x4800",
"1200x896",
"2400x1792",
"4800x3584",
"928x1152",
"1856x2304",
"3712x4608",
"1152x928",
"2304x1856",
"4608x3712",
"768x1376",
"1536x2752",
"3072x5504",
"1376x768",
"2752x1536",
"5504x3072",
"1584x672",
"3168x1344",
"6336x2688"
],
"supportsPromptImageTransforms": true,
"supportsMaskImageEdits": false
},
"grok-imagine-image-quality": {
"providerId": "xAI",
"model": "grok-imagine-image-quality",
"supportedSizes": [
"1024x1024"
],
"supportsPromptImageTransforms": true,
"supportsMaskImageEdits": false
},
"grok-imagine-image-pro": {
"providerId": "xAI",
"model": "grok-imagine-image-pro",
"supportedSizes": [
"1024x1024"
],
"supportsPromptImageTransforms": true,
"supportsMaskImageEdits": false
}
},
"aiDefaultTextModel": "gpt-3.5-turbo-1106",
"aiDefaultImageGenerationModel": "dall-e-3",
"aiDefaultMaxOutgoingTokens": 0,
"aiDefaultMaxResponseTokens": 4096,
"modifierKeyConfig": {
"Mac": {
"LocalFileDragAction": {
@@ -805,7 +1075,6 @@
"longPressDesktop": 500,
"longPressMobile": 500,
"doubleClickLinkOpenViewMode": true,
"isDebugMode": false,
"rank": "Silver",
"modifierKeyOverrides": [
{
@@ -838,6 +1107,7 @@
"margin": "normal"
},
"disableContextMenu": false,
"isDebugMode": false,
"defaultTrayMode": true,
"compactModeOnTablets": true
}
File diff suppressed because one or more lines are too long
+4 -4
View File
@@ -1,12 +1,12 @@
{
"id": "obsidian-excalidraw-plugin",
"name": "Excalidraw",
"version": "2.22.0",
"minAppVersion": "1.5.7",
"description": "Sketch Your Mind. An Obsidian plugin to edit and view Excalidraw drawings. Enter the world of 4D Visual PKM.",
"version": "2.23.12",
"minAppVersion": "1.8.7",
"description": "Sketch Your Mind. Edit and view Excalidraw drawings. Enter the world of 4D Visual PKM.",
"author": "Zsolt Viczian",
"authorUrl": "https://excalidraw-obsidian.online",
"fundingUrl": "https://ko-fi.com/zsolt",
"helpUrl": "https://github.com/zsviczian/obsidian-excalidraw-plugin#readme",
"isDesktopOnly": false
}
}
File diff suppressed because one or more lines are too long
+258 -295
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -6,5 +6,5 @@
"description": "Integrate Git version control with automatic backup and other advanced features.",
"isDesktopOnly": false,
"fundingUrl": "https://ko-fi.com/vinzent",
"version": "2.38.2"
"version": "2.38.3"
}
+20 -25
View File
@@ -8,15 +8,6 @@
}
}
.git-signs-gutter {
.cm-gutterElement {
/* Needed to align the sign properly for different line heigts. Such as
* when having a heading or list item.
*/
padding-top: 0 !important;
}
}
.workspace-leaf-content[data-type="git-view"] .button-border {
border: 2px solid var(--interactive-accent);
border-radius: var(--radius-s);
@@ -108,7 +99,7 @@
display: flex;
}
.git-tools .buttons > * {
padding: 0 0;
padding: 0;
height: auto;
}
@@ -175,7 +166,7 @@ which itself is adapted from the diff2html library with the following original l
--git-change-bg: #ffd55840;
--git-selected: #3572b0;
--git-delete: #c33;
--git-delete: #cc3333;
--git-insert: #399839;
--git-change: #d0b44c;
--git-move: #3572b0;
@@ -538,13 +529,24 @@ which itself is adapted from the diff2html library with the following original l
.d2h-diff-tbody {
position: relative;
}
/* My additions */
.cm-merge-revert {
width: 4em;
}
/* Ensure that merge revert markers are positioned correctly */
.cm-merge-revert > * {
position: absolute;
background-color: var(--background-secondary);
display: flex;
}
}
/* ====================== Line Authoring Information ====================== */
.cm-gutterElement.obs-git-blame-gutter {
/* Add background color to spacing inbetween and around the gutter for better aesthetics */
border-width: 0px 2px 0.2px 2px;
border-width: 0px 2px 0.2px;
border-style: solid;
border-color: var(--background-secondary);
background-color: var(--background-secondary);
@@ -557,7 +559,7 @@ which itself is adapted from the diff2html library with the following original l
font-family: monospace;
height: 100%; /* ensure, that age-based background color occupies entire parent */
text-align: right;
padding: 0px 6px 0px 6px;
padding: 0px 6px;
white-space: pre; /* Keep spaces and do not collapse them. */
}
@@ -602,6 +604,11 @@ which itself is adapted from the diff2html library with the following original l
.git-signs-gutter {
.cm-gutterElement {
display: grid;
/* Needed to align the sign properly for different line heigts. Such as
* when having a heading or list item.
*/
padding-top: 0 !important;
}
}
@@ -669,18 +676,6 @@ div:hover > .git-gutter-marker.git-changedelete {
opacity: 0.5;
}
.git-diff {
.cm-merge-revert {
width: 4em;
}
/* Ensure that merge revert markers are positioned correctly */
.cm-merge-revert > * {
position: absolute;
background-color: var(--background-secondary);
display: flex;
}
}
/* Prevent shifting of the editor when git signs gutter is the only gutter present */
.cm-gutters.cm-gutters-before:has(> .git-signs-gutter:only-child) {
margin-inline-end: 0;
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -1,9 +1,9 @@
{
"id": "obsidian-hider",
"name": "Hider",
"version": "1.6.1",
"version": "1.6.2",
"minAppVersion": "1.11.1",
"description": "Hide UI elements such as tooltips, status, titlebar and more",
"description": "Hide UI elements such as tooltips, status, titlebar and more.",
"author": "@kepano",
"authorUrl": "https://www.twitter.com/kepano",
"fundingUrl": "https://www.buymeacoffee.com/kepano",
+1 -1
View File
@@ -3,7 +3,7 @@
"snippetVariables": "{\n\t\"${GREEK}\": \"alpha|beta|gamma|Gamma|delta|Delta|epsilon|varepsilon|zeta|eta|theta|vartheta|Theta|iota|kappa|lambda|Lambda|mu|nu|xi|omicron|pi|rho|varrho|sigma|Sigma|tau|upsilon|Upsilon|phi|varphi|Phi|chi|psi|omega|Omega\",\n\t\"${SYMBOL}\": \"parallel|perp|partial|nabla|hbar|ell|infty|oplus|ominus|otimes|oslash|square|star|dagger|vee|wedge|subseteq|subset|supseteq|supset|emptyset|exists|nexists|forall|implies|impliedby|iff|setminus|neg|lor|land|bigcup|bigcap|cdot|times|simeq|approx\",\n\t\"${MORE_SYMBOLS}\": \"leq|geq|neq|gg|ll|equiv|sim|propto|rightarrow|leftarrow|Rightarrow|Leftarrow|leftrightarrow|to|mapsto|cap|cup|in|sum|prod|exp|ln|log|det|dots|vdots|ddots|pm|mp|int|iint|iiint|oint\"\n}\n",
"snippetsEnabled": true,
"snippetsTrigger": "Tab",
"snippetNextTabstopTrigger": "Shift-RightArrow",
"snippetNextTabstopTrigger": "Tab",
"snippetPreviousTabstopTrigger": "Shift-Tab",
"suppressSnippetTriggerOnIME": true,
"suppressIMEWarning": false,
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "obsidian-markmind",
"name": "Markmind",
"version": "3.4.8",
"version": "3.5.3",
"minAppVersion": "0.9.12",
"description": "This is a mindmap , outline tool for obsidian.",
"author": "Mark",
+21 -2
View File
@@ -669,7 +669,7 @@ span.mm-sline .line {
outline: 0
}
.theme-dark textarea {
.theme-dark .mm-note textarea {
color: #666
}
@@ -3774,6 +3774,16 @@ span.mm-sline .line {
align-items: center;
}
.mm-ppt-page .mm-ppt-resize {
position: absolute;
right: 6px;
display: block;
bottom: 0px;
background: transparent;
cursor: pointer;
}
.mm-node-embed {
display: none !important;
}
@@ -3784,7 +3794,7 @@ span.mm-sline .line {
z-index: 1000;
height: 32px;
left: 10px;
bottom: 40px;
bottom: 100px;
right: 10px;
}
@@ -3823,4 +3833,13 @@ span.mm-sline .line {
.mm-node-size .mm-node-icon {
display: flex;
}
.mm-assist-close {
width: 18px;
height: 18px;
display: flex;
justify-content: center;
align-items: center;
margin-bottom: 8px;
}
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -1,8 +1,8 @@
{
"id": "obsidian-meta-bind-plugin",
"name": "Meta Bind",
"version": "1.4.8",
"minAppVersion": "1.4.0",
"version": "1.4.15",
"minAppVersion": "1.10.0",
"description": "Make your notes interactive with inline input fields, metadata displays, and buttons.",
"author": "Moritz Jung",
"authorUrl": "https://www.moritzjung.dev/",
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "obsidian-minimal-settings",
"name": "Minimal Theme Settings",
"version": "8.2.1",
"version": "8.2.3",
"minAppVersion": "1.11.1",
"description": "Change the colors, fonts and features of Minimal Theme.",
"author": "@kepano",
+37 -18
View File
@@ -2751,7 +2751,7 @@ class VimOBehaviourOverride {
this.operationPerformer = operationPerformer;
this.inited = false;
this.handleSettingsChange = () => {
if (!this.settings.overrideVimOBehaviour) {
if (this.inited || !this.settings.overrideVimOBehaviour) {
return;
}
if (!window.CodeMirrorAdapter || !window.CodeMirrorAdapter.Vim) {
@@ -2765,28 +2765,22 @@ class VimOBehaviourOverride {
const operationPerformer = this.operationPerformer;
const settings = this.settings;
vim.defineAction("insertLineAfterBullet", (cm, operatorArgs) => {
// Move the cursor to the end of the line
vim.handleEx(cm, "normal! A");
if (!settings.overrideVimOBehaviour) {
if (operatorArgs.after) {
vim.handleEx(cm, "normal! o");
}
else {
vim.handleEx(cm, "normal! O");
}
const view = plugin.app.workspace.getActiveViewOfType(obsidian.MarkdownView);
const obsidianEditor = view === null || view === void 0 ? void 0 : view.editor;
if (!obsidianEditor) {
vim.enterInsertMode(cm);
return;
}
const view = plugin.app.workspace.getActiveViewOfType(obsidian.MarkdownView);
const editor = new MyEditor(view.editor);
this.moveCursorToLineEnd(obsidianEditor);
if (!settings.overrideVimOBehaviour) {
this.openPlainLine(obsidianEditor, operatorArgs.after);
vim.enterInsertMode(cm);
return;
}
const editor = new MyEditor(obsidianEditor);
const root = parser.parse(editor);
if (!root) {
if (operatorArgs.after) {
vim.handleEx(cm, "normal! o");
}
else {
vim.handleEx(cm, "normal! O");
}
this.openPlainLine(obsidianEditor, operatorArgs.after);
vim.enterInsertMode(cm);
return;
}
@@ -2823,6 +2817,31 @@ class VimOBehaviourOverride {
this.handleSettingsChange();
});
}
moveCursorToLineEnd(editor) {
const cursor = editor.getCursor();
editor.setCursor({
line: cursor.line,
ch: editor.getLine(cursor.line).length,
});
}
getLineIndent(line) {
return line.match(/^[ \t]*/)[0];
}
openPlainLine(editor, after) {
const cursor = editor.getCursor();
const line = editor.getLine(cursor.line);
const indent = this.getLineIndent(line);
if (after) {
const insertAt = { line: cursor.line, ch: line.length };
editor.replaceRange(`\n${indent}`, insertAt, insertAt);
editor.setCursor({ line: cursor.line + 1, ch: indent.length });
}
else {
const insertAt = { line: cursor.line, ch: 0 };
editor.replaceRange(`${indent}\n`, insertAt, insertAt);
editor.setCursor({ line: cursor.line, ch: indent.length });
}
}
unload() {
return __awaiter(this, void 0, void 0, function* () {
if (!this.inited) {
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "obsidian-outliner",
"name": "Outliner",
"version": "4.10.0",
"version": "4.10.1",
"minAppVersion": "1.11.7",
"description": "Work with your lists like in Workflowy or RoamResearch.",
"author": "Viacheslav Slinko",
+1 -1
View File
@@ -5,7 +5,7 @@
{
"id": 1,
"name": "Ma bibliothèque",
"lastUpdate": 1779466877485
"lastUpdate": 1781364297419
}
],
"renderCitations": true,
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -1,9 +1,9 @@
{
"id": "obsidian-share-as-gist",
"name": "Share as Gist",
"version": "1.9.0",
"minAppVersion": "0.9.7",
"description": "Shares an Obsidian note as a GitHub.com gist",
"version": "2.0.1",
"minAppVersion": "1.8.7",
"description": "Shares a note as a GitHub.com gist.",
"author": "Tim Rogers",
"authorUrl": "https://github.com/timrogers",
"isDesktopOnly": false
+58 -12
View File
@@ -1,49 +1,95 @@
{
"settings": {
"flashcardEasyText": "Easy",
"flashcardGoodText": "Good",
"flashcardHardText": "Hard",
"flashcardTags": [
"#flashcards"
],
"flashcardTagsToIgnore": [],
"convertFoldersToDecks": false,
"cardCommentOnSameLine": false,
"burySiblingCards": false,
"showContextInCards": true,
"flashcardHeightPercentage": 100,
"flashcardWidthPercentage": 100,
"randomizeCardOrder": null,
"flashcardCardOrder": "DueFirstRandom",
"flashcardDeckOrder": "PrevDeckComplete_Sequential",
"convertClozePatternsToInputs": false,
"convertHighlightsToClozes": true,
"convertBoldTextToClozes": false,
"convertCurlyBracketsToClozes": false,
"clozePatterns": [
"==[123;;]answer[;;hint]=="
],
"singleLineCardSeparator": "::",
"singleLineReversedCardSeparator": ":::",
"multilineCardSeparator": "?",
"multilineReversedCardSeparator": "??",
"editLaterTag": "#edit-later",
"multilineCardEndMarker": "",
"enableReviewReminders": false,
"reviewReminderIntervalMinutes": 5,
"reviewReminderCheckOnStartup": false,
"reviewReminderMessage": "",
"reviewReminderAutoOpen": true,
"reviewReminderShowNotice": true,
"reviewReminderPlaySound": true,
"reviewReminderBounceDock": true,
"randomizeCardOrder": null,
"enableNoteReviewPaneOnStartup": true,
"tagsToReview": [
"#review"
],
"noteTagsToIgnore": [],
"noteFoldersToIgnore": [],
"openRandomNote": false,
"autoNextNote": true,
"disableFileMenuReviewOptions": false,
"showFileMenuReviewOptions": true,
"deleteTagsOnSchedulingDataDeletion": false,
"maxNDaysNotesReviewQueue": 365,
"showRibbonIcon": true,
"showStatusBar": true,
"showCardStatusBarItem": true,
"showNoteStatusBarItem": true,
"showUpdateAvailableStatusBarItem": true,
"initiallyExpandAllSubdecksInTree": true,
"showContextInCards": true,
"showIntervalInReviewButtons": true,
"flashcardHeightPercentage": 100,
"flashcardWidthPercentage": 100,
"flashcardHeightPercentageMobile": 100,
"flashcardWidthPercentageMobile": 100,
"flashcardAgainText": "Again",
"flashcardEasyText": "Easy",
"flashcardGoodText": "Good",
"flashcardHardText": "Hard",
"reviewButtonDelay": 0,
"showDeleteButtonInCardView": false,
"showDeleteButtonInFileMenu": false,
"openViewInNewTab": false,
"openViewInNewTabMobile": false,
"useCustomHotkeys": false,
"useCalloutsForSchedulingComments": false,
"algorithm": "SM-2-OSR",
"baseEase": 250,
"lapsesIntervalChange": 0.5,
"easyBonus": 1.3,
"loadBalance": true,
"maximumInterval": 3652,
"maxLinkFactor": 1,
"fsrsDesiredRetention": 0.9,
"startOfDay": "00:00:00",
"dataStore": "NOTES",
"cardCommentOnSameLine": false,
"scheduleDataVaultLocation": "Spaced Repetition",
"showSchedulingDebugMessages": false,
"showParserDebugMessages": false,
"preferredDateFormatForNoteReviewQueue": "MMM DD YYYY",
"preferredLocale": "-",
"showDebugMessages": false,
"showFileNameInFileLink": false,
"singlelineCardSeparator": "::",
"singlelineReversedCardSeparator": ":::"
},
"buryDate": "2024-09-24",
"buryDate": "2026-06-13",
"buryList": [],
"historyDeck": ""
"historyDeck": "",
"scheduleData": {
"version": 1,
"noteSchedules": {},
"cardSchedules": {}
}
}
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -1,9 +1,9 @@
{
"id": "obsidian-spaced-repetition",
"name": "Spaced Repetition",
"version": "1.13.9",
"version": "1.15.3",
"minAppVersion": "1.2.8",
"description": "Fight the forgetting curve by reviewing flashcards & entire notes.",
"description": "Fight the forgetting curve by reviewing flashcards & entire notes using spaced repetition. Organize your flashcards into decks and learn only the cards you need to recall.",
"author": "Stephen Mwangi",
"authorUrl": "https://github.com/st3v3nmw",
"helpUrl": "https://stephenmwangi.com/obsidian-spaced-repetition/",
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -1,8 +1,8 @@
{
"id": "obsidian-tasks-plugin",
"name": "Tasks",
"version": "7.23.1",
"minAppVersion": "1.4.0",
"version": "8.1.0",
"minAppVersion": "1.8.7",
"description": "Track tasks across your vault. Supports due dates, recurring tasks, done dates, sub-set of checklist items, and filtering.",
"helpUrl": "https://publish.obsidian.md/tasks/",
"author": "Clare Macrae and Ilyas Landikov (created by Martin Schenck)",
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+3 -3
View File
@@ -1,11 +1,11 @@
{
"id": "obsidian42-brat",
"name": "BRAT",
"version": "2.0.4",
"version": "2.0.8",
"minAppVersion": "1.11.4",
"description": "Easily install a beta version of a plugin for testing.",
"description": "Easily install plugin beta versions for testing.",
"author": "TfTHacker",
"authorUrl": "https://github.com/TfTHacker/obsidian42-brat",
"authorUrl": "https://github.com/TfTHacker",
"helpUrl": "https://tfthacker.com/BRAT",
"isDesktopOnly": false,
"fundingUrl": {
+32 -2
View File
@@ -111,12 +111,12 @@
/* Hide filtered plugin items */
.brat-plugin-item[hidden] {
display: none !important;
display: none;
}
/* Hide filtered theme items */
.brat-theme-item[hidden] {
display: none !important;
display: none;
}
/* Filter and button layout */
@@ -150,3 +150,33 @@
.brat-filter-and-button .setting-item-control {
justify-content: flex-end;
}
.brat-full-width-input {
width: 100%;
}
.brat-modal-divider {
border-top: 1px solid var(--background-modifier-border);
margin-top: 30px;
}
.brat-credits {
font-style: italic;
}
.brat-promotional-links {
float: right;
}
.brat-promotional-links-modal {
padding: 10px 15px;
}
.brat-promotional-links-settings {
padding: 15px;
margin-left: 15px;
}
.brat-promotional-links-coffee {
padding-left: 10px;
}
+135 -136
View File
File diff suppressed because one or more lines are too long
+3 -3
View File
@@ -1,11 +1,11 @@
{
"id": "omnisearch",
"name": "Omnisearch",
"version": "1.28.2",
"version": "1.29.3",
"minAppVersion": "1.7.2",
"description": "A search engine that just works",
"description": "A search engine that just works.",
"author": "Simon Cambier",
"authorUrl": "https://github.com/scambier/obsidian-omnisearch",
"authorUrl": "https://scambier.xyz",
"fundingUrl": {
"Github": "https://github.com/sponsors/scambier",
"Ko-fi": "https://ko-fi.com/scambier"
+16 -1
View File
@@ -63,7 +63,6 @@
margin-left: 1em;
}
.omnisearch-result__image-container {
flex-basis: 20%;
text-align: end;
@@ -133,3 +132,19 @@
position: relative;
flex-grow: 1;
}
.omnisearch-result-highlight .cm-content ::selection,
.omnisearch-result-highlight .cm-line::selection {
background-color: var(
--omnisearch-highlight-color,
rgba(222, 183, 110, 1)
) !important;
color: var(--omnisearch-highlight-text-color, black) !important;
}
.omnisearch-result-highlight .cm-selectionLayer .cm-selectionBackground {
background-color: var(
--omnisearch-highlight-color,
rgba(222, 183, 110, 1)
) !important;
}
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "persistent-graph",
"name": "Persistent Graph",
"version": "0.1.5",
"version": "0.3.2",
"minAppVersion": "0.12.0",
"description": "Adds commands to save and restore the positions of nodes on the global graph view",
"author": "Sanqui",
+1
View File
@@ -0,0 +1 @@
/* This file left intentionally blank */
+51 -51
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "podnotes",
"name": "PodNotes",
"version": "2.15.1",
"version": "2.16.0",
"minAppVersion": "0.15.9",
"description": "Helps you write notes on podcasts.",
"author": "Christian B. B. Houmann",
File diff suppressed because it is too large Load Diff
+4 -4
View File
@@ -1,10 +1,10 @@
{
"id": "qmd-as-md-obsidian",
"version": "0.0.3",
"description": "This plugin provides an initial support for viewing files with .qmd extension. QMD files contain a combination of markdown and executable code cells and are a format supported by Quarto open source publishing system.",
"version": "0.4.3",
"description": "View, edit, preview and render Quarto (.qmd) files. Quarto combines Markdown with executable code cells.",
"name": "qmd as md",
"author": "Daniel Borek",
"authorUrl": "https://github.com/danieltomasz",
"isDesktopOnly": false,
"minAppVersion": "0.10.12"
"isDesktopOnly": true,
"minAppVersion": "1.8.0"
}
+174
View File
@@ -0,0 +1,174 @@
/* Quarto outline sidebar view (QmdOutlineView) */
.qmd-outline {
padding: var(--size-4-2) var(--size-4-1);
}
.qmd-outline-empty {
padding: var(--size-4-2) var(--size-4-3);
color: var(--text-muted);
font-size: var(--font-ui-small);
}
.qmd-outline-list {
display: flex;
flex-direction: column;
}
.qmd-outline-item {
display: flex;
align-items: center;
gap: var(--size-2-1);
padding: var(--size-2-1) var(--size-4-3);
border-radius: var(--radius-s);
color: var(--text-muted);
font-size: var(--font-ui-small);
cursor: pointer;
}
/* Chevron slot — always present so leaf and parent headings align. */
.qmd-outline-toggle {
flex: 0 0 auto;
display: flex;
align-items: center;
justify-content: center;
width: var(--size-4-4);
height: var(--size-4-4);
color: var(--text-faint);
transition: transform 100ms ease-in-out;
}
.qmd-outline-toggle .svg-icon {
width: var(--icon-xs, 14px);
height: var(--icon-xs, 14px);
}
/* Collapsed: chevron points right, sub-tree hidden. */
.qmd-outline-item.is-collapsed .qmd-outline-toggle {
transform: rotate(-90deg);
}
.qmd-outline-children.is-collapsed {
display: none;
}
.qmd-outline-item-text {
flex: 1 1 auto;
min-width: 0;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.qmd-outline-item:hover {
background-color: var(--background-modifier-hover);
color: var(--text-normal);
}
.qmd-outline-item:focus-visible {
outline: 2px solid var(--interactive-accent);
outline-offset: -2px;
color: var(--text-normal);
}
/* Indentation by heading level driven by the data-level attribute so the
view itself sets no inline styles. Each level adds one --size-4-4 step. */
.qmd-outline-item[data-level='1'] { padding-left: var(--size-4-3); }
.qmd-outline-item[data-level='2'] { padding-left: calc(var(--size-4-3) + var(--size-4-4)); }
.qmd-outline-item[data-level='3'] { padding-left: calc(var(--size-4-3) + var(--size-4-4) * 2); }
.qmd-outline-item[data-level='4'] { padding-left: calc(var(--size-4-3) + var(--size-4-4) * 3); }
.qmd-outline-item[data-level='5'] { padding-left: calc(var(--size-4-3) + var(--size-4-4) * 4); }
.qmd-outline-item[data-level='6'] { padding-left: calc(var(--size-4-3) + var(--size-4-4) * 5); }
/* Code editor views (QmdCodeFileView — YAML and Lua files) */
.qmd-code-view {
height: 100%;
padding: 0;
overflow: hidden;
background: var(--background-primary);
}
.qmd-code-view .cm-editor {
height: 100%;
background: var(--background-primary);
color: var(--text-normal);
font-family: var(--font-monospace);
font-size: var(--font-ui-small);
line-height: var(--line-height-tight);
outline: none;
}
.qmd-code-view .cm-scroller {
font-family: var(--font-monospace);
font-size: var(--font-ui-small);
line-height: var(--line-height-tight);
}
.qmd-code-view .cm-content {
min-height: 100%;
padding: var(--size-4-4);
caret-color: var(--text-normal);
tab-size: 2;
}
.qmd-code-view .cm-focused {
box-shadow: inset 0 0 0 2px var(--interactive-accent);
}
.qmd-code-view.qmd-code-view .cm-editor .cm-selectionBackground {
background: var(--text-selection);
}
.qmd-yaml-key {
color: var(--text-accent);
font-weight: 600;
}
.qmd-yaml-colon,
.qmd-yaml-list-marker,
.qmd-yaml-doc-marker {
color: var(--text-faint);
font-weight: 600;
}
.qmd-yaml-string {
color: var(--text-normal);
}
.qmd-yaml-number,
.qmd-yaml-boolean,
.qmd-yaml-anchor,
.qmd-yaml-block,
.qmd-yaml-quarto-format {
color: var(--interactive-accent);
}
.qmd-yaml-comment {
color: var(--text-muted);
font-style: italic;
}
.qmd-yaml-scalar {
color: var(--text-normal);
}
/* Lua editor view tokens */
.qmd-lua-keyword {
color: var(--text-accent);
font-weight: 600;
}
.qmd-lua-string {
color: var(--interactive-accent);
}
.qmd-lua-number {
color: var(--interactive-accent);
}
.qmd-lua-comment {
color: var(--text-muted);
font-style: italic;
}
+30 -15
View File
@@ -186,13 +186,15 @@
},
"openFile": true,
"openFileInMode": "default",
"setFileExistsBehavior": true,
"fileExistsMode": "Increment the file name",
"fileOpening": {
"location": "tab",
"direction": "vertical",
"focus": true,
"mode": "default"
},
"fileExistsBehavior": {
"kind": "apply",
"mode": "increment"
}
},
{
@@ -219,13 +221,15 @@
},
"openFile": true,
"openFileInMode": "default",
"setFileExistsBehavior": true,
"fileExistsMode": "Increment the file name",
"fileOpening": {
"location": "tab",
"direction": "vertical",
"focus": true,
"mode": "default"
},
"fileExistsBehavior": {
"kind": "apply",
"mode": "increment"
}
},
{
@@ -252,13 +256,15 @@
},
"openFile": true,
"openFileInMode": "default",
"setFileExistsBehavior": true,
"fileExistsMode": "Increment the file name",
"fileOpening": {
"location": "tab",
"direction": "vertical",
"focus": true,
"mode": "default"
},
"fileExistsBehavior": {
"kind": "apply",
"mode": "increment"
}
},
{
@@ -285,13 +291,15 @@
},
"openFile": true,
"openFileInMode": "default",
"setFileExistsBehavior": true,
"fileExistsMode": "Increment the file name",
"fileOpening": {
"location": "tab",
"direction": "vertical",
"focus": true,
"mode": "default"
},
"fileExistsBehavior": {
"kind": "apply",
"mode": "increment"
}
},
{
@@ -318,13 +326,15 @@
},
"openFile": true,
"openFileInMode": "default",
"setFileExistsBehavior": true,
"fileExistsMode": "Increment the file name",
"fileOpening": {
"location": "tab",
"direction": "vertical",
"focus": true,
"mode": "default"
},
"fileExistsBehavior": {
"kind": "apply",
"mode": "increment"
}
},
{
@@ -351,13 +361,15 @@
},
"openFile": true,
"openFileInMode": "default",
"setFileExistsBehavior": true,
"fileExistsMode": "Increment the file name",
"fileOpening": {
"location": "tab",
"direction": "vertical",
"focus": true,
"mode": "default"
},
"fileExistsBehavior": {
"kind": "apply",
"mode": "increment"
}
},
{
@@ -552,7 +564,7 @@
"devMode": false,
"templateFolderPath": "templates",
"announceUpdates": "all",
"version": "2.12.0",
"version": "2.12.3",
"globalVariables": {},
"onePageInputEnabled": false,
"disableOnlineFeatures": true,
@@ -626,6 +638,9 @@
"migrateFileOpeningSettings": true,
"setProviderModelDiscoveryMode": true,
"backfillFileOpeningDefaults": true,
"migrateProviderApiKeysToSecretStorage": true
}
"migrateProviderApiKeysToSecretStorage": true,
"consolidateFileExistsBehavior": true,
"repairTemplateFileExistsBehavior": true
},
"macros": []
}
+68 -80
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "quickadd",
"name": "QuickAdd",
"version": "2.12.0",
"version": "2.12.3",
"minAppVersion": "1.11.4",
"description": "Quickly add new pages or content to your vault.",
"author": "Christian B. B. Houmann",
File diff suppressed because one or more lines are too long
-27
View File
@@ -1,27 +0,0 @@
{
"indentsIfSelection": true,
"indentsIfSelectionOnlyForMultipleLines": true,
"useSpaces": false,
"alignSpaces": true,
"useHardSpace": false,
"spacesCount": 2,
"allowException": false,
"exceptionRegex": "^[\\s ]*(-|\\d+\\.)( \\[ \\])?\\s*$",
"useAdvancedTables": false,
"obsidianTableEditor": true,
"useOutlinerBetterTab": true,
"hotkey": "Shift-Tab",
"language": "auto",
"developerMode": false,
"enableBracesAutoIndent": true,
"braceCodeSetOpen": "[\"\\\\{$\", \"\\\\[$\", \"\\\\($\", \"\\\"$\", \"'$\", \"`$\"]",
"braceCodeSetClose": "[\"^\\\\}\", \"^\\\\]\", \"^\\\\)\", \"^\\\"\", \"^'\", \"^`\"]",
"braceMarkdownSetOpen": "[\"\\\\{$\", \"\\\\[$\", \"\\\\($\", \"\\\"$\", \"'$\", \"\\\\$\\\\$$\", \"<.+>$\", \"¡$\", \"¿$\"]",
"braceMarkdownSetClose": "[\"^\\\\}\", \"^\\\\]\", \"^\\\\)\", \"^\\\"\", \"^'\", \"^\\\\$\\\\$\", \"^<\\\\/\\\\w+>\", \"^!\", \"^?\"]",
"indentCharacters": " \t",
"activateInCodeBlocks": false,
"activateInLists": false,
"activateInTables": false,
"activateInInlineCode": true,
"activateInOthers": false
}
-694
View File
@@ -1,694 +0,0 @@
/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// main.ts
var main_exports = {};
__export(main_exports, {
default: () => TabKeyPlugin
});
module.exports = __toCommonJS(main_exports);
var import_language = require("@codemirror/language");
var import_state = require("@codemirror/state");
var import_view = require("@codemirror/view");
// localization.ts
var localization = {
title: {
"en-US": "Obsidian Restore Tab Key Plugin",
"zh-CN": "\u9ED1\u66DC\u77F3\u7B14\u8BB0 \u6062\u5FA9\u5236\u8868\u952E\u884C\u4E3A\u63D2\u4EF6",
"zh-TW": "\u9ED1\u66DC\u77F3\u7B46\u8A18 \u6062\u5FA9\u5236\u8868\u9375\u884C\u70BA\u63D2\u4EF6"
},
description: {
"en-US": "Restore tab key behavior: tab key inserts a tab, the way it should be.",
"zh-CN": "\u56DE\u5FA9 Tab \u952E\u884C\u4E3A\uFF0C\u672C\u8BE5\u5982\u6B64\uFF01",
"zh-TW": "\u56DE\u5FA9 Tab \u9375\u884C\u70BA\uFF0C\u672C\u8A72\u5982\u6B64\uFF01"
},
tabOrSpace: {
"en-US": "Tab or Space Settings",
"zh-CN": "Tab \u6216\u7A7A\u683C\u8BBE\u5B9A",
"zh-TW": "Tab \u6216\u7A7A\u683C\u8A2D\u5B9A"
},
useSpacesInsteadOfTab: {
"en-US": "Use spaces instead of tab",
"zh-CN": "\u4EE5\u7A7A\u683C\u53D6\u4EE3 Tab",
"zh-TW": "\u4EE5\u7A7A\u683C\u53D6\u4EE3 Tab"
},
useSpacesInsteadOfTabDesc: {
"en-US": "false(default): Insert tab (\\t) when tab key is pressed. true: Insert spaces (\xA0\xA0\xA0\xA0) when tab key is pressed. (configurable)",
"zh-CN": "\u5173\u95ED(\u9ED8\u8BA4)\uFF1A\u5728 Tab \u952E\u88AB\u6309\u4E0B\u65F6\u63D2\u5165\u8868\u683C\u7B26\u53F7 (Tab)\uFF1B\u5F00\u542F\uFF1A\u5728 Tab \u952E\u88AB\u6309\u4E0B\u65F6\u63D2\u5165\u7A7A\u767D\u7B26\u53F7\uFF08\u53EF\u4EE5\u81EA\u8BA2\u4E49\uFF09",
"zh-TW": "\u95DC\u9589(\u9810\u8A2D)\uFF1A\u5728 Tab \u9375\u88AB\u6309\u4E0B\u6642\u63D2\u5165\u8868\u683C\u7B26\u865F (Tab)\uFF1B\u958B\u555F\uFF1A\u5728 Tab \u9375\u88AB\u6309\u4E0B\u6642\u63D2\u5165\u7A7A\u767D\u7B26\u865F\uFF08\u53EF\u4EE5\u81EA\u8A02\u7FA9\uFF09"
},
useHardSpaces: {
"en-US": "Use hard spaces",
"zh-CN": "\u4F7F\u7528\u786C\u7A7A\u683C\u5B57\u5143",
"zh-TW": "\u4F7F\u7528\u786C\u7A7A\u683C\u5B57\u5143"
},
useHardSpacesDesc: {
"en-US": `If "Indent using tabs" is false, space will be used to indent. If "Use hard spaces" is off, normal space characters will be used. Notice that with Markdown, repeated normal spaces will be rendered as one. Turn this option on to use hard spaces (U+00A0), which will not be truncated after Markdown render. To indent stuff in the processed Markdown output, move your cursor to the begin and press tab (indenting won't insert hard spaces)`,
"zh-CN": "\u5047\u5982\u300C\u4EE5 Tab \u7F29\u8FDB\u300D\u8BBE\u5B9A\u4E3A\u5173\u95ED\uFF0C\u7A7A\u683C\u4F1A\u88AB\u7528\u6765\u7F29\u6392\u3002\u5982\u679C\u300C\u4F7F\u7528\u786C\u7A7A\u683C\u300D\u88AB\u5173\u95ED\uFF0C\u5219\u4F1A\u4F7F\u7528\u6570\u4E2A\u666E\u901A\u7684\u7A7A\u683C\u7B26\u53F7\u3002\u8BF7\u6CE8\u610F\uFF1A\u5728 Markdown \u4E0B\uFF0C\u91CD\u8907\u7684\u7A7A\u683C\u4F1A\u88AB\u6E32\u67D3\u4E3A\u4E00\u4E2A\u3002\u5F00\u542F\u6B64\u9009\u9879\u540E\uFF0C\u786C\u7A7A\u683C (U+00A0) \u5C06\u4F1A\u53D6\u4EE3\u7A7A\u767D\u5B57\u5143\u5F53\u4F5C Tab\uFF0C\u5728\u6E32\u67D3\u540E\u4E0D\u4F1A\u88AB\u5220\u51CF\u3002\u82E5\u8981\u4F7F\u7528\u786C\u7A7A\u683C\u8FDB\u884C\u7F29\u6392\uFF0C\u8BF7\u624B\u52A8\u5C06\u5149\u6807\u79FB\u81F3\u884C\u5934\u5E76\u6309\u4E0B Tab \u952E\uFF08\u7F29\u6392\u4E0D\u4F1A\u4F7F\u7528\u786C\u7A7A\u683C\uFF09",
"zh-TW": "\u5047\u5982\u300C\u4EE5 Tab \u7E2E\u6392\u300D\u8A2D\u5B9A\u70BA\u95DC\u9589\uFF0C\u7A7A\u683C\u6703\u88AB\u7528\u4F86\u7E2E\u6392\u3002\u5982\u679C\u300C\u4F7F\u7528\u786C\u7A7A\u683C\u300D\u88AB\u95DC\u9589\uFF0C\u5247\u6703\u4F7F\u7528\u6578\u500B\u666E\u901A\u7684\u7A7A\u683C\u7B26\u865F\u3002\u8ACB\u6CE8\u610F\uFF1A\u5728 Markdown \u4E0B\uFF0C\u91CD\u8907\u7684\u7A7A\u683C\u6703\u88AB\u6E32\u67D3\u70BA\u4E00\u500B\u3002\u958B\u555F\u6B64\u9078\u9805\u5F8C\uFF0C\u786C\u7A7A\u683C (U+00A0) \u5C07\u6703\u53D6\u4EE3\u7A7A\u767D\u5B57\u5143\u7576\u4F5C Tab\uFF0C\u5728\u6E32\u67D3\u5F8C\u4E0D\u6703\u88AB\u522A\u6E1B\u3002\u82E5\u8981\u4F7F\u7528\u786C\u7A7A\u683C\u9032\u884C\u7E2E\u6392\uFF0C\u8ACB\u624B\u52D5\u5C07\u6E38\u6A19\u79FB\u81F3\u884C\u982D\u4E26\u6309\u4E0B Tab \u9375\uFF08\u7E2E\u6392\u4E0D\u6703\u4F7F\u7528\u786C\u7A7A\u683C\uFF09"
},
spaceCount: {
"en-US": "Space count",
"zh-CN": "\u7A7A\u683C\u6570\u91CF",
"zh-TW": "\u7A7A\u683C\u6578\u91CF"
},
spaceCountDesc: {
"en-US": "The number of spaces or hard spaces inserted when tab key is pressed. default: 4",
"zh-CN": "\u4F7F\u7528\u51E0\u4E2A\u7A7A\u683C\u5B57\u7B26\u53D6\u4EE3\u4E00\u4E2A Tab \u5B57\u7B26\uFF1F\u9ED8\u8BA4\uFF1A4\u4E2A",
"zh-TW": "\u4F7F\u7528\u5E7E\u500B\u7A7A\u683C\u7B26\u865F\u53D6\u4EE3\u4E00\u500B Tab \u5B57\u5143\uFF1F\u9810\u8A2D\uFF1A4\u500B"
},
alignSpaces: {
"en-US": "Align spaces (just like how tabs behave)",
"zh-CN": "\u5BF9\u9F50\u7A7A\u683C",
"zh-TW": "\u5C0D\u9F4A\u7A7A\u683C"
},
alignSpacesDesc: {
"en-US": 'At space count of 4, pressing tab after "abc" inserts one space, "abcde" inserts 3, so the end position after pressing tab is always an integer multiple of the space count.',
"zh-CN": '\u5047\u8BBE\u300C\u7A7A\u683C\u6570\u91CF\u300D\u8BBE\u4E3A 4\uFF0C\u5219\u5728"abc"\u6700\u540E\u6309\u4E0B Tab \u952E\u4F1A\u63D2\u5165\u4E00\u4E2A\u7A7A\u767D\uFF0C"abcde"\u5219\u4E3A\u4E09\u4E2A\uFF0C\u4F7F\u5F97\u6309\u4E0B Tab \u63D2\u5165\u7A7A\u683C\u540E\u7684\u5149\u6807\u4F4D\u7F6E\u4E3A\u7A7A\u683C\u6570\u91CF\u7684\u6574\u6570\u500D',
"zh-TW": '\u5047\u8A2D\u300C\u7A7A\u683C\u6578\u91CF\u300D\u8A2D\u70BA 4\uFF0C\u5247\u5728"abc"\u6700\u5F8C\u6309\u4E0B Tab \u9375\u6703\u63D2\u5165\u4E00\u500B\u7A7A\u767D\uFF0C"abcde"\u5247\u70BA\u4E09\u500B\uFF0C\u4F7F\u5F97\u6309\u4E0B Tab \u63D2\u5165\u7A7A\u683C\u5F8C\u7684\u6E38\u6A19\u4F4D\u7F6E\u70BA\u7A7A\u683C\u6578\u91CF\u7684\u6574\u6578\u500D'
},
tabKeyBehavior: {
"en-US": "Tab Key Behavior",
"zh-CN": "Tab \u952E\u884C\u4E3A",
"zh-TW": "Tab \u9375\u884C\u70BA"
},
activateIn: {
"en-US": "Activate plugin in Markdown environment",
"zh-CN": "\u5728 Markdown \u73AF\u5883\u4E2D\u542F\u7528\u63D2\u4EF6",
"zh-TW": "\u5728 Markdown \u74B0\u5883\u4E2D\u555F\u7528\u63D2\u4EF6"
},
activateInDesc: {
"en-US": "On: Insert tab character. Off: Indent, or next cell for tables",
"zh-CN": "\u5F00\u542F\uFF1A\u63D2\u5165 Tab \u5B57\u7B26\u3002\u5173\u95ED\uFF1A\u7F29\u6392\uFF0C\u6216\u8005\u5728\u8868\u683C\u4E2D\u4E3A\u79FB\u81F3\u4E0B\u4E00\u683C",
"zh-TW": "\u958B\u555F\uFF1A\u63D2\u5165 Tab \u5B57\u5143\u3002\u95DC\u9589\uFF1A\u7E2E\u6392\uFF0C\u6216\u8005\u5728\u8868\u683C\u4E2D\u70BA\u79FB\u81F3\u4E0B\u4E00\u683C"
},
activateInCodeBlocks: {
"en-US": "Code blocks",
"zh-CN": "\u4EE3\u7801\u533A\u5757",
"zh-TW": "\u7A0B\u5F0F\u78BC\u5340\u584A"
},
activateInLists: {
"en-US": "Lists",
"zh-CN": "\u5217\u8868",
"zh-TW": "\u5217\u8868"
},
activateInTables: {
"en-US": "Tables",
"zh-CN": "\u8868\u683C",
"zh-TW": "\u8868\u683C"
},
activateInInlineCode: {
"en-US": "Inline code / Indented code",
"zh-CN": "\u884C\u5167\u4EE3\u7801\uFF08inline code\uFF09",
"zh-TW": "\u884C\u5167\u7A0B\u5F0F\u78BC\uFF08inline code\uFF09"
},
activateInOthers: {
"en-US": "Others",
"zh-CN": "\u5176\u4ED6",
"zh-TW": "\u5176\u4ED6"
},
indentWhenSelectionNotEmpty: {
"en-US": "Indents when selection is not empty",
"zh-CN": "\u5728\u6709\u6587\u5B57\u88AB\u9009\u53D6\u65F6\u9032\u884C\u7F29\u6392",
"zh-TW": "\u5728\u6709\u6587\u5B57\u88AB\u9078\u53D6\u6642\u9032\u884C\u7E2E\u6392"
},
indentWhenSelectionNotEmptyDesc: {
"en-US": "true(default): Select some text and press tab key will indent the selected lines. Same behavior as most IDEs. \nfalse: Selection will be replaced with one tab",
"zh-CN": "\u5F00\u542F\uFF08\u9ED8\u8BA4\uFF09\uFF1A\u9009\u53D6/\u53CD\u767D\u4E00\u4E9B\u6587\u5B57\u540E\u6309\u4E0B Tab \u952E\u4F1A\u7F29\u8FDB\u8BE5\u51E0\u884C\u6587\u5B57\u3002\u6B64\u884C\u4E3A\u548C\u591A\u6570 IDE \u76F8\u540C\uFF1B\u5173\u95ED\uFF1A\u9009\u53D6\u7684\u6587\u5B57\u4F1A\u88AB\u53D6\u4EE3\u4E3A\u4E00\u4E2A Tab",
"zh-TW": "\u958B\u555F\uFF08\u9810\u8A2D\uFF09\uFF1A\u9078\u53D6/\u53CD\u767D\u4E00\u4E9B\u6587\u5B57\u5F8C\u6309\u4E0B Tab \u9375\u6703\u7E2E\u6392\u8A72\u5E7E\u884C\u6587\u5B57\u3002\u6B64\u884C\u70BA\u548C\u591A\u6578 IDE \u76F8\u540C\uFF1B\u95DC\u9589\uFF1A\u9078\u53D6\u7684\u6587\u5B57\u6703\u88AB\u53D6\u4EE3\u70BA\u4E00\u500B Tab"
},
indentOnlySelectionMultipleLine: {
"en-US": "Indents only when selection contains multiple lines",
"zh-CN": "\u4EC5\u5728\u9009\u53D6\u591A\u884C\u65F6\u8FDB\u884C\u7F29\u8FDB",
"zh-TW": "\u50C5\u5728\u9078\u53D6\u591A\u884C\u6642\u9032\u884C\u7E2E\u6392"
},
indentOnlySelectionMultipleLineDesc: {
"en-US": "true(default): If the selection lies within one line, a tab (or spaces) will replace the selection instead",
"zh-CN": "\u5F00\u542F\uFF08\u9ED8\u8BA4\uFF09\uFF1A\u5982\u679C\u4EC5\u6709\u4E00\u884C\u6587\u5B57\u88AB\u9009\u53D6\uFF0C\u5219\u9009\u53D6\u7684\u6587\u5B57\u4F1A\u88AB\u53D6\u4EE3\u4E3A\u4E00\u4E2A Tab",
"zh-TW": "\u958B\u555F\uFF08\u9810\u8A2D\uFF09\uFF1A\u5982\u679C\u50C5\u6709\u4E00\u884C\u6587\u5B57\u88AB\u9078\u53D6\uFF0C\u5247\u9078\u53D6\u7684\u6587\u5B57\u6703\u88AB\u53D6\u4EE3\u70BA\u4E00\u500B Tab"
},
allowException: {
"en-US": "Allow exceptions for indenting",
"zh-CN": "\u5141\u8BB8\u5BF9\u7F29\u8FDB\u8FDB\u884C\u4F8B\u5916\u5904\u7406",
"zh-TW": "\u5C0D\u7E2E\u6392\u9032\u884C\u4F8B\u5916\u8655\u7406"
},
allowExceptionDesc: {
"en-US": "Indent line even when the selection is empty when the line matches the regex (For example, when cursor is on an empty list bullet)",
"zh-CN": "\u82E5\u5149\u6807\u6240\u5728\u7684\u90A3\u884C\u5339\u914D\u4EE5\u4E0B\u8868\u8FBE\u5F0F\u65F6\uFF0C\u4ECD\u7136\u8FDB\u884C\u7F29\u8FDB\uFF08\u5982\u8BE5\u884C\u4E3A\u7A7A\u767D\u7684\u6E05\u5355\u5217\u8868\uFF09",
"zh-TW": "\u82E5\u6E38\u6A19\u6240\u5728\u7684\u90A3\u884C\u7B26\u5408\u4EE5\u4E0B\u8868\u9054\u5F0F\u6642\uFF0C\u4ECD\u7136\u9032\u884C\u7E2E\u6392\uFF08\u5982\u8A72\u884C\u70BA\u7A7A\u767D\u7684\u6E05\u55AE\u5217\u8868\uFF09"
},
exceptionRegex: {
"en-US": "Exception regex",
"zh-CN": "\u4F8B\u5916\u7684\u6B63\u5219\u8868\u8FBE\u5F0F",
"zh-TW": "\u4F8B\u5916\u7684\u6B63\u898F\u8868\u9054\u5F0F"
},
exceptionRegexDesc: {
"en-US": "default: Indents regardless in empty list entries (zero or more whitespaces, followed by - or number. then optionally a checkbox and then a space). Remove the trailing $ to enable indentation in non-empty lists",
"zh-CN": "\u9ED8\u8BA4\uFF1A\u5728\u8BE5\u884C\u4E3A\u6E05\u5355\u5217\u8868\u9879\u76EE\u65F6\uFF08\u96F6\u4E2A\u6216\u4EE5\u4E0A\u4E2A\u7A7A\u767D\uFF0C\u52A0\u4E0A\u4E00\u4E2A\u6570\u5B57\uFF0C\u4E5F\u8BB8\u518D\u52A0\u4E0A\u4E00\u4E2A\u8907\u9009\u6846\uFF0C\u7136\u540E\u518D\u4E00\u4E2A\u7A7A\u767D\uFF09\u3002\u5220\u9664\u7ED3\u5C3E\u7684 $ \u7B26\u53F7\uFF0C\u53EF\u4EE5\u8BA9\u6B64\u8868\u8FBE\u5F0F\u5339\u914D\u975E\u7A7A\u767D\u7684\u6E05\u5355\u9879\u76EE\u3002",
"zh-TW": "\u9810\u8A2D\uFF1A\u5728\u8A72\u884C\u70BA\u6E05\u55AE\u5217\u8868\u9805\u76EE\u6642\uFF08\u96F6\u500B\u6216\u4EE5\u4E0A\u500B\u7A7A\u767D\uFF0C\u52A0\u4E0A\u4E00\u500B\u6578\u5B57\uFF0C\u4E5F\u8A31\u518D\u52A0\u4E0A\u4E00\u500B\u8907\u9078\u6846\uFF0C\u7136\u5F8C\u518D\u4E00\u500B\u7A7A\u767D\uFF09\u3002\u522A\u9664\u7D50\u5C3E\u7684 $ \u7B26\u865F\uFF0C\u53EF\u4EE5\u8B93\u6B64\u8868\u9054\u5F0F\u5339\u914D\u975E\u7A7A\u767D\u7684\u6E05\u55AE\u9805\u76EE\u3002"
},
pluginCompatibility: {
"en-US": "Compatibility",
"zh-CN": "\u517C\u5BB9\u6027",
"zh-TW": "\u517C\u5BB9\u6027"
},
obsidianTableEditor: {
"en-US": "Use with the native Obsidian Table Editor",
"zh-CN": "\u548C\u9ED1\u66DC\u77F3\u539F\u751F\u8868\u683C\u7F16\u8F91\u5668\u4E00\u8D77\u4F7F\u7528",
"zh-TW": "\u548C\u9ED1\u66DC\u77F3\u539F\u751F\u8868\u683C\u7DE8\u8F2F\u5668\u4E00\u8D77\u4F7F\u7528"
},
obsidianTableEditorDesc: {
"en-US": `Do not capture tab key if cursor is on an Obsidian table editor in "Live Preview" mode, so you can go to next cell with the tab key. This setting does not apply to "Source" mode. Also, it is recommended to uninstall/unbind tab in Advanced Tables plugin if you mainly work in live preview mode, because Advanced Tables currently doesn't work as well as the native editor does.`,
"zh-CN": "\u5728\u9884\u89C8\u6A21\u5F0F\u4E0B\u4E0D\u5BF9 Tab \u952E\u8FDB\u884C\u5904\u7406\uFF0C\u4EA4\u7ED9\u9ED1\u66DC\u77F3\u539F\u751F\u8868\u683C\u7F16\u8F91\u5668\u3002\u82E5\u4F60\u5E38\u5728\u9884\u89C8\u6A21\u5F0F\u4E0B\u5DE5\u4F5C\uFF0C\u6211\u5EFA\u8BAE\u5C06 Advanced Tables plugin \u9AD8\u7EA7\u8868\u683C\u63D2\u4EF6\u505C\u7528\u6216\u5C06\u5176 Tab \u952E\u89E3\u7ED1\uFF0C\u56E0\u4E3A\u5B83\u6CA1\u6709\u6BD4\u8868\u683C\u7F16\u8F91\u5668\u597D\u7528\u3002",
"zh-TW": "\u5728\u9810\u89BD\u6A21\u5F0F\u4E0B\u4E0D\u5C0D Tab \u9375\u9032\u884C\u8655\u7406\uFF0C\u4EA4\u7D66\u9ED1\u66DC\u77F3\u539F\u751F\u8868\u683C\u7DE8\u8F2F\u5668\u3002\u82E5\u4F60\u5E38\u5728\u9810\u89BD\u6A21\u5F0F\u4E0B\u5DE5\u4F5C\uFF0C\u6211\u5EFA\u8B70\u5C07 Advanced Tables plugin \u9032\u968E\u8868\u683C\u63D2\u4EF6\u505C\u7528\u6216\u5C07\u5176 Tab \u9375\u89E3\u7D81\uFF0C\u56E0\u70BA\u5B83\u6C92\u6709\u6BD4\u8868\u683C\u7DE8\u8F2F\u5668\u597D\u7528\u3002"
},
advancedTables: {
"en-US": "Use with Advanced Tables plugin",
"zh-CN": "\u548C Advanced Tables plugin \u9AD8\u7EA7\u8868\u683C\u63D2\u4EF6\u4E00\u8D77\u4F7F\u7528",
"zh-TW": "\u548C Advanced Tables plugin \u9032\u968E\u8868\u683C\u63D2\u4EF6\u4E00\u8D77\u4F7F\u7528"
},
advancedTablesDesc: {
"en-US": 'Creates a new table or go to next cell when cursor is in a table. Requires disabling "Bind tab to table navigation" in the Advanced Tables plugin (and restart Obsidian). I recommend leaving that setting on and this off, and leave tab key binding to Advanced Tables plugin in a table environment, it does the exact same thing.',
"zh-CN": "\u5F53\u5149\u6807\u5728\u4E00\u4E2A\u8868\u683C\u5185\u65F6\u6309\u4E0B Tab \u4F1A\u521B\u5EFA\u65B0\u8868\u683C\u6216\u8DF3\u5230\u4E0B\u4E00\u4E2A\u5355\u5143\u683C\u3002\u9700\u8981\u5728\u9AD8\u7EA7\u8868\u683C\u63D2\u4EF6\u4E2D\u5173\u95ED\u300CBind tab to table navigation\u300D\u5E76\u91CD\u542F\u9ED1\u66DC\u77F3\u7B14\u8BB0\u3002\u5EFA\u8BAE\u7EF4\u6301\u539F\u6837\uFF0C\u5728\u8868\u683C\u73AF\u5883\u5185\u4EA4\u7ED9\u9AD8\u7EA7\u8868\u683C\u63D2\u4EF6\u5904\u7406 Tab \u952E\u7ED1\u5B9A\u3002",
"zh-TW": "\u7576\u6E38\u6A19\u5728\u4E00\u500B\u8868\u683C\u5167\u6642\u6309\u4E0B Tab \u6703\u5275\u5EFA\u65B0\u8868\u683C\u6216\u8DF3\u5230\u4E0B\u4E00\u500B\u5132\u5B58\u683C\u3002\u9700\u8981\u5728\u9032\u968E\u8868\u683C\u63D2\u4EF6\u4E2D\u95DC\u9589\u300CBind tab to table navigation\u300D\u4E26\u91CD\u555F\u9ED1\u66DC\u77F3\u7B46\u8A18\u3002\u5EFA\u8B70\u7DAD\u6301\u539F\u6A23\uFF0C\u5728\u8868\u683C\u74B0\u5883\u5167\u4EA4\u7D66\u9032\u968E\u8868\u683C\u63D2\u4EF6\u8655\u7406 Tab \u9375\u7D81\u5B9A\u3002"
},
outliner: {
"en-US": "Use with Obsidian Outliner plugin",
"zh-CN": "\u548C Obsidian Outliner plugin \u5927\u7EB2\u63D2\u4EF6\u4E00\u8D77\u4F7F\u7528",
"zh-TW": "\u548C Obsidian Outliner plugin \u5927\u7DB1\u63D2\u4EF6\u4E00\u8D77\u4F7F\u7528"
},
outlinerDesc: {
"en-US": "Try execute Outliner indent operation when tab is pressed, if nothing changed, use default Restore Tab Key plugin behavior. Basically, if the selection is empty and cursor is on a list item, it will indent the item if Tab is pressed, unless it can't, in that case a tab will be inserted. A list item can't be indented if it is already one level deeper than the item above. This plugin can also indent everything under the selected item recursively, and relabel numbered lists.",
"zh-CN": "\u5C1D\u8BD5\u6267\u884C Outliner \u7684\u7F29\u6392\u6307\u4EE4\uFF0C\u5982\u679C\u6CA1\u6709\u4EFB\u4F55\u66F4\u6539\u5219\u5957\u7528\u672C\u63D2\u4EF6\u7684\u8BBE\u5B9A\u3002\u57FA\u672C\u4E0A\u5F53\u6309\u4E0B Tab \u952E\uFF0C\u4E14\u6CA1\u6709\u6587\u5B57\u88AB\u9009\u53D6\uFF0C\u4E14\u5149\u6807\u5728\u6E05\u5355\u5217\u8868\u4E0A\u7684\u8BDD\uFF0C\u4F1A\u76F4\u63A5\u5C06\u8BE5\u6E05\u5355\u5217\u8868\u7B49\u7EA7",
"zh-TW": "\u5617\u8A66\u57F7\u884C Outliner \u7684\u7E2E\u6392\u6307\u4EE4\uFF0C\u5982\u679C\u6C92\u6709\u4EFB\u4F55\u8B8A\u5316\u7684\u8A71\u5247\u5957\u7528\u672C\u63D2\u4EF6\u7684\u8A2D\u5B9A\u3002\u57FA\u672C\u4E0A\u7576\u6309\u4E0B Tab \u9375\uFF0C\u4E14\u6C92\u6709\u6587\u5B57\u88AB\u9078\u53D6\uFF0C\u4E14\u6E38\u6A19\u5728\u6E05\u55AE\u5217\u8868\u4E0A\u7684\u8A71\uFF0C\u6703\u76F4\u63A5\u5C07\u8A72\u6E05\u55AE\u5217\u8868\u7B49\u7D1A"
},
additional: {
"en-US": "Additional Options",
"zh-CN": "\u5176\u4ED6\u9009\u9879",
"zh-TW": "\u5176\u4ED6\u9078\u9805"
},
customHotkey: {
"en-US": "Custom hotkey",
"zh-CN": "\u81EA\u5B9A\u4E49\u70ED\u952E",
"zh-TW": "\u81EA\u5B9A\u7FA9\u71B1\u9375"
},
customHotkeyDesc: {
"en-US": `Tab doesn't work for you? Try "Ctrl-Alt-Space", or "Shift-F6"? (Reload required. Go to "Community plugins" and disable then enable this plugin will do)`,
"zh-CN": '\u4E0D\u60F3\u7528 Tab \u952E\uFF1F\u8BD5\u8BD5 "Ctrl-Alt-Space" \u6216\u8005 "Shift-F6"\uFF1F\uFF08\u9700\u8981\u91CD\u65B0\u542F\u52A8\u63D2\u4EF6\uFF0C\u5230\u300C\u7B2C\u4E09\u65B9\u63D2\u4EF6\u300D\u5173\u95ED\u6B64\u63D2\u4EF6\u540E\u518D\u5F00\u542F\u5373\u53EF\uFF09',
"zh-TW": '\u4E0D\u60F3\u7528 Tab \u9375\uFF1F\u8A66\u8A66 "Ctrl-Alt-Space" \u6216\u8005 "Shift-F6"\uFF1F\uFF08\u9700\u8981\u91CD\u65B0\u555F\u52D5\u63D2\u4EF6\uFF0C\u5230\u300C\u7B2C\u4E09\u65B9\u63D2\u4EF6\u300D\u95DC\u9589\u6B64\u63D2\u4EF6\u5F8C\u518D\u958B\u555F\u5373\u53EF\uFF09'
},
language: {
"en-US": "Settings page interface language",
"zh-CN": "\u8BBE\u5B9A\u9875\u663E\u793A\u8BED\u8A00",
"zh-TW": "\u8A2D\u5B9A\u9801\u986F\u793A\u8A9E\u8A00"
},
languageDesc: {
"en-US": "Would Chinese be better?",
"zh-CN": "\u82F1\u6587\u4F1A\u66F4\u9002\u5408\u5417\uFF1F",
"zh-TW": "\u82F1\u6587\u6703\u66F4\u9069\u5408\u55CE\uFF1F"
},
developerMode: {
"en-US": "Developer Mode",
"zh-CN": "\u5F00\u53D1\u8005\u6A21\u5F0F",
"zh-TW": "\u958B\u767C\u8005\u6A21\u5F0F"
},
developerModeDesc: {
"en-US": 'Enable debug on the Obsidian Developer Console, accessible by pressing Ctrl+Shift+I and selecting the Console tab, and show hidden, deprecated settings. If you encounter problems with the plugin, please open an issue on Github. If the plugin is not working properly, check if the console shows that the tab key event is triggered. If not, either the hotkey is configured wrong, you may try other keys that are less likely to have a conflict, like "F6". If the tab key is not triggering, it is most likely that other plugins have acquired the tab key event. Lastly, you may try testing in a new vault (accessible at the bottom left toolbar).',
"zh-CN": '\u5F00\u542F\u4FA6\u9519\u4FE1\u606F\uFF0C\u5E76\u663E\u793A\u88AB\u9690\u85CF\u3001\u9000\u5F79\u7684\u8BBE\u5B9A\u4EEC\u3002\u7EC8\u7AEF\u53EF\u4EE5\u900F\u8FC7\u6309\u4E0B Ctrl+Shift+I \u540E\u9009\u62E9 Console \u5206\u9875\u3002\u82E5\u9047\u5230\u95EE\u9898\uFF0C\u8BF7\u5728 Github \u53D1\u8D77 issue\u3002\u8BF7\u5148\u68C0\u67E5 Console \u662F\u5426\u5728\u6309\u4E0B Tab \u952E\u540E\u663E\u793A "[restore tab] Tab key event triggered"\u3002\u82E5\u5426\uFF0C\u5C1D\u8BD5\u5C06\u81EA\u5B9A\u4E49\u70ED\u952E\u6539\u4E3A\u6BD4\u5982\u51B2\u7A81\u6982\u7387\u8F83\u4F4E\u7684 "F6"\u3002\u82E5 Tab \u952E\u65E0\u6CD5\u89E6\u53D1\uFF0C\u6700\u6709\u53EF\u80FD\u7684\u662F\u5176\u4ED6\u63D2\u4EF6\u5C06 Tab \u952E\u4E8B\u4EF6\u62FF\u8D70\u4E86\u3002\u6700\u540E\uFF0C\u4F60\u8FD8\u53EF\u4EE5\u5F00\u542F\u65B0\u7684\u50A8\u5B58\u5E93\uFF08\u5DE6\u4E0B\u5DE5\u5177\u5217\uFF09\u8FDB\u884C\u6D4B\u8BD5\u3002',
"zh-TW": '\u958B\u555F\u5075\u932F\u8A0A\u606F\uFF0C\u4E26\u986F\u793A\u88AB\u96B1\u85CF\u3001\u9000\u5F79\u7684\u8A2D\u5B9A\u5011\u3002\u7D42\u7AEF\u53EF\u4EE5\u900F\u904E\u6309\u4E0B Ctrl+Shift+I \u5F8C\u9078\u64C7 Console \u5206\u9801\u3002\u82E5\u9047\u5230\u554F\u984C\uFF0C\u8ACB\u5728 Github \u767C\u8D77 issue\u3002\u8ACB\u5148\u6AA2\u67E5 Console \u662F\u5426\u5728\u6309\u4E0B Tab \u9375\u5F8C\u986F\u793A "[restore tab] Tab key event triggered"\u3002\u82E5\u5426\uFF0C\u5617\u8A66\u5C07\u81EA\u5B9A\u7FA9\u71B1\u9375\u6539\u70BA\u6BD4\u5982\u885D\u7A81\u6A5F\u7387\u8F03\u4F4E\u7684 "F6"\u3002\u82E5 Tab \u9375\u7121\u6CD5\u89F8\u767C\uFF0C\u6700\u6709\u53EF\u80FD\u7684\u662F\u5176\u4ED6\u63D2\u4EF6\u5C07 Tab \u9375\u4E8B\u4EF6\u62FF\u8D70\u4E86\u3002\u6700\u5F8C\uFF0C\u4F60\u9084\u53EF\u4EE5\u958B\u555F\u65B0\u7684\u5132\u5B58\u5EAB\uFF08\u5DE6\u4E0B\u5DE5\u5177\u5217\uFF09\u9032\u884C\u6E2C\u8A66\u3002'
},
auto: {
"en-US": "Auto",
"zh-CN": "\u81EA\u52A8",
"zh-TW": "\u81EA\u52D5"
},
bracesAutoIndent: {
"en-US": "Braces Auto Indent",
"zh-CN": "\u62EC\u5F27\u81EA\u52A8\u7F29\u8FDB",
"zh-TW": "\u62EC\u5F27\u81EA\u52D5\u7E2E\u6392"
},
enableBracesAutoIndent: {
"en-US": "Enable braces auto indent",
"zh-CN": "\u542F\u7528\u62EC\u5F27\u81EA\u52A8\u7F29\u8FDB",
"zh-TW": "\u555F\u7528\u62EC\u5F27\u81EA\u52D5\u7E2E\u6392"
},
enableBracesAutoIndentDesc: {
"en-US": "When the cursor is next to a brace character, pressing the Enter key will duplicate the indentation from the current line and then add an additional indent according to Obsidian settings",
"zh-CN": "\u7576\u5149\u6A19\u5728\u62EC\u5F27\u5B57\u5143\u65C1\u908A\u6642\uFF0C\u6309\u4E0B Enter \u9375\u6703\u8907\u88FD\u7576\u884C\u7684\u7E2E\u9032\uFF0C\u4E26\u518D\u52A0\u4E00\u500B\u7E2E\u9032",
"zh-TW": "\u7576\u6E38\u6A19\u5728\u62EC\u5F27\u5B57\u5143\u65C1\u908A\u6642\uFF0C\u6309\u4E0B Enter \u9375\u6703\u8907\u88FD\u7576\u884C\u7684\u7E2E\u6392\uFF0C\u4E26\u518D\u52A0\u4E00\u500B\u7E2E\u6392"
},
braceSetCode: {
"en-US": "Paired braces set (within code blocks)",
"zh-CN": "\u6210\u5BF9\u6807\u70B9\u7B26\u53F7/\u62EC\u53F7\u96C6\u5408\uFF08\u5728\u4EE3\u7801\u533A\u5757\u5185\u65F6\uFF09",
"zh-TW": "\u6210\u5C0D\u6A19\u9EDE\u7B26\u865F/\u62EC\u5F27\u96C6\u5408\uFF08\u5728\u7A0B\u5F0F\u78BC\u5340\u584A\u5167\u6642\uFF09"
},
braceSetCodeDesc: {
"en-US": "Match the string before the cursor on the line, and after the line. If both match for the same index in the json array of regexes, a paired brace is detected.",
"zh-CN": "\u5C06\u5149\u6807\u524D\u9762\u53CA\u540E\u9762\u7684\u5B57\u4E32\u8FDB\u884C\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u82E5\u5728json\u9635\u5217\u7684\u540C\u4E00\u4E2A\u4F4D\u7F6E\u6210\u529F\u5339\u914D\u5219\u89C6\u4E3A\u6210\u5BF9\u6807\u70B9\u7B26\u53F7\u3002",
"zh-TW": "\u5C07\u6E38\u6A19\u524D\u9762\u53CA\u5F8C\u9762\u7684\u5B57\u4E32\u9032\u884C\u6B63\u898F\u8868\u9054\u5F0F\u5339\u914D\uFF0C\u82E5\u5728json\u9663\u5217\u7684\u540C\u4E00\u500B\u4F4D\u7F6E\u6210\u529F\u5339\u914D\u5247\u8996\u70BA\u6210\u5C0D\u6A19\u9EDE\u7B26\u865F\u3002"
},
braceSetMarkdown: {
"en-US": "Brace regex (outside code blocks)",
"zh-CN": "\u6210\u5BF9\u6807\u70B9\u7B26\u53F7/\u62EC\u53F7\u96C6\u5408\uFF08\u4E0D\u5728\u4EE3\u7801\u533A\u5757\u5185/\u4E00\u822C Markdown \u533A\u5757\u5185\u65F6\uFF09",
"zh-TW": "\u6210\u5C0D\u6A19\u9EDE\u7B26\u865F/\u62EC\u5F27\u96C6\u5408\uFF08\u4E0D\u5728\u7A0B\u5F0F\u78BC\u5340\u584A\u5167/\u4E00\u822C Markdown \u5340\u584A\u5167\u6642\uFF09"
},
braceSetMarkdownDesc: {
"en-US": "Same thing but when cursor is not in a code block. Default includes multi line math expression $$ and HTML tags. Note that indenting doesn't get rendered in Markdown.",
"zh-CN": "\u548C\u524D\u8005\u4E00\u6837\uFF0C\u4F46\u5728\u5149\u6807\u4E0D\u5728\u4EE3\u7801\u533A\u5757\u5185\u65F6\u3002\u9002\u7528\u4E00\u822C Markdown \u8BED\u6CD5\u4F7F\u7528\u3002\u9884\u8BBE\u503C\u5305\u62EC\u591A\u884C\u6570\u5B66\u516C\u5F0F\u548C HTML tags\u3002\u6CE8\u610F\uFF1A\u7F29\u8FDB\u4E0D\u4F1A\u88AB Markdown \u6E32\u67D3\u51FA\u6765",
"zh-TW": "\u548C\u524D\u8005\u4E00\u6A23\uFF0C\u4F46\u5728\u6E38\u6A19\u4E0D\u5728\u7A0B\u5F0F\u78BC\u5340\u584A\u5167\u6642\u3002\u9069\u7528\u4E00\u822C Markdown \u8A9E\u6CD5\u4F7F\u7528\u3002\u9810\u8A2D\u503C\u5305\u62EC\u591A\u884C\u6578\u5B78\u516C\u5F0F\u548C HTML tags\u3002 \u6CE8\u610F\uFF1A\u7E2E\u6392\u4E0D\u6703\u88AB Markdown \u6E32\u67D3\u51FA\u4F86"
},
extraButtonRestore: {
"en-US": "Restore default",
"zh-CN": "\u6062\u5FA9\u9ED8\u8BA4\u503C",
"zh-TW": "\u6062\u5FA9\u9810\u8A2D\u503C"
},
extraButtonDisable: {
"en-US": "Disable",
"zh-CN": "\u5173\u95ED",
"zh-TW": "\u95DC\u9589"
}
};
// main.ts
var import_obsidian = require("obsidian");
var DEFAULT_SETTINGS = {
indentsIfSelection: true,
indentsIfSelectionOnlyForMultipleLines: true,
useSpaces: false,
alignSpaces: true,
useHardSpace: false,
spacesCount: 4,
allowException: false,
exceptionRegex: "^[\\s\xA0]*(-|\\d+\\.)( \\[ \\])?\\s*$",
useAdvancedTables: false,
obsidianTableEditor: true,
useOutlinerBetterTab: true,
hotkey: "Tab",
language: "auto",
developerMode: false,
enableBracesAutoIndent: true,
braceCodeSetOpen: '["\\\\{$", "\\\\[$", "\\\\($", "\\"$", "\'$", "`$"]',
braceCodeSetClose: '["^\\\\}", "^\\\\]", "^\\\\)", "^\\"", "^\'", "^`"]',
braceMarkdownSetOpen: `["\\\\{$", "\\\\[$", "\\\\($", "\\"$", "'$", "\\\\$\\\\$$", "<.+>$", "\xA1$", "\xBF$"]`,
braceMarkdownSetClose: `["^\\\\}", "^\\\\]", "^\\\\)", "^\\"", "^'", "^\\\\$\\\\$", "^<\\\\/\\\\w+>", "^!", "^?"]`,
indentCharacters: " ",
activateInCodeBlocks: true,
activateInLists: false,
activateInTables: false,
activateInInlineCode: false,
activateInOthers: false
};
var TabKeyPlugin = class extends import_obsidian.Plugin {
constructor() {
super(...arguments);
this.getToken = (state) => {
const ast = (0, import_language.syntaxTree)(state);
return ast.resolveInner(state.selection.main.head, -1).type.name;
};
this.log = (msg) => {
if (this.settings.developerMode)
console.log("[restore tab] " + msg);
};
}
async onload() {
await this.loadSettings();
this.addSettingTab(new SettingTab(this.app, this));
let outlinerIndenting = false;
this.registerEditorExtension(import_state.Prec.highest(import_view.keymap.of([
{
key: this.settings.hotkey,
run: () => {
this.log("Tab key event triggered");
if (outlinerIndenting) {
this.log("Failed to execute: Outliner recursive call blocked");
return false;
}
const view = this.app.workspace.getActiveViewOfType(import_obsidian.MarkdownView);
if (!view) {
this.log("Failed to execute: Cannot get editor view");
return false;
}
const editor = view.editor;
const sourceMode = view.getState().source;
const token = this.getToken(editor.cm.state);
this.log("Current token: " + token);
const cursorFrom = editor.getCursor("from");
const cursorTo = editor.getCursor("to");
const somethingSelected = cursorFrom.line != cursorTo.line || cursorFrom.ch != cursorTo.ch;
const app = this.app;
const isTable = RegExp(`^ *\\|`, "u").test(editor.getLine(cursorFrom.line)) || token.includes("HyperMD-table");
if (token.includes("inline-code")) {
if (!this.settings.activateInInlineCode) {
this.log("Did not execute: Inline code environment not activated");
return false;
}
} else if (token.includes("hmd-codeblock")) {
if (!this.settings.activateInCodeBlocks) {
this.log("Did not execute: Code block environment not activated");
return false;
}
} else if (token.includes("list")) {
if (!this.settings.activateInLists) {
this.log("Did not execute: List environment not activated");
return false;
}
} else if (!isTable) {
if (!this.settings.activateInOthers) {
this.log("Did not execute: Other environments not activated");
return false;
}
}
if (this.settings.useOutlinerBetterTab && RegExp("^[\\s]*(-|\\d+\\.)", "u").test(editor.getLine(cursorFrom.line))) {
const prevLine = editor.getLine(cursorFrom.line);
outlinerIndenting = true;
this.log("Trying Outliner indent");
app.commands.executeCommandById("obsidian-outliner:indent-list");
outlinerIndenting = false;
if (prevLine != editor.getLine(cursorFrom.line)) {
this.log("Did not execute: Handled by Outliner");
return true;
}
}
if (isTable && !this.settings.activateInTables) {
if (!sourceMode) {
this.log("Table environment in Live Preview mode");
if (this.settings.obsidianTableEditor) {
this.log("Did not execute: Handled by Obsidian Table Editor");
return false;
}
} else {
this.log("Table environment in Source mode");
if (this.settings.useAdvancedTables) {
app.commands.executeCommandById("table-editor-obsidian:next-cell");
this.log("Did not execute: Handled by Advanced Table");
return true;
}
}
}
if (somethingSelected && this.settings.indentsIfSelection && (!this.settings.indentsIfSelectionOnlyForMultipleLines || cursorTo.line != cursorFrom.line)) {
editor.exec("indentMore");
this.log("Indented");
} else {
const cursorFrom2 = editor.getCursor("from");
const tabStr = this.settings.useSpaces ? (this.settings.useHardSpace ? "\xA0" : " ").repeat(this.settings.alignSpaces ? this.settings.spacesCount - cursorFrom2.ch % this.settings.spacesCount : this.settings.spacesCount) : " ";
if (!somethingSelected && this.settings.allowException) {
if (RegExp(this.settings.exceptionRegex, "u").test(editor.getLine(cursorFrom2.line))) {
editor.exec("indentMore");
this.log("Indented (regex exception)");
return true;
}
}
editor.replaceSelection(tabStr);
editor.setCursor({
line: cursorFrom2.line,
ch: cursorFrom2.ch + tabStr.length
});
this.log("Tab inserted");
}
return true;
},
preventDefault: false
},
{
key: "Enter",
run: () => {
this.log("Enter key event triggered");
if (!this.settings.enableBracesAutoIndent)
return false;
const view = this.app.workspace.getActiveViewOfType(import_obsidian.MarkdownView);
if (!view) {
this.log("Failed to execute: Cannot get editor view");
return false;
}
const editor = view.editor;
if (editor.getCursor("from").line != editor.getCursor("to").line || editor.getCursor("from").ch != editor.getCursor("to").ch)
return false;
const cursor = editor.getCursor("from");
const line = editor.getLine(cursor.line);
const token = this.getToken(editor.cm.state);
if (this.settings.developerMode) {
this.log("Current token: " + token);
this.log("which is" + (token.includes("hmd-codeblock") ? " " : " not ") + "a code block, matching regexes for " + (token.includes("hmd-codeblock") ? "code" : "markdown"));
}
let braceDetected = false;
const bracesOpen = JSON.parse(token.includes("hmd-codeblock") ? this.settings.braceCodeSetOpen : this.settings.braceMarkdownSetOpen);
const bracesClose = JSON.parse(token.includes("hmd-codeblock") ? this.settings.braceCodeSetClose : this.settings.braceMarkdownSetClose);
const pairs = Math.min(bracesOpen.length, bracesClose.length);
this.log("there are " + pairs + " pairs of braces defined");
for (let i = 0; i < pairs; i++) {
this.log("matching regex " + bracesOpen[i] + " and " + bracesClose[i]);
if (RegExp(bracesOpen[i], "u").test(line.substring(0, cursor.ch)) && RegExp(bracesClose[i], "u").test(line.substring(cursor.ch))) {
braceDetected = true;
break;
}
}
if (braceDetected) {
this.log("Code Auto Indent: Brace detected");
let indentPrefixLen = 0;
while (this.settings.indentCharacters.includes(line[indentPrefixLen]))
indentPrefixLen++;
editor.exec("newlineAndIndent");
if (cursor.ch == line.length) {
this.log("Pressed enter without closing pair to the right of the cursor");
} else if (editor.getLine(cursor.line + 1).length && !this.settings.indentCharacters.includes(editor.getLine(cursor.line + 1).charAt(editor.getLine(cursor.line + 1).length - 1))) {
this.log("Closing pair or whatever was to the right of the cursor is still here, entering one more time");
editor.exec("newlineAndIndent");
} else {
this.log("Closing pair was automatically moved one extra line down");
}
editor.setLine(cursor.line + 1, line.substring(0, indentPrefixLen));
if (line.substring(cursor.ch)) {
editor.setLine(cursor.line + 2, line.substring(0, indentPrefixLen) + line.substring(cursor.ch));
}
editor.setCursor(cursor.line + 1, editor.getLine(cursor.line + 1).length);
editor.exec("indentMore");
editor.setCursor(cursor.line + 1, editor.getLine(cursor.line + 1).length);
return true;
}
return false;
}
}
])));
}
createKeymapRunCallback() {
return (view) => {
return true;
};
}
onunload() {
}
async loadSettings() {
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
}
async saveSettings() {
await this.saveData(this.settings);
}
};
var SettingTab = class extends import_obsidian.PluginSettingTab {
constructor(app, plugin) {
super(app, plugin);
this.plugin = plugin;
}
display() {
const appLang = window.localStorage.getItem("language");
this.plugin.log("Detected application language: " + appLang + (appLang == null ? " (aka English)" : ""));
const lang = this.plugin.settings.language == "auto" ? appLang == "zh-TW" ? "zh-TW" : appLang == "zh" ? "zh-CN" : "en-US" : this.plugin.settings.language;
this.plugin.log("Using localization: " + lang);
const { containerEl } = this;
containerEl.empty();
containerEl.createEl("h3", {
text: localization["title"][lang]
});
containerEl.createEl("i", {
text: localization["description"][lang]
});
containerEl.createEl("br");
containerEl.createEl("br");
new import_obsidian.Setting(containerEl).setName(localization["language"][lang]).setDesc(localization["languageDesc"][lang]).addDropdown((toggle) => toggle.addOptions({
auto: localization["auto"][lang],
"en-US": "English (US)",
"zh-CN": "\u7B80\u4F53\u4E2D\u6587",
"zh-TW": "\u7E41\u9AD4\u4E2D\u6587"
}).setValue(this.plugin.settings.language).onChange(async (value) => {
this.plugin.settings.language = value;
await this.plugin.saveSettings();
this.display();
}));
containerEl.createEl("h5", {
text: localization["tabOrSpace"][lang]
});
new import_obsidian.Setting(containerEl).setName(localization["useSpacesInsteadOfTab"][lang]).setDesc(localization["useSpacesInsteadOfTabDesc"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.useSpaces).onChange(async (value) => {
this.plugin.settings.useSpaces = value;
this.display();
await this.plugin.saveSettings();
}));
if (this.plugin.settings.useSpaces) {
new import_obsidian.Setting(containerEl).setName(localization["spaceCount"][lang]).setDesc(localization["spaceCountDesc"][lang]).addSlider((slider) => slider.setValue(this.plugin.settings.spacesCount).setLimits(2, 8, 1).setDynamicTooltip().onChange(async (value) => {
this.plugin.settings.spacesCount = value;
await this.plugin.saveSettings();
}));
new import_obsidian.Setting(containerEl).setName(localization["alignSpaces"][lang]).setDesc(localization["alignSpacesDesc"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.alignSpaces).onChange(async (value) => {
this.plugin.settings.alignSpaces = value;
await this.plugin.saveSettings();
}));
new import_obsidian.Setting(containerEl).setName(localization["useHardSpaces"][lang]).setDesc(localization["useHardSpacesDesc"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.useHardSpace).onChange(async (value) => {
this.plugin.settings.useHardSpace = value;
await this.plugin.saveSettings();
}));
}
containerEl.createEl("h5", {
text: localization["tabKeyBehavior"][lang]
});
new import_obsidian.Setting(containerEl).setName(localization["activateIn"][lang]).setDesc(localization["activateInDesc"][lang]);
new import_obsidian.Setting(containerEl).setName("\xA0\xA0\xA0\xA0" + localization["activateInCodeBlocks"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.activateInCodeBlocks).onChange(async (value) => {
this.plugin.settings.activateInCodeBlocks = value;
await this.plugin.saveSettings();
}));
new import_obsidian.Setting(containerEl).setName("\xA0\xA0\xA0\xA0" + localization["activateInLists"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.activateInLists).onChange(async (value) => {
this.plugin.settings.activateInLists = value;
await this.plugin.saveSettings();
}));
new import_obsidian.Setting(containerEl).setName("\xA0\xA0\xA0\xA0" + localization["activateInTables"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.activateInTables).onChange(async (value) => {
this.plugin.settings.activateInTables = value;
await this.plugin.saveSettings();
}));
new import_obsidian.Setting(containerEl).setName("\xA0\xA0\xA0\xA0" + localization["activateInInlineCode"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.activateInInlineCode).onChange(async (value) => {
this.plugin.settings.activateInInlineCode = value;
await this.plugin.saveSettings();
}));
new import_obsidian.Setting(containerEl).setName("\xA0\xA0\xA0\xA0" + localization["activateInOthers"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.activateInOthers).onChange(async (value) => {
this.plugin.settings.activateInOthers = value;
await this.plugin.saveSettings();
}));
new import_obsidian.Setting(containerEl).setName(localization["indentWhenSelectionNotEmpty"][lang]).setDesc(localization["indentWhenSelectionNotEmptyDesc"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.indentsIfSelection).onChange(async (value) => {
this.plugin.settings.indentsIfSelection = value;
this.display();
await this.plugin.saveSettings();
}));
if (this.plugin.settings.indentsIfSelection) {
new import_obsidian.Setting(containerEl).setName(localization["indentOnlySelectionMultipleLine"][lang]).setDesc(localization["indentOnlySelectionMultipleLineDesc"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.indentsIfSelectionOnlyForMultipleLines).onChange(async (value) => {
this.plugin.settings.indentsIfSelectionOnlyForMultipleLines = value;
await this.plugin.saveSettings();
}));
}
if (this.plugin.settings.developerMode) {
new import_obsidian.Setting(containerEl).setName(localization["allowException"][lang]).setDesc(localization["allowExceptionDesc"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.allowException).onChange(async (value) => {
this.plugin.settings.allowException = value;
this.display();
await this.plugin.saveSettings();
}));
if (this.plugin.settings.allowException) {
new import_obsidian.Setting(containerEl).setName(localization["exceptionRegex"][lang]).setDesc(localization["exceptionRegexDesc"][lang]).addText((textbox) => textbox.setValue(this.plugin.settings.exceptionRegex).setPlaceholder("Regex").onChange(async (value) => {
this.plugin.settings.exceptionRegex = value;
await this.plugin.saveSettings();
})).addExtraButton((button) => button.setIcon("rotate-ccw").setTooltip(localization["extraButtonRestore"][lang]).onClick(async () => {
this.plugin.settings.exceptionRegex = DEFAULT_SETTINGS.exceptionRegex;
this.display();
await this.plugin.saveSettings();
}));
}
}
containerEl.createEl("h5", {
text: localization["bracesAutoIndent"][lang]
});
new import_obsidian.Setting(containerEl).setName(localization["enableBracesAutoIndent"][lang]).setDesc(localization["enableBracesAutoIndentDesc"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.enableBracesAutoIndent).onChange(async (value) => {
this.plugin.settings.enableBracesAutoIndent = value;
this.display();
await this.plugin.saveSettings();
}));
if (this.plugin.settings.enableBracesAutoIndent) {
new import_obsidian.Setting(containerEl).setName(localization["braceSetCode"][lang]).setDesc(localization["braceSetCodeDesc"][lang]).addTextArea((textbox) => textbox.setValue(this.plugin.settings.braceCodeSetOpen).setPlaceholder("json array of regexes").onChange(async (value) => {
this.plugin.settings.braceCodeSetOpen = value;
await this.plugin.saveSettings();
})).addTextArea((textbox) => textbox.setValue(this.plugin.settings.braceCodeSetClose).setPlaceholder("json array of regexes").onChange(async (value) => {
this.plugin.settings.braceCodeSetClose = value;
await this.plugin.saveSettings();
})).addExtraButton((button) => button.setIcon("rotate-ccw").setTooltip(localization["extraButtonRestore"][lang]).onClick(async () => {
this.plugin.settings.braceCodeSetOpen = DEFAULT_SETTINGS.braceCodeSetOpen;
this.plugin.settings.braceCodeSetClose = DEFAULT_SETTINGS.braceCodeSetClose;
this.display();
await this.plugin.saveSettings();
})).addExtraButton((button) => button.setIcon("ban").setTooltip(localization["extraButtonDisable"][lang]).onClick(async () => {
this.plugin.settings.braceCodeSetOpen = "[]";
this.plugin.settings.braceCodeSetClose = "[]";
this.display();
await this.plugin.saveSettings();
}));
new import_obsidian.Setting(containerEl).setName(localization["braceSetMarkdown"][lang]).setDesc(localization["braceSetMarkdownDesc"][lang]).addTextArea((textbox) => textbox.setValue(this.plugin.settings.braceMarkdownSetOpen).setPlaceholder("json array of regexes").onChange(async (value) => {
this.plugin.settings.braceMarkdownSetOpen = value;
await this.plugin.saveSettings();
})).addTextArea((textbox) => textbox.setValue(this.plugin.settings.braceMarkdownSetClose).setPlaceholder("json array of regexes").onChange(async (value) => {
this.plugin.settings.braceMarkdownSetClose = value;
await this.plugin.saveSettings();
})).addExtraButton((button) => button.setIcon("rotate-ccw").setTooltip(localization["extraButtonRestore"][lang]).onClick(async () => {
this.plugin.settings.braceMarkdownSetOpen = DEFAULT_SETTINGS.braceMarkdownSetOpen;
this.plugin.settings.braceMarkdownSetClose = DEFAULT_SETTINGS.braceMarkdownSetClose;
this.display();
await this.plugin.saveSettings();
})).addExtraButton((button) => button.setIcon("ban").setTooltip(localization["extraButtonDisable"][lang]).onClick(async () => {
this.plugin.settings.braceMarkdownSetOpen = "[]";
this.plugin.settings.braceMarkdownSetClose = "[]";
this.display();
await this.plugin.saveSettings();
}));
}
if (this.plugin.settings.developerMode) {
containerEl.createEl("h5", {
text: localization["pluginCompatibility"][lang]
});
new import_obsidian.Setting(containerEl).setName(localization["obsidianTableEditor"][lang]).setDesc(localization["obsidianTableEditorDesc"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.obsidianTableEditor).onChange(async (value) => {
this.plugin.settings.obsidianTableEditor = value;
await this.plugin.saveSettings();
}));
if (this.plugin.settings.developerMode) {
new import_obsidian.Setting(containerEl).setName(localization["advancedTables"][lang]).setDesc(localization["advancedTablesDesc"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.useAdvancedTables).onChange(async (value) => {
this.plugin.settings.useAdvancedTables = value;
await this.plugin.saveSettings();
}));
}
new import_obsidian.Setting(containerEl).setName(localization["outliner"][lang]).setDesc(localization["outlinerDesc"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.useOutlinerBetterTab).onChange(async (value) => {
this.plugin.settings.useOutlinerBetterTab = value;
await this.plugin.saveSettings();
}));
}
containerEl.createEl("h5", {
text: localization["additional"][lang]
});
new import_obsidian.Setting(containerEl).setName(localization["customHotkey"][lang]).setDesc(localization["customHotkeyDesc"][lang]).addText((textbox) => textbox.setValue(this.plugin.settings.hotkey).setPlaceholder("Ctrl-Alt-Space").onChange(async (value) => {
this.plugin.settings.hotkey = value;
await this.plugin.saveSettings();
})).addExtraButton((button) => button.setIcon("rotate-ccw").setTooltip(localization["extraButtonRestore"][lang]).onClick(async () => {
this.plugin.settings.hotkey = DEFAULT_SETTINGS.hotkey;
this.display();
await this.plugin.saveSettings();
}));
new import_obsidian.Setting(containerEl).setName(localization["developerMode"][lang]).setDesc(localization["developerModeDesc"][lang]).addToggle((toggle) => toggle.setValue(this.plugin.settings.developerMode).onChange(async (value) => {
this.plugin.settings.developerMode = value;
this.display();
await this.plugin.saveSettings();
}));
}
};
/* nosourcemap */
-10
View File
@@ -1,10 +0,0 @@
{
"id": "restore-tab-key",
"name": "Restore Tab Key",
"version": "1.18.6",
"minAppVersion": "0.15.0",
"description": "Restore tab key behaviour: tab key inserts a tab character, the way it should be.",
"author": "jerrymk",
"authorUrl": "https://github.com/jrymk",
"isDesktopOnly": false
}
+1252 -1082
View File
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -1,11 +1,11 @@
{
"id": "share-note",
"name": "Share Note",
"version": "1.3.1",
"minAppVersion": "0.15.0",
"version": "1.5.3",
"minAppVersion": "1.8.7",
"description": "Instantly share a note, with the full theme and content exactly like you see in Reading View. Data is shared encrypted by default, and only you and the person you send it to have the key.",
"author": "Alan Grainger",
"authorUrl": "https://github.com/alangrainger",
"fundingUrl": "https://ko-fi.com/alan_",
"isDesktopOnly": false
}
}
+4 -4
View File
@@ -1,18 +1,18 @@
.notice:has(.share-note-status-error.notice) {
.notice.share-note-status-error {
background: #c10000;
color: white
}
.notice:has(.share-note-status-info) {
.notice.share-note-status-info {
background: hsl(204, 86%, 53%);
color: white
}
.notice:has(.share-note-status-success) {
.notice.share-note-status-success {
background: #629762;
color: white
}
.notice:has(.share-note-status-success) a {
.notice.share-note-status-success a {
color: white;
text-decoration: underline;
}
File diff suppressed because one or more lines are too long
+8 -2
View File
@@ -1,11 +1,17 @@
{
"id": "templater-obsidian",
"name": "Templater",
"version": "2.19.3",
"description": "Create and use templates",
"version": "2.20.5",
"description": "Advanced templating and automation using handlebars-like syntax.",
"minAppVersion": "1.12.2",
"author": "SilentVoid",
"authorUrl": "https://github.com/SilentVoid13",
"fundingUrl": {
"GitHub Sponser (Zachatoo, maintainer)": "https://github.com/sponsors/Zachatoo",
"Ko-fi (Zachatoo, maintainer)": "https://ko-fi.com/zachatoo",
"GitHub Sponser (SilentVoid13, creator)": "https://github.com/sponsors/SilentVoid13",
"Paypal (SilentVoid13, creator)": "https://www.paypal.com/donate?hosted_button_id=U2SRGAFYXT32Q"
},
"helpUrl": "https://silentvoid13.github.io/Templater/",
"isDesktopOnly": false
}
+1 -1
View File
@@ -221,6 +221,6 @@ textarea.templater-prompt-input:focus {
}
li.CodeMirror-hint-active {
background: #08f;
background: #0088ff;
color: white;
}
+128 -121
View File
File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More