From 8f81e89730a6bb68a1c60943b258672a84484d5e Mon Sep 17 00:00:00 2001 From: Daniel Borek Date: Thu, 2 Jan 2025 21:29:16 +0100 Subject: [PATCH] feat: update to README --- README.md | 133 ++++++++++++++++++++++-------------------- makefile | 2 +- qmd-as-md-working.zip | Bin 9278 -> 0 bytes qmd-as-md.zip | Bin 10073 -> 10400 bytes src/main.ts | 44 ++++++++------ 5 files changed, 97 insertions(+), 82 deletions(-) delete mode 100644 qmd-as-md-working.zip diff --git a/README.md b/README.md index 83597fb..74b1f92 100644 --- a/README.md +++ b/README.md @@ -1,103 +1,108 @@ -# qmd as md Obsidian plugin +# QMD as Markdown Obsidian Plugin -A plugin for [Obsidian](https://obsidian.md) which allows editing of qmd files as if they were markdown. +A plugin for [Obsidian](https://obsidian.md) that allows seamless editing of QMD files as if they were Markdown. -QMD files contain a combination of markdown and executable code cell, and are format supported by [Quarto](https://quarto.org/) open source publishing systems, they are supported in Rstudio and VSCode editors. +QMD files combine Markdown with executable code cells and are supported by [Quarto](https://quarto.org/), an open-source publishing system. These files are compatible with editors like RStudio and VSCode. -To be able to use linking with the quatro files you need to check the toggle "detect all files extension" in `Files & Links` section in Obsidian. +This plugin began as a small tweak to a now-defunct plugin created by deathau: [deathau/txt-as-md-obsidian](https://github.com/deathau/txt-as-md-obsidian). It has since evolved with additional integrations. -To hide additional files you might use this CSS chunk (save it as a file to your snippets folder and enable it in Obsidian in the Appeareance menu), you might add aditional filetypes. +--- + +## Version History + +### 0.0.3 +- Added an option to run Quarto preview for the current `qmd` file. + +### 0.0.2 +- Repurposed the plugin to enable viewing and editing of QMD files. +- Made the plugin available via BRAT and Obsidian. + +### 0.0.1 +- Initial release by death_md, supporting `.txt` files. + +--- + +## To-Do List + +- [ ] Recognize `{language}` for code block syntax highlighting. +- [ ] Add CSS support for callout blocks. +- [ ] Enable the creation of new QMD files. +- [ ] Add a render command. + +--- + +## Enhancing Quarto File Integration in Obsidian + +To enable linking with Quarto files, ensure the **"Detect all file extensions"** toggle is activated in the `Files & Links` section of Obsidian settings. + +If you'd like to hide additional file types, use the following CSS snippet. Save it in your snippets folder and enable it via the Appearance menu in Obsidian. You can add more file extensions as needed. ```css -div[data-path$='.Rproj']{ +div[data-path$='.Rproj'] { display: none; } -div[data-path$='.cls']{ +div[data-path$='.cls'] { display: none; } -div[data-path$='.yml']{ +div[data-path$='.yml'] { display: none; } -div[data-path$='.json']{ +div[data-path$='.json'] { display: none; } ``` +--- -Plugin is a small tweak of a plugin made by deathau: [deathau/txt-as-md-obsidian: Edit txt files in Obsidian.md as if they were markdown](https://github.com/deathau/txt-as-md-obsidian). +## Compatibility -### Plugins for better editing experience +This plugin requires Obsidian **v0.10.12** or later to work properly, as the necessary APIs were introduced in this version. -- Use [obsidian-shellcomands](obsidian://show-plugin?id=obsidian-shellcommands) with `quarto render {{file_path:absolute}} --to pdf` to render the file inside Obsidian -- Use [HTML Reader](obsidian://show-plugin?id=obsidian-html-plugin) to render HTML output inside Obsidian, Obsidian natively supports pdfs. - - -### To-do - -- [ ] Creation of new qmd files -- [ ] Currly braces `{language}` treated as language for codeblock -- [ ] CSS for callout blocks -- [ ] Better integration with Obsidian - -### Compatibility - -The required APIs were only added in Obsidian **0.10.12**, and as such, that is the minimum version of Obsidian required to use this plugin. +--- ## Installation -### From within Obsidian +### From Within Obsidian -Plugin is accesible in the Obsidian n the community list. If you want to test beta releases, you can use [the BRAT plugin](https://github.com/TfTHacker/obsidian42-brat). +The plugin is available in Obsidian's community plugin list. +For beta releases, you can use the [BRAT plugin](https://github.com/TfTHacker/obsidian42-brat). ### From GitHub -- Download the Latest Release from the Releases section of the GitHub Repository -- Extract the plugin folder from the zip to your vault's plugins folder: `/.obsidian/plugins/` -Note: On some machines the `.obsidian` folder may be hidden. On MacOS you should be able to press `Command+Shift+Dot` to show the folder in Finder. -- Reload Obsidian -- If prompted about Safe Mode, you can disable safe mode and enable the plugin. -Otherwise head to Settings, third-party plugins, make sure safe mode is off and -enable the plugin from there. -## Security -> Third-party plugins can access files on your computer, connect to the internet, and even install additional programs. +1. Download the latest release from the Releases section of the GitHub repository. +2. Extract the plugin folder from the zip file to your vault's plugins directory: `/.obsidian/plugins/` + - Note: On some systems, the `.obsidian` folder might be hidden. On macOS, press `Command + Shift + Dot` to reveal hidden folders in Finder. +3. Reload Obsidian. +4. If prompted about Safe Mode, disable it and enable the plugin. + Alternatively, go to **Settings → Third-party plugins**, disable Safe Mode, and enable the plugin manually. -The source code of this plugin is available on GitHub for you to audit yourself, but installing plugins into Obsidian is currently a matter of trust. +--- -I can assure you here that I do nothing to collect your data, send information to the internet or otherwise do anything nefarious with your system. However, be aware that I *could*, and you only have my word that I don't. +## Security -## Development +> **Important:** Third-party plugins can access files on your computer, connect to the internet, and install additional programs. -This project uses Typescript to provide type checking and documentation. -The repo depends on the latest [plugin API](https://github.com/obsidianmd/obsidian-api) in Typescript Definition format, which contains TSDoc comments describing what it does. +The source code for this plugin is open and available on GitHub for audit. While I assure you that the plugin does not collect data or perform any malicious actions, installing plugins in Obsidian always involves a level of trust. -**Note:** The Obsidian API is still in early alpha and is subject to change at any time! +--- + +## Development -If you want to contribute to development and/or just customize it with your own -tweaks, you can do the following: -- Clone this repo. -- `npm i` or `yarn` to install dependencies -- `npm run build` to compile. -- Copy `manifest.json`, `main.js` and `styles.css` to a subfolder of your plugins -folder (e.g, `/.obsidian/plugins//`) -- Reload obsidian to see changes +This project is built using TypeScript for type checking and documentation. +It relies on the latest [Obsidian plugin API](https://github.com/obsidianmd/obsidian-api) in TypeScript Definition format, which includes TSDoc comments for documentation. -Alternately, you can clone the repo directly into your plugins folder and once -dependencies are installed use `npm run dev` to start compilation in watch mode. -You may have to reload obsidian (`ctrl+R`) to see changes. +**Note:** The Obsidian API is in early alpha and may change at any time. -## Pricing +To contribute or customize the plugin: -Plugin is completely free, but you might contribute to the author of the orginal plugin (deathau) via the following: +1. Clone this repository. +2. Run `npm i` or `yarn` to install dependencies. +3. Use `npm run build` to compile the plugin. +4. Copy `manifest.json`, `main.js`, and `styles.css` to a subfolder in your plugins directory: `/.obsidian/plugins//` +5. Reload Obsidian to apply changes. -[![GitHub Sponsors](https://img.shields.io/github/sponsors/deathau?style=social)](https://github.com/sponsors/deathau) -[![Paypal](https://img.shields.io/badge/paypal-deathau-yellow?style=social&logo=paypal)](https://paypal.me/deathau) +Alternatively, clone the repository directly into your plugins folder. After installing dependencies, run `npm run dev` to enable watch mode for live compilation. +Reload Obsidian (`Ctrl + R`) to view updates. -# Version History -## 0.0.1 -Initial release by death_md supporting txt! -## 0.0.2 -Repurposing this plugin to viev and edit qmd files, plugin available via BRAT. -# 0.0.3 -Optopn to run preview \ No newline at end of file diff --git a/makefile b/makefile index 9f1b36d..d71d7d1 100644 --- a/makefile +++ b/makefile @@ -2,7 +2,7 @@ zip: zip qmd-as-md.zip main.js manifest.json clean: - rm -rf node_modules dist build .cache *.log *.tmp package-lock.json main.js + rm -rf node_modules dist build .cache *.log *.tmp package-lock.json build: npm install && npm run build && make zip && make clean \ No newline at end of file diff --git a/qmd-as-md-working.zip b/qmd-as-md-working.zip deleted file mode 100644 index ac1b8bf82849ace1cebfbc0336efc3f7b40d19e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9278 zcmZ{qWl$VI*QIe1oZtb55Zr^i1xP}0clY2f0|SKMmIT+q32wpNeSkpF!JPpHox$0> z-)?PfeY;y-r@C)d_vu@w|8+g;O6VA*C@3f|P_|#bH6-$ZDAJ&!p!EI|J_-$rvxSR; zt&OJ__ZLrB7ai@FDCjZE-ga02c z%UA4Kb%y>mw2Ty4qKxuoF^LpltA88(^tduQg_dWr;FNcZ=MvpisUdDP%sRO$pO_q{ zQ}WZh-Gy$yk^x3C9LVI#KrL^E;3P@{w0g*(l0)JEl>@)n`tx2UD6^zW;vGBAL|?ve z7R0_AV@%S)ZBIKPL$XsjYE?E**KO>)5R>WgatkPzXJ)%*vf3|8ZGAlgY$sCIZu~1` z{sjI?<7Kxs;7oL8-Pxnn9(Pk_3$&Z7hd+Z8vSI`{|i+>EsngE#K?gve_N zf!OsyI`#h@acR+8LkDb6?;Uy+6e1546zupS({MGe=5*{~vka_5VWH41u41by(E)5#>e(P|eXD9frxN_;0Ewq&bP!Jt()SANQEe9Y){ zoSHz26!nrN4zZ_T=JnrOaGF3VkWuP9cX-MHdz81Tbgl))*@yeJb*e@3uN$!$OVp0 z28`OjPJFRm%c9E^f`y{K7%SsZTT>ceK-0tb4z{ae{iFu2oc{gp{J|{v`RWiP)OmY# zXtw{+Iq`B@$$G`Z`1Gy>C`c^{3TW{Uq=^F(zKNi}YG-jVz6W5Lc`zZ02h=q<2OKPa z{&1=CQo<(&`agdVl6N!q^WKI20QPHnhuFf|$=wT3eql^4@oC4#vlQASnQr=-_jnX* z5(~4Z4|(KZ{H!h!CnK(`#Z=-jGFe(}m{x!Hh0|tuH5%rDV?J}vmC?Y}PpCx~EUuTr7p$Lc21qa%b8BT`g0uH0 z6^NslSJ)n8XeB8#x@zC8A2e-US{}617*}40{PIvdCzJVgWnWRA??!SIV{Gp0*UM?7 z+jMGl+TV@)-8=yT4UZJvc)N+kE)Hxcmty-}AZdzE9(q1)!?an(I!E_>xN!nwMnoJV_~|xW}==zLhXGDKkjG zaBqtnmIQVkCTv7#0em0D_l#&)1QcSEFYjO&9<*}%*r^vF{YX$MbzBDW;+N50r@8>1 zVzORZem~%R-p%Z}8KC5QKiMhdm^6htmuCC}H@FIWd!NUT7j%&u2PRpI1G~az2ETOd z(0*tzVKhjC@|cOtGT$XtJDnMoZM)zpM-gT|?WBUxBMNUeqF}F(7b{D!ZKm4zB*IjE zNdqq%d=Hqdm23S6!tj~2-9PwGIOELCCE=tT)LB{cg+w#eFVtTVY{=0&ywcbd%Y0kY zbB6OVxytfQC$3;#mpm!Oo_NZG)M9tjZf6^!;RohlFuBEosTtLW4PRB_@lPb70|901 z04H&<)Y|rm?LhMv z6Mz0vr-@pBD4#UQXlXYX_`4ulRdmd`bs|H6Kt%V;kAe`+PdaSG=50xQnt&wg$H}G? zcC=n&Re`*AMycj=PF#H2+Vt&caO(>2^dVdPZ6Qj&gaToC8AcG66Bezwfm-t->5O3} z)JV6|%ZI7p7Wh~hix?-nVZEjFVA*LMurh$$W?)KN_0=0gn_Q=(F6clDQw%Ny0 z{%5}oE!dTw)xpAK7Lg?DX14RTtktsw0~^M+sD39RIA7^jKR!6jRi>4SbI{em7q15; z1TY{Q3y})%d}@dfUFD>FE6J!i&D6C2WZVmgmeIwQ9J{%< zrpDl(2juc?eA-Ya-y!o5ihG44QJaMTf?gBKj~bpjG6J=48Nc{Cz$5Q z6r-r?s}tkLuvsDkwm^KDB>6ZJHx=&%OXin03YDp?2$@I&H1g#@DalsUz4#*$CmYeq z22If(*4UIDH<^HYOPv1cSb%mS<~rM8KZJK;Va(JwU-j7Qm$mkVbk|1BdzlL#@j>S( zGy{E6!^eij>{poi6yu_}-oYy3$xDJvj_Y|UvF)7fKa_YbS*V-dY7D=w`wp}naVg>d zl)9^RQ?3|D!cp)XZcbtRF_7Z!^0Tlxp~7i8&3Puntn}{Znud-}QwoFJ$1K>#hQ~eP z$-dYuqLTCh(r;JK6t+}NH$UsnMn`4|aggx9a<*?YC=)F;o;b*~n*s(YGHIWgACy13 zFY+P}j%yi%?|%elID{-|?JQpse3j@A<&+(Tr(v>5o z)#tGYpZ~EPll z$i{r4)$foD^N(aF#bkUh$Dl{F(EE3+loiKhOP*{d9O&ca*_cRkJ80{^69nIgJl<2W z8M3t9Y|#3aKC!mJg9`Z({pIsWRgf#n{!|;0LQY*uc9x|o-pO5H%VI(N*7qc)y*!s%K7%HsOgVDFwr^WfW zTj-V2DX9(ie@V+Q*ZO7?Pu<0pDu5k4yjYh)BEFe~ZiRH4$d&&zAs~6-ys%AD)=hSc zCHWZ*p4XibJT2WlglJvqcHKZlHB4%Uy{I$ql!g--NXD+BUHav1{ZN{aIbB${0f;V4 zfiWZYBIcsmlW>G}C`)fCpK9>c`EL@*i+(z{n0AGO>AD41r>%iITcoiw)U(V0$)6@G z)D&!5M`sU@S(lgHo(U(;*1H5>a9-r9e5Cu1H0#ro!@hf=pDQiibPcHNM8yT2K}+dC z0X)$O7pGgw=aJqPyb@8Dslt9ugoTi4(tRNM(|obNFW2GZx=ru~UgdczXT((Bmg=*; zNE?(=D)C5ACELueD7cgd;L~R8`q$diY2@#@Zhc9FwaS6MyXlHzyoL9)uZ?22rd?-{ z$}j4*U+qY&9K^>mUK1V|zuio`I`*mq;R4}Wd|K@0hl9q~Kj|yO!)f9i#I055fAR`_ z3T{hP<}-p|AFrzTviKsLa>UG-B>PDM5jow5U)QvPMd|cPOEzB+o6Y8aE zf25H~yA8jtYeHIf((1VU7S!x^!xFZlzA~D;>p!W7&{=n{zP`dRE7$vLk<)1;uzW`A zW)Cgi^>XrVZPD5_ZD#jbE^%st%0?ci#+FG+pa@|lIP3NTm=Emn+D!CD;MYW3tUP`y zO(iQ-W9>~kQ0j?NM>L-ZYaj2jVYTAhD}r3t1M$u(rR!9NiFQB&a0|Isun?GfG>Lxr z+qHy0e{u@Zpx_MMZJ*uTj*;l2N#^}=*MZ3g2p{|%Q*ZrT?ya0=QD}s|qQfLzYmkUc zz07Agt1ZovJnj#tyIswbz8g+Oufx5_@w zl&|`RqOsI^?OGAeLKZmnro@6MDrY2EEK{~}^!3B>J!iytz<3fh3E5?43lUx}WN;C0 z-t4z8L#&g{tfb7TKRF&KjV;%QIvcgJ>!n5FN%G?`3QW&r;Y98mfifMoC zUPYH*Oo`uE%Q!CV@wdHHcer;i1q@B?vV~>(p?&ODPKsF|1zY@u_Z7WC3WL*f$sA<| zwO5IB33Ael%HVqq(9m&d^Z=ZgQm)NHzB9^-NIb|)osDecU8n1D5xwOk6li{fUaMQB z7>1N>!uF5bl((W@lUqZj!@sZwVzw4BPr7GkU-*IQuj+S9FVa{N5ICAwvxJ3;LY1 znZCL*m+rb%7SBG=&cO#fh(15!uEhtRTY-G;4DL{$6;l9K6a4YfgwqvBqGH<%iRYo;|*t>0Jm^p((Oao$iRCH`|h%)Gd+yU@=0B=C<}Y5=w6>J;9Y6 zI|$tfX=NVcmz7|-Vc1K(FK!h|jej{e%X{^5p#7x1YK9nsHvh!eD`K-4fYRo6^iQ#S;a);0PLL;eZ0v_WF{)V^V{ln(3Y%t}XMH_^TB z2_@`7Wm^Y$WwL@1s?$k#mO*XdrpHlq1D>V0RqPX4znfEnRKDg8kcoYZdqe)p<0qd- zV4(G8w$Fr`N)+9O^>@9uxdIbbRipU*MrdXe`#Le#?X^=XTW=s~N6rIO230XF=3K{u z8^f;4A>la_m(7GM_ozLEjj{g49~|{8*Qfh05{$u*p?D)x?)c3Og7nm|A8NuS`p?hz zl-3Vls9*%f{)9p&)ya`US74RIJF30kcE3=AkQkA1TbskO`=yMfY{?k|%n#H@YWzAp zR#Hi#;1Lf$S%%9XZ|hfK)>C}8{mdtw;)d^$UU2!k6R$?5N+$G$x16VcOP^F}CG1=G z^Q4!dVE{W06zmMZCXYi`MOo-+kJ2xi#9ZI2I%yXjVyhn8lN&%;qsM4*fR@@)=JrDZ7?^7gQ5?`(NROsr5{ditQ z*q;Onw@}SvXrX|#=3M1PLgNkzcHU6r@qO@HBg=ldYWpbaTJiO%D~N8SD5!F7qrwAR zv*%29{U)Cv-6*$MitqtO;CDS8DfX@NS48Kwv#i?dTwRK87{uC?!cM0oTJtf=I=27d8didJ-+P zr?oDE-4N~)kbIWc55*#C*XDz~<9B>RBnPi=0phcfkBXwL*^7ygEXkee{yWOM`nq0( zNQ4xHhz{Xh#VrxA5qz-TX|kC?zl-LSASOdFHB>Ga6y0ixd2NL5QnTibvn4dUz_ZO? zdE@kUUWbf)Idi%zsmE0?neYK+VgJ(3YqSk~R;p!p#Xu4e3or}Mc1wQVIS(Y8`bL>s zba)D(Pv{kXxAs<-xT@)RK5h{USb73@^Vvm=*>O`zVTHzk4+TIWx$pS z`n+Bq(%FIfNC2@5>?XN)*_z;SZ|Zd-J6}2LXj8jC*K>cW6&kF|-smiKwz6?f>ha<_ z(DUKskGJayXAn;~0~JI9r|y8_{I+RbN{V+!FfY@WwZX3t>!O`z@Q)#IZrH~RsboYD z$xcT;w;x4v&y#l@X3$K`!gmJfkoyT^>kZcxJ2K!%Id)50e?U~JlA7SoF#&wVZzXms z4(|SmYfEMNoP1!=U9c_@72C+$(lxR>0QHx?`14gHImnif>K)}>co07iL8@w10S67w|vAqbHh{-f_m<&c;gw=CFQzK9pEu_20w0nd8M^Y>(;`2cIX?{RZF&?G;pgo zjgFwrBu2SKG4H_*+YZ70(=u_1;?)zu!g$I@o$o*D=>E1wiO!Rxwd8?}=ifiQ` zx%-EfU0ruR_hliq6Ep9>Kh~JxfeY7c=fT{7H9DfZ6L_$yF-F}TpTgg@g49_FokYj_gWUOPAn z?>}J-OhR5=#WyyASiTjN1Cxc|t! zD}Q)-YyTPx9^}0SjMji#GeQ|bNSL+69-uI3(k^e;)#6%gnIEqqlwy_8Y zl}^B+9u0e+8z-Gntf*Q?=@UckmU9kj1op-D#GMw!ds}gK4J$<XxWhx-daG|doLAE%3VCLd4*7zML_m-)-Br91 zn``2D!M{=1sgZ z21zi`Iqsl?*7<||K{P$fvZNb;a6=#{{!bm9f@#cE*N$oB)XyHc{5W&Pjbe$H&!Qt9 za;Vgb&_;%jV?JiDYz-Vd`}(KdF#K>onnj_3E<7eUc{F`@=t4|+b4`0Z$L0kxfOqVS zk1&{?P)Ug*(-svOV=S!)W4f3FIWz)pmmM-$Val_=PQrKmmAY4kbFU|;FY3x~)$8pG zkCp1{DnC_8l0Aw-v-Bj`Gpm6eiPK!L6$$XX@Yo7^mLY3-x9OG}myv z+t8}?a~MV&QXN?rrt2{lAa6x^-M`$W{OCux%(G}q(*|#Ld)E7&b!OwoZG38Zh+V>& zLU;V-k)ylLDRm2o*QL}|WtG~L*oy&nE>5hmZ;^m$z!92Iwk>SwS&Q z)!3zpp4g8q|Gm}SF~{#+hgeU=SMp&*{`w+;54hRe@y?1%@dy@T!tnTpY(z=-J1~A0 z?65^|s}*A5#+AC!$z%*iX9`n3yv8|M#uBx?o2L?Iy}Yh=+ruMHtiBHlsF#7~buy_4gVfu5iCqEwL>@@y?K*|BA;XW}zqVq&n zHyg#Jt7^AS)cWc$S@tuZBCROTvpn}N&m0jL<+jjbaEX2SK3fSt;m+{M+~IJC>Um+1 zLxsPdXb~|9^RNB}gjEGLmYw#l=MiN_a#)Fv3(PN*nT z+fZxp>C~N;rPc+g-bsziFXq*gC7Yle{aSP;Cf`!embTO?^}_9sa~ zDRfyQ{cEs=7yTBgm-A3M_eoCv1iilcA24Xv&U6~w)QzIZ5y7Wk+!_%6O+s^FzP{OxF zv#;gc{eGV=R6I-?(%ltD1GsG_L3i|^w7T50-8M?G>*GJf^IxOTjVV8D2zGr8kc*qX z;??Q*{y>w43=Ow)cP_c9dN;xJMCxPLs>+p1fy3`0x%S@Wlq{L#XHR)}>mFy8h{_(* z2!}<{txOOX6m*$Csm2DMpcQGvOOasDB0b;JRH3Cf9~S9?Jb#F%O}|kakSJ8`e$OwP zX_x1)F%c`!Z}Z)-?)@$0%oQbY!6!h}S23IGi*^^w-3#xBuuRq(w}KvT()+)eb|O>E z&RZ7KFl+n2b?6W-<{EA4D&M+rcMOQYd0`W}JC9x+PkA7nb8C4qDHkYVYV)Y@h4Bta zDs)+7DP=rx!UkSD-y^ng{pGJK8iV5MOEV4Lv?KfP!0@V;?tH&jzvb6XEnNtYq17Hu zLllB)$KA$>(TmmxO9Ov%G$_tonqvgLYvc#e_^Zb=&HY$a05RC;O0dSzBd}YC9Mo}x zsHwN$hj=~PPD1E!?4>ZT>uP;Ex0+u!Wd7Cu+|}sREn@>wb|=E{++UH6uDzMjhL@#v z5!YX?W|N<}7=G=|wZ=*5{Uu~G;AR(Ukk)w6Xe8RO?6V9>614-_-QrOBsQZkb&3fEf z$K!%{jx>Kg3gJ^%SVn*E{63uW`frb%ctf`@#%tB}RPQ&4h+l-Z*_#0XqAso@+5U*m z<%n(yxr|bt#dn*WdamW+*S%q6(h8FB^7C_v#Zpb)hWI{GNs$5(+NRyH&paaNAEO~So`w>Yo8xqU6@D6qBz znVc50j2%d$khYr7XocjU}L zeXza;oAmFGnku+m+(+%Uv`k0)ixpp>%miYO{DO2~LRb<1!gb*nuwjB{ejzl2WTIt& zKRv6u@xuUc4JaqNNo=*+ZN8#+uT8g-_Dfh}efB-FOvZK;feum#^d4j!k`M&JoW4GX zRR%S5wVtjQlro*w_r#Wit@djsCUO>#8jeM)<(HdCcxX2Ea-HB(DBcjRp4rtzXIB^G z@>;q1lwKWdm_v^aaJ_m+U+BwqoFH!aUB0B9dtD@5K05L^@h4bZpuwbHu*UsVhq@p?FkS^)SxKS_6Z-z-+MDDWEPoLq{*WV4w9UMjkDg|`94vVZfs5I8)5k4I zOCaP|K7+ANu$Aa3WL%W-t&5Rrlj&IFYgde zIGoGiUWQarxI8Q?6%GRp!^v=tX)U!DM#BMyRSB( zdwOUC@BA68jWs{aAQ CX=fb( diff --git a/qmd-as-md.zip b/qmd-as-md.zip index 0295d10d873145a7e72afaf447f0f453b4ee3626..8d1089a28c82cd3ff76503bdf51d906a54ad8ada 100644 GIT binary patch delta 9973 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 pr6OALKw;_sBme*~fRh9$AOc|QlO`xT0zf5`V< { const output = data.toString(); - console.log(`Quarto Preview Output: ${output}`); + if (this.settings.emitCompilationLogs) { + console.log(`Quarto Preview Output: ${output}`); + } if (output.includes('Browse at')) { const match = output.match(/Browse at\s+(http:\/\/[^\s]+)/); @@ -165,8 +167,9 @@ export default class QmdAsMdPlugin extends Plugin { }); quartoProcess.stderr?.on('data', (data: Buffer) => { - console.error(`Quarto Preview Error: ${data}`); - new Notice(`Quarto Preview Error: ${data}`); + if (this.settings.emitCompilationLogs) { + console.error(`Quarto Preview Error: ${data}`); + } }); quartoProcess.on('close', (code: number | null) => { @@ -239,26 +242,20 @@ class QmdSettingTab extends PluginSettingTab { ); new Setting(containerEl) - .setName('Enable Linking to Quarto Files') + .setName('Enable Editing Quarto Files') .setDesc( - 'Allow linking to `.qmd` files without enabling "Detect All File Extensions"' + 'By default it allows editing `.qmd` files, disable it case of conflict with `Custom File Extensionbs and Types` plugin' ) .addToggle((toggle) => toggle .setValue(this.plugin.settings.enableQmdLinking) .onChange(async (value) => { - console.log(`Enable QMD Linking setting changed to: ${value}`); + console.log(`Enable QMD Editing setting changed to: ${value}`); this.plugin.settings.enableQmdLinking = value; if (value) { this.plugin.registerQmdExtension(); - } else { - console.log( - '.qmd linking disabled. Restart Obsidian if required.' - ); } - - await this.plugin.saveSettings(); }) ); @@ -276,6 +273,19 @@ class QmdSettingTab extends PluginSettingTab { }) ); + new Setting(containerEl) + .setName('Emit Compilation Logs') + .setDesc('Toggle whether to emit detailed compilation logs in the console') + .addToggle((toggle) => + toggle + .setValue(this.plugin.settings.emitCompilationLogs) + .onChange(async (value) => { + console.log(`Emit Compilation Logs set to: ${value}`); + this.plugin.settings.emitCompilationLogs = value; + await this.plugin.saveSettings(); + }) + ); + console.log('Settings tab rendered successfully'); } } \ No newline at end of file