52971


英語版スタックオーバーフローでも質問させてもらったのですが、回答がつかなかったのでこちらでも質問いたします。

<https://stackoverflow.com/questions/54621056/how-to-call-kill-and-yank-
function-from-hammerspoon>

OSXの組み込みのkill(`ctrl + k`)および yank(`ctrl +
y`)機能はハングルやタイ文字の入力方法を使っているときには動作しません。  
その他のテキスト(カーソル)操作系のショートカットも同様です。

ですので`Hammerspoon`を使って同様の操作を行おうとしたのですが`kill`や`yank`をどうやって呼び出せばよいかわかりませんでした。

カーソル移動に関するショートカットは以下のように実装しました。

[code]

    local EmacsKeyMap = hs.hotkey.modal.new()
    
    local function sendKey(mods, key)
       return function()
          hs.eventtap.keyStroke(mods, key, 10000)
       end
    end
    
    local function bindToEmacsKeyMap(mods, key, func)
       EmacsKeyMap:bind(mods, key, func, nil, func)
    end
    
    bindToEmacsKeyMap({'ctrl'}, 0, sendKey({'command'}, 'left')) -- C-a
    bindToEmacsKeyMap({'ctrl'}, 14, sendKey({'command'}, 'right')) -- C-e
    bindToEmacsKeyMap({'ctrl'}, 11, sendKey({}, 'left')) -- C-b
    bindToEmacsKeyMap({'ctrl'}, 3, sendKey({}, 'right')) -- C-f
    bindToEmacsKeyMap({'ctrl'}, 45, sendKey({}, 'down')) -- C-n
    bindToEmacsKeyMap({'ctrl'}, 35, sendKey({}, 'up')) -- C-p
    bindToEmacsKeyMap({'ctrl'}, 4, sendKey({}, 'delete')) -- C-h
    
    EmacsKeyMap:enter()
    
[/code]

既に存在するEmacsライクのキーバインドを実現するコードを確認してみたんですが`C-a`など既存のキー入力を割り当ててるだけでした。

`Hammerspoon`から特定のキー入力ではなく`kill`や`yank`機能を直接呼び出す方法はありますか？

`Hammerspoon`のスクリプトについての質問になりましたが、同様の機能が実装できるのであれば`Karabiner`やその他のアプリケーションを用いてても大丈夫です。


CC BY-SA 4.0
2019-02-21T11:15:21.690
52921
2019-02-23T11:10:13.970
3271
question
os-x-key-bindings
HammerspoonもしくはKarabinerでOSX組み込みのkillやyankを呼び出す方法


`Hammerspoon`を用いた方法はわからないままなのですが、[こちらのサイト](https://zariganitosh.hatenablog.jp/entry/20101026/text_key_binding)の解説を参考に`~/Library/KeyBindings/DefaultKeyBinding.dict`に以下の内容を書き込むことで期待する動作になりました。

[code]

    {
        "^ฟ" = "moveToBeginningOfParagraph:"; /* ctrl-a */
        "^ฤ" = "moveToBeginningOfParagraphAndModifySelection:"; /* ctrl-A */
        "^ิ" = "moveBackward:"; /* ctrl-b */
        "^ฺ" = "moveBackwardAndModifySelection:"; /* ctrl-B */
        "^ก" = "deleteForward:"; /* ctrl-d */
        "^ำ" = "moveToEndOfParagraph:"; /* ctrl-e */
        "^ฎ" = "moveToEndOfParagraphAndModifySelection:"; /* ctrl-E */
        "^ด" = "moveForward:"; /* ctrl-f */
        "^โ" = "moveForwardAndModifySelection:"; /* ctrl-F */
        "^้" = "deleteBackward:"; /* ctrl-h */
        "^า" = "deleteToEndOfParagraph:"; /* ctrl-k */
        "^ส" = "centerSelectionInVisibleArea:"; /* ctrl-l */
        "^ื" = "moveDown:"; /* ctrl-n */
        "^์" = "moveDownAndModifySelection:"; /* ctrl-N */
        "^น" = (
            "insertNewlineIgnoringFieldEditor:",
            "moveBackward:",
        ); /* ctrl-o */
        "^ย" = "moveUp:"; /* ctrl-p */
        "^ญ" = "moveUpAndModifySelection:"; /* ctrl-P */
        "^ะ" = "transpose:"; /* ctrl-t */
        "^ฮ" = "pageDownAndModifySelection:"; /* ctrl-V */
        "^อ" = "pageDown:"; /* ctrl-v */
        "^ั" = "yank:"; /* ctrl-y */
    }
    
[/code]


CC BY-SA 4.0
2019-02-23T11:10:13.970
52971
2019-02-23T11:10:13.970
3271
52921
answer