Obsidian์ ์ธ์ ๋ ์ง ์ด๋ค ์ฝํ ์ธ ๋ฅผ ๋ณผ ์ ์๋์ง ๊ตฌ์ฑํ ์ ์๊ฒ ํด์ค๋๋ค. ํ์ ์์ ๋ ํ์ผ ํ์๊ธฐ๋ฅผ ์จ๊ธฐ๊ฑฐ๋, ์ฌ๋ฌ ๋ฌธ์๋ฅผ ๋๋ํ ํ์ํ๊ฑฐ๋, ์์ ํ๋ ๋์ ๋ฌธ์์ ๊ฐ์๋ฅผ ํ์ํ ์ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ฐฝ ๋ด์์ ๋ณด์ด๋ ์ฝํ ์ธ ์ ๊ตฌ์ฑ์ ์์ ๊ณต๊ฐ(workspace) ์ด๋ผ๊ณ ํฉ๋๋ค.
์์ ๊ณต๊ฐ์ ํธ๋ฆฌ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ๊ตฌํ๋๋ฉฐ, ํธ๋ฆฌ์ ๊ฐ ๋ ธ๋๋ ์์ ๊ณต๊ฐ ํญ๋ชฉ์ด๋ผ๊ณ ํฉ๋๋ค. ์์ ๊ณต๊ฐ ํญ๋ชฉ์๋ ๋ถ๋ชจ์ ๋ฆฌํ ๋ ๊ฐ์ง ์ ํ์ด ์์ต๋๋ค. ์ฃผ์ ์ฐจ์ด์ ์ ๋ถ๋ชจ ํญ๋ชฉ์ ๋ค๋ฅธ ๋ถ๋ชจ ํญ๋ชฉ์ ํฌํจํ ์์ ํญ๋ชฉ์ ํฌํจํ ์ ์์ง๋ง, ๋ฆฌํ ํญ๋ชฉ์ ์ด๋ค ์์ ๊ณต๊ฐ ํญ๋ชฉ๋ ํฌํจํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
๋ถ๋ชจ ํญ๋ชฉ์๋ ๋ถํ ๊ณผ ํญ ๋ ๊ฐ์ง ์ ํ์ด ์์ผ๋ฉฐ, ์ด๋ ์์์ด ์ฌ์ฉ์์๊ฒ ์ด๋ป๊ฒ ํ์๋๋์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค:
flowchart TD split{Split} split --> A((Leaf)) split --> B((Leaf)) split --> C((Leaf)) tabs{Tabs} tabs --> X((Leaf)) tabs --> Y((Leaf)) tabs --> Z((Leaf))
- ๋ถํ ํญ๋ชฉ์ ์์ ํญ๋ชฉ์ ์์ง ๋๋ ์ํ ๋ฐฉํฅ์ผ๋ก ์ฐจ๋ก๋ก ๋ฐฐ์นํฉ๋๋ค.
- ํญ ํญ๋ชฉ์ ํ ๋ฒ์ ํ๋์ ์์ ํญ๋ชฉ๋ง ํ์ํ๊ณ ๋๋จธ์ง๋ ์จ๊น๋๋ค.
์์ ๊ณต๊ฐ์๋ ์ผ์ชฝ, ์ค๋ฅธ์ชฝ, _๋ฃจํธ_๋ผ๋ ์ธ ๊ฐ์ง ํน๋ณํ ๋ถํ ํญ๋ชฉ์ด ์์ต๋๋ค. ๋ค์ ๋ค์ด์ด๊ทธ๋จ์ ์ผ๋ฐ์ ์ธ ์์ ๊ณต๊ฐ์ด ์ด๋ป๊ฒ ๋ณด์ผ ์ ์๋์ง ๋ณด์ฌ์ฃผ๋ ์์ ๋๋ค:
flowchart TD Workspace --> Left{Left split} Workspace --> Root{Root split} Workspace --> Right{Right split} Left --> leftTabs{Tabs} leftTabs --> A((Leaf)) leftTabs --> B((Leaf)) Root --> C{Split} Root --> D((Leaf)) C --> E((Leaf)) C --> F((Leaf)) Right --> rightTabs{Tabs} rightTabs --> I((Leaf)) rightTabs --> J((Leaf)) rightTabs --> K((Leaf))
๋ฆฌํ๋ ๋ค์ํ ๋ฐฉ์์ผ๋ก ์ฝํ
์ธ ๋ฅผ ํ์ํ ์ ์๋ ์ฐฝ์
๋๋ค. ๋ฆฌํ์ ์ ํ์ ์ฝํ
์ธ ๊ฐ ํ์๋๋ ๋ฐฉ์์ ๊ฒฐ์ ํ๋ฉฐ, ํน์ _๋ทฐ_์ ํด๋นํฉ๋๋ค. ์๋ฅผ ๋ค์ด, graph
์ ํ์ ๋ฆฌํ๋ ๊ทธ๋ํ ๋ทฐ๋ฅผ ํ์ํฉ๋๋ค.
๋ถํ (Splits)
๊ธฐ๋ณธ์ ์ผ๋ก ๋ฃจํธ ๋ถํ ์ ๋ฐฉํฅ์ ์์ง์ผ๋ก ์ค์ ๋ฉ๋๋ค. ์ฌ๊ธฐ์ ์ ๋ฆฌํ๋ฅผ ๋ง๋ค๋ฉด Obsidian์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ์ ์ด์ ๋ง๋ญ๋๋ค. ๋ฆฌํ๋ฅผ ๋ถํ ํ๋ฉด ๊ฒฐ๊ณผ ๋ฆฌํ๊ฐ ์ ๋ถํ ํญ๋ชฉ์ ์ถ๊ฐ๋ฉ๋๋ค. ๋ฃจํธ ๋ถํ ์๋์ ๋ง๋ค ์ ์๋ ์์ค์ ์์๋ ์ ์๋ ์ ํ์ด ์์ง๋ง, ์ค์ ๋ก๋ ๊ฐ ์์ค๋ง๋ค ์ ์ฉ์ฑ์ด ๊ฐ์ํฉ๋๋ค.
flowchart TD rootBefore{"Root split\n(before)"} rootBefore --> leaf1((Leaf)) rootBefore --> leaf2((Leaf)) rootAfter{"Root split\n(after)"} rootAfter --> split{Split} rootAfter --> leaf3((Leaf)) split --> leaf4((Leaf)) split --> leaf5((Leaf))
์ผ์ชฝ ๋ฐ ์ค๋ฅธ์ชฝ ๋ถํ ์ ์ฝ๊ฐ ๋ค๋ฅด๊ฒ ์๋ํฉ๋๋ค. ์ฌ์ด๋ ๋ํฌ์์ ๋ฆฌํ๋ฅผ ๋ถํ ํ๋ฉด Obsidian์ ์ ํญ ํญ๋ชฉ์ ์์ฑํ๊ณ ๊ทธ ์๋์ ์ ๋ฆฌํ๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ฌ์ค์, ์ด๋ ์ธ์ ๋ ์ง ์ธ ๊ฐ์ง ์์ค์ ์์ ๊ณต๊ฐ ํญ๋ชฉ๋ง ๊ฐ์ง ์ ์์ผ๋ฉฐ, ๋ชจ๋ ์ง์ ์์์ ํญ ํญ๋ชฉ์ด์ด์ผ ํจ์ ์๋ฏธํฉ๋๋ค.
flowchart TD split1{"Right split\n(before)"} tabs1{Tabs} leaf1((Leaf)) leaf2((Leaf)) split1 --> tabs1 tabs1 --> leaf1 tabs1 --> leaf2 split2{"Right split\n(after)"} tabs2{Tabs} tabs3{Tabs} leaf3((Leaf)) leaf4((Leaf)) leaf5((Leaf)) split2 --> tabs2 tabs2 --> leaf3 tabs2 --> leaf4 split2 --> tabs3 tabs3 --> leaf5
์์ ๊ณต๊ฐ ๊ฒ์ฌํ๊ธฐ
App ๊ฐ์ฒด๋ฅผ ํตํด ์์ ๊ณต๊ฐ์ ์ ๊ทผํ ์ ์์ต๋๋ค. ๋ค์ ์์ ๋ ์์ ๊ณต๊ฐ์ ๋ชจ๋ ๋ฆฌํ ์ ํ์ ์ถ๋ ฅํฉ๋๋ค:
import { Plugin } from 'obsidian';
export default class ExamplePlugin extends Plugin {
async onload() {
this.addRibbonIcon('dice', 'Print leaf types', () => {
this.app.workspace.iterateAllLeaves((leaf) => {
console.log(leaf.getViewState().type);
});
});
}
}
๋ฆฌํ ์๋ช ์ฃผ๊ธฐ
ํ๋ฌ๊ทธ์ธ์ ์์ ๊ณต๊ฐ์ ๋ชจ๋ ์ ํ์ ๋ฆฌํ๋ฅผ ์ถ๊ฐํ ์ ์์ผ๋ฉฐ, ์ฌ์ฉ์ ์ ์ ๋ทฐ๋ฅผ ํตํด ์ ๋ฆฌํ ์ ํ์ ์ ์ํ ์๋ ์์ต๋๋ค. ์์ ๊ณต๊ฐ์ ๋ฆฌํ๋ฅผ ์ถ๊ฐํ๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋ ๋ง์ ๋ฐฉ๋ฒ์ Workspace๋ฅผ ์ฐธ์กฐํ์ธ์.
- ๋ฃจํธ ๋ถํ ์ ์ ๋ฆฌํ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด getLeaf(true)๋ฅผ ์ฌ์ฉํ์ธ์.
- ์ฌ์ด๋๋ฐ ์ค ํ๋์ ์ ๋ฆฌํ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด getLeftLeaf() ๋ฐ getRightLeaf()๋ฅผ ์ฌ์ฉํ์ธ์. ๋ ๋ค ์ ๋ถํ ์ ๋ฆฌํ๋ฅผ ์ถ๊ฐํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
createLeafInParent()๋ฅผ ์ฌ์ฉํ์ฌ ์ ํํ ๋ถํ ์ ๋ช ์์ ์ผ๋ก ๋ฆฌํ๋ฅผ ์ถ๊ฐํ ์๋ ์์ต๋๋ค.
๋ช ์์ ์ผ๋ก ์ ๊ฑฐํ์ง ์๋ ํ, ํ๋ฌ๊ทธ์ธ์ด ์์ ๊ณต๊ฐ์ ์ถ๊ฐํ ๋ชจ๋ ๋ฆฌํ๋ ํ๋ฌ๊ทธ์ธ์ด ๋นํ์ฑํ๋ ํ์๋ ๋จ์ ์์ต๋๋ค. ํ๋ฌ๊ทธ์ธ์ ์์ ๊ณต๊ฐ์ ์ถ๊ฐํ ๋ชจ๋ ๋ฆฌํ๋ฅผ ์ ๊ฑฐํ ์ฑ ์์ด ์์ต๋๋ค.
์์ ๊ณต๊ฐ์์ ๋ฆฌํ๋ฅผ ์ ๊ฑฐํ๋ ค๋ฉด ์ ๊ฑฐํ๋ ค๋ ๋ฆฌํ์์ detach()๋ฅผ ํธ์ถํ์ธ์. detachLeavesOfType()์ ์ฌ์ฉํ์ฌ ํน์ ์ ํ์ ๋ชจ๋ ๋ฆฌํ๋ฅผ ์ ๊ฑฐํ ์๋ ์์ต๋๋ค.
๋ฆฌํ ๊ทธ๋ฃน
setGroup()์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ๋ฆฌํ๋ฅผ ๋์ผํ ๊ทธ๋ฃน์ ํ ๋นํ์ฌ ์ฐ๊ฒฐ๋ ๋ทฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
leaves.forEach((leaf) => leaf.setGroup('group1');