Skip to content

CO0Ki3/yo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 

Repository files navigation

yo

한글 입력 상태에서 oh-my-zsh 자동 업데이트 프롬프트의 Y로 받아주는 zsh 플러그인.

문제

터미널을 열었을 때 oh-my-zsh가 다음을 묻는 경우가 있다.

[oh-my-zsh] Would you like to update? [Y/n]

여기서 한글 입력이 켜져 있으면 Y 키를 눌러도 가 입력된다. oh-my-zsh의 tools/check_for_upgrade.sh[yY$'\n']만 yes로 인정하므로 업데이트가 건너뛰어진다. 이 플러그인은 그 한 줄의 read 호출을 가로채서 ㅛ → Y로 번역한다.

설치

oh-my-zsh custom plugin

git clone https://github.com/co0ki3/yo ~/.oh-my-zsh/custom/plugins/yo

~/.zshrcplugins=(...)yo 추가:

plugins=(git yo)

zinit

zinit light CO0Ki3/yo

antidote / antibody

CO0Ki3/yo

동작 원리

oh-my-zsh는 oh-my-zsh.sh:71에서 tools/check_for_upgrade.sh를 source한 뒤, 그보다 한참 뒤(204행)에 비로소 플러그인을 로드한다. 즉 최초 업데이트 프롬프트가 뜨고 처리될 때 이 플러그인의 read 래퍼는 아직 존재하지 않는다. 그래서 다음 2단계로 동작한다.

  1. 플러그인이 로드되는 시점에 read 래퍼를 정의한다. 래퍼는 호출 패턴이 -k 1 + 변수명 option일 때만 개입하고, 그 외에는 빌트인 read를 그대로 호출한다.
  2. $ZSH_CACHE_DIR/.zsh-updateLAST_EPOCH를 확인해 첫 호출이 정상 처리됐는지 추론한다.
  3. 첫 사용자 프롬프트가 뜨기 직전 precmd 훅에서 래퍼를 제거 — 세션 동안 일반 read 동작에는 영향이 없다.

auto/reminder/background-alpha/disabled 모드에서는 대화형 프롬프트 자체가 없거나 별도 훅에서 처리되므로 플러그인은 개입하지 않는다.

트레이드오프

플러그인 로딩 순서를 바꿀 수 없으므로, 첫 입력이 잘못 인식된 경우 프롬프트가 두 번 뜬다:

[oh-my-zsh] Would you like to update? [Y/n] ㅛ      ← 1회차: 래퍼 없음, 미인식
[oh-my-zsh] You can update manually by running `omz update`
[oh-my-zsh] Would you like to update? [Y/n] ㅛ      ← 2회차: 래퍼가 Y로 번역

정상적으로 Y/N이 인식된 경우엔 두 번째 프롬프트가 뜨지 않는다.

License

MIT

About

No description, website, or topics provided.

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages