![[chappy-log.webp|cover-picture]]
## èšå®
### èšå®è¿œå ã»åé€
远å ãããæ®µéã§æ°ããèšå®ãå¢ããã
- [x] 空ã®èšå®ãã©ããããåé¡
- çŸç¶ã¯ç©ºã®ã³ãã³ãåã¯ãµã€ã¬ã³ãã«æ¶ããŠãã
- [ ] validationã§ã¯ããã°åé¡ãªãã¯ã
- [x] åé€ãããŠããŸããšå
ã«æ»ããªãåé¡
- ããã¯èš±å®¹ãããããªã
- confirmããããšèŠªå
- [x] èšå®è¿œå ãèšå®å倿ŽåŸã®ã³ãã³ã远å ã»åé€ãªã©ã¯ã©ãã§ãã£ãŠãïŒ
### èšå®å€æŽ
åèšå®ãå
¥åãã©ãŒã«ã¹å€ããç¬éã«èªåä¿åãããã®ãæãŸããã
```json
{
"name": "2 hop link search",
"searchBy": {
"tag": true,
"link": false,
"header": false,
"property": false
},
"keysOfPropertyToSearch": [],
"relativeUpdatedPeriodSource": "none",
"relativeUpdatedPeriodPropertyKey": "Last modified",
"searchTarget": "2-hop-link",
"allowFuzzySearchForSearchTarget": false,
"minFuzzyMatchScore": 0.5,
"targetExtensions": [],
"includeCurrentFile": false,
"floating": false,
"autoPreview": false,
"autoPreviewDelayMilliSeconds": 300,
"showFrontMatter": false,
"excludeFrontMatterKeys": [
"aliases",
"alias",
"tag",
"tags",
"cssclass",
"publish"
],
"defaultInput": "",
"restoreLastInput": false,
"commandPrefix": "",
"sortPriorities": [
"Prefix name match",
"Alphabetical",
".md",
"Last opened",
"Last modified"
],
"includePrefixPathPatterns": [],
"excludePrefixPathPatterns": [
"_Privates/Daily Notes/",
"ð°Weekly Report/"
],
"expand": false,
"minFuzzyScore": 0.5
},
```
## ãã°
> [!right-bubble] ![[minerva-face-right.webp]]
> èšå®ã®`Search commands`ã¯`Save`ãã¿ã³ãæŒããªããšèšå®ãä¿åã§ããªãããã«ãªã£ãŠããã`Save`ãæŒãå¿ããŠèšå®ãä¿åã§ããªãããšã¯å€ã
ããã®ã§ã`Save`ãæŒããªããŠãèšå®ãä¿åãããããã«ãããã
>
> ãããã `Save` ãèšçœ®ããŠããã®ã¯ãªããïŒ æè¡çå¶çŽããããªãç¥ãããã
> [!left-bubble] ![[chappy.webp]]
> 調æ»çµæããèšããšããSearch commandsãã ãã¯èªåä¿åããã«æåã³ãããããèšèšã«ãªã£ãŠããŸããçç±ã¯æè¡çå¶çŽãšãããããç·šééäžã®äžæŽåã蚱容ãã€ã€ãŸãšããŠæ€èšŒã»ä¿åã»ã³ãã³ãåèªã¿èŸŒã¿ãè¡ãããã®æå³ã匷ãã§ãã
>
> æ ¹æ ïŒã³ãŒãããèªã¿åããããšïŒ
>
> - Saveãã¿ã³æŒäžæã®ã¿ saveSettings() ãš reloadCommands() ãåŒã°ããŠãããSaveã¯ç©ºåã³ãã³ãã®é€å€ã sort priorities ã®æ€èšŒãæ
åœãsrc/settings.ts:1212 src/settings.ts:1222 src/
> settings.ts:1241 src/settings.ts:1243
> - åå
¥åã® onChange ã¯ã¡ã¢ãªäžã® command ãæŽæ°ããã ãã§ãsaveSettings() ãåŒã°ãªããsrc/settings.ts:1354
> - ãResetãã«ã¯ããã£ãããªã»ããããããä¿åããã« Obsidian ãéããã°åŸ©å
ã§ããããšãã説æããããä¿åãæç€ºçã«è¡ãåæã«ãªã£ãŠãããsrc/settings.ts:1249
> - ä»ã®èšå®ã¯ onChange ã§å³ saveSettings() ããŠãããããObsidian åŽã®å¶çŽã§ã¯ãªãããã®ã»ã¯ã·ã§ã³ã ãæå³çã«åããŠãããsrc/settings.ts:1174 ãªã©
>
> èšèšæå³ãšããŠèããããç¹
>
> - å
¥åéäžã®äžæŽåã蚱容ããããïŒäŸ: ã³ãã³ãåãäžæçã«ç©ºã«ãããsort priorities ãå
¥åéäžã§ç¡å¹ã«ãããªã©ïŒãèªåä¿åã ãšäžæ£å€æ€èšŒã® Notice ãé »çºããå¯èœæ§ãé«ãã
> - ã³ãã³ãåçæã®ã³ã¹ããæãããããreloadCommands() ã¯Obsidianã³ãã³ãç»é²ã®åæ§ç¯ãªã®ã§ãéœåºŠå®è¡ããèšèšã¯é¿ããå¯èœæ§ãsrc/main.ts:38
> - ãŸãšããŠã³ãããããUXïŒAdd/Reset/ç·šéãäžéãè¡ã£ãŠæåŸã«ç¢ºå®ïŒãæå³ããå¯èœæ§ã
>
> ãªã®ã§ãæè¡çã« Save ãå¿
èŠãã§ã¯ãªãããã®ã»ã¯ã·ã§ã³ã ãâã³ãããåâã«ããŠããèšèšå€æãšèŠãã®ã劥åœã§ãã
>
> ãããSave ãªãã§èªåä¿åãã«ãããå Žåã¯ã以äžã®æ¹åæ§ãèããããŸãïŒå®è£
ã¯ãŸã è§Šã£ãŠããŸããïŒã
>
> 1. onChange ããšã« saveSettings() ãåŒã¶ïŒãã ã reloadCommands() ã¯ãããŠã³ã¹ïŒ
> 2. äžæ£å€æ€èšŒã¯ä¿åæã§ã¯ãªããUIäžã®èŠå衚瀺ãã«å€æŽ
>
> å®è£
ããåžæãªãããŸããã©ã³ãæç€ºããã®ã§ãèªåä¿åã«ãããããšã ãèšã£ãŠãã ããã
```
èªåã§å®è£
ãé²ãã
```
> [!right-bubble] ![[minerva-face-right.webp]]
> Search commandsã®èšå®ã倿Žãããããªã¢ã«ã¿ã€ã ã«ä»¥äžãåæ ãããããã«ããŸããã
>
> - èšå®ã®ä¿å
> - 远å ã»æŽæ°ã»åé€ãããSearch commandsãã³ãã³ãã«åæ
>
> 倿Žç¹ãã¬ãã¥ãŒããŠãã ããã
> [!left-bubble] ![[chappy.webp]]
> ææäºé
ïŒéèŠåºŠé ïŒ
>
> - é«: 空ã®ã³ãã³ãåãå¥ã³ãã³ãã®ç·šéä¿åã§æ°žç¶åããããªã¹ã¯
> saveCommandWithValidation ããä»ç·šéããŠããã³ãã³ããã ããæ€èšŒããŠä¿åãããããå¥ã³ãã³ãã«ç©ºåãæ®ã£ãŠããŠãä¿åã§ããŠããŸããŸããAdd çŽåŸã®ç©ºåã³ãã³ãããååãæ¶ããã³ãã³ãã data.json ã«æ®ããçµæãšããŠã³ãã³ãIDéè€ã空衚瀺ãåŒãèµ·ããå¯èœæ§ããããŸããsrc/settings.ts:1207 src/settings.ts:1320 ïŒåœ±é¿å
㯠src/commands.ts:286ïŒ
> - äž: ããªã¢ã«ã¿ã€ã ä¿åãã change ã€ãã³ãäŸåã§ããã©ãŒã«ã¹ç§»ååã«éãããšä¿åãããªãå¯èœæ§
> TextComponentEvent/TextAreaComponentEvent 㯠DOM ã® change ã䜿ã£ãŠãããå€ç¢ºå®ïŒãã©ãŒã«ã¹ã¢ãŠãïŒæã®ã¿çºç«ããŸããå
¥åäžã«èšå®ç»é¢ãéããå Žåãä¿åã»ã³ãã³ãæŽæ°ãèµ°ãã倿Žã倱ãããå¯èœæ§ããããŸããsrc/apputils/setting/settings-helper.ts:9 src/apputils/setting/settings-helper.ts:32 src/settings.ts:1347
> - äž: 倿Žã®ãã³ã« reloadCommands() ãèµ°ããããã¹ã©ã€ããŒæäœãé£ç¶å
¥åã§ã³ãã³ãåç»é²ãå€çº
> saveCommandWithValidation ãæ¯å saveSettings + reloadCommands ãå®è¡ããŸãããšãã«ã¹ã©ã€ããŒãé »ç¹ãªåãæ¿ãã§åŠçãéããªã/äžæçã«ã³ãã³ããåçæããç¶ããå¯èœæ§ããããŸããsrc/settings.ts:1320
> - äœ: saveCommandWithValidation() ã® await æã
> keysOfPropertyToSearch ã®å€æŽã ã await ããªããä¿åã»åç»é²ã®é åºãäžå®å®ã«ãªããŸãïŒå€±ææã®æªåŠçãªãžã§ã¯ããèµ·ããåŸãŸãïŒãsrc/settings.ts:1492
>
> 確èªãããç¹ / åæ
>
> - 空åã³ãã³ãã®æ±ãã¯ãä¿åããªãããç¶ç¶ãããã§ããïŒ ãããªã å
šã³ãã³ãã察象ã«ãã£ã«ã¿/æ€èšŒããä»çµã¿ãå¿
èŠã§ãïŒçŸç¶ã¯ç·šéäžã³ãã³ãã®ã¿æ€èšŒïŒã
> - ããªã¢ã«ã¿ã€ã ãã®æåŸ
å€ã¯ å
¥åäžå³æã§ããïŒ ãããšã ãã©ãŒã«ã¹ã¢ãŠãæä¿åã§ååã§ããïŒ çŸå®è£
ã¯åŸè
ã§ãã
>
> 倿Žãµããª
>
> - Search commands ãèªåä¿åã«å€æŽããåå
¥åã«ä¿åã»åç»é²ãçŽã¥ããSave ãã¿ã³åé€ãè£å©ã€ãã³ããã«ã远å ãsrc/settings.ts src/apputils/setting/settings-helper.ts
> - Add ãã¿ã³ã®UI調æŽãstyles.css
>
> å¿
èŠãªããäžèšã®é«/äžãªã¹ã¯ã®å¯ŸåŠæ¡ãææ¡ã§ããŸãã
> [!right-bubble] ![[minerva-face-right.webp]]
> > - 空åã³ãã³ãã®æ±ãã¯ãä¿åããªãããç¶ç¶ãããã§ããïŒ ãããªã å
šã³ãã³ãã察象ã«ãã£ã«ã¿/æ€èšŒããä»çµã¿ãå¿
èŠã§ãïŒçŸç¶ã¯ç·šéäžã³ãã³ãã®ã¿æ€èšŒïŒã
>
> ã¯ããAddçŽåŸãååãæ¶ããããšã§ãã`saveCommandWithValidation` ã§validationãããŠåŒŸããŠãããã `data.json` ã«ç»é²ãããããšã¯ãªãæ³å®ã§ãã
>
> çŽæ¥ `await this.plugin.saveSettings()` ãåŒã°ããå Žåã¯ãã®éãã§ã¯ãããŸãããããã®ãããŒã¯çŸåšã®å®è£
ã§ã¯ããããªãããªãšæã£ãŠããŸãããæŒããããŸãããææããŠãã ããã
>
> > - ããªã¢ã«ã¿ã€ã ãã®æåŸ
å€ã¯ å
¥åäžå³æã§ããïŒ ãããšã ãã©ãŒã«ã¹ã¢ãŠãæä¿åã§ååã§ããïŒ çŸå®è£
ã¯åŸè
ã§ãã
>
> ãã©ãŒã«ã¹ã¢ãŠãæã§ãã£ãŠããŸãã
>
> > - äž: 倿Žã®ãã³ã« reloadCommands() ãèµ°ããããã¹ã©ã€ããŒæäœãé£ç¶å
¥åã§ã³ãã³ãåç»é²ãå€çº
>
> ãã©ãã°ã§ã¯å€§äžå€«ã§ããããããŒããŒãã§å€æŽãããšå€æŽãé£ç¶ãããšããããšã§ãããdebounceãthrottleãå
¥ããããšã§ç·©åã§ããŸããïŒ
> [!left-bubble] ![[chappy.webp]]
> çµè«ãšããŠããsaveCommandWithValidation ã匟ããã data.json ã«ã¯ç©ºåãæ®ããªãããšããåæã¯æç«ããŠããŸããã空åãä¿åããããããŒãããã€ããããŸãã
>
> 空åãä¿åããåŸãæ¢åãããŒ
>
> - å¥ã³ãã³ãã®å€æŽã§ä¿åãèµ°ã
> saveCommandWithValidation ã¯âç·šéäžã®ã³ãã³ãã ãâãæ€èšŒããŸããå¥ã®ã³ãã³ãã空åã®ãŸãŸã§ããä»ã®ã³ãã³ãã®å€æŽã§ saveSettings() ãèµ°ãã°ç©ºåãäžç·ã«æ°žç¶åãããŸããsrc/settings.ts:1320
> - fold/unfold ã®ãã¿ã³ã§ä¿åãèµ°ã
> ãã㯠saveCommandWithValidation ãéãããçŽæ¥ saveSettings() ããŠããŸãã空åã®ãŸãŸã§ãä¿åãããŸããsrc/settings.ts:1375
> - Reset
> Reset ã¯å
šäœãä¿åãçŽãããã空åãæ®ã£ãŠããã°ãã®ãŸãŸä¿åãããŸããsrc/settings.ts:1230
>
> ãã®ãããã空åã¯ä¿åãããªãããšããä¿èšŒã¯ä»ã®å®è£
ã§ã¯ãããŸããã
>
> ãŸãã空åã ãã§ãªãç¡å¹ãª sortPrioritiesãåæ§ã«ä¿åããåŸãŸãïŒå¥ã³ãã³ã倿޿ã fold/unfold æïŒã
>
> âââ
>
> debounce/throttle ã«ã€ããŠ
>
> - **å¯èœã§ãã**ç¹ã« reloadCommands() ããããŠã³ã¹ããã°ãããŒããŒã飿ãã¹ã©ã€ããŒå€æŽæã®åç»é²é£çºãæå¶ã§ããŸãã
> - äŸ: saveSettings() ã¯å³æãreloadCommands() 㯠200ã300ms ã®ãããŠã³ã¹ã
> ãããªãä¿åã®å®å
šæ§ã¯ç¶æãã€ã€ãåç»é²ã®è² è·ã ãæããããŸãã
>
> è£è¶³ãšããŠãå
šå€æŽã§åç»é²ãæ¬åœã«å¿
èŠãã¯åæ€èšäœå°ããããŸãã
>
> - 远å /åé€/åå倿Žã¯åç»é²ãå¿
èŠ
> - ãã以å€ïŒæ€çŽ¢å¯Ÿè±¡ãã¹ã³ã¢çïŒã¯ãæ¢åã³ãã³ãã® callback ãåç
§ãã command ãªããžã§ã¯ããæŽæ°ããŠããã ããªã®ã§ãåç»é²ããªããŠãåæ ãããå¯èœæ§ãé«ãã§ããsrc/commands.ts:286
>
> âââ
>
> ããã空åã¯ä¿åããªãããæ
ä¿ããããªããæ¹éã¯2ã€ã§ãã
>
> 1. ä¿åæã«å
šã³ãã³ãããã£ã«ã¿
> saveSettings() çŽåã« filter((x) => x.name) ãå
šäœã§å¿
ãéãã
> 2. ä¿åå
¥å£ãäžæ¬å
> saveSettings() ãçŽæ¥åŒã°ããå¿
ããæ€èšŒâä¿åâåç»é²ãã®é¢æ°ãéãã
>
> å¿
èŠãªãå
·äœæ¡ãåºããŸãã
> [!right-bubble] ![[minerva-face-right.webp]]
> > è£è¶³ãšããŠãå
šå€æŽã§åç»é²ãæ¬åœã«å¿
èŠãã¯åæ€èšäœå°ããããŸãã
> >
> > - 远å /åé€/åå倿Žã¯åç»é²ãå¿
èŠ
> > - ãã以å€ïŒæ€çŽ¢å¯Ÿè±¡ãã¹ã³ã¢çïŒã¯ãæ¢åã³ãã³ãã® callback ãåç
§ãã command ãªããžã§ã¯ããæŽæ°ããŠããã ããªã®ã§ãåç»é²ããªããŠãåæ ãããå¯èœæ§ãé«ãã§ããsrc/commands.ts:286
>
> ãããã«ã远å ã»åé€ã»åå倿Žä»¥å€ã¯ç»é²ããªãããã«ããŸãã
>
> > 空åã³ãã³ãã«ã€ããŠ
>
> 空åã³ãã³ãã®æ··å
¥ãé²ããããã空åã³ãã³ãã蚱容ããŠæ¯ãèããå®çŸ©ããæ¹ããã·ã«æããŸããã
>
> `reloadCommands` ã®å®è£
ã§ **空åã®ã³ãã³ããç¡èŠ** ããã°ã»ãŒåœ±é¿ãªããšèããŠããŸããããããã§ããããïŒ
>
> [!left-bubble] ![[chappy.webp]]
> ã¯ããreloadCommandsïŒããã㯠createCommandsïŒã§ç©ºåãç¡èŠããæ¹éã§åé¡ãªããšæããŸãã
> ããããã° data.json ã«ç©ºåãæ®ã£ãŠããŠããã³ãã³ãç»é²ãIDéè€ã»ç©ºè¡šç€ºã®å®å®³ã¯åé¿ã§ããŸãã
>
> ãã ãæ³šæç¹ã¯ãããŸãã
>
> - 空çœã®ã¿ïŒ" "ïŒããç©ºåæ±ããã«ãããªã trim() ã§å€å®ããæ¹ãå®å
š
> äŸ: const name = command.name.trim(); if (!name) return null;
> - 空åã³ãã³ãã¯ã³ãã³ããã¬ãã/ãããããŒããåŒã¹ãªããªã
> ã§ã commandPrefix ãä»ããŠããã°ãå¥ã³ãã³ãèµ·åäžã«ãã¬ãã£ã¯ã¹åæ¿ã§äœ¿ããã®ã§ãçšéãšããŠã¯æç«ããŸããsrc/ui/AnotherQuickSwitcherModal.ts:558
>
> è£è¶³: ããã空åã蚱容ããããšæ±ºãããªããsaveCommandWithValidation ã§ã®ç©ºåãšã©ãŒè¡šç€ºã¯äžèŠã«ãªãã®ã§åé€å¯Ÿè±¡ã§ãã
> ïŒä»ã®ãŸãŸã ãšã蚱容ãããæ¹éãšççŸããŸãïŒ
>
> âââ
>
> ãŸããåç»é²ãã远å /åé€/åå倿Žã ããã«ããã®ã¯åŠ¥åœã§ãã
> ãã ãåå倿Žã¯ããŒå
¥åã®ãã³ã«èµ°ãã®ã§ãããã ããããŠã³ã¹ãå
¥ããã®ã¯æå¹ã§ãã
> ïŒsaveSettings ã¯å³æãreloadCommands ã ã 200ã300ms ãããŠã³ã¹ãçŸå®çïŒ
>
> å¿
èŠãªãå
·äœæ¡ãåºããŸãã
> [!right-bubble] ![[minerva-face-right.webp]]
> > - 空çœã®ã¿ïŒ" "ïŒããç©ºåæ±ããã«ãããªã trim() ã§å€å®ããæ¹ãå®å
š
> > äŸ: const name = command.name.trim(); if (!name) return null;
>
> ããã¯ããã§ããã
>
> > - 空åã³ãã³ãã¯ã³ãã³ããã¬ãã/ãããããŒããåŒã¹ãªããªã
> > ã§ã commandPrefix ãä»ããŠããã°ãå¥ã³ãã³ãèµ·åäžã«ãã¬ãã£ã¯ã¹åæ¿ã§äœ¿ããã®ã§ãçšéãšããŠã¯æç«ããŸããsrc/ui/AnotherQuickSwitcherModal.ts:558
>
> commandPrefixããåŒã¹ãŠããŸãã®ã¯æ³å®å€ã§ããããšããžã±ãŒã¹ãªã®ã§ç¡èŠããŸãã
>
> > è£è¶³: ããã空åã蚱容ããããšæ±ºãããªããsaveCommandWithValidation ã§ã®ç©ºåãšã©ãŒè¡šç€ºã¯äžèŠã«ãªãã®ã§åé€å¯Ÿè±¡ã§ãã
> > ïŒä»ã®ãŸãŸã ãšã蚱容ãããæ¹éãšççŸããŸãïŒ
>
> ã蚱容ãããã¯ãç¶æ
ãšããŠèš±å®¹ãã(ãã¶ãã¶èªãã)ãã§ãã£ãŠãAQSãã³ãã³ãåãªãã§å©çšãããããšãæ£åžžãŠãŒã¹ã±ãŒã¹ãšããŠèªãããããã§ã¯ãããïœããã
>
> > ãã ãåå倿Žã¯ããŒå
¥åã®ãã³ã«èµ°ãã®ã§ãããã ããããŠã³ã¹ãå
¥ããã®ã¯æå¹ã§ãã
>
> 以äžã®å®è£
ãªã®ã§ãã©ãŒã«ã¹ãå€ããªããã°èµ°ããªããšæããŸãããããã§ããããïŒ
>
> ```ts
> new Setting(div)
> .setClass("another-quick-switcher__settings__search-command__header")
> .setHeading()
> .addText((tc) =>
> TextComponentEvent.onChange(
> tc,
> async (value) => {
> command.name = value;
> await saveCommandWithValidation({ reloadCommands: true });
> },
> { style: "text-align: left" },
> )
> .setPlaceholder("Command name")
> .setValue(command.name),
> )
> ```
> [!left-bubble] ![[chappy.webp]]
> çµè«ããèšããšãæç€ºã®å®è£
ïŒTextComponentEvent.onChangeïŒãªããã©ãŒã«ã¹ã¢ãŠãæã®ã¿çºç«ãªã®ã§ãåå倿Žã§æ¯ã㌠reloadCommands ãèµ°ãããšã¯ãããŸããããããŠã³ã¹ã¯äžèŠã§OKã§ãã
>
> è£è¶³ãã€ã³ã
>
> - TextComponentEvent 㯠DOM ã® change ã䜿ã£ãŠããã®ã§ã確å®ïŒblur/EnterïŒã§1åã®åäœã«ãªããŸããsrc/apputils/setting/settings-helper.ts:9
> - 以åã® Obsidian æšæº TextComponent.onChange ãšã¯æåãéãã®ã§ããã®åæã¯ããã«ããŒã䜿ã£ãŠããéããæç«ããŸãã
>
> 空åã³ãã³ãã«ã€ããŠïŒåæã®ãºã¬ã ãå
±æïŒ
>
> - ãsaveCommandWithValidation ã匟ããã data.json ã«ã¯æ®ããªãããšããã®ã¯ä»ãæç«ããŸããã
> çç±ã¯ ä»ã®ä¿åçµè·¯ãå¿
ãããããã§ããäŸ: ä»ã®èšå®é
ç®ã®å€æŽã§ã saveSettings() ãèµ°ãã空åãäžç·ã«ä¿åãããŸããsrc/settings.ts:1248 ãªã©ã
> - ãªã®ã§ã空åã蚱容ããç»é²æã«ç¡èŠãããæ¹éã¯çã«ããªã£ãŠããŸãã
>
> æ¹éã«åãããæå°å¯Ÿå¿æ¡ïŒåèïŒ
>
> - createCommands ã§ name.trim() ã空ãªã ç»é²ããªãïŒãããæ¬äžžïŒã
> - å¿
èŠãªã commandPrefix ã®åæ¿åŽã name.trim() ã空ã®ãã®ãé€å€ïŒãã ãããšããžã±ãŒã¹ãªã®ã§ç¡èŠããããªãäžèŠïŒã
>
> ãã®æ¹åãªããä¿åã¯ããããç»é²ã¯ãããªãããæç¢ºã«ã§ããŸãã
> [!right-bubble] ![[minerva-face-right.webp]]
> > - ãsaveCommandWithValidation ã匟ããã data.json ã«ã¯æ®ããªãããšããã®ã¯ä»ãæç«ããŸããã
> > çç±ã¯ ä»ã®ä¿åçµè·¯ãå¿
ãããããã§ããäŸ: ä»ã®èšå®é
ç®ã®å€æŽã§ã saveSettings() ãèµ°ãã空åãäžç·ã«ä¿åãããŸããsrc/settings.ts:1248 ãªã©ã
> > - ãªã®ã§ã空åã蚱容ããç»é²æã«ç¡èŠãããæ¹éã¯çã«ããªã£ãŠããŸãã
>
> ã¯ããèªèãã£ãŠããŸãã`data.json` ã«ç©ºåãå
¥ãã®ã¯(å®è£
ãšããŠèæ
®ãããšããæå³ã§)蚱容ããŸãã
>
> ãªãã`sortPriorities` ãäžæ£ãªãŸãŸ `data.json` ã«ç»é²ãããå¯èœæ§ã«ã€ããŠã¯ä»åã¯èš±å®¹ããŸããåŸã®ããŒãžã§ã³ã§ãã芪åãªããªããŒã·ã§ã³ããžãã¯/UIãæäŸäºå®ã§ãã
> [!left-bubble] ![[chappy.webp]]
> äºè§£ããŸãããæ¹éãšããŠ
>
> - data.json ã«ç©ºåãäžæ£ sortPriorities ãæ®ãã®ã¯èš±å®¹
> - ç»é²æã«ç©ºåãç¡èŠããŠåœ±é¿ãæãã
> - ããªããŒã·ã§ã³/UIæ¹åã¯åŸæ¥
>
> ã§åé¡ãªãèªèã§ãã
>
> 倿Žãå
¥ã£ããåã¬ãã¥ãŒããŸãã®ã§ãæºåã§ãããæããŠãã ããã
> [!right-bubble] ![[minerva-face-right.webp]]
> 倿ŽããŸãããã¬ãã¥ãŒãé¡ãããŸãã
> [!left-bubble] ![[chappy.webp]]
> Findings
>
> - é«: 远å ãããªã¢ã«ã¿ã€ã ä¿åã»åæ ããããŠããŸãããAdd ã§ searchCommands ã« push ããåŸã« saveSettings()/reloadCommands() ãåŒã°ãããåèµ·åã§æ¶ããïŒã³ãã³ãç»é²ã«ãåæ ãããŸããã
> src/settings.ts:1199
> - é«: ã空å/äžæ£ sortPriorities ã蚱容ãããæ¹éãšå®è£
ãççŸããŠããŸããsaveCommandWithValidation ã空å/äžæ£ãæ€åºãããšä¿åãäžæããããã空åã®ãŸãŸç·šéããèšå®ãæ°žç¶åãããŸããã
> src/settings.ts:1320
> - äœ: Reset ã saveSettings()/reloadCommands() ã await ããŠããªãã®ã§ãçŽåŸã® display() ãšç«¶åããå¯èœæ§ããããŸãïŒå®å®³ã¯å°ããïŒãsrc/settings.ts:1235
>
> Questions / Assumptions
>
> - Add åŸã¯ã空åã§ãä¿åãããåæã§åã£ãŠããŸããïŒïŒçŸç¶ã¯ä¿åãããªããããæ¬¡åèµ·åã§æ¶ããŸãïŒ
> - saveCommandWithValidation ã®ç©ºå/äžæ£ sortPriorities ã§ã® return ã¯ãæ¹éäžåé€ã§è¯ãã§ããïŒïŒèš±å®¹ãããªããããã¯ã¯äžèŠïŒ
>
> 倿ŽãµããªïŒç°¡æœïŒ
>
> - 空åã³ãã³ãã createCommands ã§é€å€ããèšå®UIã®ä¿å/åç»é²ãããŒãåå²ãsrc/commands.ts src/settings.ts
> [!right-bubble] ![[minerva-face-right.webp]]
> > - é«: 远å ãããªã¢ã«ã¿ã€ã ä¿åã»åæ ããããŠããŸãããAdd ã§ searchCommands ã« push ããåŸã« saveSettings()/reloadCommands() ãåŒã°ãããåèµ·åã§æ¶ããïŒã³ãã³ãç»é²ã«ãåæ ãããŸããã
>
> ããã¯åé¡ãããŸãããæ°ãã«è¿œå ããŠäœã倿ŽããŠããªãã³ãã³ããå¿
èŠãšãããããšã¯ãªãããã§ãã(ãããšããŠããšããžã±ãŒã¹ãªã®ã§äžèŠã§ã)
>
> > - é«: ã空å/äžæ£ sortPriorities ã蚱容ãããæ¹éãšå®è£
ãççŸããŠããŸããsaveCommandWithValidation ã空å/äžæ£ãæ€åºãããšä¿åãäžæããããã空åã®ãŸãŸç·šéããèšå®ãæ°žç¶åãããŸããã
>
> äœåºŠãèšããŸãã以äžã®æ¹éãªã®ã§åé¡ãªããšæããŸãã
>
> - ãŠãŒã¹ã±ãŒã¹ãšããŠã¯èš±å®¹ããŠããªã = 空å/äžæ£ sortProperties ãæ€ç¥ã§ããã±ãŒã¹ã§ã¯æ€ç¥ãã
> - å®è£
ã®éœåäžãããã¬ããå Žåãããã®ã§ããããèæ
®ããŠã³ãã³ãç»é²åŠçã§åŒŸããŠãã
> - äžèšã®ç¶æ³ã¯ãŠãŒã¶ãŒã«ãšã£ãŠåããã«ãããããã®å¯Ÿå¿ã¯åŸã®ãªãªãŒã¹ã§è¡ãã®ã§ä»åã¯èæ
®ããªã
>
>
> > - Add åŸã¯ã空åã§ãä¿åãããåæã§åã£ãŠããŸããïŒïŒçŸç¶ã¯ä¿åãããªããããæ¬¡åèµ·åã§æ¶ããŸãïŒ
>
> ãã£ãŠããŸããã詳现ã¯åçæžã§ãã
>
> > - saveCommandWithValidation ã®ç©ºå/äžæ£ sortPriorities ã§ã® return ã¯ãæ¹éäžåé€ã§è¯ãã§ããïŒïŒèš±å®¹ãããªããããã¯ã¯äžèŠïŒ
>
> åé€ããŸããã詳现ã¯åçæžã§ãã
> [!left-bubble] ![[chappy.webp]]
> Findings
>
> - äž: 空çœã®ã¿ã®ã³ãã³ãåããæ€ç¥ã§ããã®ã«æ€ç¥ãããªããç¶æ
ã§ããsaveCommandWithValidation 㯠!command.name ã§å€å®ããŠãããã " " ãééããä¿åã¯æåæ±ãã«ãªããŸãããç»é²åŽã¯trim() ã§é€å€ããããç¡èšã§ã³ãã³ããç»é²ãããªãæåã«ãªããŸããæ¹éã®ãæ€ç¥ã§ããã±ãŒã¹ã¯æ€ç¥ããããšãºã¬ãŸããsrc/settings.ts:1323 src/commands.ts:286
> - äœ: ðŸ Saving command... ã® Notice ãããªããŒã·ã§ã³åã«åºãããã空å/äžæ£ sortPriorities ã§ä¿åãäžæãããŠããä¿åäžãã®éç¥ãåºãŸãããŠãŒã¶ãŒçã«ã¯èª€è§£ãæããããã§ããsrc/settings.ts:1323
>
> Questions / Assumptions
>
> - 空çœã®ã¿ã¯ç©ºåæ±ãã§è¯ãã§ããïŒ ãã®å Žå saveCommandWithValidation åŽã trim() ã«åãããã®ãæŽåçã§ãã
>
> 倿Žãµããª
>
> - 空åã³ãã³ããç»é²æã«é€å€ããSearch commands ã®ä¿åãšåç»é²ã¿ã€ãã³ã°ã现ååãsrc/commands.ts src/setting
> [!right-bubble] ![[minerva-face-right.webp]]
> > - äž: 空çœã®ã¿ã®ã³ãã³ãåããæ€ç¥ã§ããã®ã«æ€ç¥ãããªããç¶æ
ã§ããsaveCommandWithValidation 㯠!command.name ã§å€å®ããŠãããã " " ãééããä¿åã¯æåæ±ãã«ãªããŸãããç»é²åŽã¯trim() ã§é€å€ããããç¡èšã§ã³ãã³ããç»é²ãããªãæåã«ãªããŸããæ¹éã®ãæ€ç¥ã§ããã±ãŒã¹ã¯æ€ç¥ããããšãºã¬ãŸããsrc/settings.ts:1323 src/commands.ts:286
>
> `saveCommandWithValidation` ã§ã `trim()` ããããã«ããŸããã
>
> > - äœ: ðŸ Saving command... ã® Notice ãããªããŒã·ã§ã³åã«åºãããã空å/äžæ£ sortPriorities ã§ä¿åãäžæãããŠããä¿åäžãã®éç¥ãåºãŸãããŠãŒã¶ãŒçã«ã¯èª€è§£ãæããããã§ããsrc/settings.ts:1323
>
> ããã¯éçºãããã°çšã®ãã°ãªã®ã§æ¶ããŸããã
>
> > - 空çœã®ã¿ã¯ç©ºåæ±ãã§è¯ãã§ããïŒ ãã®å Žå saveCommandWithValidation åŽã trim() ã«åãããã®ãæŽåçã§ãã
>
> ã¯ãããã®ãã `trim()` ãå
¥ããŸããã
> [!left-bubble] ![[chappy.webp]]
> Findings
>
> - ææäºé
ã¯èŠåœãããŸããã§ããã
>
> Residual Risks / Gaps
>
> - 宿©ã§ã®åäœç¢ºèªïŒSearch commands ã®è¿œå /åé€/åå倿Žã空çœåãåèµ·ååŸã®æåïŒã¯æªå®æœã§ãã
>
> å¿
èŠãªãããã®åæã§ã®æåãã¹ã芳ç¹ãç°¡åã«ãŸãšããŸãã
> [!right-bubble] ![[minerva-face-right.webp]]
> ä»åã®å¯Ÿå¿ããµãŸããŠREADMEãä¿®æ£ããŸãããéäžè¶³ãããŸãããæããŠã»ããã§ãã
> [!left-bubble] ![[chappy.webp]]
> äžè¶³ã®ã¿ã§ãïŒéå°ã¯ç¹ã«ãªãïŒã
>
> - äžè¶³: ãSearch commands ã®èšå®ã¯ä¿åãã¿ã³äžèŠã§èªåä¿åããããæšã®èª¬æããããŸãããSave ã®èŠåãæ¶ããã ãã ãšãæ§æåãšã®éããäŒãããªãã®ã§ã**èªåä¿åïŒãã©ãŒã«ã¹ã¢ãŠãã§ä¿åïŒ **ã®äžæã Custom searches ä»è¿ã«è¿œå ãããšèŠªåã§ãã
> - ä»»æ: 空åã¯ãèšå®ãšããŠã¯æ®ããã³ãã³ãç»é²ãããªããç¹ãçãè£è¶³ãããšã远å çŽåŸã«ã³ãã³ããèŠã€ãããªãã±ãŒã¹ã®èªå·±è§£æ±ºã«ãªããŸãã
> [!right-bubble] ![[minerva-face-right.webp]]
> äžè¶³ã®äžæãè±èªã§èšèŒããŠãã ããã
> [!left-bubble] ![[chappy.webp]]
> Search command settings are saved automatically when you finish editing (no Save button required).
> [!right-bubble] ![[minerva-face-right.webp]]
> READMEã«è¿œèšããŠãã ããã
> [!left-bubble] ![[chappy.webp]]
> README 远èšã¯å®è£
äœæ¥ã«ãããã®ã§ããŸããã©ã³ãæç€ºããŸãã
>
> ãã©ã³
>
> 1. README ã®ãCustom searchesãã»ã¯ã·ã§ã³ä»è¿ã«ãèªåä¿åïŒSaveãã¿ã³äžèŠã»ç·šéå®äºæã«ä¿åïŒã®äžæã远èš
> 2. 倿Žç®æã確èªããŠå ±å
>
> ãã®å
容ã§é²ããŠè¯ãã§ããïŒ
> [!right-bubble] ![[minerva-face-right.webp]]
> OK
> [!left-bubble] ![[chappy.webp]]
> README ã«äžæè¿œèšããŸããã
> README.md
>
> 次ã«ããããšãããã°æããŠãã ããã
> [!right-bubble] ![[minerva-face-right.webp]]
> ä»åã®ã³ãããã¡ãã»ãŒãžãèããŠããããŸããïŒ
> [!left-bubble] ![[chappy.webp]]
> docs(readme): Search commandsã®èªåä¿åã远èš
> [!right-bubble] ![[minerva-face-right.webp]]
> READMEã§ã¯ãªãã¬ãã¥ãŒããŠããã£ãæ©èœå€æŽã«ã€ããŠã®å
容ã§ããè±èªã§ã
> [!left-bubble] ![[chappy.webp]]
> è±èªã®ã³ãããã¡ãã»ãŒãžæ¡ã§ãïŒConventional CommitsïŒ:
>
> feat(search-commands): auto-save settings and reload commands on change
```
çµå±å¥ã®ã¡ãã»ãŒãžã«ããã
feat: Search commands in settings are saved automatically without Save button
```