ã¯ããã«
NeovimïŒä»¥äžnvimïŒã§æ¥æ¬èªå ¥åã®ã¢ãŒãã«å¿ããŠã«ãŒãœã«ã®è²ãå€ããããã²ãããªã¢ãŒãã§ã¯ãªã¬ã³ãžãè±åã¢ãŒãã§ã¯ç·ââããã ãã®ããšã«ã3æ¥ããããŸããã
åé¡ã¯åçŽã«èŠããŸãããIMEã®ç¶æ ãæ€ç¥ããŠãã«ãŒãœã«è²ãåãæ¿ããã ãããããå®éã«æãåãããšãnvimã®TUIæç»ãã¿ãŒããã«ãšãã¥ã¬ãŒã¿ã®IMEåŠçãmacOSã®å ¥åãœãŒã¹APIãšãã4ã€ã®ã¬ã€ã€ãŒã«ãŸããããã°ã«è¡ãåœããã10çš®é¡ã®åé¿çããã¹ãŠè©ŠããŠå šæ» ããæçµçã«ã¯ã¿ãŒããã«ãšãã¥ã¬ãŒã¿ïŒWezTermïŒã®GitHubã«issueãå ±åãããšãããŸã§èŸ¿ãçããŸããã
ãã®èšäºã§ã¯ããã®ãããã°ã®éçšã远äœéšã§ããããã«æžããŠããŸãã顿ã¯ãããã§ãããããã§äœ¿ã£ããããã°ã®æ¹æ³è«ââãæšæž¬ã§çŽããªã芳枬ããããã¬ã€ã€ãŒãåé¢ããŠç¯äººãç¹å®ãããã詊è¡ã®èšé²ããã®ãŸãŸOSSãžã®è²¢ç®ã«ãªããââã¯ãã©ããªæè¡é åã«ãæã¡åž°ãããã®ã ãšèããŠããŸãã
ãªãããã®ãããã°ã¯AIã³ãŒãã£ã³ã°ã¢ã·ã¹ã¿ã³ãïŒClaude CodeïŒãšã®ååã§è¡ããŸãããmacOSã®ãã€ãã£ãAPIãLuaJIT FFIã§åŒã³åºãå®è£ ãã10çš®ã®ã¯ãŒã¯ã¢ã©ãŠã³ãã®è©Šè¡ããWezTermã®RustãœãŒã¹ã³ãŒãã®åæããå®åã¯AIãæ åœããŠããŸããèªåã¯ãããã°ã®æ¹åæ§ã倿ããAIã®ææ¡ãåæšéžæãã圹å²ã§ããããèªåã®ç¥èã»æéã ãã§ã¯é£ããã£ãããšããAIãšã®ååã§å¯èœã«ãªããââãã®èšäºã¯ãã®å®äŸã§ããããŸãã
第1éš: ãããã°ç·š â 4ã€ã®ã¬ã€ã€ãŒãæãäžãã
ããããã£ãããš
nvimã®ã€ã³ãµãŒãã¢ãŒãã§ãæ¥æ¬èªIMEïŒMacSKKïŒã®å ¥åã¢ãŒãã«å¿ããŠã«ãŒãœã«è²ãåçã«å€æŽããã
| IMEã¢ãŒã | ã«ãŒãœã«è² |
|---|---|
| ã²ãã㪠| ãªã¬ã³ãž |
| çŽæ¥å ¥åïŒASCIIïŒ | ç· |
| å šè§è±å | æ·±ç· |
nvimã«ã¯guicursorãšãããªãã·ã§ã³ãããããã€ã©ã€ãã°ã«ãŒããæå®ããããšã§ã«ãŒãœã«ã®è²ãå¶åŸ¡ã§ããŸããã¿ãŒããã«äžã®nvimã§ã¯ããããOSC 12ãšãããšã¹ã±ãŒãã·ãŒã±ã³ã¹ã«å€æãããã¿ãŒããã«ãšãã¥ã¬ãŒã¿ãã«ãŒãœã«ã®æç»è²ã倿ŽããŸãã
ã€ãŸããIMEã¢ãŒããæ€ç¥ â ãã€ã©ã€ãã°ã«ãŒããåãæ¿ã â nvimãOSC 12ãéä¿¡ â ã¿ãŒããã«ãã«ãŒãœã«è²ãæŽæ°ããšããæµãã§ãã
å£1: IMEã¢ãŒããã©ãæ€ç¥ããã
æåã®å£ã¯ãnvimã®äžããmacOSã®IMEç¶æ ãã©ãååŸããããã§ããã
以åã®ã»ãã·ã§ã³ã§ãnvimããSKKã®ãµãã¢ãŒãïŒã²ãããª/è±åïŒãåºå¥ããæ¹æ³ã¯ãªãããšçµè«ããŠããã®ã§ãããAIãim-selectãšããã³ãã³ãã©ã€ã³ããŒã«ã調æ»ãããšãããMacSKKã®ãµãã¢ãŒããåºå¥å¯èœã§ããããšãããããŸãããããã§éãéããŸãã
ãã ããim-selectã¯å€éšããã»ã¹ã§ããã«ãŒãœã«è²ãçŽ æ©ãåæ ããã«ã¯é«é »åºŠã®ããŒãªã³ã°ãå¿
èŠã§ãæ¯åããã»ã¹ãèµ·åããã³ã¹ããæ°ã«ãªããŸãã
ããã§AIãææ¡ããã®ããLuaJIT FFIã§macOSã®Text Input Services APIïŒTIS APIïŒãçŽæ¥åŒã³åºãæ¹æ³ã§ãããããã»ã¹èµ·åãªãã§IMEã¢ãŒããååŸã§ãããªãŒããŒãããã¯ãã€ã¯ãç§åäœã
ãšããããããã§äºæ³å€ã®åé¡ãçºçããŸããFFIã§TISCopyCurrentKeyboardInputSource()ãåŒãã§ããIMEã¢ãŒããåãæ¿ããåŸã®å€ãæŽæ°ãããªããå€ãå€ããã£ãšè¿ã£ãŠããã®ã§ãã
芳枬ãšåå ç¹å®
æšæž¬ã§ä¿®æ£ã詊ã¿ãããªãå Žé¢ã§ãããããã§ãããã°ã®åºæ¬ã«ç«ã¡è¿ããŸãããŸã芳枬ã
ãããã°ãã°ãä»èŸŒã¿ãFFIã®è¿ãå€ãæ¯ããŒãªã³ã°ãµã€ã¯ã«ã§èšé²ããŸããããããšãim-selectã³ãã³ãïŒå€éšããã»ã¹ïŒã§ã¯æ£ããå€ãè¿ãã®ã«ãFFIåŒã³åºãïŒåäžããã»ã¹å
ïŒã§ã¯å€ãå€ãè¿ãç¶ããããšãããããŸããã
ãã®äºå®ãã仮説ãç«ã¡ãŸããmacOSã®TIS APIã¯ããã»ã¹å
ã«ãã£ãã·ã¥ãæã¡ãIMEã¢ãŒã倿Žã®éç¥ã¯CFRunLoopçµç±ã®åæ£éç¥ã§é
ä¿¡ããããnvimããã»ã¹ã¯CFRunLoopãåããŠããªãããéç¥ãåŠçãããããã£ãã·ã¥ãå€ããŸãŸæ®ããim-selectãæ¯åæ£ããã®ã¯ãæ°ããã»ã¹ãšããŠèµ·åãããããã ââãšã
AIãCFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, true)ãTIS APIåŒã³åºãåã«å®è¡ããã³ãŒããæžããŸããããã³ãã£ã³ã°äžã®éç¥ãåŠçããŠãã£ãã·ã¥ãæŽæ°ããããã£ã1è¡ã®è¿œå ã§ããããã§è§£æ±ºããŸããã
æã¡åž°ããã€ã³ã: ãã£ãã·ã¥ã®ååšãçããšãããå€éšããã»ã¹ã§ã¯æ£ããïŒåäžããã»ã¹ã§ã¯å€ãããšããèŠ³æž¬ãæ±ºå®çãªæãããã«ãªããæšæž¬ã§ã¯ãªãã芳枬ã®å·®åãã仮説ãç«ãŠãã
å£2: nvimã®ã¿ãŒããã«åºåãžã®çŽæ¥æžã蟌ã¿ãTUIãå£ã
IMEã¢ãŒãæ€ç¥ã解決ããæ¬¡ã¯ã«ãŒãœã«è²ã®åæ ã§ããåœåã¯OSC 1337ïŒWezTermç¬èªã®ãšã¹ã±ãŒãã·ãŒã±ã³ã¹ïŒã§nvimããWezTermã«ãŠãŒã¶ãŒå€æ°ãéããWezTermã®Luaã€ãã³ããã³ãã©ã§ã«ãŒãœã«è²ã倿Žããèšèšã詊ã¿ãŸããã
ãšããããio.writeã§OSCã·ãŒã±ã³ã¹ãã¿ãŒããã«ã«æžã蟌ãã é端ãnvimã®TUIæç»ãå£ãå§ããŸããã«ãŒãœã«ç§»åãç¶ç¶çã«é
å»¶ãããInsertEnterã§1åæžã蟌ãã ãã§ã以éã®ãã¹ãŠã®æäœãéããªãã®ã§ãã
段éçæå¹åãã¹ãã§ç¯äººãç¹å®
ããã§ããããã°ã®åºæ¬ââãã¬ã€ã€ãŒãåé¢ããŠç¯äººãç¹å®ãããã
ã³ãŒãã5ã€ã®ããŒãã«åè§£ãã1ã€ãã€æå¹åããŠåœ±é¿ã確èªããŸããã
- FFIåæåã®ã¿ â åé¡ãªã
- InsertEnter/Leaveã€ãã³ãã®ã¿ â åé¡ãªã
- guicursor倿Žã®ã¿ â åé¡ãªã
- OSCéä¿¡ã®ã¿ â é å»¶çºç
- OSCéä¿¡ãç¡å¹å â åé¡è§£æ¶
30åã§ç¯äººããã³ãã€ã³ãç¹å®ãnvimã®TUIã¬ã€ã€ãŒãäºæããªãåºåãæ€ç¥ããŠå埩ã¢ãŒãã«å ¥ãããã ãšæšæž¬ãããŸãããã®èšèšã¯æå¿µããguicursorçµç±ã§nvimã«æ£èŠã®OSC 12ãéä¿¡ãããã¢ãããŒãã«åãæ¿ããŸããã
æã¡åž°ããã€ã³ã: è€æ°ã®èŠçŽ ã絡ãåé¡ã§ã¯ããå šéšå ¥ããã§ãã¹ãããŠãç¯äººã¯ããããªããæ®µéçæå¹åãã¹ãïŒ1ã€ãã€è¶³ããŠãã©ãã§å£ããããèŠãïŒã¯ãã¬ã€ã€ãŒããŸãããããã°ã®åºæ¬ææ³ã
å£3: guicursorã®åèšå®ã§OSC 12ãåéä¿¡ãããªã
guicursorçµç±ã®ã¢ãããŒãã«åãæ¿ãããã®ã®ãä»åºŠã¯ãã³ãŒãã¯æ£ããåããŠããã®ã«ãèŠèŠçã«ã«ãŒãœã«è²ãå€ãããªãããšããçŸè±¡ã«ééããŸããã
ãããã°ãã°ã§ã¯guicursorã®å€ãæ£ãã倿ŽãããŠããããšã確èªã§ããŸãããããªã®ã«ç»é¢äžã®ã«ãŒãœã«è²ã¯å€ãããªãã
ããã¯nvimã®æé©åãåå ã§ãããguicursorã«åãæååãåèšå®ããå Žåãnvimã¯OSC 12ã®éä¿¡ãã¹ãããããŸãããã€ã©ã€ãã°ã«ãŒãã®è²ã ãå€ããŠããguicursoræååèªäœãå€ãããªããã°nvimã¯ã倿Žãªãããšå€æããã®ã§ãã
解決çã¯ãã¢ãŒãããšã«ç°ãªããã€ã©ã€ãã°ã«ãŒãåã䜿ãããšãCursorInsertãCursorInsertHiraganaãCursorInsertEisuãš3ã€å®çŸ©ããguicursoræååèªäœãç©ççã«å€ããããšã§ãnvimã«ç¢ºå®ã«OSC 12ãåéä¿¡ãããŸããã
æã¡åž°ããã€ã³ã: ãã³ãŒãã¯æ£ããã®ã«åæ ãããªãããšãã¯ããã¬ãŒã ã¯ãŒã¯ãã©ã³ã¿ã€ã ã®æé©åãçãããã°ã§ãæ£ããåããŠãããããšã確èªã§ãããªããåé¡ã¯ãã®å ïŒåºåçµè·¯ïŒã«ããã
å£4: IMEã¢ãŒãåæ¿åŸãã«ãŒãœã«è²ãåºçãã
ãããŸã§ã§åºæ¬çãªã«ãŒãœã«è²å€æŽã¯åãããã«ãªããŸãããC-jã§ã²ãããªã¢ãŒãã«åãæ¿ãããšãªã¬ã³ãžã«å€ãããããããlã§çŽæ¥å
¥åã«æ»ããŠããªã¬ã³ãžã®ãŸãŸãEscã§ããŒãã«ã¢ãŒãã«æ»ããŠããªã¬ã³ãžã®ãŸãŸã
äžåºŠãªã¬ã³ãžã«ãªããšãæ¬¡ã«æåãå ¥åãããŸã§è²ãå€ãããªãã®ã§ãã
誀蚺ããããŠèª€èšºã®èšæ£
æåã¯WezTermã®compose_cursorïŒIMEå
¥åäžã®ã«ãŒãœã«è²èšå®ïŒãç¯äººã ãšèããŸãããåã»ãã·ã§ã³ã§ã®æšæž¬ã§ãã
ãããæ¬¡ã»ãã·ã§ã³ã§compose_cursorãnilã«ããŠãåé¡ã¯å€ããããWezTermã®Lua APIã§composition_status()ããã°åºåãããšãããMacSKKã®ã¢ãŒãåæ¿ãcompositionç¶æ
ãçµç±ããªãããšã倿ããŸãããååã®èšºæã¯èª€ãã ã£ãã
次ã«ãtmuxã®terminal-featuresèšå®ãçããŸãããããŠãŒã¶ãŒããtmuxãªãã®ç°å¢ã§ãã¹ãããŠãããšèãããããã®ä»®èª¬ãæ£åŽããã¹ãç°å¢ã®åæã確èªãããšããåºæ¬ãæ ã£ãŠããŸããã
ã¿ã€ããŒãã°ã«ãã¹ã â åé¡ãåé¢ããå®éšãèšèšãã
仮説ã2åå€ããæç¹ã§ããã£ãšæ ¹æ¬çãªåãåããå¿ èŠã ãšå€æããŸãããAIãèšèšããã®ããã¿ã€ããŒãã°ã«ãã¹ããã§ãã
â 2ç§ããšã«ã«ãŒãœã«è²ããªã¬ã³ãžâç·ã«ãã°ã«ãã
local toggle = false
vim.uv.new_timer():start(0, 2000, vim.schedule_wrap(function()
toggle = not toggle
local hl = toggle and "CursorInsertHiragana" or "CursorInsert"
vim.o.guicursor = "âŠ,i-ci-ve:block-" .. hl .. ",âŠ"
end))
ãã®ãã¹ãã§2ã€ã®äºå®ã確å®ããŸããã
- IMEæäœãªãã§ã¯ããã°ã«ã¯å®ç§ã«åæ¹åã§åäœãã
- C-jïŒIMEã¢ãŒãåæ¿ïŒãæŒããç¬éããã°ã«ãæ°žç¶çã«åæ¢ããè²ãåºçãã
IMEã€ãã³ããã«ãŒãœã«è²ã®æç»ãã€ãã©ã€ã³ãå£ããŠããââåé¡ããããŸã§çµã蟌ããŸããã
æã¡åž°ããã€ã³ã: è€éãªæ¡ä»¶ã絡ãåé¡ã§ã¯ããèªåã§åããã¹ãããèšèšããŠäººéã®æäœãæå°éã«ãããåçŸæ¡ä»¶ã1ã€ãã€è¶³ããŠãã©ãã§å£ããããèŠãã
10çš®ã®ã¢ãããŒããå šæ»
IMEã€ãã³ããåå ãšããã£ãäžã§ã10çš®é¡ã®åé¿çã詊è¡ããŸããã
| # | ã¢ãããŒã | çµæ |
|---|---|---|
| 1 | vim.cmd("redraw!") |
广ãªã |
| 2 | vim.api.nvim_win_set_cursor() |
广ãªã |
| 3 | vim.cmd("mode")ïŒã¿ãŒããã«ååæåïŒ |
广ãªã |
| 4 | FFIã§/dev/ttyã«OSC 12ãçŽæ¥æžã蟌㿠|
WezTermã«å°éãã |
| 5 | FFIã§stderrïŒfd 2ïŒã«OSC 12ãæžã蟌㿠| å°éãããè²å€ããã |
| 6 | WezTerm Luaã®window:invalidate() |
广ãªã |
| 7 | pane:inject_output()ã§OSC 12ãæ³šå
¥ |
广ãªã |
| 8 | ã«ãŒãœã«è¡šç€ºã®ãã°ã« | 广ãªã |
| 9 | pane:send_text(" \b") |
广ãªã |
| 10 | set_config_overridesã§use_imeããã°ã« |
广ãªã |
å šæ» ã§ããnvimåŽïŒ1-5ïŒãWezTerm Lua APIåŽïŒ6-10ïŒããã©ã¡ããããç¶æ ããªã»ããã§ããªãã
転æç¹: ããããæ€çŽ¢ããŠã¿ããïŒã
10çš®å šæ» ã®åŸãé·æéã®ãããã°ã§èŠéãçããªã£ãŠããç¶æ³ããèªåããè¢å°è·¯ã«ã¯ãŸã£ãŠãæãããããæ°åãå€ããŠãããæ€çŽ¢ããŠã¿ããïŒããšAIã«ææ¡ããŸããã
çµæãšããŠèŸ¿ãçããã®ããæãã·ã³ãã«ãªãã¹ãââWezTermã®use_imeèšå®ãfalseã«ããããšã
use_ime = falseã«ãããšãC-jåŸãã¿ã€ããŒãã°ã«ãæ£åžžã«ç¶ç¶ããŸãããtrueã«æ»ããšåçºãWezTermã®macOS IMEåŠçïŒNSTextInputClientå®è£
ïŒãã«ãŒãœã«è²ã®æç»ãå£ããŠããââããã§çå ãç¹å®ã§ããŸããã
ãã ããuse_ime = falseã¯è§£æ±ºçã§ã¯ãããŸããããããç¡å¹ã«ãããšæ¥æ¬èªå
¥åãã®ãã®ã䜿ããªããªãããã§ãããããŸã§ãç¯äººãWezTermã®IMEåŠçã«ãããããšã蚌æããããã®åãåããã¹ãã§ããã
ã€ãŸãçŸç¶ã¯ããã§ããIMEã¢ãŒãåæ¿ã§ã«ãŒãœã«è²ãåºçããæ¬¡ã«æåãå ¥åãããŸã§è²ãæ»ããªããnvimåŽã®å®è£ ã¯æ£ããåããŠããïŒãããã°ãã°ã§èšŒææžã¿ïŒããããWezTermåŽã®IMEåŠçãOSC 12ã®åæ ãé»å®³ããŠãããnvimåŽãããWezTerm Lua APIåŽãããåé¿ã§ããªãã
åé¡ãWezTermã®Rustã³ãŒãå ã«ãã以äžãèªåãã¡ã«ã§ããããšã¯äžã€ââãã®èª¿æ»çµæãWezTermã®éçºè ã«å±ããããšã§ããããã第2éšã«ã€ãªãããŸãã
æã¡åž°ããã€ã³ã: 10çš®ã®è€éãªåé¿çã詊ããåŸã«ã
use_ime = falseãšãã1è¡ã®èšå®å€æŽã§çå ãç¹å®ã§ããããããã°ã®æžŠäžã§ã¯ããã£ãšè€éãªæ¹æ³ãã«ç®ãåããã¡ã ããæ©èœäžžããšã®ON/OFFãæã匷åãªåãåãææ®µã§ããããšã¯å€ãããããŠããã®èŠç¹ã®åãæ¿ãã¯æžŠäžã«ããæ¬äººïŒAIå«ãïŒãããäžæ©åŒããäœçœ®ã«ãã人éã®æ¹ãåŸæãªããšãããã
第2éš: OSSã€ã·ã¥ãŒå ±åç·š â ãããã°ã®èšé²ãèŽãç©ã«å€ãã
ãåããŸãããã§çµããããªã
ãããã°ã®çµæãåé¡ãWezTermã®Rustã³ãŒãå ã«ããããšã確å®ããŸãããèªåãã¡ã®åŽïŒnvimãLuaïŒããã¯åé¿ã§ããªãããªãã°ããã®èª¿æ»çµæãWezTermã®éçºè ã«å±ããå¿ èŠããããŸãã
ããã§éèŠãªã®ã¯ããããã°ã®éçšã§èç©ããæ å ±ããã®ãŸãŸissueå ±åã®ææã«ãªããšããããšã§ããæ¹ããŠèª¿æ»ãçŽãå¿ èŠã¯ãããŸããã
OSSã®issueãã©ãã«ãŒã«ã¯ãåããŸãããã ãã®å ±åãæº¢ããŠããŸããè¿å¹Žã§ã¯AIãçæãã衚é¢çãªissueãPRïŒãããããSlopãïŒãåé¡ã«ãªã£ãŠããŸããã¡ã³ããã®ãããã°ã³ã¹ããæå°åããå ±åãç®æããŸããã
issueå ±åã«çã蟌ãã èŠçŽ
å®éã«wezterm/wezterm#7695ãšããŠæçš¿ããissueã«ã¯ã以äžã®èŠçŽ ãå«ããŠããŸãã
1. æå°åçŸæé
åé¡ãåçŸããããã®èšå®ãšæé ããã³ããã§è©Šããã¬ãã«ã§èšè¿°ããŸãããç¹ã«ã¿ã€ããŒãã°ã«ãã¹ãã®ã³ãŒãã¯ãIMEã®æç¡ã§æåãå€ããããšã誰ã§ã確èªã§ããç¬ç«ããåçŸææ³ã§ãã
2. 決å®çãªåãåã蚌æ
ãuse_ime = falseã§è§£æ¶ããããšããäžç¹ãæãéèŠãªæ
å ±ã§ããããã«ãããã¡ã³ããã¯åé¡ã®æåšãIMEåŠçã®ã³ãŒããã¹ã«å³åº§ã«çµã蟌ããŸãã
3. è©Šè¡æžã¿ã¯ãŒã¯ã¢ã©ãŠã³ãã®äžèЧ
10çš®ã®ã¢ãããŒããšãã®çµæã衚圢åŒã§èšèŒããŸãããããã¯ãå ±åè
ããã§ã«è©Šããããšããã¡ã³ããã«äŒããæå³ããããŸãããredraw!ã¯è©ŠããŸãããïŒããšããããåããäºåã«çç¥ã§ããŸãã
4. ãœãŒã¹ã³ãŒãåæ
WezTermã®RustãœãŒã¹ã³ãŒããèªã¿ãåé¡ãwindow/src/os/macos/window.rsã®NSTextInputClientå®è£
ã«ãããšæšæž¬ãããæšãèšèŒããŸãããå
·äœçãªãã¡ã€ã«åã»é¢æ°åãæããããšã§ãã¡ã³ãããåé¡ç®æãæ¢ãæéãæžãããŸãã
5. é¢é£issueãšã®å·®ç°
æ¢åã®é¢é£issueïŒ#2708, #7494ïŒãåŒçšããæ¬issueãšã®éããæèšããŸããããéè€ã§ã¯ãªããããšãå ±åè åŽã説æãã責任ã§ãã
éè€ãã§ãã¯ã®æŠç¥
issueãæçš¿ããåã«ã5ãã¿ãŒã³ã®æ€çŽ¢ããŒã¯ãŒãã§æ¢åissueãç¶²çŸ çã«æ€çŽ¢ããŸããã
IME cursor colorOSC 12 IMEuse_ime cursorcursor color stuckOSC 12
éè€issueããªãããšã確èªããäžã§ãé¢é£ãã3ä»¶ã®issue/PRãç¹å®ããæ¬æäžã§èšåããŠããŸãã
æã¡åž°ããã€ã³ã: è¯ãissueå ±åã®èŠä»¶ã¯ã(1)誰ã§ãåçŸã§ããæé ã(2)åé¡ãçµãèŸŒãæ±ºå®çãªèšŒæ ã(3)ãã§ã«è©Šããããšã®äžèЧã(4)å¯èœãªãåå ç®æã®æšæž¬ã(5)æ¢åissueãšã®å·®ç°ã®èª¬æããããã°ãäžå¯§ã«ãã£ãŠããã°ããããã®ææã¯èªç¶ãšæã£ãŠããã
ãŸãšã: ãããã°ã®éçšã«ãã䟡å€ããã
ãã®3æ¥éã§åŸãæèšããäžè¬åå¯èœãªåœ¢ã§ãŸãšããŸãã
ãããã°ã®æ¹æ³è«
- ãæšæž¬ã§çŽããªã芳枬ãããââãããã°ãã°ã1è¡å ¥ããã ãã§ããæ£ããåããŠããã®ã«åæ ãããªããã®ããããããåããŠããªããã®ããå€å¥ã§ãããæšæž¬ã«åºã¥ãä¿®æ£ã¯ãåœãã£ãŠãåŠã³ãå°ãªããå€ãããšæéãæµªè²»ãã
- ãã¬ã€ã€ãŒãåé¢ããŠç¯äººãç¹å®ãããââè€æ°ã®ã¬ã€ã€ãŒã«ãŸãããåé¡ã§ã¯ã段éçæå¹åãã¹ãïŒ1ã€ãã€è¶³ãïŒãã¿ã€ããŒãã°ã«ãã¹ãïŒèªåå®è¡ã§äººéã®æäœãæé€ããïŒã§ãåé¡ã®ããã¬ã€ã€ãŒãç¹å®ãã
- ã誀蚺ãæãããªããã ãèšæ£ãããââ仮説ã¯å€ããããšããããéèŠãªã®ã¯ãèŠ³æž¬çµæã«åºã¥ããŠéããã«ä»®èª¬ãæ£åŽããæ¬¡ã®ä»®èª¬ã«ç§»ãããšã誀蚺ãåŒãããæ¹ãå±éº
- ãæãã·ã³ãã«ãªãã¹ããå¿ãããªãââ10çš®ã®è€éãªåé¿çã詊ããåŸã«ã
use_ime = falseãšãã1è¡ã§æ±ºçãã€ãããæžŠäžã«ãããšããã£ãšè€éãªæ¹æ³ãã«ç®ãåããã¡ã ããæ©èœäžžããšã®ON/OFFãæã匷åãªåãåãææ®µã§ããããšã¯å€ã
AIãšã®åå
- AIã¯å®åãæ ãã人éã¯å€æãæ ãââmacOS TIS APIã®FFIåŒã³åºãã10çš®ã®ã¯ãŒã¯ã¢ã©ãŠã³ãã®å®è£ ãWezTermã®RustãœãŒã¹ã³ãŒãåæããããã®å®åã¯AIãé«éã«ããªãããäžæ¹ããè¢å°è·¯ãæããããã®èŠç¹ã®åãæ¿ããã¯äººéåŽããææ¡ãããAIãšäººéã®åŸæé åã¯ç°ãªãããã®çµã¿åãããåäººã®æéãè¶ ããåé¡è§£æ±ºãå¯èœã«ãã
- ãããã°ã®èšé²ãOSSãžã®è²¢ç®ã«ãªãââäžå¯§ã«ãããã°ããèšé²ã¯ããã®ãŸãŸissueå ±åã®ææã«ãªãããåããŸãããã§ã¯ãªããããã ã詊ããŠãã¡ã§ããããšèšããå ±åã¯ãOSSã¡ã³ãããžã®æ¬æã§ãããåé¡è§£æ±ºãžã®æçè·é¢ã§ããã
ãã®èšäºã§ç޹ä»ãããããã°ã¯ãAIã³ãŒãã£ã³ã°ã¢ã·ã¹ã¿ã³ãïŒClaude CodeïŒãšã®ååã§è¡ããŸãããmacOSãã€ãã£ãAPIã®åŒã³åºãããOSSãžã®issueå ±åãŸã§ãAIã¯åŒ·åãªããŒãããŒã§ããããã ãæçµçãªå€æââäœã詊ããäœã諊ãããã€èŠç¹ãåãæ¿ãããââã¯äººéãæ ã£ãŠããŸããAIã¯ãäžå¯èœãå¯èœã«ãããéå ·ã§ããããã®éå ·ãã©ãã«åããããæ±ºããã®ã¯ãä»ã®ãšãããŸã 人éã®ä»äºã§ãã