diff --git a/hammerspoon/apps/iterm.lua b/hammerspoon/apps/iterm.lua index f75b9487..00d6437a 100644 --- a/hammerspoon/apps/iterm.lua +++ b/hammerspoon/apps/iterm.lua @@ -2,21 +2,44 @@ local tmux_prefix = {{'ctrl'}, 'c'} local function isTmuxWindow() - return function () - hs.window.focusedWindow():title():find("tmux") - end + return function () + hs.window.focusedWindow():title():find("tmux") + end +end + +local function tmuxpresskey(mod, key) + if isTmuxWindow() then + hs.eventtap.keyStroke({'ctrl'}, 'c') + hs.eventtap.keyStroke(mod, key) + return true + end + return false end App.new("iTerm2") - .onInit(function (self) - -- cmd+N for switching tmux windows - for i = 1,9 do - i = tostring(i) - self.bind({'cmd'}, i, function() - os.execute("/usr/local/bin/tmux select-window -t " .. i) - end, isTmuxWindow) - end - end) - .bind({'cmd'}, 'n', invoke({tmux_prefix, 'c'}), isTmuxWindow) -- new window - .bind({'cmd'}, 'w', invoke({tmux_prefix, 'x'}), isTmuxWindow) -- close pane/window - .bind({'cmd', 'shift'}, 'w', util.call(hs.window, 'close')) -- close pane/window + .onInit(function (self, app) + -- cmd+N for switching tmux windows + for i = 1,9 do + i = tostring(i) + self.bind({'cmd'}, i, function() + if isTmuxWindow() then + os.execute("/usr/local/bin/tmux select-window -t " .. i) + end + end) + end + + -- new window + self.bind({'cmd'}, 'n', function() + if not tmuxpresskey({}, 'c') then + app:selectMenuItem({"Shell", "New Window"}) + end + end) + + -- close pane/window + self.bind({'cmd'}, 'w', function() + if not tmuxpresskey({}, 'x') then + app:selectMenuItem({"Shell", "Close"}) + end + end) + end) + .bind({'cmd', 'shift'}, 'w', util.call(hs.window, 'close')) -- close pane/window