コードブロックにタイトルを埋め込む[[Obsidian]]のプラグイン。[[Notes/publish.js|publish.js]]と[[Notes/publish.css|publish.css]]を使えば[[Obsidian Publish]]でも動作する。 ![](https://github.com/tadashi-aikawa/obsidian-embedded-code-title/raw/master/resource/demo.gif) ## 具体例 ### 通常 ```python def main(): pass ``` ### 言語表示 ```python: def main(): pass ``` ### タイトル表示 ```python:main.py def main(): pass ``` ### 半角スペース置換 ```python:main\sincludes\sspace.py def main(): pass ``` ### ハイライトなし ```console def main(): pass ``` ### 指定なし ``` def main(): pass ``` ## 参考 - [[Obsidian Publishのサイトでコードブロックにファイル名を埋め込む]] ## 最近まで使っていたコード ```js // ******************* // Embedded Code Title // ******************* const settings = { substitutionTokenForSpace: "\\s", titleFontColor: "grey", titleBackgroundColor: "#DEDEDE", }; // Refer https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions#escaping function escapeRegExp(str) { return str.replace(/[.*+?^=!:${}()|[\]\/\\]/g, "\\amp;"); } // Avoid multiple executions const insertFileNamesIntoCodeBlocks = () => { document.querySelectorAll('pre[class*="language-"]').forEach((wrapperElm) => { let title; const codeElm = wrapperElm.querySelector("code"); const languageClass = codeElm.className .split(" ") .find((x) => x.startsWith("language-")); if (!languageClass) { return; } const [lang, file] = languageClass.split(":"); codeElm.addClass(lang); title = file; if (title === "") { title = lang.replace("language-", ""); } if (!title) { return; } if (settings.substitutionTokenForSpace) { title = title.replace( new RegExp(escapeRegExp(settings.substitutionTokenForSpace), "g"), " " ); } wrapperElm.style.setProperty("position", "relative", "important"); wrapperElm.style.setProperty("padding-top", "30px", "important"); wrapperElm .querySelectorAll(".obsidian-embedded-code-title__code-block-title") .forEach((x) => x.remove()); let d = document.createElement("pre"); d.appendText(title); d.className = "obsidian-embedded-code-title__code-block-title"; d.style.color = settings.titleFontColor; d.style.backgroundColor = settings.titleBackgroundColor; wrapperElm.prepend(d); }); }; insertFileNamesIntoCodeBlocks(); setInterval(insertFileNamesIntoCodeBlocks, 1000); ```