Emacs NS build + Google IME로 스트레스없이 IME 전환

==본 기사는 잠정판입니다==

Emacs NS build와 Google IME를 함께 사용하면 IME가 올바르게 전환되지 않을 수 있습니다. 다음은이 문제를 해결하는 한 가지 방법입니다.

Google IME에 의한 전환 계통을 Emacs.app만 분리
- Emacs.app는 내부 API를 직접 호출하여 Google IME를 전환합니다.
- 다른 앱은 평소와 같이 사용

다음은 Cmd-Space 또는 Shift-Space를 IME 전환의 키로 사용하는 경우입니다.



예상되는 환경


  • macOS (Catalina)
  • Emacs 27.0.91 (with ns-inline-patch)

  • 필요한 애플리케이션


  • Google IME
  • htps //w w. 오, ぇ. 이. jp/이메/

  • Karabiner-Elements
  • h tps : // から 비네 r-에멘 ts. pqrs. rg/

  • ns-inline-patch가있는 Emacs.app (NS build)
  • ぁtps://p? 참깨/에마 cs/pkg/에마 cs-27.0.91. pkg

  • htps : // 기주 b. 코 m / 타카 xp / n s-in-ne-pa tch (27.1 이상 Apple Silicon 용도 있음)


  • macOS의 IME 전환을 Ctrl-`에 할당



    macOS 환경 설정으로 변경합니다.





    Ctrl-`에 Cmd-Space 및 Shift-Space 할당



    Karabiner-Elements로 설정합니다.

    ~/.config/karabiner/assets/complex_modifications/toggle-ime-except-emacs.json으로 배치 한 후 Karabiner-Elements.app를 시작하여 확인하십시오.

    이렇게하면 Ctrl-`, Cmd-Space 및 Shift-Space의 세 가지 방법으로 IME를 전환 할 수 있습니다. 그러나 Emacs.app를 사용하는 동안 Emacs.app 내부의 기능을 사용하여 IME를 전환하기 위해 Cmd-Space와 Shift-Space를 OS에 전달하지 않습니다.

    toggle-ime-except-emacs.json
    {
        "title": "Toggle IME (except Emacs.app)",
        "rules": [
            {
                "description": "Toggle IME by Shift-Space (left side)",
                "manipulators": [
                    {
                        "type": "basic",
                        "from": {
                            "key_code": "spacebar",
                            "modifiers": {
                                "mandatory": [
                                    "left_shift"
                                ]
                            }
                        },
                        "to": [
                            {
                                "key_code": "grave_accent_and_tilde",
                                "modifiers": [
                                    "left_control"
                                ]
                            }
                        ],
                        "conditions": [
                            {
                                "type": "frontmost_application_unless",
                                "bundle_identifiers": [
                                    "Emacs"
                                ]
                            }
                        ]
                    }
                ]
            },
            {
                "description": "Toggle IME by Shift-Space (right side)",
                "manipulators": [
                    {
                        "type": "basic",
                        "from": {
                            "key_code": "spacebar",
                            "modifiers": {
                                "mandatory": [
                                    "right_shift"
                                ]
                            }
                        },
                        "to": [
                            {
                                "key_code": "grave_accent_and_tilde",
                                "modifiers": [
                                    "left_control"
                                ]
                            }
                        ],
                        "conditions": [
                            {
                                "type": "frontmost_application_unless",
                                "bundle_identifiers": [
                                    "Emacs"
                                ]
                            }
                        ]
                    }
                ]
            },
            {
                "description": "Toggle IME by Cmd-Space (left side)",
                "manipulators": [
                    {
                        "type": "basic",
                        "from": {
                            "key_code": "spacebar",
                            "modifiers": {
                                "mandatory": [
                                    "left_command"
                                ]
                            }
                        },
                        "to": [
                            {
                                "key_code": "grave_accent_and_tilde",
                                "modifiers": [
                                    "left_control"
                                ]
                            }
                        ],
                        "conditions": [
                            {
                                "type": "frontmost_application_unless",
                                "bundle_identifiers": [
                                    "Emacs"
                                ]
                            }
                        ]
                    }
                ]
            },
            {
                "description": "Toggle IME by Cmd-Space (right side)",
                "manipulators": [
                    {
                        "type": "basic",
                        "from": {
                            "key_code": "spacebar",
                            "modifiers": {
                                "mandatory": [
                                    "right_command"
                                ]
                            }
                        },
                        "to": [
                            {
                                "key_code": "grave_accent_and_tilde",
                                "modifiers": [
                                    "left_control"
                                ]
                            }
                        ],
                        "conditions": [
                            {
                                "type": "frontmost_application_unless",
                                "bundle_identifiers": [
                                    "Emacs"
                                ]
                            }
                        ]
                    }
                ]
            }
        ]
    }
    
    



    ns-inline-patch에서 Google IME 사용



    init.el
    ;; Google IME を指定(locale=en や自動検出がコケる場合には必須)
    (custom-set-variables
         '(mac-default-input-source "com.google.inputmethod.Japanese.base"))
    
    ;; インラインパッチの有効化
    (mac-input-method-mode 1)
    

    Emacs.app에서 Google IME 전환을 Cmd-Space 및 Shift-Space에 할당



    init.el
    (global-set-key (kbd "M-SPC") 'mac-ime-toggle)
    (global-set-key (kbd "S-SPC") 'mac-ime-toggle)
    (define-key isearch-mode-map (kbd "M-SPC") 'mac-ime-toggle)
    (define-key isearch-mode-map (kbd "S-SPC") 'mac-ime-toggle)
    

    Google IME 설정에서 Shift-Space 투명



    Shift-Space가 Emacs.app에 투명하지 않은 경우가 있습니다.



    Googke IME Keymap Style > Google IME input keymap editor 에서 Shift Space가 Key로 되어 있는 명령을 삭제(Porcomposition, Composition, Conversion)하면 원하는 조작

    이 설정은 내보내고 텍스트로 저장할 수 있습니다. 새로운 환경에서는 그것을 가져올 수 있습니다.

    보조 함수


  • mac-ime-toggle (IME ON/OFF 전환 함수, interactive)
  • mac-ime-active-p (IME ON 판정 함수)
  • mac-ime-activate (IME ON 함수, interactive)
  • mac-ime-deactivate (IME OFF 함수, interactive)
  • mac-ime-input-source-list (사용 가능한 IME 코드를 메시지 버퍼에 내보내기, interactive)

  • 후크



    커서의 색을 바꾸는 등의 커스텀 함수를 hook에 매달리면 편리합니다.
  • input-method-activate-hook (mac-ime-activate 내에서 호출됨)
  • input-method-deactivate-hook (mac-ime-deactivate 내에서 호출됨)
  • 좋은 웹페이지 즐겨찾기