X-Git-Url: http://47.100.26.94:8080/?a=blobdiff_plain;f=hammerspoon%2Finit.lua;h=0d0eb8303d584d852aed308703833aae9294b92b;hb=6515e998b7be0db4b699d119ceaad4bfa11d405e;hp=2386e5820e3dd3ad6fb34a350a35791a1347bc90;hpb=0996b97bedd0c3260837a4e388c7e6fae9601939;p=dotfiles.git diff --git a/hammerspoon/init.lua b/hammerspoon/init.lua index 2386e58..0d0eb83 100644 --- a/hammerspoon/init.lua +++ b/hammerspoon/init.lua @@ -10,75 +10,23 @@ hs.hotkey.bind({"cmd", "alt", "ctrl"}, "R", function() end) hs.alert.show("Config loaded") +---- Right click +--hs.hotkey.bind({"cmd,", "alt", "ctrl"}, "l", function() +-- hs.eventtap.rightClick(hs.mouse.getAbsolutePosition()) +--end) --- Sample - Drawing on the screen - http://www.hammerspoon.org/go/#simplereload -mouseCircle = nil -mouseCircleTimer = nil - -function mouseHighlight() - -- Delete an existing highlight if it exists - if mouseCircle then - mouseCircle:delete() - if mouseCircleTimer then - mouseCircleTimer:stop() - end - end - -- Get the current co-ordinates of the mouse pointer - mousepoint = hs.mouse.getAbsolutePosition() - -- Prepare a big red circle around the mouse pointer - mouseCircle = hs.drawing.circle(hs.geometry.rect(mousepoint.x-40, mousepoint.y-40, 80, 80)) - mouseCircle:setStrokeColor({["red"]=1,["blue"]=0,["green"]=0,["alpha"]=1}) - mouseCircle:setFill(false) - mouseCircle:setStrokeWidth(5) - mouseCircle:show() - - -- Set a timer to delete the circle after 3 seconds - mouseCircleTimer = hs.timer.doAfter(3, function() mouseCircle:delete() end) -end -hs.hotkey.bind({"cmd","alt","shift"}, "D", mouseHighlight) - - --- window movement -hs.hotkey.bind({"cmd", "alt", "ctrl"}, "H", function() - local win = hs.window.focusedWindow() - local f = win:frame() +-- Donw : For firefox vimperator +hs.hotkey.bind({"cmd,", "ctrl"}, "n", function() + hs.eventtap.keyStroke({}, 'down') +end) - f.x = f.x - 10 - win:setFrame(f) +-- Up +hs.hotkey.bind({"cmd,", "ctrl"}, "p", function() + hs.eventtap.keyStroke({}, 'up') end) ------- multi-window layout ---local laptopScreen = "Color LCD" ---local windowLayout = { --- {"Safari", nil, laptopScreen, hs.layout.left50, nil, nil}, --- {"Mail", nil, laptopScreen, hs.layout.right50, nil, nil}, --- {"iTunes", "iTunes", laptopScreen, hs.layout.maximized, nil, nil}, --- {"iTunes", "MiniPlayer", laptopScreen, nil, nil, hs.geometry.rect(0, -48, 400, 48)}, ---} ---hs.layout.apply(windowLayout) - ----- Creating a simple menubar item ---caffeine = hs.menubar.new() ---function setCaffeineDisplay(state) --- if state then --- caffeine:setTitle("AWAKE") --- else --- caffeine:setTitle("SLEEPY") --- end ---end --- ---function caffeineClicked() --- setCaffeineDisplay(hs.caffeinate.toggle("displayIdle")) ---end --- ---if caffeine then --- caffeine:setClickCallback(caffeineClicked) --- setCaffeineDisplay(hs.caffeinate.get("displayIdle")) ---end - --- Reacting to application events --- wheny active the Finder applications, all of its windows --- will be brought to the front of the display. +-- Reacting to application events +-- Move all Finder in front function applicationWatcher(appName, eventType, appObject) if (eventType == hs.application.watcher.activated) then if (appName == "Finder") then @@ -91,9 +39,6 @@ appWatcher = hs.application.watcher.new(applicationWatcher) appWatcher:start() - - --- -- Window Movement -- https://andrich.blog/2016/11/20/hammerspoon-an-awesome-tool-to-automate-your-mac/ -- CTRL + ALT + Left - Move current window to the left half of the screen. @@ -132,15 +77,17 @@ function move_window(direction) f.w = max.w f.h = max.h / 2 elseif direction == "max" then - f.x = max.x - f.y = max.y - f.w = max.w - f.h = max.h - elseif direction == "center" then - f.x = max.x + (max.w / 6) - f.y = max.y + (max.h / 6) - f.w = max.w * 2 / 3 - f.h = max.h * 2 / 3 + if f.w > (max.w * 3/4) and f.h > (max.h * 3/4) then + f.x = max.x + (max.w / 6) + f.y = max.y + (max.h / 6) + f.w = max.w * 2 / 3 + f.h = max.h * 2 / 3 + else + f.x = max.x + f.y = max.y + f.w = max.w + f.h = max.h + end else hs.alert.show("move_window(): Freaky parameter received " .. direction) end @@ -149,10 +96,121 @@ function move_window(direction) end end -local hyper = {"ctrl", "alt"} +local hyper = {"ctrl", "cmd"} hs.hotkey.bind(hyper, "h", move_window("left")) hs.hotkey.bind(hyper, "l", move_window("right")) hs.hotkey.bind(hyper, "k", move_window("up")) hs.hotkey.bind(hyper, "j", move_window("down")) hs.hotkey.bind(hyper, "m", move_window("max")) -hs.hotkey.bind(hyper, "c", move_window("center")) + +-- Search and dictionary +-- Past and copy +-- App quick startup + +-- Use SpoonInstall, +-- http://zzamboni.org/post/using-spoons-in-hammerspoon/ +-- https://github.com/Hammerspoon/Spoons/raw/master/Spoons/SpoonInstall.spoon.zip +if hs.spoons == nil then + hs.spoons=require('hs.spoons') +end + + +hs.loadSpoon ("SpoonInstall") +spoon.SpoonInstall.use_syncinstall = true +INSTALL = spoon.SpoonInstall + +-------------------------------------------------------------------------------- +-- MouseCircle http://www.hammerspoon.org/Spoons/MouseCircle.html +INSTALL:andUse("MouseCircle", + { + disable = false, + config = { + color = hs.drawing.color.x11.rebeccapurple + }, + hotkeys = { + show = { {"cmd", "alt", "ctrl"}, "m"} + } + } +) + +-------------------------------------------------------------------------------- +-- TextClipboardHistory +INSTALL:andUse("TextClipboardHistory", + { + config = { + show_in_menubar = false, + hist_size = 500, + }, + hotkeys = { + toggle_clipboard = { { "cmd", "shift" }, "v"} + }, + start = true; + } +) + + +-------------------------------------------------------------------------------- +-- Seal -- http://www.hammerspoon.org/Spoons/Seal.html +INSTALL:andUse("Seal", + { + hotkeys = { show = { {"cmd", "ctrl", "alt"}, "space" } }, + fn = function(s) + s:loadPlugins({"apps", "calc", "safari_bookmarks", "screencapture", "useractions"}) + s.plugins.safari_bookmarks.always_open_with_safari = false + s.plugins.useractions.actions = + { + ["Hammerspoon docs webpage"] = { + url = "http://hammerspoon.org/docs/", + icon = hs.image.imageFromName(hs.image.systemImageNames.ApplicationIcon), + -- hotkey = { hyper, "h" } + }, + ["Leave corpnet"] = { + fn = function() + spoon.WiFiTransitions:processTransition('foo', 'corpnet01') + end, + icon = swisscom_logo, + }, + ["Arrive in corpnet"] = { + fn = function() + spoon.WiFiTransitions:processTransition('corpnet01', 'foo') + end, + icon = swisscom_logo, + }, + ["Translate using Leo"] = { + url = "http://dict.leo.org/ende/index_de.html#/search=${query}", + icon = 'favicon', + keyword = "leo", + }, + ["Tell me something"] = { + keyword = "tellme", + fn = function(str) hs.alert.show(str) end, + } + } + s:refreshAllCommands() + end, + start = true, + } +) +-------------------------------------------------------------------------------- +-- Focus the last used window. +local function focusLastFocused() + local wf = hs.window.filter + local lastFocused = wf.defaultCurrentSpace:getWindows(wf.sortByFocusedLast) + if #lastFocused > 0 then lastFocused[1]:focus() end +end + +-- Create the chooser. +-- On selection, copy the emoji and type it into the focused application. +local chooser = hs.chooser.new(function(choice) + if not choice then focusLastFocused(); return end + hs.pasteboard.setContents(choice["chars"]) + focusLastFocused() + hs.eventtap.keyStrokes(hs.pasteboard.getContents()) +end) + +chooser:searchSubText(true) +chooser:choices(choices) + +chooser:rows(5) +chooser:bgDark(true) +hs.hotkey.bind({"cmd", "alt"}, "E", function() chooser:show() end)