MacBook-Pro-de-Oscar.local 2026-6-13:18:24:58

This commit is contained in:
oskar
2026-06-13 18:24:59 +02:00
parent e23a1dead0
commit 095fc50a14
96 changed files with 20091 additions and 41578 deletions
+2 -1
View File
@@ -41,5 +41,6 @@
"obsidian-pandoc", "obsidian-pandoc",
"break-page", "break-page",
"obsidian-list-callouts", "obsidian-list-callouts",
"math-in-callout" "math-in-callout",
"zotlit"
] ]
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"id": "better-export-pdf", "id": "better-export-pdf",
"name": "Better Export PDF", "name": "Better Export PDF",
"version": "1.11.0", "version": "2.0.2",
"minAppVersion": "0.15.0", "minAppVersion": "0.15.0",
"description": "Export your notes to PDF, support export preview, add bookmarks outline and header/footer.", "description": "Export your notes to PDF, support export preview, add bookmarks outline and header/footer.",
"author": "l1xnan", "author": "l1xnan",
+78 -24
View File
@@ -2,66 +2,120 @@
display: flex; display: flex;
flex-direction: row; flex-direction: row;
height: 75vh; height: 75vh;
} .print-preview {
flex: 1;
#better-export-pdf .pdf-preview { overflow-x: hidden;
flex: auto; overflow-y: scroll;
position: relative; position: relative;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
overflow-x: hidden;
overflow-y: scroll;
align-content: flex-start; align-content: flex-start;
} }
.setting-wrapper {
width: 320px;
margin-left: 16px;
}
#better-export-pdf .pdf-preview .webview-wrapper { .setting-wrapper .setting-item[hidden] {
display: none;
}
}
#better-export-pdf .print-preview {
.webview-wrapper {
position: relative; position: relative;
height: 100%; height: 100%;
width: 100%; width: 100%;
} }
#better-export-pdf .pdf-preview .print-size { .print-size {
position: absolute; position: absolute;
right: 8px; right: 8px;
top: 8px; top: 36px;
z-index: 99; z-index: 99;
font-size: 0.6rem; font-size: 0.6rem;
white-space: pre-wrap; white-space: pre-wrap;
text-align: right; text-align: center;
visibility: hidden;
} }
#better-export-pdf .pdf-preview > div { & > div {
flex: 1; flex: 1;
height: 100%; height: 100%;
width: 100%; width: 100%;
} }
#better-export-pdf .pdf-preview > div.progress {
& > div.progress {
flex: none; flex: none;
height: auto; height: auto;
width: 100%; width: 100%;
text-align: left; text-align: left;
} }
#better-export-pdf .pdf-preview .filename { .filename {
font-size: 0.75rem; font-size: 0.75rem;
color: var(--color-base-60); 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 .filename:not(:first-child) {
padding-top: calc(var(--p-spacing));
} }
#better-export-pdf webview { #better-export-pdf {
flex: 1; .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%; height: 100%;
width: 100%; width: 100%;
} }
.pdf-canvas-page {
#better-export-pdf .setting-wrapper { width: 100%;
width: 320px; height: 100%;
margin-left: 16px; border: 1px solid var(--background-modifier-border);
} }
#better-export-pdf .setting-wrapper .setting-item[hidden] { .pdf-canvas-page :global(canvas) {
display: none; width: 100% !important;
height: auto !important;
display: block;
}
.icon svg {
width: var(--icon-xs) !important;
height: var(--icon-xs) !important;
}
}
/* 必须有此样式, 否则大纲锚点失效 */
@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;
}
} }
+1 -1
View File
@@ -286,7 +286,7 @@
"prevs" "prevs"
], ],
"lock_view": false, "lock_view": false,
"lock_path": "trace d'une matrice.md", "lock_path": "daily/2026-06-13.md",
"custom_sort_fields": false, "custom_sort_fields": false,
"custom_sort_field_labels": [] "custom_sort_field_labels": []
}, },
File diff suppressed because one or more lines are too long
+3 -4
View File
@@ -1,9 +1,9 @@
{ {
"id": "crumbs-obsidian", "id": "crumbs-obsidian",
"name": "Crumbs", "name": "Crumbs",
"version": "0.1.2", "version": "0.3.1",
"minAppVersion": "1.0.0", "minAppVersion": "1.0.0",
"description": "Breadcrumb navigation in Obsidian", "description": "Navigate files using breadcrumbs.",
"author": "Tony Grosinger", "author": "Tony Grosinger",
"authorUrl": "https://grosinger.net", "authorUrl": "https://grosinger.net",
"fundingUrl": { "fundingUrl": {
@@ -11,6 +11,5 @@
"Buy me a Coffee": "https://buymeacoffee.com/tgrosinger", "Buy me a Coffee": "https://buymeacoffee.com/tgrosinger",
"Paypal": "https://paypal.me/tgrosinger" "Paypal": "https://paypal.me/tgrosinger"
}, },
"isDesktopOnly": true, "isDesktopOnly": true
"donation": "https://buymeacoffee.com/tgrosinger"
} }
File diff suppressed because one or more lines are too long
+3 -3
View File
@@ -1,10 +1,10 @@
{ {
"id": "darlal-switcher-plus", "id": "darlal-switcher-plus",
"name": "Quick Switcher++", "name": "Quick Switcher++",
"version": "6.1.1", "version": "6.1.3",
"minAppVersion": "1.12.0", "minAppVersion": "1.12.7",
"description": "Enhanced Quick Switcher, search open panels, and symbols.", "description": "Enhanced Quick Switcher, search open panels, and symbols.",
"author": "darlal", "author": "darlal",
"authorUrl": "https://github.com/darlal/obsidian-switcher-plus", "authorUrl": "https://github.com/darlal",
"isDesktopOnly": false "isDesktopOnly": false
} }
+4
View File
@@ -31,6 +31,10 @@
color: var(--text-error); color: var(--text-error);
} }
.qsp-hidden {
display: none;
}
.qsp-tag { .qsp-tag {
background-color: var(--background-modifier-hover); background-color: var(--background-modifier-hover);
border-radius: var(--radius-s); border-radius: var(--radius-s);
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"id": "editing-toolbar", "id": "editing-toolbar",
"name": "Editing Toolbar", "name": "Editing Toolbar",
"version": "4.0.6", "version": "4.0.8",
"minAppVersion": "0.14.0", "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.", "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", "author": "Cuman",
+312 -8
View File
@@ -548,6 +548,7 @@ button[class^=editingToolbarCommandsubItem]::after {
align-items: center; align-items: center;
gap: 4px; gap: 4px;
padding-right: 0px !important; padding-right: 0px !important;
isolation: isolate;
} }
@@ -581,14 +582,19 @@ button[class^=editingToolbarCommandsubItem]::after {
content: none; 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; flex-shrink: 0;
position: relative;
z-index: 1;
} }
.editing-toolbar-ai-button-main { .editing-toolbar-ai-button-main {
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
min-width: 0; min-width: 0;
position: relative;
z-index: 1;
} }
.editing-toolbar-ai-button-label { .editing-toolbar-ai-button-label {
@@ -616,6 +622,8 @@ button[class^=editingToolbarCommandsubItem]::after {
font-size: 9px; font-size: 9px;
line-height: 1; line-height: 1;
flex-shrink: 0; flex-shrink: 0;
position: relative;
z-index: 1;
} }
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai.editing-toolbar-ai-button-fixed .editing-toolbar-ai-button-arrow { :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"]) .workspace-leaf-content:has(.cm-ai-loading, .cm-ai-result-panel[data-phase="streaming"])
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai, :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"]) 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 { :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; 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"]) .workspace-leaf-content:has(.cm-ai-loading, .cm-ai-result-panel[data-phase="streaming"])
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai > svg, :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"]) 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 { :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; 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"]) .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, :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"]) .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, :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"]) 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, :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"]) 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 { :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); 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 { .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 /* Some themes animate all workspace SVG icons. Opt toolbar controls out so
inherited visibility changes hide the whole toolbar in one frame. */ 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(.editingToolbarCommandsubItem-ai),
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) :is(.editingToolbarCommandItem, button[class^=editingToolbarCommandsubItem]):not(.editingToolbar-Divider-Line) *:not(.subitem), :is(#editingToolbarModalBar, #editingToolbarPopoverBar) :is(.editingToolbarCommandItem, button[class^=editingToolbarCommandsubItem]):not(.editingToolbar-Divider-Line):not(.editingToolbarCommandsubItem-ai) *:not(.subitem),
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) svg.svg-icon, :is(#editingToolbarModalBar, #editingToolbarPopoverBar) :is(.editingToolbarCommandItem, button[class^=editingToolbarCommandsubItem]):not(.editingToolbar-Divider-Line):not(.editingToolbarCommandsubItem-ai) svg.svg-icon,
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) svg.svg-icon * { :is(#editingToolbarModalBar, #editingToolbarPopoverBar) :is(.editingToolbarCommandItem, button[class^=editingToolbarCommandsubItem]):not(.editingToolbar-Divider-Line):not(.editingToolbarCommandsubItem-ai) svg.svg-icon * {
animation: none; animation: none;
transition: none !important; transition: none !important;
-webkit-transition: none !important; -webkit-transition: none !important;
@@ -2076,6 +2131,170 @@ body.auto-hide-header .workspace-tab-header-container + .workspace-tab-container
width: min(560px, calc(100vw - 32px)); width: min(560px, calc(100vw - 32px));
} }
.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-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 { .editing-toolbar-ai-consent {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@@ -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 { .cm-tooltip {
z-index: 1000; z-index: 1000;
} }
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"id": "excalibrain", "id": "excalibrain",
"name": "ExcaliBrain", "name": "ExcaliBrain",
"version": "0.2.17", "version": "0.2.18",
"minAppVersion": "1.1.6", "minAppVersion": "1.1.6",
"description": "A clean, intuitive and editable graph view for Obsidian", "description": "A clean, intuitive and editable graph view for Obsidian",
"author": "Zsolt Viczian", "author": "Zsolt Viczian",
+60 -23
View File
@@ -4683,11 +4683,36 @@ var DEFAULT_SETTINGS = {
gitLocation: "", gitLocation: "",
syncinterval: 0, syncinterval: 0,
isSyncOnLoad: false, isSyncOnLoad: false,
checkStatusOnLoad: true checkStatusOnLoad: true,
noticeLevel: "ALL",
showSyncSuccessNotice: true
}; };
var GHSyncPlugin = class extends import_obsidian.Plugin { 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() { async SyncNotes() {
new import_obsidian.Notice("Syncing to GitHub remote");
const remote = this.settings.remoteURL.trim(); const remote = this.settings.remoteURL.trim();
simpleGitOptions = { simpleGitOptions = {
//@ts-ignore //@ts-ignore
@@ -4700,9 +4725,12 @@ var GHSyncPlugin = class extends import_obsidian.Plugin {
let os = require("os"); let os = require("os");
let hostname = os.hostname(); let hostname = os.hostname();
let statusResult = await git.status().catch((e) => { 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; return;
}); });
if (!statusResult) {
return;
}
let clean = statusResult.isClean(); let clean = statusResult.isClean();
let date = new Date(); let date = new Date();
let msg = hostname + " " + date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() + ":" + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds(); 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 { try {
await git.add("./*").commit(msg); await git.add("./*").commit(msg);
} catch (e) { } catch (e) {
new import_obsidian.Notice(e); this.showNotice(e, "ERROR", 1e4);
return; return;
} }
} else {
new import_obsidian.Notice("Working branch clean");
} }
try { try {
await git.removeRemote("origin").catch((e) => { await git.removeRemote("origin").catch((e) => {
new import_obsidian.Notice(e); this.showNotice(e, "ERROR", 1e4);
}); });
await git.addRemote("origin", remote).catch((e) => { await git.addRemote("origin", remote).catch((e) => {
new import_obsidian.Notice(e); this.showNotice(e, "ERROR", 1e4);
}); });
} catch (e) { } catch (e) {
new import_obsidian.Notice(e); this.showNotice(e, "ERROR", 1e4);
return; return;
} }
try { try {
await git.fetch(); await git.fetch();
} catch (e) { } 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; return;
} }
new import_obsidian.Notice("GitHub Sync: Successfully set remote origin url");
try { try {
await git.pull("origin", "main", { "--no-rebase": null }, (err, update) => { 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) { } catch (e) {
let conflictStatus = await git.status().catch((e2) => { let conflictStatus = await git.status().catch((error) => {
new import_obsidian.Notice(e2, 1e4); this.showNotice(error, "ERROR", 1e4);
return; return;
}); });
if (!conflictStatus) {
return;
}
let conflictMsg = "Merge conflicts in:"; let conflictMsg = "Merge conflicts in:";
for (let c of conflictStatus.conflicted) { for (let c of conflictStatus.conflicted) {
conflictMsg += "\n " + c; conflictMsg += "\n " + c;
} }
conflictMsg += "\nResolve them or click sync button again to push with unresolved conflicts."; 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) { for (let c of conflictStatus.conflicted) {
this.app.workspace.openLinkText("", c, true); this.app.workspace.openLinkText("", c, true);
} }
@@ -4758,12 +4783,13 @@ var GHSyncPlugin = class extends import_obsidian.Plugin {
} }
if (!clean) { if (!clean) {
try { try {
git.push("origin", "main", ["-u"]); await git.push("origin", "main", ["-u"]);
new import_obsidian.Notice("GitHub Sync: Pushed on " + msg);
} catch (e) { } catch (e) {
new import_obsidian.Notice(e, 1e4); this.showNotice(e, "ERROR", 1e4);
return;
} }
} }
this.showSyncSuccessNotice();
} }
async CheckStatusOnStart() { async CheckStatusOnStart() {
try { try {
@@ -4781,10 +4807,10 @@ var GHSyncPlugin = class extends import_obsidian.Plugin {
if (this.settings.isSyncOnLoad == true) { if (this.settings.isSyncOnLoad == true) {
this.SyncNotes(); this.SyncNotes();
} else { } 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 { } else {
new import_obsidian.Notice("GitHub Sync: up to date with remote."); this.showNotice("GitHub Sync: up to date with remote.", "INFO");
} }
} catch (e) { } catch (e) {
} }
@@ -4810,7 +4836,7 @@ var GHSyncPlugin = class extends import_obsidian.Plugin {
(0, import_set_interval_async.setIntervalAsync)(async () => { (0, import_set_interval_async.setIntervalAsync)(async () => {
await this.SyncNotes(); await this.SyncNotes();
}, interval * 60 * 1e3); }, interval * 60 * 1e3);
new import_obsidian.Notice("Auto sync enabled"); this.showNotice("Auto sync enabled", "INFO");
} catch (e) { } catch (e) {
} }
} }
@@ -4823,6 +4849,9 @@ var GHSyncPlugin = class extends import_obsidian.Plugin {
} }
async loadSettings() { async loadSettings() {
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
if (this.settings.noticeLevel === "WARNINGS") {
this.settings.noticeLevel = "WARNING";
}
} }
async saveSettings() { async saveSettings() {
await this.saveData(this.settings); await this.saveData(this.settings);
@@ -4852,6 +4881,14 @@ var GHSyncSettingTab = class extends import_obsidian.PluginSettingTab {
this.plugin.settings.gitLocation = value; this.plugin.settings.gitLocation = value;
await this.plugin.saveSettings(); await this.plugin.saveSettings();
}).inputEl.addClass("my-plugin-setting-text2")); }).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) => { 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; this.plugin.settings.checkStatusOnLoad = value;
await this.plugin.saveSettings(); await this.plugin.saveSettings();
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"id": "github-sync", "id": "github-sync",
"name": "GitHub Sync", "name": "GitHub Sync",
"version": "1.0.6", "version": "1.0.7",
"minAppVersion": "0.15.0", "minAppVersion": "0.15.0",
"description": "Sync vault to personal GitHub.", "description": "Sync vault to personal GitHub.",
"author": "Kevin Chin", "author": "Kevin Chin",
+118 -69
View File
@@ -7601,7 +7601,7 @@ var require_lib = __commonJS({
}; };
}) })
}); });
var getAPI3 = (app) => { var getAPI2 = (app) => {
var _a2; var _a2;
if (app) if (app)
return (_a2 = app.plugins.plugins.dataview) === null || _a2 === void 0 ? void 0 : _a2.api; 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.EXPRESSION = EXPRESSION;
exports.KEYWORDS = KEYWORDS; exports.KEYWORDS = KEYWORDS;
exports.QUERY_LANGUAGE = QUERY_LANGUAGE; exports.QUERY_LANGUAGE = QUERY_LANGUAGE;
exports.getAPI = getAPI3; exports.getAPI = getAPI2;
exports.isPluginEnabled = isPluginEnabled; exports.isPluginEnabled = isPluginEnabled;
exports.parseField = parseField; exports.parseField = parseField;
} }
@@ -26559,11 +26559,11 @@ __export(main_exports, {
default: () => GraphLinkTypesPlugin default: () => GraphLinkTypesPlugin
}); });
module.exports = __toCommonJS(main_exports); module.exports = __toCommonJS(main_exports);
var import_obsidian = require("obsidian"); var import_obsidian2 = require("obsidian");
var import_obsidian_dataview2 = __toESM(require_lib()); var import_obsidian_dataview = __toESM(require_lib());
// src/linkManager.ts // src/linkManager.ts
var import_obsidian_dataview = __toESM(require_lib()); var import_obsidian = require("obsidian");
// node_modules/@pixi/constants/lib/index.mjs // 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 || {}); 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 { var LinkManager = class {
// Space between the text and the start of the line // Space between the text and the start of the line
constructor() { constructor() {
this.api = (0, import_obsidian_dataview.getAPI)(); this.api = null;
this.categoricalColors = [ this.categoricalColors = [
16007990, 16007990,
// Red // Red
@@ -49335,20 +49335,20 @@ var LinkManager = class {
let lastTheme = ""; let lastTheme = "";
let lastStyleSheetHref = ""; let lastStyleSheetHref = "";
let debounceTimer; let debounceTimer;
const themeObserver = new MutationObserver(() => { const updateThemeColors = () => {
clearTimeout(debounceTimer); var _a2, _b;
debounceTimer = window.setTimeout(() => {
var _a2;
this.currentTheme = document.body.classList.contains("theme-dark") ? "theme-dark" : "theme-light"; 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"); 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) { if (this.currentTheme && this.currentTheme !== lastTheme || currentStyleSheetHref !== lastStyleSheetHref) {
this.textColor = this.getComputedColorFromClass(this.currentTheme, "--text-normal"); this.textColor = this.getComputedColorFromClass(this.currentTheme, "--text-normal");
lastTheme = this.currentTheme; lastTheme = this.currentTheme;
if (currentStyleSheetHref) {
lastStyleSheetHref = currentStyleSheetHref; lastStyleSheetHref = currentStyleSheetHref;
} }
} };
}, 100); updateThemeColors();
const themeObserver = new MutationObserver(() => {
clearTimeout(debounceTimer);
debounceTimer = window.setTimeout(updateThemeColors, 100);
}); });
themeObserver.observe(document.body, { attributes: true, attributeFilter: ["class"] }); themeObserver.observe(document.body, { attributes: true, attributeFilter: ["class"] });
themeObserver.observe(document.head, { childList: true, subtree: true, attributes: true, attributeFilter: ["href"] }); 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), pixiText: this.initializeLinkText(renderer, obLink, pairStatus),
pixiGraphics: tagColors ? this.initializeLinkGraphics(renderer, obLink, tagLegend) : null pixiGraphics: tagColors ? this.initializeLinkGraphics(renderer, obLink, tagLegend) : null
}; };
console.log(obLink);
this.linksMap.set(key, newLink); this.linksMap.set(key, newLink);
if (obLink.source.id !== obLink.target.id && this.linksMap.has(reverseKey)) { if (obLink.source.id !== obLink.target.id && this.linksMap.has(reverseKey)) {
const reverseLink = this.linksMap.get(reverseKey); const reverseLink = this.linksMap.get(reverseKey);
@@ -49429,7 +49428,12 @@ var LinkManager = class {
} }
} }
removeLinks(renderer, currentLinks) { 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) => { this.linksMap.forEach((_, key) => {
if (!currentKeys.has(key)) { if (!currentKeys.has(key)) {
const link = this.linksMap.get(key); const link = this.linksMap.get(key);
@@ -49571,7 +49575,7 @@ var LinkManager = class {
color, color,
legendText: textL, legendText: textL,
legendGraphics: graphicsL, legendGraphics: graphicsL,
nUsing: 0 nUsing: 1
}; };
this.tagColors.set(linkString, newLegendGraphic); this.tagColors.set(linkString, newLegendGraphic);
} else { } else {
@@ -49591,25 +49595,6 @@ var LinkManager = class {
this.updateLinkGraphics(renderer, link); this.updateLinkGraphics(renderer, link);
return graphics; 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 // Remove all text nodes from the graph
destroyMap(renderer) { destroyMap(renderer) {
if (this.linksMap.size > 0) { if (this.linksMap.size > 0) {
@@ -49627,34 +49612,73 @@ var LinkManager = class {
if (value === null || value === void 0 || value === "") { if (value === null || value === void 0 || value === "") {
continue; continue;
} }
const valueType = this.determineDataviewLinkType(value); if (this.valueContainsTarget(value, sourceId, targetId)) {
switch (valueType) {
case 0 /* WikiLink */:
if (value.path === targetId) {
return key; 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;
}
} }
return null; 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. // Function to calculate the coordinates for placing the link text.
getLinkToTextCoordinates(linkX, linkY, panX, panY, scale) { getLinkToTextCoordinates(linkX, linkY, panX, panY, scale) {
return { x: linkX * scale + panX, y: linkY * scale + panY }; return { x: linkX * scale + panX, y: linkY * scale + panY };
@@ -49686,7 +49710,7 @@ var DEFAULT_SETTINGS = {
tagNames: true, tagNames: true,
tagLegend: true tagLegend: true
}; };
var GraphLinkTypesSettingTab = class extends import_obsidian.PluginSettingTab { var GraphLinkTypesSettingTab = class extends import_obsidian2.PluginSettingTab {
constructor(app, plugin) { constructor(app, plugin) {
super(app, plugin); super(app, plugin);
this.plugin = plugin; this.plugin = plugin;
@@ -49694,27 +49718,27 @@ var GraphLinkTypesSettingTab = class extends import_obsidian.PluginSettingTab {
display() { display() {
const { containerEl } = this; const { containerEl } = this;
containerEl.empty(); 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; this.plugin.settings.tagNames = value;
await this.plugin.saveSettings(); await this.plugin.saveSettings();
this.plugin.startUpdateLoop(); 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; this.plugin.settings.tagColors = value;
await this.plugin.saveSettings(); await this.plugin.saveSettings();
this.plugin.startUpdateLoop(); 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; this.plugin.settings.tagLegend = value;
await this.plugin.saveSettings(); await this.plugin.saveSettings();
this.plugin.startUpdateLoop(); this.plugin.startUpdateLoop();
})); }));
} }
}; };
var GraphLinkTypesPlugin = class extends import_obsidian.Plugin { var GraphLinkTypesPlugin = class extends import_obsidian2.Plugin {
constructor() { constructor() {
super(...arguments); super(...arguments);
this.api = (0, import_obsidian_dataview2.getAPI)(); this.api = null;
this.currentRenderer = null; this.currentRenderer = null;
this.animationFrameId = null; this.animationFrameId = null;
this.linkManager = new LinkManager(); this.linkManager = new LinkManager();
@@ -49722,13 +49746,27 @@ var GraphLinkTypesPlugin = class extends import_obsidian.Plugin {
} }
// Lifecycle method called when the plugin is loaded // Lifecycle method called when the plugin is loaded
async onload() { async onload() {
var _a2;
await this.loadSettings(); await this.loadSettings();
this.addSettingTab(new GraphLinkTypesSettingTab(this.app, this)); this.addSettingTab(new GraphLinkTypesSettingTab(this.app, this));
this.api = (0, import_obsidian_dataview.getAPI)();
if (!this.api) { if (!this.api) {
console.error("Dataview plugin is not available."); this.registerEvent(this.app.metadataCache.on("dataview:api-ready", () => {
new import_obsidian.Notice("Data plugin is not available."); 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; 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.registerEvent(this.app.workspace.on("layout-change", () => {
this.handleLayoutChange(); this.handleLayoutChange();
})); }));
@@ -49740,6 +49778,12 @@ var GraphLinkTypesPlugin = class extends import_obsidian.Plugin {
this.handleLayoutChange(); this.handleLayoutChange();
} }
})); }));
this.registerEvent(this.app.metadataCache.on("resolved", () => {
this.handleLayoutChange();
}));
this.registerEvent(this.app.vault.on("rename", () => {
this.handleLayoutChange();
}));
} }
async loadSettings() { async loadSettings() {
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
@@ -49786,9 +49830,12 @@ var GraphLinkTypesPlugin = class extends import_obsidian.Plugin {
waitForRenderer() { waitForRenderer() {
return new Promise((resolve2) => { return new Promise((resolve2) => {
const checkInterval = 500; const checkInterval = 500;
const maxWait = 1e4;
let elapsed = 0;
const intervalId = setInterval(() => { const intervalId = setInterval(() => {
const renderer = this.findRenderer(); const renderer = this.findRenderer();
if (renderer) { elapsed += checkInterval;
if (renderer || elapsed >= maxWait) {
clearInterval(intervalId); clearInterval(intervalId);
resolve2(); resolve2();
} }
@@ -49799,7 +49846,7 @@ var GraphLinkTypesPlugin = class extends import_obsidian.Plugin {
startUpdateLoop(verbosity = 0) { startUpdateLoop(verbosity = 0) {
if (!this.currentRenderer) { if (!this.currentRenderer) {
if (verbosity > 0) { if (verbosity > 0) {
new import_obsidian.Notice("No valid graph renderer found."); new import_obsidian2.Notice("No valid graph renderer found.");
} }
return; return;
} }
@@ -49819,6 +49866,8 @@ var GraphLinkTypesPlugin = class extends import_obsidian.Plugin {
this.linkManager.removeLinks(renderer, renderer.links); this.linkManager.removeLinks(renderer, renderer.links);
} }
renderer.links.forEach((link) => { renderer.links.forEach((link) => {
if (!link || !link.source || !link.target)
return;
if (updateMap) { if (updateMap) {
const key = this.linkManager.generateKey(link.source.id, link.target.id); const key = this.linkManager.generateKey(link.source.id, link.target.id);
if (!this.linkManager.linksMap.has(key)) { if (!this.linkManager.linksMap.has(key)) {
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"id": "graph-link-types", "id": "graph-link-types",
"name": "Graph Link Types", "name": "Graph Link Types",
"version": "0.3.3", "version": "0.3.4",
"minAppVersion": "1.5.0", "minAppVersion": "1.5.0",
"description": "Link types for graph view.", "description": "Link types for graph view.",
"author": "natefrisch01", "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) { function isHeader(text) {
return /^#{1,6} .*/.test(text.trim()); 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) { function analyzeHeaderLevels(content) {
const lines = content.split("\n"); const lines = content.split("\n");
const usedLevels = /* @__PURE__ */ new Set(); const usedLevels = /* @__PURE__ */ new Set();
let isCodeBlock = false; let isCodeBlock = false;
let headerCount = 0; let headerCount = 0;
for (const line of lines) { for (const line of lines) {
if (line.startsWith("```")) { isCodeBlock = updateCodeBlockState(line, isCodeBlock);
isCodeBlock = !isCodeBlock;
if (line.slice(3).includes("```")) {
isCodeBlock = !isCodeBlock;
}
}
if (isCodeBlock) if (isCodeBlock)
continue; continue;
if (isHeader(line)) { if (isHeader(line)) {
@@ -1083,10 +1089,7 @@ var init_dialogs = __esm({
let isInCodeBlock = false; let isInCodeBlock = false;
for (let i = 0; i < lines.length; i++) { for (let i = 0; i < lines.length; i++) {
const line = lines[i]; const line = lines[i];
if (line.startsWith("```")) { isInCodeBlock = updateCodeBlockState(line, isInCodeBlock);
isInCodeBlock = !isInCodeBlock;
continue;
}
if (isInCodeBlock) { if (isInCodeBlock) {
continue; continue;
} }
@@ -1296,12 +1299,7 @@ var init_dialogs = __esm({
let isInCodeBlock = false; let isInCodeBlock = false;
for (let i = 0; i < lines.length; i++) { for (let i = 0; i < lines.length; i++) {
const line = lines[i]; const line = lines[i];
if (line.startsWith("```")) { isInCodeBlock = updateCodeBlockState(line, isInCodeBlock);
isInCodeBlock = !isInCodeBlock;
if (line.slice(3).contains("```")) {
isInCodeBlock = !isInCodeBlock;
}
}
if (isInCodeBlock) { if (isInCodeBlock) {
continue; continue;
} }
@@ -2513,6 +2511,9 @@ var EditorHandlers = class {
key: "Backspace", key: "Backspace",
run: (view) => { run: (view) => {
const state = view.state; const state = view.state;
if (!state.selection.main.empty) {
return false;
}
const pos = state.selection.main.to; const pos = state.selection.main.to;
const currentLine = state.doc.lineAt(pos); const currentLine = state.doc.lineAt(pos);
if (!isHeader(currentLine.text)) { if (!isHeader(currentLine.text)) {
@@ -2576,6 +2577,9 @@ var EditorHandlers = class {
handlePressBackspace(view) { handlePressBackspace(view) {
let state = view.state; let state = view.state;
let doc = state.doc; let doc = state.doc;
if (!state.selection.main.empty) {
return false;
}
const pos = state.selection.main.to; const pos = state.selection.main.to;
const changes = []; const changes = [];
if (!isHeader(doc.lineAt(pos).text)) { if (!isHeader(doc.lineAt(pos).text)) {
@@ -3282,12 +3286,7 @@ var HeaderEnhancerPlugin = class extends import_obsidian6.Plugin {
for (let i = 0; i <= lineCount; i++) { for (let i = 0; i <= lineCount; i++) {
const line = editor.getLine(i); const line = editor.getLine(i);
docCharCount += line.length; docCharCount += line.length;
if (line.startsWith("```")) { isCodeBlock = updateCodeBlockState(line, isCodeBlock);
isCodeBlock = !isCodeBlock;
if (line.slice(3).contains("```")) {
isCodeBlock = !isCodeBlock;
}
}
if (isCodeBlock) { if (isCodeBlock) {
continue; continue;
} }
@@ -3296,7 +3295,7 @@ var HeaderEnhancerPlugin = class extends import_obsidian6.Plugin {
line, line,
config.startLevel config.startLevel
); );
if (headerLevel <= 0) { if (headerLevel <= 0 || realHeaderLevel > config.endLevel) {
continue; continue;
} }
insertNumber = getNextNumber(insertNumber, headerLevel); insertNumber = getNextNumber(insertNumber, headerLevel);
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"id": "header-enhancer", "id": "header-enhancer",
"name": "Header Enhancer", "name": "Header Enhancer",
"version": "0.5.1", "version": "0.5.2",
"minAppVersion": "0.14.0", "minAppVersion": "0.14.0",
"description": "Level up your headers, customize your notes. Header Enhancer makes your notes header better and more useful.", "description": "Level up your headers, customize your notes. Header Enhancer makes your notes header better and more useful.",
"author": "Hobee Liu", "author": "Hobee Liu",
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -1,8 +1,8 @@
{ {
"id": "languagetool", "id": "languagetool",
"name": "LanguageTool", "name": "LanguageTool",
"version": "1.4.3", "version": "1.4.4",
"minAppVersion": "1.8.7", "minAppVersion": "1.12.3",
"description": "Unofficial integration of the LanguageTool spell and grammar checker.", "description": "Unofficial integration of the LanguageTool spell and grammar checker.",
"author": "Lars Wrenger, Clemens Ertle", "author": "Lars Wrenger, Clemens Ertle",
"authorUrl": "https://github.com/wrenger", "authorUrl": "https://github.com/wrenger",
+12 -3
View File
@@ -585,7 +585,7 @@ class JumpToLink extends obsidian.Plugin {
this.settings = (yield this.loadData()) || new Settings(); this.settings = (yield this.loadData()) || new Settings();
this.addSettingTab(new SettingTab(this.app, this)); this.addSettingTab(new SettingTab(this.app, this));
const markViewPlugin = this.markViewPlugin = view.ViewPlugin.fromClass(MarkPlugin, { const markViewPlugin = this.markViewPlugin = view.ViewPlugin.fromClass(MarkPlugin, {
decorations: v => v.decorations decorations: (v) => v.decorations
}); });
this.registerEditorExtension([markViewPlugin]); this.registerEditorExtension([markViewPlugin]);
this.watchForSelectionChange(); this.watchForSelectionChange();
@@ -616,7 +616,10 @@ class JumpToLink extends obsidian.Plugin {
if (this.isLinkHintActive) { if (this.isLinkHintActive) {
return; 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 currentView = this.currentView = activeViewOfType.leaf.view;
const mode = this.mode = this.getMode(this.currentView); const mode = this.mode = this.getMode(this.currentView);
this.contentElement = activeViewOfType.contentEl; this.contentElement = activeViewOfType.contentEl;
@@ -643,6 +646,7 @@ class JumpToLink extends obsidian.Plugin {
} }
} }
getMode(currentView) { getMode(currentView) {
var _a;
// @ts-ignore // @ts-ignore
const isLegacy = this.app.vault.getConfig("legacyEditor"); const isLegacy = this.app.vault.getConfig("legacyEditor");
if (currentView.getState().mode === 'preview') { if (currentView.getState().mode === 'preview') {
@@ -652,9 +656,14 @@ class JumpToLink extends obsidian.Plugin {
return VIEW_MODE.LEGACY; return VIEW_MODE.LEGACY;
} }
else if (currentView.getState().mode === 'source') { else if (currentView.getState().mode === 'source') {
const isLivePreview = currentView.editor.cm.state.field(obsidian.editorLivePreviewField); try {
const isLivePreview = (_a = currentView.editor.cm.state) === null || _a === void 0 ? void 0 : _a.field(obsidian.editorLivePreviewField);
if (isLivePreview) if (isLivePreview)
return VIEW_MODE.LIVE_PREVIEW; return VIEW_MODE.LIVE_PREVIEW;
}
catch (e) {
console.error(e);
}
return VIEW_MODE.SOURCE; return VIEW_MODE.SOURCE;
} }
} }
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"id": "mrj-jump-to-link", "id": "mrj-jump-to-link",
"name": "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", "description": "This plugin allows open a link in current document or regex based navigation in editor mode using hotkey",
"isDesktopOnly": false, "isDesktopOnly": false,
"author": "MrJackphil", "author": "MrJackphil",
+25 -7
View File
@@ -114,12 +114,14 @@
"showInfoButtons": true, "showInfoButtons": true,
"homepage": { "homepage": {
"source": "none", "source": "none",
"file": null "file": null,
"createMissingPeriodicNote": true
}, },
"dualPane": false, "dualPane": false,
"dualPaneOrientation": "horizontal", "dualPaneOrientation": "horizontal",
"showTooltips": false, "showTooltips": false,
"showTooltipPath": true, "showTooltipPath": true,
"showTooltipWordCount": false,
"desktopBackground": "separate", "desktopBackground": "separate",
"desktopScale": 1, "desktopScale": 1,
"mobileScale": 1, "mobileScale": 1,
@@ -156,6 +158,7 @@
"showNoteCount": true, "showNoteCount": true,
"separateNoteCounts": true, "separateNoteCounts": true,
"showIndentGuides": true, "showIndentGuides": true,
"navCountLeaderStyle": "none",
"rootLevelSpacing": 0, "rootLevelSpacing": 0,
"navIndent": 16, "navIndent": 16,
"navItemHeight": 28, "navItemHeight": 28,
@@ -187,7 +190,8 @@
"enableFolderNoteLinks": true, "enableFolderNoteLinks": true,
"hideFolderNoteInList": true, "hideFolderNoteInList": true,
"pinCreatedFolderNote": false, "pinCreatedFolderNote": false,
"openFolderNotesInNewTab": false, "folderNoteOpenLocation": "current-tab",
"showNearestFolderNoteInSidebar": true,
"showTags": true, "showTags": true,
"showTagIcons": true, "showTagIcons": true,
"showAllTagsFolder": true, "showAllTagsFolder": true,
@@ -207,14 +211,18 @@
"defaultFolderSort": "modified-desc", "defaultFolderSort": "modified-desc",
"propertySortKey": "", "propertySortKey": "",
"propertySortSecondary": "title", "propertySortSecondary": "title",
"manualSortPropertyKey": "sort_index",
"manualSortGroupHeaderProperty": "group_header",
"manualSortNewNotePlacement": "below-selected-note",
"confirmBeforeManualSort": true,
"revealFileOnListChanges": true, "revealFileOnListChanges": true,
"listPaneTitle": "header", "listPaneTitle": "header",
"noteGrouping": "date", "noteGrouping": "date",
"showSelectedNavigationPills": false, "showSelectedNavigationPills": false,
"stickyGroupHeaders": true,
"showFolderGroupPaths": true,
"showCurrentFolderFilesAtBottom": false,
"filterPinnedByFolder": false, "filterPinnedByFolder": false,
"showPinnedGroupHeader": true,
"showPinnedIcon": true,
"optimizeNoteHeight": true,
"compactItemHeight": 28, "compactItemHeight": 28,
"compactItemHeightScaleText": true, "compactItemHeightScaleText": true,
"showQuickActions": true, "showQuickActions": true,
@@ -223,6 +231,7 @@
"quickActionAddToShortcuts": true, "quickActionAddToShortcuts": true,
"quickActionPinNote": true, "quickActionPinNote": true,
"quickActionOpenInNewTab": false, "quickActionOpenInNewTab": false,
"hideDrawingPreviewImages": true,
"useFrontmatterMetadata": false, "useFrontmatterMetadata": false,
"frontmatterIconField": "icon", "frontmatterIconField": "icon",
"frontmatterColorField": "color", "frontmatterColorField": "color",
@@ -235,11 +244,13 @@
"showFileBackgroundUnfinishedTask": false, "showFileBackgroundUnfinishedTask": false,
"unfinishedTaskBackgroundColor": "#ef000050", "unfinishedTaskBackgroundColor": "#ef000050",
"showFileIcons": true, "showFileIcons": true,
"useFolderIconForFiles": false,
"showFilenameMatchIcons": false, "showFilenameMatchIcons": false,
"fileNameIconMap": {}, "fileNameIconMap": {},
"showCategoryIcons": false, "showCategoryIcons": false,
"fileTypeIconMap": {}, "fileTypeIconMap": {},
"fileNameRows": 1, "fileNameRows": 1,
"useFolderColorForTitles": false,
"showFilePreview": true, "showFilePreview": true,
"skipHeadingsInPreview": true, "skipHeadingsInPreview": true,
"skipCodeBlocksInPreview": true, "skipCodeBlocksInPreview": true,
@@ -267,10 +278,15 @@
"showPropertiesOnSeparateRows": false, "showPropertiesOnSeparateRows": false,
"enablePropertyInternalLinks": true, "enablePropertyInternalLinks": true,
"enablePropertyExternalLinks": true, "enablePropertyExternalLinks": true,
"notePropertyType": "none", "textCountDisplay": "none",
"textCountPlacement": "title",
"characterCountSpaces": "include",
"wordCountTargetProperty": "word-goal",
"showWordCountPercentage": false,
"showFileDate": true, "showFileDate": true,
"alphabeticalDateMode": "modified", "alphabeticalDateMode": "modified",
"showParentFolder": true, "showParentFolder": true,
"showParentFolderFullPath": false,
"parentFolderClickRevealsFile": false, "parentFolderClickRevealsFile": false,
"showParentFolderColor": false, "showParentFolderColor": false,
"showParentFolderIcon": false, "showParentFolderIcon": false,
@@ -289,6 +305,7 @@
"calendarLeftPlacement": "navigation", "calendarLeftPlacement": "navigation",
"calendarWeeksToShow": 6, "calendarWeeksToShow": 6,
"calendarIntegrationMode": "daily-notes", "calendarIntegrationMode": "daily-notes",
"calendarPeriodicNotesLocaleSource": "calendar",
"calendarCustomFilePattern": "YYYY/YYYYMMDD", "calendarCustomFilePattern": "YYYY/YYYYMMDD",
"calendarCustomWeekPattern": "gggg/[W]ww", "calendarCustomWeekPattern": "gggg/[W]ww",
"calendarCustomMonthPattern": "YYYY/YYYYMM", "calendarCustomMonthPattern": "YYYY/YYYYMM",
@@ -453,6 +470,7 @@
}, },
"customVaultName": "", "customVaultName": "",
"pinnedNotes": {}, "pinnedNotes": {},
"collapsedPinnedContexts": {},
"fileIcons": {}, "fileIcons": {},
"fileColors": {}, "fileColors": {},
"fileBackgroundColors": {}, "fileBackgroundColors": {},
@@ -503,7 +521,7 @@
"#404040", "#404040",
"#404040" "#404040"
], ],
"lastShownVersion": "2.5.8", "lastShownVersion": "3.1.2",
"rootFolderOrder": [ "rootFolderOrder": [
"sources", "sources",
"attachments", "attachments",
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -1,8 +1,8 @@
{ {
"id": "notebook-navigator", "id": "notebook-navigator",
"name": "Notebook Navigator", "name": "Notebook Navigator",
"version": "2.5.8", "version": "3.1.2",
"minAppVersion": "1.8.7", "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.", "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", "author": "Johan Sanneblad",
"authorUrl": "https://github.com/johansan", "authorUrl": "https://github.com/johansan",
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -7,7 +7,7 @@
"endLabel": "All done", "endLabel": "All done",
"startHour": 8, "startHour": 8,
"timelineDateFormat": "YYYY-MM-DD", "timelineDateFormat": "YYYY-MM-DD",
"centerNeedle": false, "centerNeedle": true,
"plannerHeading": "Todo", "plannerHeading": "Todo",
"plannerHeadingLevel": 1, "plannerHeadingLevel": 1,
"timelineColored": false, "timelineColored": false,
+282 -12
View File
@@ -1,7 +1,9 @@
{ {
"showTabTitlebarButtons": true,
"copyLinkToElemenetAnchorTo100": false, "copyLinkToElemenetAnchorTo100": false,
"copyFrameLinkByName": false, "copyFrameLinkByName": false,
"disableDoubleClickTextEditing": false, "disableDoubleClickTextEditing": false,
"phoneFooterSafeAreaPadding": false,
"folder": "Excalidraw", "folder": "Excalidraw",
"cropFolder": "", "cropFolder": "",
"annotateFolder": "", "annotateFolder": "",
@@ -29,8 +31,10 @@
"annotateSuffix": "", "annotateSuffix": "",
"annotatePrefix": "annotated_", "annotatePrefix": "annotated_",
"annotatePreserveSize": false, "annotatePreserveSize": false,
"displaySVGInPreview": false,
"previewImageType": "SVG", "previewImageType": "SVG",
"renderingConcurrency": 3, "renderingConcurrency": 3,
"imageCacheRetentionDays": 30,
"allowImageCache": true, "allowImageCache": true,
"allowImageCacheInScene": true, "allowImageCacheInScene": true,
"displayExportedImageIfAvailable": false, "displayExportedImageIfAvailable": false,
@@ -82,7 +86,7 @@
"pageTransclusionCharLimit": 200, "pageTransclusionCharLimit": 200,
"wordWrappingDefault": 0, "wordWrappingDefault": 0,
"removeTransclusionQuoteSigns": true, "removeTransclusionQuoteSigns": true,
"iframelyAllowed": true, "oEmbedAllowed": false,
"pngExportScale": 1, "pngExportScale": 1,
"exportWithTheme": true, "exportWithTheme": true,
"exportWithBackground": false, "exportWithBackground": false,
@@ -96,6 +100,7 @@
"embedType": "excalidraw", "embedType": "excalidraw",
"embedMarkdownCommentLinks": true, "embedMarkdownCommentLinks": true,
"embedWikiLink": true, "embedWikiLink": true,
"embedPlaceholderImage": true,
"syncExcalidraw": false, "syncExcalidraw": false,
"experimentalFileType": false, "experimentalFileType": false,
"experimentalFileTag": "✏️", "experimentalFileTag": "✏️",
@@ -107,6 +112,8 @@
"addDummyTextElement": false, "addDummyTextElement": false,
"zoteroCompatibility": false, "zoteroCompatibility": false,
"fieldSuggester": true, "fieldSuggester": true,
"enableOnloadScripts": false,
"enableCommandLinks": false,
"compatibilityMode": false, "compatibilityMode": false,
"drawingOpenCount": 0, "drawingOpenCount": 0,
"library": "deprecated", "library": "deprecated",
@@ -149,8 +156,9 @@
} }
} }
}, },
"previousRelease": "2.22.0", "previousRelease": "2.23.12",
"showReleaseNotes": true, "showReleaseNotes": true,
"excalidrawMasteryPromoCollapsed": false,
"compareManifestToPluginVersion": true, "compareManifestToPluginVersion": true,
"showNewVersionNotification": true, "showNewVersionNotification": true,
"latexBoilerplate": "", "latexBoilerplate": "",
@@ -507,15 +515,277 @@
"canvasImmersiveEmbed": true, "canvasImmersiveEmbed": true,
"startupScriptPath": "", "startupScriptPath": "",
"aiEnabled": true, "aiEnabled": true,
"openAIAPIToken": "", "aiVerboseLogging": false,
"openAIDefaultTextModel": "gpt-3.5-turbo-1106", "aiProviderProfiles": {
"openAIDefaultTextModelMaxTokens": 4096, "OpenAI": {
"openAIDefaultVisionModel": "gpt-4o", "provider": "openai",
"openAIDefaultImageGenerationModel": "dall-e-3", "apiKey": "",
"openAIURL": "https://api.openai.com/v1/chat/completions", "baseURL": "https://api.openai.com/v1"
"openAIImageGenerationURL": "https://api.openai.com/v1/images/generations", },
"openAIImageEditsURL": "https://api.openai.com/v1/images/edits", "Anthropic": {
"openAIImageVariationURL": "https://api.openai.com/v1/images/variations", "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": { "modifierKeyConfig": {
"Mac": { "Mac": {
"LocalFileDragAction": { "LocalFileDragAction": {
@@ -805,7 +1075,6 @@
"longPressDesktop": 500, "longPressDesktop": 500,
"longPressMobile": 500, "longPressMobile": 500,
"doubleClickLinkOpenViewMode": true, "doubleClickLinkOpenViewMode": true,
"isDebugMode": false,
"rank": "Silver", "rank": "Silver",
"modifierKeyOverrides": [ "modifierKeyOverrides": [
{ {
@@ -838,6 +1107,7 @@
"margin": "normal" "margin": "normal"
}, },
"disableContextMenu": false, "disableContextMenu": false,
"isDebugMode": false,
"defaultTrayMode": true, "defaultTrayMode": true,
"compactModeOnTablets": true "compactModeOnTablets": true
} }
File diff suppressed because one or more lines are too long
+3 -3
View File
@@ -1,9 +1,9 @@
{ {
"id": "obsidian-excalidraw-plugin", "id": "obsidian-excalidraw-plugin",
"name": "Excalidraw", "name": "Excalidraw",
"version": "2.22.0", "version": "2.23.12",
"minAppVersion": "1.5.7", "minAppVersion": "1.8.7",
"description": "Sketch Your Mind. An Obsidian plugin to edit and view Excalidraw drawings. Enter the world of 4D Visual PKM.", "description": "Sketch Your Mind. Edit and view Excalidraw drawings. Enter the world of 4D Visual PKM.",
"author": "Zsolt Viczian", "author": "Zsolt Viczian",
"authorUrl": "https://excalidraw-obsidian.online", "authorUrl": "https://excalidraw-obsidian.online",
"fundingUrl": "https://ko-fi.com/zsolt", "fundingUrl": "https://ko-fi.com/zsolt",
File diff suppressed because one or more lines are too long
+256 -293
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.", "description": "Integrate Git version control with automatic backup and other advanced features.",
"isDesktopOnly": false, "isDesktopOnly": false,
"fundingUrl": "https://ko-fi.com/vinzent", "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 { .workspace-leaf-content[data-type="git-view"] .button-border {
border: 2px solid var(--interactive-accent); border: 2px solid var(--interactive-accent);
border-radius: var(--radius-s); border-radius: var(--radius-s);
@@ -108,7 +99,7 @@
display: flex; display: flex;
} }
.git-tools .buttons > * { .git-tools .buttons > * {
padding: 0 0; padding: 0;
height: auto; height: auto;
} }
@@ -175,7 +166,7 @@ which itself is adapted from the diff2html library with the following original l
--git-change-bg: #ffd55840; --git-change-bg: #ffd55840;
--git-selected: #3572b0; --git-selected: #3572b0;
--git-delete: #c33; --git-delete: #cc3333;
--git-insert: #399839; --git-insert: #399839;
--git-change: #d0b44c; --git-change: #d0b44c;
--git-move: #3572b0; --git-move: #3572b0;
@@ -538,13 +529,24 @@ which itself is adapted from the diff2html library with the following original l
.d2h-diff-tbody { .d2h-diff-tbody {
position: relative; 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 ====================== */ /* ====================== Line Authoring Information ====================== */
.cm-gutterElement.obs-git-blame-gutter { .cm-gutterElement.obs-git-blame-gutter {
/* Add background color to spacing inbetween and around the gutter for better aesthetics */ /* 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-style: solid;
border-color: var(--background-secondary); border-color: var(--background-secondary);
background-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; font-family: monospace;
height: 100%; /* ensure, that age-based background color occupies entire parent */ height: 100%; /* ensure, that age-based background color occupies entire parent */
text-align: right; text-align: right;
padding: 0px 6px 0px 6px; padding: 0px 6px;
white-space: pre; /* Keep spaces and do not collapse them. */ 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 { .git-signs-gutter {
.cm-gutterElement { .cm-gutterElement {
display: grid; 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; 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 */ /* 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) { .cm-gutters.cm-gutters-before:has(> .git-signs-gutter:only-child) {
margin-inline-end: 0; 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", "id": "obsidian-hider",
"name": "Hider", "name": "Hider",
"version": "1.6.1", "version": "1.6.2",
"minAppVersion": "1.11.1", "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", "author": "@kepano",
"authorUrl": "https://www.twitter.com/kepano", "authorUrl": "https://www.twitter.com/kepano",
"fundingUrl": "https://www.buymeacoffee.com/kepano", "fundingUrl": "https://www.buymeacoffee.com/kepano",
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"id": "obsidian-markmind", "id": "obsidian-markmind",
"name": "Markmind", "name": "Markmind",
"version": "3.4.8", "version": "3.5.3",
"minAppVersion": "0.9.12", "minAppVersion": "0.9.12",
"description": "This is a mindmap , outline tool for obsidian.", "description": "This is a mindmap , outline tool for obsidian.",
"author": "Mark", "author": "Mark",
+21 -2
View File
@@ -669,7 +669,7 @@ span.mm-sline .line {
outline: 0 outline: 0
} }
.theme-dark textarea { .theme-dark .mm-note textarea {
color: #666 color: #666
} }
@@ -3774,6 +3774,16 @@ span.mm-sline .line {
align-items: center; align-items: center;
} }
.mm-ppt-page .mm-ppt-resize {
position: absolute;
right: 6px;
display: block;
bottom: 0px;
background: transparent;
cursor: pointer;
}
.mm-node-embed { .mm-node-embed {
display: none !important; display: none !important;
} }
@@ -3784,7 +3794,7 @@ span.mm-sline .line {
z-index: 1000; z-index: 1000;
height: 32px; height: 32px;
left: 10px; left: 10px;
bottom: 40px; bottom: 100px;
right: 10px; right: 10px;
} }
@@ -3824,3 +3834,12 @@ span.mm-sline .line {
.mm-node-size .mm-node-icon { .mm-node-size .mm-node-icon {
display: flex; 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", "id": "obsidian-meta-bind-plugin",
"name": "Meta Bind", "name": "Meta Bind",
"version": "1.4.8", "version": "1.4.15",
"minAppVersion": "1.4.0", "minAppVersion": "1.10.0",
"description": "Make your notes interactive with inline input fields, metadata displays, and buttons.", "description": "Make your notes interactive with inline input fields, metadata displays, and buttons.",
"author": "Moritz Jung", "author": "Moritz Jung",
"authorUrl": "https://www.moritzjung.dev/", "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", "id": "obsidian-minimal-settings",
"name": "Minimal Theme Settings", "name": "Minimal Theme Settings",
"version": "8.2.1", "version": "8.2.3",
"minAppVersion": "1.11.1", "minAppVersion": "1.11.1",
"description": "Change the colors, fonts and features of Minimal Theme.", "description": "Change the colors, fonts and features of Minimal Theme.",
"author": "@kepano", "author": "@kepano",
+37 -18
View File
@@ -2751,7 +2751,7 @@ class VimOBehaviourOverride {
this.operationPerformer = operationPerformer; this.operationPerformer = operationPerformer;
this.inited = false; this.inited = false;
this.handleSettingsChange = () => { this.handleSettingsChange = () => {
if (!this.settings.overrideVimOBehaviour) { if (this.inited || !this.settings.overrideVimOBehaviour) {
return; return;
} }
if (!window.CodeMirrorAdapter || !window.CodeMirrorAdapter.Vim) { if (!window.CodeMirrorAdapter || !window.CodeMirrorAdapter.Vim) {
@@ -2765,28 +2765,22 @@ class VimOBehaviourOverride {
const operationPerformer = this.operationPerformer; const operationPerformer = this.operationPerformer;
const settings = this.settings; const settings = this.settings;
vim.defineAction("insertLineAfterBullet", (cm, operatorArgs) => { vim.defineAction("insertLineAfterBullet", (cm, operatorArgs) => {
// Move the cursor to the end of the line const view = plugin.app.workspace.getActiveViewOfType(obsidian.MarkdownView);
vim.handleEx(cm, "normal! A"); const obsidianEditor = view === null || view === void 0 ? void 0 : view.editor;
if (!settings.overrideVimOBehaviour) { if (!obsidianEditor) {
if (operatorArgs.after) {
vim.handleEx(cm, "normal! o");
}
else {
vim.handleEx(cm, "normal! O");
}
vim.enterInsertMode(cm); vim.enterInsertMode(cm);
return; return;
} }
const view = plugin.app.workspace.getActiveViewOfType(obsidian.MarkdownView); this.moveCursorToLineEnd(obsidianEditor);
const editor = new MyEditor(view.editor); if (!settings.overrideVimOBehaviour) {
this.openPlainLine(obsidianEditor, operatorArgs.after);
vim.enterInsertMode(cm);
return;
}
const editor = new MyEditor(obsidianEditor);
const root = parser.parse(editor); const root = parser.parse(editor);
if (!root) { if (!root) {
if (operatorArgs.after) { this.openPlainLine(obsidianEditor, operatorArgs.after);
vim.handleEx(cm, "normal! o");
}
else {
vim.handleEx(cm, "normal! O");
}
vim.enterInsertMode(cm); vim.enterInsertMode(cm);
return; return;
} }
@@ -2823,6 +2817,31 @@ class VimOBehaviourOverride {
this.handleSettingsChange(); 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() { unload() {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
if (!this.inited) { if (!this.inited) {
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"id": "obsidian-outliner", "id": "obsidian-outliner",
"name": "Outliner", "name": "Outliner",
"version": "4.10.0", "version": "4.10.1",
"minAppVersion": "1.11.7", "minAppVersion": "1.11.7",
"description": "Work with your lists like in Workflowy or RoamResearch.", "description": "Work with your lists like in Workflowy or RoamResearch.",
"author": "Viacheslav Slinko", "author": "Viacheslav Slinko",
+1 -1
View File
@@ -5,7 +5,7 @@
{ {
"id": 1, "id": 1,
"name": "Ma bibliothèque", "name": "Ma bibliothèque",
"lastUpdate": 1780077499649 "lastUpdate": 1781364297419
} }
], ],
"renderCitations": true, "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", "id": "obsidian-share-as-gist",
"name": "Share as Gist", "name": "Share as Gist",
"version": "1.9.0", "version": "2.0.1",
"minAppVersion": "0.9.7", "minAppVersion": "1.8.7",
"description": "Shares an Obsidian note as a GitHub.com gist", "description": "Shares a note as a GitHub.com gist.",
"author": "Tim Rogers", "author": "Tim Rogers",
"authorUrl": "https://github.com/timrogers", "authorUrl": "https://github.com/timrogers",
"isDesktopOnly": false "isDesktopOnly": false
+58 -12
View File
@@ -1,49 +1,95 @@
{ {
"settings": { "settings": {
"flashcardEasyText": "Easy",
"flashcardGoodText": "Good",
"flashcardHardText": "Hard",
"flashcardTags": [ "flashcardTags": [
"#flashcards" "#flashcards"
], ],
"flashcardTagsToIgnore": [],
"convertFoldersToDecks": false, "convertFoldersToDecks": false,
"cardCommentOnSameLine": false,
"burySiblingCards": false, "burySiblingCards": false,
"showContextInCards": true,
"flashcardHeightPercentage": 100,
"flashcardWidthPercentage": 100,
"randomizeCardOrder": null,
"flashcardCardOrder": "DueFirstRandom", "flashcardCardOrder": "DueFirstRandom",
"flashcardDeckOrder": "PrevDeckComplete_Sequential", "flashcardDeckOrder": "PrevDeckComplete_Sequential",
"convertClozePatternsToInputs": false,
"convertHighlightsToClozes": true, "convertHighlightsToClozes": true,
"convertBoldTextToClozes": false, "convertBoldTextToClozes": false,
"convertCurlyBracketsToClozes": false, "convertCurlyBracketsToClozes": false,
"clozePatterns": [
"==[123;;]answer[;;hint]=="
],
"singleLineCardSeparator": "::", "singleLineCardSeparator": "::",
"singleLineReversedCardSeparator": ":::", "singleLineReversedCardSeparator": ":::",
"multilineCardSeparator": "?", "multilineCardSeparator": "?",
"multilineReversedCardSeparator": "??", "multilineReversedCardSeparator": "??",
"editLaterTag": "#edit-later", "multilineCardEndMarker": "",
"enableReviewReminders": false,
"reviewReminderIntervalMinutes": 5,
"reviewReminderCheckOnStartup": false,
"reviewReminderMessage": "",
"reviewReminderAutoOpen": true,
"reviewReminderShowNotice": true,
"reviewReminderPlaySound": true,
"reviewReminderBounceDock": true,
"randomizeCardOrder": null,
"enableNoteReviewPaneOnStartup": true, "enableNoteReviewPaneOnStartup": true,
"tagsToReview": [ "tagsToReview": [
"#review" "#review"
], ],
"noteTagsToIgnore": [],
"noteFoldersToIgnore": [], "noteFoldersToIgnore": [],
"openRandomNote": false, "openRandomNote": false,
"autoNextNote": true, "autoNextNote": true,
"disableFileMenuReviewOptions": false, "showFileMenuReviewOptions": true,
"deleteTagsOnSchedulingDataDeletion": false,
"maxNDaysNotesReviewQueue": 365, "maxNDaysNotesReviewQueue": 365,
"showRibbonIcon": true,
"showStatusBar": true,
"showCardStatusBarItem": true,
"showNoteStatusBarItem": true,
"showUpdateAvailableStatusBarItem": true,
"initiallyExpandAllSubdecksInTree": 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, "baseEase": 250,
"lapsesIntervalChange": 0.5, "lapsesIntervalChange": 0.5,
"easyBonus": 1.3, "easyBonus": 1.3,
"loadBalance": true,
"maximumInterval": 3652, "maximumInterval": 3652,
"maxLinkFactor": 1, "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, "showDebugMessages": false,
"showFileNameInFileLink": false, "showFileNameInFileLink": false,
"singlelineCardSeparator": "::", "singlelineCardSeparator": "::",
"singlelineReversedCardSeparator": ":::" "singlelineReversedCardSeparator": ":::"
}, },
"buryDate": "2024-09-24", "buryDate": "2026-06-13",
"buryList": [], "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", "id": "obsidian-spaced-repetition",
"name": "Spaced Repetition", "name": "Spaced Repetition",
"version": "1.13.9", "version": "1.15.3",
"minAppVersion": "1.2.8", "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", "author": "Stephen Mwangi",
"authorUrl": "https://github.com/st3v3nmw", "authorUrl": "https://github.com/st3v3nmw",
"helpUrl": "https://stephenmwangi.com/obsidian-spaced-repetition/", "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", "id": "obsidian-tasks-plugin",
"name": "Tasks", "name": "Tasks",
"version": "7.23.1", "version": "8.1.0",
"minAppVersion": "1.4.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.", "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/", "helpUrl": "https://publish.obsidian.md/tasks/",
"author": "Clare Macrae and Ilyas Landikov (created by Martin Schenck)", "author": "Clare Macrae and Ilyas Landikov (created by Martin Schenck)",
File diff suppressed because one or more lines are too long
+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", "id": "omnisearch",
"name": "Omnisearch", "name": "Omnisearch",
"version": "1.28.2", "version": "1.29.3",
"minAppVersion": "1.7.2", "minAppVersion": "1.7.2",
"description": "A search engine that just works", "description": "A search engine that just works.",
"author": "Simon Cambier", "author": "Simon Cambier",
"authorUrl": "https://github.com/scambier/obsidian-omnisearch", "authorUrl": "https://scambier.xyz",
"fundingUrl": { "fundingUrl": {
"Github": "https://github.com/sponsors/scambier", "Github": "https://github.com/sponsors/scambier",
"Ko-fi": "https://ko-fi.com/scambier" "Ko-fi": "https://ko-fi.com/scambier"
+16 -1
View File
@@ -63,7 +63,6 @@
margin-left: 1em; margin-left: 1em;
} }
.omnisearch-result__image-container { .omnisearch-result__image-container {
flex-basis: 20%; flex-basis: 20%;
text-align: end; text-align: end;
@@ -133,3 +132,19 @@
position: relative; position: relative;
flex-grow: 1; 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", "id": "persistent-graph",
"name": "Persistent Graph", "name": "Persistent Graph",
"version": "0.1.5", "version": "0.3.2",
"minAppVersion": "0.12.0", "minAppVersion": "0.12.0",
"description": "Adds commands to save and restore the positions of nodes on the global graph view", "description": "Adds commands to save and restore the positions of nodes on the global graph view",
"author": "Sanqui", "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", "id": "podnotes",
"name": "PodNotes", "name": "PodNotes",
"version": "2.15.1", "version": "2.16.0",
"minAppVersion": "0.15.9", "minAppVersion": "0.15.9",
"description": "Helps you write notes on podcasts.", "description": "Helps you write notes on podcasts.",
"author": "Christian B. B. Houmann", "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", "id": "qmd-as-md-obsidian",
"version": "0.0.3", "version": "0.4.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.", "description": "View, edit, preview and render Quarto (.qmd) files. Quarto combines Markdown with executable code cells.",
"name": "qmd as md", "name": "qmd as md",
"author": "Daniel Borek", "author": "Daniel Borek",
"authorUrl": "https://github.com/danieltomasz", "authorUrl": "https://github.com/danieltomasz",
"isDesktopOnly": false, "isDesktopOnly": true,
"minAppVersion": "0.10.12" "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, "openFile": true,
"openFileInMode": "default", "openFileInMode": "default",
"setFileExistsBehavior": true,
"fileExistsMode": "Increment the file name",
"fileOpening": { "fileOpening": {
"location": "tab", "location": "tab",
"direction": "vertical", "direction": "vertical",
"focus": true, "focus": true,
"mode": "default" "mode": "default"
},
"fileExistsBehavior": {
"kind": "apply",
"mode": "increment"
} }
}, },
{ {
@@ -219,13 +221,15 @@
}, },
"openFile": true, "openFile": true,
"openFileInMode": "default", "openFileInMode": "default",
"setFileExistsBehavior": true,
"fileExistsMode": "Increment the file name",
"fileOpening": { "fileOpening": {
"location": "tab", "location": "tab",
"direction": "vertical", "direction": "vertical",
"focus": true, "focus": true,
"mode": "default" "mode": "default"
},
"fileExistsBehavior": {
"kind": "apply",
"mode": "increment"
} }
}, },
{ {
@@ -252,13 +256,15 @@
}, },
"openFile": true, "openFile": true,
"openFileInMode": "default", "openFileInMode": "default",
"setFileExistsBehavior": true,
"fileExistsMode": "Increment the file name",
"fileOpening": { "fileOpening": {
"location": "tab", "location": "tab",
"direction": "vertical", "direction": "vertical",
"focus": true, "focus": true,
"mode": "default" "mode": "default"
},
"fileExistsBehavior": {
"kind": "apply",
"mode": "increment"
} }
}, },
{ {
@@ -285,13 +291,15 @@
}, },
"openFile": true, "openFile": true,
"openFileInMode": "default", "openFileInMode": "default",
"setFileExistsBehavior": true,
"fileExistsMode": "Increment the file name",
"fileOpening": { "fileOpening": {
"location": "tab", "location": "tab",
"direction": "vertical", "direction": "vertical",
"focus": true, "focus": true,
"mode": "default" "mode": "default"
},
"fileExistsBehavior": {
"kind": "apply",
"mode": "increment"
} }
}, },
{ {
@@ -318,13 +326,15 @@
}, },
"openFile": true, "openFile": true,
"openFileInMode": "default", "openFileInMode": "default",
"setFileExistsBehavior": true,
"fileExistsMode": "Increment the file name",
"fileOpening": { "fileOpening": {
"location": "tab", "location": "tab",
"direction": "vertical", "direction": "vertical",
"focus": true, "focus": true,
"mode": "default" "mode": "default"
},
"fileExistsBehavior": {
"kind": "apply",
"mode": "increment"
} }
}, },
{ {
@@ -351,13 +361,15 @@
}, },
"openFile": true, "openFile": true,
"openFileInMode": "default", "openFileInMode": "default",
"setFileExistsBehavior": true,
"fileExistsMode": "Increment the file name",
"fileOpening": { "fileOpening": {
"location": "tab", "location": "tab",
"direction": "vertical", "direction": "vertical",
"focus": true, "focus": true,
"mode": "default" "mode": "default"
},
"fileExistsBehavior": {
"kind": "apply",
"mode": "increment"
} }
}, },
{ {
@@ -552,7 +564,7 @@
"devMode": false, "devMode": false,
"templateFolderPath": "templates", "templateFolderPath": "templates",
"announceUpdates": "all", "announceUpdates": "all",
"version": "2.12.0", "version": "2.12.3",
"globalVariables": {}, "globalVariables": {},
"onePageInputEnabled": false, "onePageInputEnabled": false,
"disableOnlineFeatures": true, "disableOnlineFeatures": true,
@@ -626,6 +638,9 @@
"migrateFileOpeningSettings": true, "migrateFileOpeningSettings": true,
"setProviderModelDiscoveryMode": true, "setProviderModelDiscoveryMode": true,
"backfillFileOpeningDefaults": 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", "id": "quickadd",
"name": "QuickAdd", "name": "QuickAdd",
"version": "2.12.0", "version": "2.12.3",
"minAppVersion": "1.11.4", "minAppVersion": "1.11.4",
"description": "Quickly add new pages or content to your vault.", "description": "Quickly add new pages or content to your vault.",
"author": "Christian B. B. Houmann", "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
}
+1180 -1010
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -1,8 +1,8 @@
{ {
"id": "share-note", "id": "share-note",
"name": "Share Note", "name": "Share Note",
"version": "1.3.1", "version": "1.5.3",
"minAppVersion": "0.15.0", "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.", "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", "author": "Alan Grainger",
"authorUrl": "https://github.com/alangrainger", "authorUrl": "https://github.com/alangrainger",
+4 -4
View File
@@ -1,18 +1,18 @@
.notice:has(.share-note-status-error.notice) { .notice.share-note-status-error {
background: #c10000; background: #c10000;
color: white color: white
} }
.notice:has(.share-note-status-info) { .notice.share-note-status-info {
background: hsl(204, 86%, 53%); background: hsl(204, 86%, 53%);
color: white color: white
} }
.notice:has(.share-note-status-success) { .notice.share-note-status-success {
background: #629762; background: #629762;
color: white color: white
} }
.notice:has(.share-note-status-success) a { .notice.share-note-status-success a {
color: white; color: white;
text-decoration: underline; 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", "id": "templater-obsidian",
"name": "Templater", "name": "Templater",
"version": "2.19.3", "version": "2.20.5",
"description": "Create and use templates", "description": "Advanced templating and automation using handlebars-like syntax.",
"minAppVersion": "1.12.2", "minAppVersion": "1.12.2",
"author": "SilentVoid", "author": "SilentVoid",
"authorUrl": "https://github.com/SilentVoid13", "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/", "helpUrl": "https://silentvoid13.github.io/Templater/",
"isDesktopOnly": false "isDesktopOnly": false
} }
+1 -1
View File
@@ -221,6 +221,6 @@ textarea.templater-prompt-input:focus {
} }
li.CodeMirror-hint-active { li.CodeMirror-hint-active {
background: #08f; background: #0088ff;
color: white; color: white;
} }
+128 -121
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -5,7 +5,7 @@
"Buy Me a Coffee": "https://buymeacoffee.com/polyipseity", "Buy Me a Coffee": "https://buymeacoffee.com/polyipseity",
"GitHub Sponsors": "https://github.com/sponsors/polyipseity" "GitHub Sponsors": "https://github.com/sponsors/polyipseity"
}, },
"version": "3.23.0", "version": "3.26.0",
"authorUrl": "https://github.com/polyipseity", "authorUrl": "https://github.com/polyipseity",
"id": "terminal", "id": "terminal",
"isDesktopOnly": false, "isDesktopOnly": false,
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"id": "themed-discord-rpc", "id": "themed-discord-rpc",
"name": "Themed Discord RPC", "name": "Themed Discord RPC",
"version": "1.2.1", "version": "1.3.0",
"minAppVersion": "0.15.0", "minAppVersion": "0.15.0",
"description": "A Customizable Discord RPC", "description": "A Customizable Discord RPC",
"author": "Mouadhbendjedidi", "author": "Mouadhbendjedidi",
+22 -3
View File
@@ -834,8 +834,11 @@ var AppHelper = class {
async loadJson(path2) { async loadJson(path2) {
return JSON.parse(await this.loadFile(path2)); return JSON.parse(await this.loadFile(path2));
} }
async saveJson(path2, data) { async saveJson(path2, data, space2) {
await this.unsafeApp.vault.adapter.write(path2, JSON.stringify(data)); await this.unsafeApp.vault.adapter.write(
path2,
JSON.stringify(data, null, space2)
);
} }
equalsAsEditorPosition(one, other) { equalsAsEditorPosition(one, other) {
return one.line === other.line && one.ch === other.ch; return one.line === other.line && one.ch === other.ch;
@@ -1818,6 +1821,7 @@ var DEFAULT_SETTINGS = {
intelligentSuggestionPrioritization: { intelligentSuggestionPrioritization: {
enabled: true, enabled: true,
historyFilePath: "", historyFilePath: "",
prettyPrintHistoryFile: false,
maxDaysToKeepHistory: 30, maxDaysToKeepHistory: 30,
maxNumberOfHistoryToKeep: 0 maxNumberOfHistoryToKeep: 0
}, },
@@ -2930,6 +2934,20 @@ var VariousComplementsSettingTab = class extends import_obsidian3.PluginSettingT
}); });
} }
); );
addFilterableSetting(
"Pretty-print history file",
"Save the history file with indentation to make Git diffs smaller.",
(setting) => {
setting.addToggle((tc) => {
tc.setValue(
this.plugin.settings.intelligentSuggestionPrioritization.prettyPrintHistoryFile
).onChange(async (value) => {
this.plugin.settings.intelligentSuggestionPrioritization.prettyPrintHistoryFile = value;
await this.plugin.saveSettings();
});
});
}
);
addFilterableSetting( addFilterableSetting(
"Max days to keep history", "Max days to keep history",
"If set 0, it will never remove", "If set 0, it will never remove",
@@ -10373,7 +10391,8 @@ var VariousComponents = class extends import_obsidian9.Plugin {
(0, import_obsidian9.normalizePath)( (0, import_obsidian9.normalizePath)(
this.settings.intelligentSuggestionPrioritization.historyFilePath || DEFAULT_HISTORIES_PATH this.settings.intelligentSuggestionPrioritization.historyFilePath || DEFAULT_HISTORIES_PATH
), ),
(_b = (_a = this.suggester.selectionHistoryStorage) == null ? void 0 : _a.data) != null ? _b : {} (_b = (_a = this.suggester.selectionHistoryStorage) == null ? void 0 : _a.data) != null ? _b : {},
this.settings.intelligentSuggestionPrioritization.prettyPrintHistoryFile ? 2 : void 0
); );
}, 5e3); }, 5e3);
this.suggester = await AutoCompleteSuggest.new( this.suggester = await AutoCompleteSuggest.new(
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"id": "various-complements", "id": "various-complements",
"name": "Various Complements", "name": "Various Complements",
"version": "11.2.0", "version": "11.3.0",
"minAppVersion": "1.11.4", "minAppVersion": "1.11.4",
"description": "This plugin enables you to complete words like the auto-completion of IDE", "description": "This plugin enables you to complete words like the auto-completion of IDE",
"author": "tadashi-aikawa", "author": "tadashi-aikawa",
+94 -109
View File
File diff suppressed because one or more lines are too long
+1 -4
View File
@@ -1,11 +1,8 @@
{ {
"id": "zotlit", "id": "zotlit",
"name": "ZotLit", "name": "ZotLit",
"version": "1.1.11", "version": "1.1.12",
"minAppVersion": "1.6.7", "minAppVersion": "1.6.7",
"versions": {
"better-sqlite3": "v12.2.0"
},
"description": "Plugin to integrate with Zotero, create literature notes and insert citations from a Zotero library.", "description": "Plugin to integrate with Zotero, create literature notes and insert citations from a Zotero library.",
"author": "AidenLx", "author": "AidenLx",
"authorUrl": "https://github.com/aidenlx", "authorUrl": "https://github.com/aidenlx",
+20
View File
@@ -0,0 +1,20 @@
# Todo
- [ ] test
```tasks
due 2026-06-13
not done
```
# I did
> [!smallquery]- Modified files
> ```dataview
> LIST file.mtime
> where file.mtime > date(this.file.name) and file.mtime < (date(this.file.name) + dur(1 day)) sort file.mtime asc
> ```
```tasks
done 2026-06-13
short mode
```
# I am gratefull to
+2 -2
View File
@@ -2,7 +2,7 @@
id: matrice id: matrice
aliases: [] aliases: []
tags: tags:
- #s/maths/algèbre -
up: "[[algèbre]]" up: "[[algèbre]]"
--- ---
@@ -28,6 +28,6 @@ type: tree
collapse: true collapse: true
show-attributes: [field] show-attributes: [field]
field-groups: [downs] field-groups: [downs]
depth: [0, 0] depth: [0, 2]
``` ```
+6 -5
View File
@@ -1,8 +1,9 @@
up:: [[matrice]] ---
sibling:: [[rang d'une application linéaire]] up:
title:: - "[[objets associés à une matrice]]"
#s/maths/algèbre sibling: "[[rang d'une application linéaire]]"
tags:
- "#s/maths/algèbre"
--- ---
> [!definition] Rang d'une matrice > [!definition] Rang d'une matrice
-1
View File
@@ -11,7 +11,6 @@ tags:
> $\operatorname{Tr}(M) = \sum\limits_{k} M_{k,k}$ > $\operatorname{Tr}(M) = \sum\limits_{k} M_{k,k}$
^definition ^definition
# Notation # Notation
Soit $A$ une [[matrice]] carrée, Soit $A$ une [[matrice]] carrée,
La _trace_ de $A$ est notée $\mathrm{Tr}(A)$ La _trace_ de $A$ est notée $\mathrm{Tr}(A)$