2017-07-20 11 views
0

Nach einem Update auf Sierra musste ich feststellen, dass der Karabiner nicht mehr funktioniert, was Zeigerklicks wirklich gut emulieren könnte.macOS Sierra: Maus nach unten emulieren

Jede Chance, das über Swift oder Apple Script oder Obj.C zu bekommen?

Hintergrund: Mit Karabiner (und seil) konnte ich caps-lock + d runter und bis zur Maus nach unten und oben binden und dazwischen wurde die Trackpadbewegung verstanden. Mein Trackpad verarbeitet keinen Tastendruck mehr, funktioniert aber immer noch gut für Zeigerbewegungen.

Antwort

0

Beantworten Sie mich, gehackt in hammerspoon. War ziemlich heikel Chrom wählen Sie zum Laufen zu bringen, vielleicht spart es jemand ein oder zwei Stunden:

1 ~/.hammerspoon $ cat init.lua 



--[[ Left Keyboard Mouse (alt-d) 

The main problem was to get chrome based apps select text when we drag via 
keyboard. 

You MUST return true always in the handle_drag otherwise it fails to select. 
FF works, terminal works, chrome apps (atom, ...) don't. 

But true is preventing further processing of the drag coords, 
hs.mouse.getAbsolutePosition remains constant while dragging (!) 
=> i.e. we MUST calc them via DeltaX, DeltaY, see below. 


--]] 

hs.alert.show("Config loaded") 

-- all mechanics stolen from here: 
-- local vimouse = require('vimouse') 
-- vimouse('cmd', 'm') 

now = hs.timer.secondsSinceEpoch 

evt = hs.eventtap 
evte = evt.event 
evtypes = evte.types 
evp=evte.properties 

drag_last = now(); drag_intv = 0.01 -- we only synth drags from time to time 

mp = {['x']=0, ['y']=0} -- mouse point. coords and last posted event 
l = hs.logger.new('keybmouse', 'debug') 
dmp = hs.inspect 

-- The event tap. Started with the keyboard click: 
handled = {evtypes.mouseMoved, evtypes.keyUp } 
handle_drag = evt.new(handled, function(e) 

    if e:getType() == evtypes.keyUp then 
     handle_drag:stop() 
     post_evt(2) 
     return nil -- otherwise the up seems not processed by the OS 
    end 

    mp['x'] = mp['x'] + e:getProperty(evp.mouseEventDeltaX) 
    mp['y'] = mp['y'] + e:getProperty(evp.mouseEventDeltaY) 

    -- giving the key up a chance: 
    if now() - drag_last > drag_intv then 
     -- l.d('pos', mp.x, 'dx', dx) 
     post_evt(6) -- that sometimes makes dx negative in the log above 
     drag_last = now() 
    end 
    return true -- important 
end) 

function post_evt(mode) 
    -- 1: down, 2: up, 6: drag 
    if mode == 1 or mode == 2 then 
     local p = hs.mouse.getAbsolutePosition() 
     mp['x'] = p.x 
     mp['y'] = p.y 
    end 
    local e = evte.newMouseEvent(mode, mp) 
    if mode == 6 then cs = 0 else cs=1 end 
    e:setProperty(evte.properties.mouseEventClickState, cs) 
    e:post() 
end 

hs.hotkey.bind({"alt"}, "d", 
    function(event) 
    post_evt(1) 
    handle_drag:start() 
    end 
) 

und alt ich capslock über Karabiners Elemente abgebildet.