vault backup: 2022-12-20 10:02:37

Affected files:
.gitignore
.obsidian/app.json
.obsidian/appearance.json
.obsidian/community-plugins.json
.obsidian/config
.obsidian/core-plugins.json
.obsidian/global-search.json
.obsidian/graph.json
.obsidian/hotkeys.json
.obsidian/plugins/control-characters/data.json
.obsidian/plugins/control-characters/main.js
.obsidian/plugins/control-characters/manifest.json
.obsidian/plugins/control-characters/styles.css
.obsidian/plugins/obsidian-footnotes/main.js
.obsidian/plugins/obsidian-footnotes/manifest.json
.obsidian/plugins/obsidian-footnotes/styles.css
.obsidian/plugins/obsidian-git/data.json
.obsidian/plugins/obsidian-git/data[衝突].json
.obsidian/plugins/obsidian-git/main.js
.obsidian/plugins/obsidian-git/manifest.json
.obsidian/plugins/obsidian-git/styles.css
.obsidian/plugins/obsidian-hider/data.json
.obsidian/plugins/obsidian-hider/main.js
.obsidian/plugins/obsidian-hider/manifest.json
.obsidian/plugins/obsidian-hider/styles.css
.obsidian/plugins/obsidian-regex-replace/data.json
.obsidian/plugins/obsidian-regex-replace/main.js
.obsidian/plugins/obsidian-regex-replace/manifest.json
.obsidian/plugins/obsidian-regex-replace/styles.css
.obsidian/plugins/obsidian-tidy-footnotes/main.js
.obsidian/plugins/obsidian-tidy-footnotes/manifest.json
.obsidian/plugins/wikilinks-to-mdlinks-obsidian/main.js
.obsidian/plugins/wikilinks-to-mdlinks-obsidian/manifest.json
.obsidian/rtl.json
.obsidian/snippets/bg4e.css
.obsidian/snippets/margin-narrow.css
.obsidian/snippets/margin-wide.css
.obsidian/starred.json
.obsidian/templates.json
.obsidian/workspace
.obsidian/workspace.json
.obsidian/workspaces.json
This commit is contained in:
Andley Chang 2022-12-20 10:02:37 +08:00
parent 3f72e51c87
commit a31691b481
42 changed files with 35200 additions and 2 deletions

2
.gitignore vendored
View File

@ -1,2 +0,0 @@
# to exclude Obsidian workspace settings (including plugin and hotkey configurations)
.obsidian/

36
.obsidian/app.json vendored Normal file
View File

@ -0,0 +1,36 @@
{
"foldHeading": true,
"foldIndent": true,
"defaultViewMode": "source",
"newFileLocation": "current",
"newLinkFormat": "relative",
"attachmentFolderPath": "images",
"pdfExportSettings": {
"includeName": false,
"pageSize": "A4",
"landscape": false,
"margin": "0",
"downscalePercent": 100
},
"autoConvertHtml": true,
"alwaysUpdateLinks": true,
"promptDelete": false,
"legacyEditor": false,
"livePreview": false,
"communityPluginSortOrder": "release",
"fileSortOrder": "alphabetical",
"spellcheck": true,
"rightToLeft": false,
"readableLineLength": true,
"lineWrap": true,
"spellcheckLanguages": [
"en-US"
],
"showInlineTitle": false,
"showUnsupportedFiles": true,
"strictLineBreaks": true,
"showFrontmatter": false,
"showLineNumber": false,
"smartIndentList": true,
"showIndentGuide": false
}

17
.obsidian/appearance.json vendored Normal file
View File

@ -0,0 +1,17 @@
{
"baseFontSize": 16,
"enabledCssSnippets": [
"BG4E",
"font",
"default",
"bg4e"
],
"theme": "obsidian",
"cssTheme": "",
"interfaceFontFamily": "",
"textFontFamily": "",
"accentColor": "",
"nativeMenus": false,
"translucency": false,
"showViewHeader": false
}

9
.obsidian/community-plugins.json vendored Normal file
View File

@ -0,0 +1,9 @@
[
"obsidian-hider",
"obsidian-git",
"wikilinks-to-mdlinks-obsidian",
"obsidian-footnotes",
"obsidian-tidy-footnotes",
"obsidian-regex-replace",
"control-characters"
]

1
.obsidian/config vendored Normal file
View File

@ -0,0 +1 @@
{"baseFontSize":16,"enabledPlugins":[],"pluginEnabledStatus":{"file-explorer":true,"global-search":true,"switcher":true,"graph":true,"backlink":true,"page-preview":true,"command-palette":true,"markdown-importer":true,"word-count":true,"open-with-default-app":true,"file-recovery":true},"enabledCssSnippets":["BG4E"]}

18
.obsidian/core-plugins.json vendored Normal file
View File

@ -0,0 +1,18 @@
[
"file-explorer",
"global-search",
"switcher",
"graph",
"backlink",
"outgoing-link",
"tag-pane",
"templates",
"note-composer",
"command-palette",
"slash-command",
"editor-status",
"starred",
"outline",
"workspaces",
"file-recovery"
]

5
.obsidian/global-search.json vendored Normal file
View File

@ -0,0 +1,5 @@
{
"showFullPath": false,
"linkStyle": "none",
"listStyle": "none"
}

22
.obsidian/graph.json vendored Normal file
View File

@ -0,0 +1,22 @@
{
"collapse-filter": true,
"search": "",
"showTags": false,
"showAttachments": false,
"hideUnresolved": false,
"showOrphans": true,
"collapse-color-groups": true,
"colorGroups": [],
"collapse-display": true,
"showArrow": false,
"textFadeMultiplier": 0,
"nodeSizeMultiplier": 1,
"lineSizeMultiplier": 1,
"collapse-forces": true,
"centerStrength": 0.518713248970312,
"repelStrength": 10,
"linkStrength": 1,
"linkDistance": 250,
"scale": 0.2610343762379936,
"close": false
}

205
.obsidian/hotkeys.json vendored Normal file
View File

@ -0,0 +1,205 @@
{
"workspace:close": [],
"command-palette:open": [
{
"modifiers": [
"Mod",
"Shift"
],
"key": "P"
}
],
"workspace:edit-file-title": [],
"workspace:export-pdf": [
{
"modifiers": [
"Mod"
],
"key": "P"
}
],
"editor:follow-link": [],
"graph:open": [],
"app:go-forward": [
{
"modifiers": [
"Alt"
],
"key": "ArrowRight"
}
],
"obsidian-git:push": [
{
"modifiers": [
"Mod"
],
"key": "G"
}
],
"obsidian-git:commit-push-specified-message": [
{
"modifiers": [
"Mod",
"Shift"
],
"key": "G"
}
],
"editor:open-link-in-new-leaf": [],
"app:open-settings": [],
"switcher:open": [
{
"modifiers": [
"Mod"
],
"key": "O"
}
],
"workspace:split-vertical": [
{
"modifiers": [
"Alt"
],
"key": "V"
}
],
"workspace:split-horizontal": [
{
"modifiers": [
"Alt"
],
"key": "H"
}
],
"editor:swap-line-down": [
{
"modifiers": [
"Mod"
],
"key": "D"
}
],
"editor:swap-line-up": [
{
"modifiers": [
"Mod"
],
"key": "U"
}
],
"editor:toggle-checklist-status": [],
"editor:toggle-comments": [],
"workspace:undo-close-pane": [],
"wikilinks-to-mdlinks-obsidian:toggle-wiki-md-links": [
{
"modifiers": [
"Mod"
],
"key": "L"
}
],
"editor:delete-paragraph": [],
"app:go-back": [
{
"modifiers": [
"Alt"
],
"key": "ArrowLeft"
}
],
"app:toggle-left-sidebar": [
{
"modifiers": [
"Alt"
],
"key": "L"
}
],
"app:toggle-right-sidebar": [
{
"modifiers": [
"Alt"
],
"key": "R"
}
],
"obsidian-hider:toggle-app-ribbon": [
{
"modifiers": [
"Alt"
],
"key": "A"
}
],
"snippet-commands-obsidian:snippet-command-margin-narrow": [
{
"modifiers": [
"Mod",
"Shift"
],
"key": "N"
}
],
"snippet-commands-obsidian:snippet-command-margin-wide": [
{
"modifiers": [
"Mod",
"Shift"
],
"key": "W"
}
],
"snippet-commands-obsidian:snippet-command-margin-normal": [
{
"modifiers": [
"Alt",
"Mod"
],
"key": "N"
}
],
"file-explorer:new-file-in-new-pane": [],
"editor:toggle-highlight": [
{
"modifiers": [
"Mod"
],
"key": "M"
}
],
"obsidian-footnotes:insert-footnote": [
{
"modifiers": [
"Mod",
"Shift"
],
"key": "6"
}
],
"obsidian-tidy-footnotes:tidy-footnotes": [
{
"modifiers": [
"Alt",
"Mod",
"Shift"
],
"key": "6"
}
],
"cm-show-whitespace-obsidian:toggle-show-whitespace": [
{
"modifiers": [
"Alt"
],
"key": "W"
}
],
"obsidian-hider:toggle-tab-containers": [
{
"modifiers": [
"Alt"
],
"key": "T"
}
]
}

View File

@ -0,0 +1,7 @@
{
"newLine": false,
"tab": true,
"space": true,
"enabled": true,
"selection": false
}

View File

@ -0,0 +1,331 @@
/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
https://github.com/joethei/obsidian-non-printing-chars
*/
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
var __export = (target, all) => {
__markAsModule(target);
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __reExport = (target, module2, desc) => {
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
for (let key of __getOwnPropNames(module2))
if (!__hasOwnProp.call(target, key) && key !== "default")
__defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
}
return target;
};
var __toModule = (module2) => {
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
};
var __async = (__this, __arguments, generator) => {
return new Promise((resolve, reject) => {
var fulfilled = (value) => {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
};
var rejected = (value) => {
try {
step(generator.throw(value));
} catch (e) {
reject(e);
}
};
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
step((generator = generator.apply(__this, __arguments)).next());
});
};
// src/main.ts
__export(exports, {
default: () => ControlCharacterPlugin
});
var import_obsidian4 = __toModule(require("obsidian"));
var import_state2 = __toModule(require("@codemirror/state"));
// src/SettingsTab.ts
var import_obsidian = __toModule(require("obsidian"));
var ControlCharactersSettingsTab = class extends import_obsidian.PluginSettingTab {
constructor(plugin) {
super(plugin.app, plugin);
this.plugin = plugin;
}
display() {
const { containerEl } = this;
containerEl.empty();
containerEl.createEl("h2", { text: "Control Characters" });
new import_obsidian.Setting(containerEl).setName("Only show control characters in selection").addToggle((toggle) => {
toggle.setValue(this.plugin.settings.selection).onChange((value) => __async(this, null, function* () {
this.plugin.settings.selection = value;
yield this.plugin.saveSettings();
}));
});
containerEl.createEl("h3", { text: "Show" });
new import_obsidian.Setting(containerEl).setName("Space").addToggle((toggle) => {
toggle.setValue(this.plugin.settings.space).onChange((value) => __async(this, null, function* () {
this.plugin.settings.space = value;
yield this.plugin.saveSettings();
}));
});
new import_obsidian.Setting(containerEl).setName("Tab").addToggle((toggle) => {
toggle.setValue(this.plugin.settings.tab).onChange((value) => __async(this, null, function* () {
this.plugin.settings.tab = value;
yield this.plugin.saveSettings();
}));
});
new import_obsidian.Setting(containerEl).setName("New line").addToggle((toggle) => {
toggle.setValue(this.plugin.settings.newLine).onChange((value) => __async(this, null, function* () {
this.plugin.settings.newLine = value;
yield this.plugin.saveSettings();
}));
});
}
};
// src/NormalDecoration.ts
var import_view3 = __toModule(require("@codemirror/view"));
// src/StatefulDecoration.ts
var import_state = __toModule(require("@codemirror/state"));
var import_view = __toModule(require("@codemirror/view"));
var statefulDecorations = defineStatefulDecoration();
function defineStatefulDecoration() {
const update = import_state.StateEffect.define();
const field = import_state.StateField.define({
create() {
return import_view.Decoration.none;
},
update(deco, tr) {
return tr.effects.reduce((deco2, effect) => effect.is(update) ? effect.value : deco2, deco.map(tr.changes));
},
provide: (field2) => import_view.EditorView.decorations.from(field2)
});
return { update, field };
}
// src/StatefulDecorationSet.ts
var import_view2 = __toModule(require("@codemirror/view"));
var import_obsidian2 = __toModule(require("obsidian"));
var StatefulDecorationSet = class {
constructor(editor) {
this.decoCache = Object.create(null);
this.debouncedUpdate = (0, import_obsidian2.debounce)(this.updateAsyncDecorations, 10, true);
this.editor = editor;
}
computeAsyncDecorations(tokens) {
return __async(this, null, function* () {
const decorations = [];
for (const token of tokens) {
let deco = this.decoCache[token.value];
if (!deco) {
deco = this.decoCache[token.value] = import_view2.Decoration.mark({
class: "control-character",
attributes: { type: token.value }
});
}
decorations.push(deco.range(token.from, token.to));
}
return import_view2.Decoration.set(decorations, true);
});
}
updateAsyncDecorations(tokens) {
return __async(this, null, function* () {
const decorations = yield this.computeAsyncDecorations(tokens);
if (decorations || this.editor.state.field(statefulDecorations.field).size) {
this.editor.dispatch({ effects: statefulDecorations.update.of(decorations || import_view2.Decoration.none) });
}
});
}
};
// src/FrontmatterParser.ts
var import_obsidian3 = __toModule(require("obsidian"));
function parseFrontmatter(view, settings) {
const result = {
enabled: settings.enabled,
newLine: settings.newLine,
selection: settings.selection,
space: settings.space,
tab: settings.tab
};
const matches = view.state.sliceDoc().match(/---([\s\S]*?)---/);
if (matches && matches.length !== 0) {
for (const match of matches) {
const replaced = match.replace(/---/g, "");
try {
const frontmatter = (0, import_obsidian3.parseYaml)(replaced);
if (frontmatter.hasOwnProperty("cc")) {
result.enabled = frontmatter.cc;
}
if (frontmatter.hasOwnProperty("cc-tab")) {
result.tab = frontmatter["cc-tab"];
}
if (frontmatter.hasOwnProperty("cc-newline")) {
result.newLine = frontmatter["cc-newline"];
}
if (frontmatter.hasOwnProperty("cc-space")) {
result.space = frontmatter["cc-space"];
}
if (frontmatter.hasOwnProperty("cc-selection")) {
result.selection = frontmatter["cc-selection"];
}
} catch (e) {
}
}
}
return result;
}
// src/NormalDecoration.ts
function buildViewPlugin(plugin) {
return import_view3.ViewPlugin.fromClass(class {
constructor(view) {
this.decoManager = new StatefulDecorationSet(view);
this.buildAsyncDecorations(view, plugin.settings);
}
update(update) {
if (update.docChanged || update.viewportChanged) {
const frontmatter = parseFrontmatter(update.view, plugin.settings);
if (!frontmatter.enabled || frontmatter.selection) {
this.decoManager.debouncedUpdate([]);
return;
}
this.buildAsyncDecorations(update.view, frontmatter);
}
}
buildAsyncDecorations(view, settings) {
const targetElements = [];
for (const { from, to } of view.visibleRanges) {
targetElements.push(...plugin.getTokens(view, from, to, settings));
}
this.decoManager.debouncedUpdate(targetElements);
}
});
}
function normalDecoration(plugin) {
return [statefulDecorations.field, buildViewPlugin(plugin)];
}
// src/settings.ts
var DEFAULT_SETTINGS = {
newLine: true,
tab: true,
space: true,
enabled: true,
selection: false
};
// src/SelectionHighlight.ts
var import_view4 = __toModule(require("@codemirror/view"));
function buildViewPlugin2(plugin) {
return import_view4.ViewPlugin.fromClass(class {
constructor(view) {
this.decoManager = new StatefulDecorationSet(view);
const frontmatter = parseFrontmatter(view, plugin.settings);
if (!frontmatter.selection) {
return;
}
this.buildAsyncDecorations(view, parseFrontmatter(view, plugin.settings));
}
update(update) {
const frontmatter = parseFrontmatter(update.view, plugin.settings);
if (!frontmatter.selection) {
return;
}
if (update.selectionSet || update.docChanged || update.viewportChanged) {
this.buildAsyncDecorations(update.view, frontmatter);
}
}
buildAsyncDecorations(view, settings) {
const targetElements = [];
for (const range of view.state.selection.ranges) {
targetElements.push(...plugin.getTokens(view, range.from, range.to, settings));
}
this.decoManager.debouncedUpdate(targetElements);
}
});
}
function selectionDecorations(plugin) {
return [statefulDecorations.field, buildViewPlugin2(plugin)];
}
// src/types.ts
var ControlCharacter;
(function(ControlCharacter2) {
ControlCharacter2["NEWLINE"] = "newline";
ControlCharacter2["SPACE"] = "space";
ControlCharacter2["TAB"] = "tab";
ControlCharacter2["OTHER"] = "other";
})(ControlCharacter || (ControlCharacter = {}));
// src/main.ts
var ControlCharacterPlugin = class extends import_obsidian4.Plugin {
onload() {
return __async(this, null, function* () {
if (!this.app.vault.getConfig("legacyEditor")) {
yield this.loadSettings();
this.registerEditorExtension(import_state2.Prec.lowest(normalDecoration(this)));
this.registerEditorExtension(import_state2.Prec.lowest(selectionDecorations(this)));
this.addSettingTab(new ControlCharactersSettingsTab(this));
this.addCommand({
id: "toggle",
name: "Show/hide control characters",
callback: () => __async(this, null, function* () {
this.settings.enabled = !this.settings.enabled;
console.log(this.settings.enabled);
yield this.saveSettings();
this.app.workspace.updateOptions();
})
});
this.app.workspace.trigger("parse-style-settings");
} else {
new import_obsidian4.Notice("Control Characters: You are using the legacy editor, this plugin is not supported there");
}
});
}
onunload() {
}
loadSettings() {
return __async(this, null, function* () {
this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData());
});
}
saveSettings() {
return __async(this, null, function* () {
yield this.saveData(this.settings);
});
}
getTokens(view, from, to, settings) {
const targetElements = [];
const text = view.state.sliceDoc(from, to);
for (const match of text.matchAll(/[\u00A0\u202F\u2007\u2060\s]/gu)) {
const index = from + match.index;
if (match.toString() === "\n" && settings.newLine) {
targetElements.push({ from: index - 1, to: index, value: ControlCharacter.NEWLINE });
continue;
}
let value;
if (match.toString() === " " && settings.tab) {
value = ControlCharacter.TAB;
} else if (match.toString() === " " && settings.space) {
value = ControlCharacter.SPACE;
} else {
value = ControlCharacter.OTHER;
}
targetElements.push({ from: index, to: index + 1, value });
}
return targetElements;
}
};

View File

@ -0,0 +1,10 @@
{
"id": "control-characters",
"name": "Control Characters",
"version": "0.3.0",
"minAppVersion": "0.15.0",
"description": "Show control/non-printing characters in edit mode",
"author": "Johannes Theiner",
"authorUrl": "https://github.com/joethei",
"isDesktopOnly": false
}

View File

@ -0,0 +1,43 @@
/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
https://github.com/joethei/obsidian-non-printing-chars
*/body{--control-character-color:var(--interactive-accent);--control-character-space:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 24 24'%3E%3Crect width='20' height='20' x='2' y='2' fill='currentColor' rx='2'/%3E%3C/svg%3E");--control-character-tab:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 24 24'%3E%3Cpath d='M12.29 8.12 15.17 11H2c-.55 0-1 .45-1 1s.45 1 1 1h13.17l-2.88 2.88a.996.996 0 1 0 1.41 1.41l4.59-4.59a.996.996 0 0 0 0-1.41L13.7 6.7a.996.996 0 0 0-1.41 0c-.38.39-.39 1.03 0 1.42zM20 7v10c0 .55.45 1 1 1s1-.45 1-1V7c0-.55-.45-1-1-1s-1 .45-1 1z'/%3E%3C/svg%3E");--control-character-newline:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='.84em' height='1em' viewBox='0 0 1280 1536'%3E%3Cpath fill='currentColor' d='M1278 61v73q0 29-18.5 61t-42.5 32q-50 0-54 1-26 6-32 31-3 11-3 64v1152q0 25-18 43t-43 18H959q-25 0-43-18t-18-43V257H755v1218q0 25-17.5 43t-43.5 18H586q-26 0-43.5-18t-17.5-43V979q-147-12-245-59-126-58-192-179-64-117-64-259 0-166 88-286Q200 78 321 37 432 0 738 0h479q25 0 43 18t18 43z'/%3E%3C/svg%3E");--control-character-other:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 24 24'%3E%3Crect width='20' height='20' x='2' y='2' fill='currentColor' rx='2'/%3E%3C/svg%3E")}
/* @settings
name: Control Characters
id: control-characters
settings:
-
id: control-character-color
title: Color
type: variable-themed-color
format: hex
default-light: '#007AFF'
default-dark: '#007AFF'
-
id: control-character-space
title: Symbol for space
description: Icon SVG URI encoded
type: variable-text
default: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"%3E%3Cpath fill="currentColor" d="M12 18a6 6 0 1 0 0-12a6 6 0 0 0 0 12z"%2F%3E%3C%2Fsvg%3E')
-
id: control-character-tab
title: Symbol for tab
type: variable-text
description: Icon SVG URI encoded
default: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"%3E%3Cpath d="M12.29 8.12L15.17 11H2c-.55 0-1 .45-1 1s.45 1 1 1h13.17l-2.88 2.88a.996.996 0 1 0 1.41 1.41l4.59-4.59a.996.996 0 0 0 0-1.41L13.7 6.7a.996.996 0 0 0-1.41 0c-.38.39-.39 1.03 0 1.42zM20 7v10c0 .55.45 1 1 1s1-.45 1-1V7c0-.55-.45-1-1-1s-1 .45-1 1z"%2F%3E%3C%2Fsvg%3E')
-
id: control-character-newline
title: Symbol for new line
type: variable-text
description: Icon SVG URI encoded
default: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 20 20"%3E%3Cpath fill="currentColor" d="M15 2H7.54c-.83 0-1.59.2-2.28.6c-.7.41-1.25.96-1.65 1.65C3.2 4.94 3 5.7 3 6.52s.2 1.58.61 2.27c.4.69.95 1.24 1.65 1.64c.69.41 1.45.61 2.28.61h.43V17c0 .27.1.51.29.71c.2.19.44.29.71.29c.28 0 .51-.1.71-.29c.2-.2.3-.44.3-.71V5c0-.27.09-.51.29-.71c.2-.19.44-.29.71-.29s.51.1.71.29c.19.2.29.44.29.71v12c0 .27.1.51.3.71c.2.19.43.29.71.29c.27 0 .51-.1.71-.29c.19-.2.29-.44.29-.71V4H15c.27 0 .5-.1.7-.3c.2-.19.3-.43.3-.7s-.1-.51-.3-.71A.984.984 0 0 0 15 2z"%2F%3E%3C%2Fsvg%3E')
-
id: control-character-other
title: Symbol for other non printing control characters
type: variable-text
description: Icon SVG URI encoded
default: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"%3E%3Crect width="20" height="20" x="2" y="2" fill="currentColor" rx="2"%2F%3E%3C%2Fsvg%3E')
*/.control-character[type=newline]:after{content:" ";-webkit-mask-image:var(--control-character-newline);mask-image:var(--control-character-newline)}.control-character[type=newline]:after,.control-character[type=space]{background:var(--control-character-color);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.control-character[type=space]{-webkit-mask-image:var(--control-character-space);mask-image:var(--control-character-space)}.control-character[type=tab]{-webkit-mask-image:var(--control-character-tab);mask-image:var(--control-character-tab)}.control-character[type=other],.control-character[type=tab]{background:var(--control-character-color);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.control-character[type=other]{-webkit-mask-image:var(--control-character-other);mask-image:var(--control-character-other);-webkit-mask-size:unset;mask-size:unset}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,10 @@
{
"id": "obsidian-footnotes",
"name": "Footnote Shortcut",
"version": "0.0.9",
"minAppVersion": "0.12.0",
"description": "Insert and write footnotes faster",
"author": "Alexis Rondeau, Micha Brugger",
"authorUrl": "https://publish.obsidian.md/alexisrondeau",
"isDesktopOnly": false
}

View File

@ -0,0 +1 @@
/* Sets all the text color to red! */

View File

@ -0,0 +1,29 @@
{
"commitMessage": "vault backup: {{date}}",
"autoCommitMessage": "vault backup: {{date}}",
"commitDateFormat": "YYYY-MM-DD HH:mm:ss",
"autoSaveInterval": 30,
"autoPushInterval": 0,
"autoPullInterval": 0,
"autoPullOnBoot": false,
"disablePush": false,
"pullBeforePush": false,
"disablePopups": false,
"listChangedFilesInMessageBody": true,
"showStatusBar": true,
"updateSubmodules": false,
"syncMethod": "merge",
"customMessageOnAutoBackup": false,
"autoBackupAfterFileChange": true,
"treeStructure": false,
"refreshSourceControl": true,
"basePath": "",
"differentIntervalCommitAndPush": false,
"changedFilesInStatusBar": false,
"showedMobileNotice": true,
"refreshSourceControlTimer": 7000,
"showBranchStatusBar": true,
"setLastSaveToLastCommit": false,
"currentBranch": "main",
"remote": "origin"
}

View File

@ -0,0 +1,14 @@
{
"commitMessage": "vault backup: {{date}}",
"commitDateFormat": "YYYY-MM-DD HH:mm:ss",
"autoSaveInterval": 30,
"autoPullInterval": 0,
"autoPullOnBoot": false,
"disablePush": false,
"pullBeforePush": false,
"disablePopups": false,
"listChangedFilesInMessageBody": false,
"showStatusBar": true,
"currentBranch": "main",
"remote": "origin"
}

31696
.obsidian/plugins/obsidian-git/main.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,9 @@
{
"id": "obsidian-git",
"name": "Obsidian Git",
"description": "Backup your vault with Git.",
"isDesktopOnly": false,
"fundingUrl": "https://ko-fi.com/vinzent",
"js": "main.js",
"version": "2.13.0"
}

View File

@ -0,0 +1,474 @@
@keyframes loading {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.workspace-leaf-content[data-type='git-view'] .view-content {
padding: 0;
}
.loading>svg {
animation: 2s linear infinite loading;
transform-origin: 50% 50%;
display: inline-block;
}
.obsidian-git-center {
margin: auto;
text-align: center;
width: 50%;
}
.obsidian-git-textarea {
display: block;
margin-left: auto;
margin-right: auto;
}
.obsidian-git-center-button {
display: block;
margin: 20px auto;
}
.tooltip.mod-left {
overflow-wrap: break-word;
}
.tooltip.mod-right {
overflow-wrap: break-word;
}
.obsidian-git-shortcuts {
margin: 10px;
}
.diff-err {
height: 100%;
display: flex;
justify-content: center;
flex-direction: column;
align-items: center;
}
.diff-err-sign {
font-size: 2em;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-d-none {
display: none;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-wrapper {
text-align: left;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-header {
background-color: var(--background-primary);
border-bottom: 1px solid var(--interactive-accent);
font-family: var(--font-monospace);
height: 35px;
padding: 5px 10px;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-header,
.workspace-leaf-content[data-type="diff-view"] .d2h-file-stats {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-stats {
font-size: 14px;
margin-left: auto;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-lines-added {
border: 1px solid #b4e2b4;
border-radius: 5px 0 0 5px;
color: #399839;
padding: 2px;
text-align: right;
vertical-align: middle;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-lines-deleted {
border: 1px solid #e9aeae;
border-radius: 0 5px 5px 0;
color: #c33;
margin-left: 1px;
padding: 2px;
text-align: left;
vertical-align: middle;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-name-wrapper {
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
font-size: 15px;
width: 100%;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-name {
overflow-x: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-wrapper {
border: 1px solid var(--background-modifier-border);
border-radius: 3px;
margin-bottom: 1em;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse {
-webkit-box-pack: end;
-ms-flex-pack: end;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
border: 1px solid var(--background-modifier-border);
border-radius: 3px;
cursor: pointer;
display: none;
font-size: 12px;
justify-content: flex-end;
padding: 4px 8px;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse.d2h-selected {
background-color: #c8e1ff;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-collapse-input {
margin: 0 4px 0 0;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-diff-table {
border-collapse: collapse;
font-family: Menlo, Consolas, monospace;
font-size: 13px;
width: 100%;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-files-diff {
width: 100%;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-diff {
overflow-y: hidden;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-side-diff {
display: inline-block;
margin-bottom: -8px;
margin-right: -4px;
overflow-x: scroll;
overflow-y: hidden;
width: 50%;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line {
padding: 0 8em;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line {
display: inline-block;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
white-space: nowrap;
width: 100%;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line {
padding: 0 4.5em;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-ctn {
word-wrap: normal;
background: none;
display: inline-block;
padding: 0;
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
vertical-align: middle;
white-space: pre;
width: 100%;
}
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-line del,
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line del {
background-color: #ffb6ba;
}
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-line del,
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line del {
background-color: #8d232881;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line del,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line del,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line ins {
border-radius: 0.2em;
display: inline-block;
margin-top: -1px;
text-decoration: none;
vertical-align: middle;
}
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins,
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line ins {
background-color: #97f295;
text-align: left;
}
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-line ins,
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-code-side-line ins {
background-color: #1d921996;
text-align: left;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-prefix {
word-wrap: normal;
background: none;
display: inline;
padding: 0;
white-space: pre;
}
.workspace-leaf-content[data-type="diff-view"] .line-num1 {
float: left;
}
.workspace-leaf-content[data-type="diff-view"] .line-num1,
.workspace-leaf-content[data-type="diff-view"] .line-num2 {
-webkit-box-sizing: border-box;
box-sizing: border-box;
overflow: hidden;
padding: 0 0.5em;
text-overflow: ellipsis;
width: 3.5em;
}
.workspace-leaf-content[data-type="diff-view"] .line-num2 {
float: right;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber {
background-color: var(--background-primary);
border: solid var(--background-modifier-border);
border-width: 0 1px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: var(--text-muted);
cursor: pointer;
display: inline-block;
position: absolute;
text-align: right;
width: 7.5em;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber:after {
content: "\200b";
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber {
background-color: var(--background-primary);
border: solid var(--background-modifier-border);
border-width: 0 1px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: var(--text-muted);
cursor: pointer;
display: inline-block;
overflow: hidden;
padding: 0 0.5em;
position: absolute;
text-align: right;
text-overflow: ellipsis;
width: 4em;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-diff-tbody tr {
position: relative;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber:after {
content: "\200b";
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-emptyplaceholder,
.workspace-leaf-content[data-type="diff-view"] .d2h-emptyplaceholder {
background-color: var(--background-primary);
border-color: var(--background-modifier-border);
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-line-prefix,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber,
.workspace-leaf-content[data-type="diff-view"] .d2h-emptyplaceholder {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-code-linenumber,
.workspace-leaf-content[data-type="diff-view"] .d2h-code-side-linenumber {
direction: rtl;
}
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-del {
background-color: #fee8e9;
border-color: #e9aeae;
}
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-ins {
background-color: #dfd;
border-color: #b4e2b4;
}
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-del {
background-color: #521b1d83;
border-color: #691d1d73;
}
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-ins {
background-color: rgba(30, 71, 30, 0.5);
border-color: #13501381;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-info {
background-color: var(--background-primary);
border-color: var(--background-modifier-border);
color: var(--text-normal);
}
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-file-diff .d2h-del.d2h-change {
background-color: #fdf2d0;
}
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-file-diff .d2h-del.d2h-change {
background-color: #55492480;
}
.theme-light .workspace-leaf-content[data-type="diff-view"] .d2h-file-diff .d2h-ins.d2h-change {
background-color: #ded;
}
.theme-dark .workspace-leaf-content[data-type="diff-view"] .d2h-file-diff .d2h-ins.d2h-change {
background-color: rgba(37, 78, 37, 0.418);
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-wrapper {
margin-bottom: 10px;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-wrapper a {
color: #3572b0;
text-decoration: none;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-wrapper a:visited {
color: #3572b0;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-header {
text-align: left;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-title {
font-weight: 700;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list-line {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
text-align: left;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list {
display: block;
list-style: none;
margin: 0;
padding: 0;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list>li {
border-bottom: 1px solid var(--background-modifier-border);
margin: 0;
padding: 5px 10px;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-list>li:last-child {
border-bottom: none;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-file-switch {
cursor: pointer;
display: none;
font-size: 10px;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-icon {
fill: currentColor;
margin-right: 10px;
vertical-align: middle;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-deleted {
color: #c33;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-added {
color: #399839;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-changed {
color: #d0b44c;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-moved {
color: #3572b0;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-tag {
background-color: var(--background-primary);
display: -webkit-box;
display: -ms-flexbox;
display: flex;
font-size: 10px;
margin-left: 5px;
padding: 0 2px;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-deleted-tag {
border: 2px solid #c33;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-added-tag {
border: 1px solid #399839;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-changed-tag {
border: 1px solid #d0b44c;
}
.workspace-leaf-content[data-type="diff-view"] .d2h-moved-tag {
border: 1px solid #3572b0;
}

View File

@ -0,0 +1,14 @@
{
"hideRibbon": true,
"hideStatus": false,
"hideTabs": false,
"hideScroll": false,
"hideSidebarButtons": false,
"hideTooltips": false,
"hideSearchSuggestions": false,
"hideSearchCounts": false,
"hideInstructions": false,
"hideMeta": false,
"hideVault": false,
"frameless": false
}

306
.obsidian/plugins/obsidian-hider/main.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,10 @@
{
"id": "obsidian-hider",
"name": "Hider",
"version": "1.2.3",
"minAppVersion": "0.16.0",
"description": "Hide UI elements such as tooltips, status, titlebar and more",
"author": "@kepano",
"authorUrl": "https://www.twitter.com/kepano",
"isDesktopOnly": false
}

View File

@ -0,0 +1,73 @@
/* Hides vault name */
.hider-vault .nav-folder.mod-root > .nav-folder-title .nav-folder-title-content {
display:none;
}
/* Hide tabs */
.hider-tabs .mod-root .workspace-tabs .workspace-tab-header-container {
display: none;
}
/* Hide sidebar buttons */
.hider-sidebar-buttons .sidebar-toggle-button.mod-right,
.hider-sidebar-buttons .sidebar-toggle-button.mod-left {
display: none;
}
.hider-sidebar-buttons.mod-macos.is-hidden-frameless:not(.is-popout-window) .workspace .workspace-tabs.mod-top-right-space .workspace-tab-header-container {
padding-right: 4px;
}
/* Hide ribbon */
.hider-ribbon.mod-macos.is-hidden-frameless:not(.is-fullscreen):not(.is-popout-window) .workspace-tabs.mod-top-left-space .workspace-tab-header-container {
padding-left: calc(var(--frame-left-space) + var(--ribbon-width));
}
.hider-ribbon .workspace-ribbon.mod-left {
display:none;
}
.hider-ribbon .workspace-ribbon.mod-right {
visibility:hidden;
position:absolute;
}
.hider-ribbon .workspace-split.mod-right-split {
margin-right:0;
}
.hider-ribbon .workspace-split.mod-left-split {
margin-left:0;
}
/* Hide meta */
.hider-meta .frontmatter-container {
display:none;
}
/* Hide scrollbars */
.hider-scroll ::-webkit-scrollbar {
display:none;
}
/* Hide status */
.hider-status .status-bar {
display:none;
}
/* Hide tooltips */
.hider-tooltips .tooltip {
display:none;
}
/* Hide search suggestions */
.hider-search-suggestions .suggestion-container.mod-search-suggestion {
display: none;
}
/* Hide search count flair */
.hider-search-counts .tree-item-flair:not(.tag-pane-tag-count) {
display:none;
}
/* Hide instructions */
.hider-instructions .prompt-instructions {
display:none;
}

View File

@ -0,0 +1,10 @@
{
"findText": " <RUBY><ruby><ruby><strong>(.*?)</strong><rt>(.*?)</rt></ruby><rt>(.*?)</rt></ruby><rt>V-(...)</rt></RUBY>",
"replaceText": " (<RUBY><ruby><ruby><strong>$1</strong><rt>$2</rt></ruby><rt>$3</rt></ruby><rt>V-$4</rt></RUBY>)p",
"useRegEx": true,
"selOnly": false,
"caseInsensitive": false,
"processLineBreak": false,
"processTab": false,
"prefillFind": false
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,10 @@
{
"author": "Martin Eder",
"authorUrl": "https://www.gruware.org",
"description": "Find and replace text using regular expressions.",
"id": "obsidian-regex-replace",
"isDesktopOnly": false,
"minAppVersion": "0.12.17",
"name": "Regex Find/Replace",
"version": "1.2.0"
}

View File

@ -0,0 +1,51 @@
.find-replace-modal .modal-content .row {
display: flex;
align-items: center;
width: 100%;
margin-top: 8px;
}
.find-replace-modal .modal-content .row .input-label {
display: flex;
justify-content: flex-end;
height: 100%;
}
.find-replace-modal .modal-content .row .postfix-label {
display: flex;
height: 100%;
margin-left: 8px;
justify-content: flex-end;
color: gray;
}
.find-replace-modal .modal-content .row .check-label {
display: flex;
justify-content: flex-end;
width: 100%;
height: 100%;
margin-right: 8px;
}
.find-replace-modal .modal-content .row .input-wrapper {
display: flex;
align-items: center;
height: 100%;
width: 100%;
margin: 0;
}
.find-replace-modal .modal-content .row .input-wrapper input {
width: 100%;
}
.find-replace-modal .modal-content .button-wrapper {
justify-content: center;
margin-top: 16px;
}

View File

@ -0,0 +1,204 @@
'use strict';
var obsidian = require('obsidian');
/*! *****************************************************************************
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
function __awaiter(thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
}
const reKey = /\[\^(.+?(?=\]))\]/gi;
const reDefinition = /\[\^(.+)\]\:/;
// https://stackoverflow.com/a/1830844
function isNumeric(value) {
return !isNaN(value - parseFloat(value));
}
function tidyFootnotes(editor) {
let markers = [];
let definitions = new Map();
let firstDefinitionLine = -1;
let definitionsIndexed = new Map();
// Iterate through each line
const lineCount = editor.lineCount();
let prevKey = '';
for (let i = 0; i < lineCount; i++) {
const line = editor.getLine(i);
let isDefinition = false;
let match;
if (prevKey.length) {
const hasIndent = /^[ \t]/.test(line);
const isLastLine = i === (lineCount - 1);
if (hasIndent || (line.length === 0 && !isLastLine)) {
// Append line to the previous footnote definition
const value = definitions.get(prevKey);
definitions.set(prevKey, value + "\n" + line);
markers[markers.length - 1].length++;
continue;
}
else {
prevKey = '';
}
}
// Look for footnote definition
while ((match = reDefinition.exec(line)) !== null) {
if (match.length < 1)
return;
isDefinition = true;
// Remember definition and where it is
let key = match[1];
let value = line.substring(match[0].length);
definitions.set(key, value);
prevKey = key;
let marker = {
key,
line: i,
index: 0,
length: 0,
isDefinition: true
};
markers.push(marker);
// Remember first definition line to insert combined list later
if (firstDefinitionLine === -1) {
firstDefinitionLine = i;
}
break;
}
if (isDefinition)
continue;
// Look for footnote key
while ((match = reKey.exec(line)) !== null) {
if (match.length < 1)
return;
// Remember where footnote key is
let key = match[1];
let marker = {
key,
line: i,
index: match.index,
length: match[0].length,
isDefinition: false
};
markers.push(marker);
if (!definitionsIndexed.has(key)) {
// Add key into index
definitionsIndexed.set(key, {
key,
newKey: key,
isNumber: isNumeric(key),
value: ''
});
}
}
}
// Assign definition to key in index
// If definition has no key, it will be appended with its current key
definitions.forEach((value, key) => {
definitionsIndexed.set(key, {
key,
newKey: key,
isNumber: isNumeric(key),
value
});
});
// Re-index numbers and construct combined definitions output
let count = 1;
let definitionsStr = '';
definitionsIndexed.forEach((definition, marker) => {
let key = definition.key;
if (definition.isNumber) {
const current = definitionsIndexed.get(marker);
key = count.toString();
definitionsIndexed.set(marker, Object.assign(Object.assign({}, current), { newKey: key }));
count++;
}
definitionsStr += `[^${key}]:${definition.value}\n`;
});
const markersCount = markers.length;
for (let i = markersCount - 1; i >= 0; i--) {
const marker = markers[i];
const markerLine = marker.line;
if (marker.isDefinition) {
let rangeStart, rangeEnd;
const lineEnd = markerLine + 1 + marker.length;
if (lineEnd === editor.lineCount()) {
// Replace from previous to current line to fix CodeMirror 6 error
rangeStart = { line: markerLine, ch: 0 };
rangeEnd = { line: lineEnd - 1, ch: Infinity };
}
else {
// Replace from current to next line
rangeStart = { line: markerLine, ch: 0 };
rangeEnd = { line: lineEnd, ch: 0 };
}
if (markerLine === firstDefinitionLine) {
// Replace first definition line with list of indexed definitions
editor.replaceRange(definitionsStr, rangeStart, rangeEnd);
continue;
}
// Remove line(s)
editor.replaceRange('', rangeStart, rangeEnd);
continue;
}
// Check if key has changed
const definition = definitionsIndexed.get(marker.key);
const newKey = definition.newKey;
if (marker.key === newKey)
continue;
// Replace footnote key in line with the new one
const line = editor.getLine(markerLine);
const prefix = line.substring(0, marker.index);
const newMarker = `[^${newKey}]`;
const suffix = line.substr(marker.index + marker.length);
const newLine = prefix + newMarker + suffix;
editor.replaceRange(newLine, { line: markerLine, ch: 0 }, { line: markerLine, ch: Infinity });
}
if (firstDefinitionLine == -1) {
// If there are no definitions, add definitions list at the end
const lineCount = editor.lineCount();
editor.replaceRange("\n\n" + definitionsStr, { line: lineCount, ch: 0 }, { line: lineCount, ch: Infinity });
}
// console.log(markers, definitions, definitionsIndexed, definitionsStr);
}
class TidyFootnotes extends obsidian.Plugin {
onload() {
return __awaiter(this, void 0, void 0, function* () {
this.addCommand({
id: 'tidy-footnotes',
name: 'Tidy Footnotes',
checkCallback: (checking) => {
// Ensure the active view is a Markdown editor
const view = this.app.workspace.getActiveViewOfType(obsidian.MarkdownView);
if (checking)
return !!view;
if (!view || view.sourceMode == undefined)
return false;
let editor = view.editor;
tidyFootnotes(editor);
}
});
});
}
}
module.exports = TidyFootnotes;

View File

@ -0,0 +1,10 @@
{
"id": "obsidian-tidy-footnotes",
"name": "Tidy Footnotes",
"version": "0.1.1",
"minAppVersion": "0.11.13",
"description": "Tidy your footnotes seamlessly.",
"author": "Charlie Chao",
"authorUrl": "https://github.com/charliecm",
"isDesktopOnly": false
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,10 @@
{
"id": "wikilinks-to-mdlinks-obsidian",
"name": "Wikilinks to MDLinks",
"version": "0.0.12",
"minAppVersion": "0.9.12",
"description": "A plugin that converts wikilinks to markdown links and vice versa",
"author": "Agatha Uy",
"authorUrl": "https://github.com/agathauy",
"isDesktopOnly": false
}

1
.obsidian/rtl.json vendored Normal file
View File

@ -0,0 +1 @@
{"fileDirections":{"講道筆記.md":"ltr","32-Jonah/hebrew.md":"rtl"},"defaultDirection":"ltr","rememberPerFile":true,"setYamlDirection":false}

145
.obsidian/snippets/bg4e.css vendored Normal file
View File

@ -0,0 +1,145 @@
/* Obsidian 介面 */
.theme-dark {
--text-tag: #4f8dc2;
--text-muted: #E6E6E6;
--text-faint: goldenrod;
--icon-color: var(--text-faint);
--titlebar-text-color: var(--text-faint);
--color1:#ea4335;
--color2:#4285f4;
--color3:#34a853;
--color4:#ff8a00;
--color-strong: greenyellow;
--color-em:gold;
--text-accent:yellow;
--font-text: "Gentium Book Plus","Tinos", "Noto Sans TC";
--control-character-color: white;
}
.theme-light {
--text-tag: rgb(128, 136, 240);
--text-normal:black;
--text-faint: grey;
--background-primary: white;
--color1:darkred;
--color2:darkblue;
--color3:darkgreen;
--color4:darkorange;
--color-strong: red;
--color-em:blue;
--link-color:rgb(128, 136, 240);
--link-external-color:rgb(128, 136, 240);
--font-text: "Gentium Book Plus", "Tinos", "Noto Sans TC";
}
/* HTML tags in preview and editor */
.cm-s-obsidian span.cm-tag {
color: var(--text-tag);
font-size: 13px;
font-family: "Arial Narrow"
}
/* 標題 */
.cm-header-1, .markdown-preview-view h1 {
color: var(--color1);
font-size:26px; /* 20pt 字體大小*/
text-align: center;
border-bottom: 4px double ;
}
.cm-header-2,.markdown-preview-view h2 {
color: var(--color2);
font-size:24px; /* 18pt 字體大小*/
text-align: center;
}
.cm-header-3,.markdown-preview-view h3 {
color: var(--color3);
font-size:22px; /* 16pt 字體大小*/
}
.cm-header-4,.markdown-preview-view h4 {
color: var(--color4);
font-size:19px; /* 14pt 字體大小*/
}
.cm-header-5,.markdown-preview-view h5 {
color: var(--color5);
font-size:16px; /* 12pt 字體大小*/
}
/* Table */
table {
margin-left: auto;
margin-right: auto;
}
.markdown-rendered thead tr > th , .markdown-preview-view th {
border: 1px solid;
border-bottom: 4px double;
font-weight: 800;
}
.markdown-preview-view td {
border: 1px solid;
}
/* Ruby Interlinear */
ruby {
line-height: 5em;
}
ul ruby {
line-height: 1em;
}
rt {
font-size: 0.85em ;
}
ul {
padding-bottom: 0em ;
margin-bottom: 0em;
}
strong, .cm-strong {
color: var(--color-strong);
font-weight:bolder;
}
em, .cm-em {
color: var(--color-em);
font-weight:bold;
font-style:italic;
}
.nav-file-title, .nav-folder-title {
display: flex;
border: 1px solid transparent;
border-radius: px;
cursor: pointer;
color: var(--text-faint);
font-size: 13px;
line-height: 13px;
padding: 2px 0 0 15px;
white-space: nowrap;
}
/* text decoration for marking syntax functions */
.S {text-decoration: underline double; text-underline-offset: 5px;}
.P {text-decoration: underline wavy; text-underline-offset: 5px;}
.C {text-decoration: underline solid; text-underline-offset: 5px;}
.A {text-decoration: underline dotted; text-underline-offset: 5px;}
/* handle both LTR and RTL automatically */
* {
unicode-bidi: plaintext;
}
/* BULLET POINT RELATIONSHIP LINES */
.cm-hmd-list-indent .cm-tab, ul ul { position: relative; }
.cm-hmd-list-indent .cm-tab::before, ul ul::before {
content:'';
border-left: 1px dotted grey ;
position: absolute;
}
ul ul::before { left: -15px; top: 0; bottom: 0;
}

14
.obsidian/snippets/margin-narrow.css vendored Normal file
View File

@ -0,0 +1,14 @@
/* ============= 列印 PDF 設定 ============= */
@page {
size: A4 portrait;
margin-top: 1cm;
margin-left: 0cm;
margin-right:0cm;
margin-bottom: 1cm;
}
.markdown-source-view, .markdown-preview-view, .markdown-preview-view.is-readable-line-width .markdown-preview-sizer {
max-width: 900px;
margin: auto;
}

10
.obsidian/snippets/margin-wide.css vendored Normal file
View File

@ -0,0 +1,10 @@
/* ============= 列印 PDF 設定 ============= */
@page {
size: A4 portrait;
margin: 2.5cm;
}
.markdown-source-view, .markdown-preview-view, .markdown-preview-view.is-readable-line-width .markdown-preview-sizer {
max-width: 600px;
margin: auto;
}

24
.obsidian/starred.json vendored Normal file
View File

@ -0,0 +1,24 @@
{
"items": [
{
"type": "file",
"title": "§0",
"path": "Syntax/Syntax.md"
},
{
"type": "file",
"title": "Phrasing-Signs",
"path": "Phrasing-Signs.md"
},
{
"type": "file",
"title": "README",
"path": "README.md"
},
{
"type": "file",
"title": "Idioms",
"path": "Idioms.md"
}
]
}

1
.obsidian/templates.json vendored Normal file
View File

@ -0,0 +1 @@
{"folder":"template/"}

133
.obsidian/workspace vendored Normal file
View File

@ -0,0 +1,133 @@
{
"main": {
"id": "3969f3923e6cfedb",
"type": "split",
"children": [
{
"id": "e4c58faa39706a81",
"type": "leaf",
"dimension": 35.089209855564995,
"state": {
"type": "markdown",
"state": {
"file": "48-Galatians/Gal.2.6-10.md",
"mode": "source",
"backlinks": false,
"source": true
}
}
},
{
"id": "127e20a57164b3d9",
"type": "leaf",
"dimension": 64.910790144435,
"state": {
"type": "markdown",
"state": {
"file": "48-Galatians/Gal.2.6-10.md",
"mode": "preview",
"backlinks": false,
"source": true
}
}
}
],
"direction": "vertical"
},
"left": {
"id": "2b1e149eb78e8515",
"type": "split",
"children": [
{
"id": "fb89deb39da52857",
"type": "tabs",
"children": [
{
"id": "75b75d906b38f1fb",
"type": "leaf",
"state": {
"type": "file-explorer",
"state": {}
}
},
{
"id": "8b1314860610141a",
"type": "leaf",
"state": {
"type": "search",
"state": {
"query": "hyper",
"matchingCase": false,
"explainSearch": false,
"collapseAll": false,
"extraContext": false,
"sortOrder": "byModifiedTime"
}
}
},
{
"id": "47f03e690283089d",
"type": "leaf",
"state": {
"type": "starred",
"state": {}
}
}
],
"currentTab": 1
}
],
"direction": "horizontal",
"width": 224.5015697479248,
"collapsed": true
},
"right": {
"id": "1464b72f66019d33",
"type": "split",
"children": [
{
"id": "d0f62b3dd05030d0",
"type": "tabs",
"children": [
{
"id": "8c60c8158acd8037",
"type": "leaf",
"state": {
"type": "outline",
"state": {
"file": "48-Galatians/Gal.2.6-10.md"
}
}
},
{
"id": "ffff73b72ba5875f",
"type": "leaf",
"state": {
"type": "tag",
"state": {
"sortOrder": "frequency",
"useHierarchy": true
}
}
}
]
}
],
"direction": "horizontal",
"width": 183.0555419921875,
"collapsed": true
},
"active": "e4c58faa39706a81",
"lastOpenFiles": [
"48-Galatians/Gal.1.1-5.md",
"48-Galatians/Gal.2.6-10.md",
"48-Galatians/Gal.3.23-25.md",
"48-Galatians/Galatians-Style.md",
"48-Galatians/Galatians-Clause.md",
"48-Galatians/Gal.2.1-5.md",
"BBG4E/HW6-Key.md",
"BBG4E/HW6.md",
"BBG4E/HW5-Key.md",
"BBG4E/Untitled.md"
]
}

171
.obsidian/workspace.json vendored Normal file
View File

@ -0,0 +1,171 @@
{
"main": {
"id": "3969f3923e6cfedb",
"type": "split",
"children": [
{
"id": "50eacfd7e524db52",
"type": "tabs",
"children": [
{
"id": "7381c9ad24bf0a92",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "48-Galatians/Galatians-Interlinear.md",
"mode": "preview",
"source": true
}
}
}
]
},
{
"id": "c2f695e2c6121ed0",
"type": "tabs",
"children": [
{
"id": "a4a388eaf0490360",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "48-Galatians/Gal.4.12-20.md",
"mode": "preview",
"source": true
}
}
}
]
}
],
"direction": "vertical"
},
"left": {
"id": "2b1e149eb78e8515",
"type": "split",
"children": [
{
"id": "fb89deb39da52857",
"type": "tabs",
"children": [
{
"id": "75b75d906b38f1fb",
"type": "leaf",
"state": {
"type": "file-explorer",
"state": {
"sortOrder": "alphabetical"
}
}
},
{
"id": "8b1314860610141a",
"type": "leaf",
"state": {
"type": "search",
"state": {
"query": "hyper",
"matchingCase": false,
"explainSearch": false,
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical"
}
}
},
{
"id": "47f03e690283089d",
"type": "leaf",
"state": {
"type": "starred",
"state": {}
}
}
]
}
],
"direction": "horizontal",
"width": 228.5,
"collapsed": true
},
"right": {
"id": "1464b72f66019d33",
"type": "split",
"children": [
{
"id": "d0f62b3dd05030d0",
"type": "tabs",
"children": [
{
"id": "8c60c8158acd8037",
"type": "leaf",
"state": {
"type": "outline",
"state": {
"file": "48-Galatians/Gal.4.12-20.md"
}
}
},
{
"id": "ffff73b72ba5875f",
"type": "leaf",
"state": {
"type": "tag",
"state": {
"sortOrder": "frequency",
"useHierarchy": true
}
}
},
{
"id": "10ca0c35e69c92bd",
"type": "leaf",
"state": {
"type": "backlink",
"state": {
"file": "48-Galatians/Gal.4.12-20.md",
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical",
"showSearch": false,
"searchQuery": "",
"backlinkCollapsed": false,
"unlinkedCollapsed": true
}
}
},
{
"id": "df027e429ddfe341",
"type": "leaf",
"state": {
"type": "outgoing-link",
"state": {
"file": "48-Galatians/Gal.4.12-20.md",
"linksCollapsed": false,
"unlinkedCollapsed": true
}
}
}
]
}
],
"direction": "horizontal",
"width": 183.0555419921875,
"collapsed": true
},
"active": "a4a388eaf0490360",
"lastOpenFiles": [
"48-Galatians/Galatians-Interlinear.md",
"48-Galatians/Gal.4.12-20.md",
"48-Galatians/Gal.4.8-11.md",
"48-Galatians/Gal.4.1-7.md",
"48-Galatians/Gal.4.21-5.1.md",
"BBG4E/HW12-Key.md",
"52-1Thessalonians/1Th.5.1-11.md",
"58-Hebrews/Heb.2.1-4.md",
"46-1Corinthians/1Co.14.1-4.md",
"BBG4E/HW12-PreachingNote.md"
]
}

405
.obsidian/workspaces.json vendored Normal file
View File

@ -0,0 +1,405 @@
{
"workspaces": {
"2Sync": {
"main": {
"id": "3969f3923e6cfedb",
"type": "split",
"children": [
{
"id": "1a81d9f000627cca",
"type": "leaf",
"dimension": 40.99547511312217,
"state": {
"type": "markdown",
"state": {
"file": "48-Galatians/Gal.3.7-14.md",
"mode": "source",
"backlinks": false,
"source": true
}
},
"group": "98d95b26b4414933"
},
{
"id": "e4c58faa39706a81",
"type": "leaf",
"dimension": 59.00452488687783,
"state": {
"type": "markdown",
"state": {
"file": "48-Galatians/Gal.3.7-14.md",
"mode": "preview",
"backlinks": false,
"source": true
}
},
"group": "98d95b26b4414933"
}
],
"direction": "vertical"
},
"left": {
"id": "2b1e149eb78e8515",
"type": "split",
"children": [
{
"id": "fb89deb39da52857",
"type": "tabs",
"children": [
{
"id": "75b75d906b38f1fb",
"type": "leaf",
"state": {
"type": "file-explorer",
"state": {}
}
},
{
"id": "8b1314860610141a",
"type": "leaf",
"state": {
"type": "search",
"state": {
"query": "",
"matchingCase": false,
"explainSearch": false,
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical"
}
}
},
{
"id": "47f03e690283089d",
"type": "leaf",
"state": {
"type": "starred",
"state": {}
}
}
]
}
],
"direction": "horizontal",
"width": 267,
"collapsed": true
},
"right": {
"id": "1464b72f66019d33",
"type": "split",
"children": [
{
"id": "d0f62b3dd05030d0",
"type": "tabs",
"children": [
{
"id": "8c60c8158acd8037",
"type": "leaf",
"state": {
"type": "outline",
"state": {
"file": "48-Galatians/Gal.3.7-14.md"
}
}
},
{
"id": "ffff73b72ba5875f",
"type": "leaf",
"state": {
"type": "tag",
"state": {
"sortOrder": "frequency",
"useHierarchy": true
}
}
}
]
}
],
"direction": "horizontal",
"width": 183.0555419921875,
"collapsed": true
},
"active": "1a81d9f000627cca"
},
"3Sync": {
"main": {
"id": "3969f3923e6cfedb",
"type": "split",
"children": [
{
"id": "44f88da71f2f6711",
"type": "split",
"children": [
{
"id": "1a81d9f000627cca",
"type": "leaf",
"dimension": 70.72368421052632,
"state": {
"type": "markdown",
"state": {
"file": "Untitled 8.md",
"mode": "source",
"backlinks": false
}
},
"group": "98d95b26b4414933"
},
{
"id": "2285639621995e45",
"type": "leaf",
"dimension": 29.276315789473685,
"state": {
"type": "markdown",
"state": {
"file": "Untitled 8.md",
"mode": "source",
"backlinks": false
}
}
}
],
"direction": "horizontal"
},
{
"id": "e4c58faa39706a81",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "Untitled 8.md",
"mode": "source",
"backlinks": false
}
},
"group": "98d95b26b4414933"
}
],
"direction": "vertical"
},
"left": {
"id": "2b1e149eb78e8515",
"type": "split",
"children": [
{
"id": "fb89deb39da52857",
"type": "tabs",
"children": [
{
"id": "75b75d906b38f1fb",
"type": "leaf",
"state": {
"type": "file-explorer",
"state": {}
}
},
{
"id": "8b1314860610141a",
"type": "leaf",
"state": {
"type": "search",
"state": {
"query": "",
"matchingCase": false,
"explainSearch": false,
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical"
}
}
},
{
"id": "47f03e690283089d",
"type": "leaf",
"state": {
"type": "starred",
"state": {}
}
}
]
}
],
"direction": "horizontal",
"width": 267
},
"right": {
"id": "1464b72f66019d33",
"type": "split",
"children": [
{
"id": "d0f62b3dd05030d0",
"type": "tabs",
"children": [
{
"id": "8c60c8158acd8037",
"type": "leaf",
"state": {
"type": "outline",
"state": {
"file": "Untitled 8.md"
}
}
}
]
}
],
"direction": "horizontal",
"width": 183.0555419921875,
"collapsed": true
},
"active": "1a81d9f000627cca"
},
"4Sync": {
"main": {
"id": "3969f3923e6cfedb",
"type": "split",
"children": [
{
"id": "5edc552c970c1023",
"type": "split",
"dimension": 46.16883116883117,
"children": [
{
"id": "1a81d9f000627cca",
"type": "leaf",
"dimension": 66.60175267770204,
"state": {
"type": "markdown",
"state": {
"file": "60-1Peter/1Pe.1.17-21.md",
"mode": "source",
"backlinks": false
}
},
"group": "98d95b26b4414933"
},
{
"id": "31ee533b2099d910",
"type": "split",
"dimension": 33.398247322297955,
"children": [
{
"id": "e4e995cdf3f708be",
"type": "leaf",
"pinned": true,
"state": {
"type": "markdown",
"state": {
"file": "README.md",
"mode": "preview",
"backlinks": false
},
"pinned": true
}
},
{
"id": "94aa3f7692cf3730",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "60-1Peter/1Peter-Notes.md",
"mode": "source",
"backlinks": false
}
}
}
],
"direction": "vertical"
}
],
"direction": "horizontal"
},
{
"id": "e4c58faa39706a81",
"type": "leaf",
"dimension": 53.83116883116883,
"state": {
"type": "markdown",
"state": {
"file": "60-1Peter/1Pe.1.17-21.md",
"mode": "preview",
"backlinks": false
}
},
"group": "98d95b26b4414933"
}
],
"direction": "vertical"
},
"left": {
"id": "2b1e149eb78e8515",
"type": "split",
"children": [
{
"id": "fb89deb39da52857",
"type": "tabs",
"children": [
{
"id": "75b75d906b38f1fb",
"type": "leaf",
"state": {
"type": "file-explorer",
"state": {}
}
},
{
"id": "8b1314860610141a",
"type": "leaf",
"state": {
"type": "search",
"state": {
"query": "",
"matchingCase": false,
"explainSearch": false,
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical"
}
}
},
{
"id": "47f03e690283089d",
"type": "leaf",
"state": {
"type": "starred",
"state": {}
}
}
]
}
],
"direction": "horizontal",
"width": 267,
"collapsed": true
},
"right": {
"id": "1464b72f66019d33",
"type": "split",
"children": [
{
"id": "d0f62b3dd05030d0",
"type": "tabs",
"children": [
{
"id": "8c60c8158acd8037",
"type": "leaf",
"state": {
"type": "outline",
"state": {
"file": "60-1Peter/1Peter-Notes.md"
}
}
}
]
}
],
"direction": "horizontal",
"width": 183.0555419921875,
"collapsed": true
},
"active": "94aa3f7692cf3730"
}
},
"active": "2Sync"
}