Skip to content

fix: 영문 전환·ABC 재활성, Confluence 목록 분리, 입력 소스 중복 - #11

Closed
calvinjkim wants to merge 3 commits into
Meapri:mainfrom
calvinjkim:fix/english-switch-abc-bugs
Closed

calvinjkim wants to merge 3 commits into
Meapri:mainfrom
calvinjkim:fix/english-switch-abc-bugs

Conversation

@calvinjkim

@calvinjkim calvinjkim commented Sep 2, 2026 •

Copy link
Copy Markdown

무엇이 깨졌나

한→영 전환 직후 첫 로마자가 대문자로 들어가고, 설정에서 ABC를 꺼도 다시 살아났으며, Latin-only 필드에서는 PriType 영어 모드 대신 시스템 ABC가 선택됐습니다.

Confluence 같은 웹 편집기 목록에서 감사합니다.를 치면 초성 ㄱ만 한 항목이 되고 나머지가 다음 항목으로 갈라졌습니다.

설정 입력 소스에는 PriType가 여러 줄로 보이거나, 모든 입력 소스에 한/라틴 자판과 짝지어 수백 줄로 나왔습니다.

원인

  • 영어 자동 대문자 폴백이 textBeforeCursor == ""를 문장 시작으로 취급합니다. 전환 직후 Chromium/Electron은 그 조회를 자주 비웁니다.
  • activateServer/전환마다 비활성 ABC까지 포함해 overrideKeyboardWithKeyboardNamed를 호출합니다. 꺼 둔 ABC가 TIS 목록에 다시 들어갑니다.
  • 커스텀 전환키의 selectInputMode:는 메뉴바 동기화용이지만, Latin-only 필드에서 TIS가 실제 ABC 소스로 넘어가는 경로가 됩니다.
  • IsSecureEventInputEnabled()가 프로세스 전역이라, 다른 앱 비밀번호 필드만으로도 현재 앱 한글이 패스스루됩니다.
  • 웹 호스트는 호환 자모 ㄱ(U+3131)을 조합이 끝난 글자로 보고 compositionend를 냅니다. 빈 목록 항목의 선택 영역에 setMarkedText(..., NSNotFound)를 주면 그 선택을 통째로 교체해 목록이 한 번 더 쪼개집니다.
  • 한글 모드 키가 번들 ID와 같으면 TIS가 com.pritype.inputmethod.v2.v2를 만들고 표시 이름이 전부 PriType가 됩니다. ~/Library와 /Library에 동시에 설치하면 부모/한글/영어가 복사본마다 한 번씩 더 나옵니다. Hang+Latn이면 입력 소스 추가 화면이 PriType를 모든 라틴/한글 자판과 짝짓습니다.

변경 사항

  • 빈 커서 컨텍스트에서는 영어 대문자 폴백을 하지 않습니다. .!? 뒤 공백처럼 문장 끝이 확인될 때만 넣습니다.
  • ABC/US가 이미 켜져 있고 영어 모드일 때만 레이아웃 오버라이드합니다. 커스텀 전환 경로에서 selectInputMode:를 제거합니다.
  • 일반 텍스트 필드는 전역 Secure Input만으로 패스스루하지 않습니다.
  • 한/영 전환 시 한자 창을 닫고, CGEventTap 실패 시 탭을 끈 다음 IOKit으로 넘기며, 시스템 텍스트 설정은 읽을 때마다 다시 반영합니다. 손쉬운 사용 권한 폴링은 2분 상한입니다.
  • 웹 호스트만 초성 자모(U+1100)를 조합 중으로 보내고, 첫 setMarkedText는 캐럿 {location, 0}에 삽입합니다. 카카오톡 등 네이티브는 기존 NSNotFound + 호환 자모 경로입니다.
  • 한글 모드 키를 com.pritype.inputmethod.v2.korean으로 분리하고, 예전 모드 ID는 기동 시 마이그레이션합니다. 문자 레퍼토리는 Hang만 두고, 설정에 한글 모드만 노출합니다. 영어 모드는 Caps Lock용으로 등록만 유지합니다.
  • install.sh는 사용자//Library 동시 설치를 경고합니다. 선택 플래그 --as-patchtype은 로컬 설치본만 PatchType(2.7.4-patch.1)으로 바꿔 공식 2.7.4와 구분합니다. 소스 트리 Info.plist 공식 identity는 그대로입니다.

왜 이 해결책인가

웹 목록 분리는 호스트가 호환 자모를 끝난 글자로 보는 쪽을 맞춘 것이고, 카카오톡 marked-text 계약은 건드리지 않았습니다.

입력 소스 중복은 표시 문자열만 바꿔서는 TIS가 만든 .v2.v2 ID와 이중 설치를 못 없앱니다. 모드 키를 번들 ID와 다르게 두고 Latn을 빼야 추가 화면이 세계 자판과 곱해지지 않습니다. Caps Lock은 등록된 영어 모드가 필요해서 모드 자체는 삭제하지 않았습니다.

검증

  • swift test: 191 tests, 28 suites passed
  • swift run -c debug PriTypeVerify: All tests passed
  • 웹 호스트 초성 자모·첫 마크 캐럿 삽입·한글 모드 ID·Hang-only·공식 identity 유지에 대한 유닛 테스트를 추가했습니다.
  • 한/영 전환·ABC 끄기·Confluence 목록·설정 입력 소스 UI는 로그아웃 뒤 이 빌드를 입력 소스로 추가한 다음 기기에서 확인해야 합니다.

머지 후 남는 작업

  • Caps Lock「ABC로 전환」이 켜져 있으면 macOS가 ABC를 다시 켤 수 있습니다. 이 PR은 그 시스템 동작을 막지 않습니다.
  • 로그인/FileVault 화면은 유저 스페이스 IME가 아니라서 ABC가 여전히 필요합니다.
  • 이미 이중 설치된 PriType는 한 복사본만 남긴 뒤 로그아웃해야 TIS 목록이 정리됩니다.
  • --as-patchtype으로 만든 새 번들 ID는 TIS 카탈로그에 바로 안 올라올 수 있어, 로그아웃 후 설정에서 패치 한글만 추가해야 합니다.

범위 밖

  • 문서 Docs/UnifiedInputArchitecture.md의 단일 소스 서술과, Caps Lock용 영어 모드 등록은 여전히 어긋납니다. 이번 PR은 영어 모드를 숨기기만 하고 등록을 제거하지는 않았습니다.

Made with Cursor

calvinjkim and others added 2 commits September 2, 2026 13:26
Stop treating empty cursor context as a sentence start after a Korean-to-English switch, and stop requesting a disabled ABC layout on every focus change.

Co-authored-by: Cursor <cursoragent@cursor.com>
Web hosts were ending composition on the first choseong, and TIS minted extra PriType rows when the Korean mode id matched the bundle id and Hang+Latn were both advertised.

Co-authored-by: Cursor <cursoragent@cursor.com>
@calvinjkim calvinjkim changed the title fix: 영문 전환 첫 글자 대문자와 ABC 입력소스 재활성 fix: 영문 전환·ABC 재활성, Confluence 목록 분리, 입력 소스 중복 Sep 2, 2026
…ive minted Korean.

A new ad-hoc id never appears in Settings, migrating …v2.v2.korean can steal Hangul from 2-Set, and first-mark {caret,0} plus activateServer adapter rebuilds split web compositions.

Co-authored-by: Cursor <cursoragent@cursor.com>
@calvinjkim

Copy link
Copy Markdown
Author

이 작업은 업스트림 머지용이 아니라 개인 포크에서 이어가기로 했습니다. 로컬 overlay 설치·TIS 모드 ID 정리 같은 내용이 공식 PriType 배포와 섞이지 않게 이 PR은 닫습니다.

이후 변경은 https://github.com/calvinjkim/PriType-Swift 에서만 이어갑니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant