├── .gitignore ├── init.lua └── watcher.lua /.gitignore: -------------------------------------------------------------------------------- 1 | ### https://raw.github.com/github/gitignore/f31b319dca10213163411cb710c27dc37ed3eac5/Global/osx.gitignore 2 | 3 | .DS_Store 4 | .AppleDouble 5 | .LSOverride 6 | Icon 7 | 8 | 9 | # Thumbnails 10 | ._* 11 | 12 | # Files that might appear on external disk 13 | .Spotlight-V100 14 | .Trashes 15 | 16 | 17 | -------------------------------------------------------------------------------- /init.lua: -------------------------------------------------------------------------------- 1 | require('watcher') 2 | 3 | local function keyCode(key, modifiers) 4 | modifiers = modifiers or {} 5 | return function() 6 | hs.eventtap.event.newKeyEvent(modifiers, string.lower(key), true):post() 7 | hs.timer.usleep(1000) 8 | hs.eventtap.event.newKeyEvent(modifiers, string.lower(key), false):post() 9 | end 10 | end 11 | 12 | local function keyCodeSet(keys) 13 | return function() 14 | for i, keyEvent in ipairs(keys) do 15 | keyEvent() 16 | end 17 | end 18 | end 19 | 20 | local function remapKey(modifiers, key, keyCode) 21 | hs.hotkey.bind(modifiers, key, keyCode, nil, keyCode) 22 | end 23 | 24 | local function disableAllHotkeys() 25 | for k, v in pairs(hs.hotkey.getHotkeys()) do 26 | v['_hk']:disable() 27 | end 28 | end 29 | 30 | local function enableAllHotkeys() 31 | for k, v in pairs(hs.hotkey.getHotkeys()) do 32 | v['_hk']:enable() 33 | end 34 | end 35 | 36 | local function handleGlobalAppEvent(name, event, app) 37 | if event == hs.application.watcher.activated then 38 | -- hs.alert.show(name) 39 | if name == "iTerm2" then 40 | disableAllHotkeys() 41 | else 42 | enableAllHotkeys() 43 | end 44 | end 45 | end 46 | 47 | appsWatcher = hs.application.watcher.new(handleGlobalAppEvent) 48 | appsWatcher:start() 49 | 50 | -- カーソル移動 51 | remapKey({'ctrl'}, 'f', keyCode('right')) 52 | remapKey({'ctrl'}, 'b', keyCode('left')) 53 | remapKey({'ctrl'}, 'n', keyCode('down')) 54 | remapKey({'ctrl'}, 'p', keyCode('up')) 55 | remapKey({'ctrl'}, 'e', keyCode('right', {'cmd'})) 56 | remapKey({'ctrl'}, 'a', keyCode('left', {'cmd'})) 57 | 58 | -- テキスト編集 59 | remapKey({'ctrl'}, 'w', keyCode('x', {'cmd'})) 60 | remapKey({'ctrl'}, 'y', keyCode('v', {'cmd'})) 61 | remapKey({'ctrl'}, 'd', keyCode('forwarddelete')) 62 | remapKey({'ctrl'}, 'h', keyCode('delete')) 63 | remapKey({'ctrl'}, 'k', keyCodeSet({ 64 | keyCode('right', {'cmd', 'shift'}), 65 | keyCode('x', {'cmd'}) 66 | })) 67 | 68 | -- コマンド 69 | remapKey({'ctrl'}, 's', keyCode('f', {'cmd'})) 70 | remapKey({'ctrl'}, '/', keyCode('z', {'cmd'})) 71 | remapKey({'ctrl'}, 'g', keyCode('escape')) 72 | 73 | -- ページスクロール 74 | remapKey({'ctrl'}, 'v', keyCode('pagedown')) 75 | remapKey({'alt'}, 'v', keyCode('pageup')) 76 | remapKey({'cmd', 'shift'}, ',', keyCode('home')) 77 | remapKey({'cmd', 'shift'}, '.', keyCode('end')) 78 | -------------------------------------------------------------------------------- /watcher.lua: -------------------------------------------------------------------------------- 1 | -- -------------------------------------- 2 | -- Watcher to load the configuration in case of changes 3 | -- -------------------------------------- 4 | function reload_config(files) 5 | hs.reload() 6 | end 7 | hs.pathwatcher.new(os.getenv("HOME") .. "/.hammerspoon/init.lua", reload_config):start() 8 | hs.alert.show("Config loaded") 9 | --------------------------------------------------------------------------------