Coder Social home page Coder Social logo

Comments (2)

kiding avatar kiding commented on June 16, 2024 2

기록: 속 입력기만 사용하고 기본 영문 입력기를 없애고 싶어요.

macOS는 기본적으로 로마자 입력 소스1를 1개 이상 반드시 추가하여 사용하도록 강제하고 있습니다. 이는 암호를 입력해야 하는 경우 반드시 로마자를 사용해야 하는 점, 기본적으로 macOS는 단일 입력 소스가 단일 문자 체계만 입력할 수 있다고 가정된 점 등에서 기인한 것으로 보입니다.

시스템 레벨에서는 잠금 화면이나 암호 입력 필드가 나타나는 경우 로마자 입력기 외에 다른 입력기를 선택할 수 없도록 하며, 이때 사용 가능한 로마자 입력기가 자동으로 선택됩니다. 일반적으로 암호 입력이 완료되거나 필드에서 포커스가 해제될 때 직전에 사용했던 입력기로 다시 선택이 복원됩니다. 앱 레벨에서도 동일한 작동을 구현할 수 있습니다. 대표적으로 웹 브라우저에서 <input type="password">에 포커스 되는 경우, EnableSecureEventInput API (Carbon)를 호출하여 키보드 입력을 독점한 후 NSTextInputContext API (Cocoa) 또는 TextInputSources API (Carbon)를 사용하여 로마자 입력기를 자동으로 선택합니다2.

macOS에서 서드파티 입력기는 InputMethodKit API를 사용하여 개발할 수 있습니다. 속 입력기는 개발 초기부터 로마자 입력기로 시스템에 등록되도록 하였습니다3. 단일 입력 소스면서 영문과 한글 두가지 문자 체계를 입력할 수 있도록 설계되었기 때문에 암호 입력 시에도 문제가 없을 것이라는 판단이었습니다. 그러나 IntelliJ IDE 등에서 Command+Shift+[,] 등 단축키가 macOS 내장 영어 ABC 입력기와 다르게 인식되어 기본 설정을 모두 변경해야 하는 불편함(#13)이 있었습니다. 여러가지 실험을 해보니 macOS 내장 입력기라도 InputMethodKit을 사용하면서4 로마자로 등록된 경우5 동일한 증상이 나타나고, 그 외의 입력 체계로 등록된 경우6 증상이 사라지는 것을 확인했습니다. 이 때문에 속 입력기에서 해결할 수 없는 문제로 판단하고 ed8d653 에서 로마자 대신 한글로 등록되도록 변경하였습니다.

그러다보니 위에서 서술한 것처럼 암호 입력 필드에서 속 입력기를 사용할 수 없게 되었지만, 시스템 레벨의 경우 속 입력기를 사용하다가 암호 입력 필드를 만나더라도 이후 다시 입력기 선택이 원래대로 돌아오기에 큰 문제가 없었습니다. 그러나 앱 레벨의 경우, 특히 Chrome과 Firefox의 경우 포커스가 해제되더라도 입력기 선택이 돌아오지 않아, "그냥 사용하다보니/1Password를 켜니 입력기가 영어 ABC로 바뀌어 있다"는 불편함(#20)이 있었습니다. 이 때문에 d5a38cb 에서 "ABC 입력기 제한" 기능을 추가하게 되었습니다. 이 기능은 keyboardSelectionDidChangeNotification을 사용하여 입력 소스가 변경되었음을 감지했을 때 새로운 입력 소스가 영어 ABC7라면 일정 딜레이 후에 TextInputSources API (Carbon)를 사용하여 속 입력기를 자동으로 선택합니다.


1 macOS 내장 입력기 중에서는 영어 ABC, 베트남어 Simple Telex 등
2 관련 소스 코드: Safari/WebKit, Chrome/Chromium, Firefox/Gecko
3 등록 가능한 입력 체계 종류: CarbonCore API, Unicode
4 macOS 내장 입력기는 기본적으로 InputMethodKit을 사용하지 않는 것으로 보입니다. InputMethodKit을 사용하는 입력기는 /System/Library/Input Methods에서 찾을 수 있으며, Sonoma 14.2 기준 총 18개입니다.
5 베트남어 Simple Telex 등
6 한국어 두벌식 등
7 입력 소스 ID: com.apple.keylayout.ABC

from sokim.

kiding avatar kiding commented on June 16, 2024

"ABC 입력기 제한" 기능을 추가하여 대응한 v1.1.1을 선공개하였습니다.

from sokim.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.