케이스 ce-0579-ko · 시나리오 scenario-ime-interaction-patterns

macOS: 이중 공백 마침표 기능이 inclusive:false 마크 서식을 침범하는 오류

OS: macOS 15.0 (Sequoia) 기기: Desktop Any 브라우저: 모든 브라우저 (ProseMirror 문맥) 최신 (2025년 11월) 키보드: Apple Magic Keyboard (US) 확인됨
macosuxauto-correctmarksprosemirror

현상

macOS를 사용하는 모든 브라우저의 리치 텍스트 에디터(ProseMirror, Lexical 등)에서 미묘하지만 번거로운 상호작용 버그가 발견되었습니다. macOS 시스템 옵션 중 “두 번 띄어쓰기로 마침표 추가” 기능이 활성화된 경우, 공백 두 개가 마침표와 공백 하나(. )로 변환됩니다. 이때 “굵게”나 “코드”와 같이 서식 경계가 inclusive: false(새 글자 입력 시 서식이 확장되지 않음)로 설정된 마크 옆에서 이 변환이 일어나면, 브라우저의 교체 로직이 마침표를 서식 범위 안으로 끌어들여 버립니다.

재현 단계

  1. macOS 시스템 설정의 키보드 메뉴에서 “두 번 띄어쓰기로 마침표 추가” 기능을 켭니다.
  2. 리치 텍스트 에디터에서 굵은 글씨 단어를 만듭니다. (굵게 마크의 오른쪽 inclusive 설정은 false여야 합니다.)
  3. 단어 뒤에 공백을 하나 입력합니다 (일반 텍스트로 나타나야 함).
  4. 두 번째 공백을 입력합니다.
  5. 자동으로 삽입되는 마침표의 서식을 확인합니다.

관찰된 동작

  • 서식 확장: 마침표가 굵게 변하며, 예기치 않게 굵은 글씨 범위가 확장됩니다.
  • 선택 영역 비동기: 일부 내부 모델에서 교체 작업 후 캐럿이 마크 내부인지 외부인지 혼동을 일으켜, 다음 문장의 서식이 의도치 않게 고정되는 문제를 유발합니다.

영향

  • 서식 오염: 사용자는 문장 끝마다 생기는 굵은 마침표를 직접 선택해서 서식을 제거해야 하는 번거로움을 겪습니다.
  • 문서 모델 불일치: 문장 부호가 마크 외부에 있어야 한다고 가정하는 프로그래밍 방식의 검사 로직들이 실패하게 됩니다.

브라우저 비교

  • macOS / 모든 브라우저: 시스템 레벨의 교체 이벤트이므로 OS 환경에 종속적으로 발생합니다.
  • Windows / Chrome: 자동 수정 엔진이 다르므로 이 현상이 발생하지 않습니다.

참고 및 해결 방법

해결책: 이벤트 가로채기

현대적인 에디터들은 inputType: "insertReplacementText"를 명시적으로 처리하여 macOS의 마침표 단축키 발생 여부를 감지하고, 해당 범위에 에디터 스키마의 “Plain Text” 속성을 강제로 재적용해야 합니다.

이 시나리오의 변형

케이스 OS 브라우저 상태
ce-0002-ime-enter-breaks-ko Windows 11 Chrome 120.0 초안
ce-0004-ime-backspace-removes-whole-syllable-ko WindowsmacOSAndroidiOSLinux Any ChromeEdgeSafariFirefox Latest 확인됨
ce-0022-ime-enter-breaks-firefox-ko Windows 11 Firefox 120.0 초안
ce-0030-backspace-composition-chrome-ko macOS Ubuntu 22.04 Chrome 120.0 초안
ce-0035-backspace-deletes-whole-word-ko macOS Ubuntu 22.04 Safari 120.0 초안
ce-0042-input-events-duplicate-ko Windows 11 Edge 120.0 초안
ce-0058-contenteditable-with-autocomplete-ko macOS Ubuntu 22.04 Chrome 120.0 초안
ce-0070-contenteditable-with-autocapitalize-ko iOS 17.0 Safari 17.0 초안
ce-0071-contenteditable-with-autocorrect-ko iOS 17.0 Safari 17.0 초안
ce-0181-japanese-ime-enter-breaks-chrome-ko Windows 11 Chrome 120.0 초안
ce-0182-chinese-ime-enter-breaks-safari-ko macOS 14.0 Safari 17.0 초안
ce-0185-japanese-ime-backspace-granularity-chrome-ko Windows 11 Chrome 120.0 초안
ce-0186-chinese-ime-backspace-granularity-safari-ko macOS 14.0 Safari 17.0 초안
ce-0195-thai-ime-enter-breaks-chrome-ko Windows 11 Chrome 120.0 초안
ce-0196-vietnamese-ime-enter-breaks-edge-ko Windows 11 Edge 120.0 초안
ce-0199-thai-ime-backspace-granularity-chrome-ko Windows 11 Chrome 120.0 초안
ce-0200-vietnamese-ime-backspace-granularity-edge-ko Windows 11 Edge 120.0 초안
ce-0217-keyboard-handlers-iscomposing-false-ios-safari-korean-ko iOS 17.0+ Safari 17.0+ 초안
ce-0565-chrome-121-oninput-offset-0-ko Windows 11 Chrome 121.0.6167.86 확인됨
ce-0579-ko macOS 15.0 (Sequoia) 모든 브라우저 (ProseMirror 문맥) 최신 (2025년 11월) 확인됨
ce-0581-ko Android 14.0 / 15.0 Chrome 131.0+ 확인됨

Playground for this case

Use the reported environment as a reference and record what happens in your environment while interacting with the editable area.

Reported environment
OS: macOS 15.0 (Sequoia)
Device: Desktop Any
Browser: 모든 브라우저 (ProseMirror 문맥) 최신 (2025년 11월)
Keyboard: Apple Magic Keyboard (US)
Your environment
Sample HTML:
Event log
Use this log together with the case description when filing or updating an issue.
0 events
Interact with the editable area to see events here.