Come posso disattivare il tasto di espulsione sulla mia tastiera mac?

3

Ho una tastiera Das per Mac che include un tasto di espulsione a destra del tasto backspace e a sinistra della chiave home. Non ho mai bisogno di usarlo, e accidentalmente lo preme costantemente che causa l'apertura del mio vassoio CD. È davvero fastidioso.

Esiste comunque la possibilità di disabilitare questa chiave?

Se c'è un modo per mantenere le altre funzionalità della chiave a cui si accede tenendo vari modificatori (per esempio control shift espellere per mettere il display dormire) sarebbe fantastico. Tuttavia, se solo il metodo disabilita completamente la chiave, sono d'accordo.

Nota che sto usando Sierra, quindi usare Karabiner non è un'opzione.

    
posta GuyGizmo 08.06.2017 - 23:29
fonte

4 risposte

0

Ho finito per scrivere un'applicazione personalizzata per filtrare le pressioni dei tasti di espulsione. Usa un evento tap per farlo. Ecco un esempio minimamente funzionante che dimostra come farlo:

#include <stdio.h>
#include <ApplicationServices/ApplicationServices.h>

static CFMachPortRef machPortRef = NULL;

CGEventRef specialKeyEventTapCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon)
{
    if (type == kCGEventTapDisabledByTimeout) {
        CGEventTapEnable(machPortRef, true);
        return event;
    }

    uint64_t subtype = CGEventGetIntegerValueField(event, 99);

    if (subtype == 8) {
        static CGEventFlags allModifiers = (kCGEventFlagMaskShift | kCGEventFlagMaskControl | kCGEventFlagMaskAlternate | kCGEventFlagMaskCommand);
        int keycode = ((CGEventGetIntegerValueField(event, 149) & 0xFFFF0000) >> 16);
        CGEventFlags flags = CGEventGetFlags(event);

        if (keycode == NX_KEYTYPE_EJECT && (flags & allModifiers) == 0) {
            // filter eject key when no modifiers are pressed
            return NULL;
        }
    }

    return event;
}

int main()
{
    CFRunLoopSourceRef eventSrc = NULL;

    machPortRef =  CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, kCGEventTapOptionDefault, CGEventMaskBit(NX_SYSDEFINED), (CGEventTapCallBack)specialKeyEventTapCallback, NULL);

    if (machPortRef == NULL) {
        fprintf(stderr, "CGEventTapCreate failed!\n");
        return 1;
    }

    eventSrc = CFMachPortCreateRunLoopSource(NULL, machPortRef, 0);
    CFRunLoopAddSource(CFRunLoopGetCurrent(), eventSrc, kCFRunLoopDefaultMode);

    CFRunLoopRun();

    CFRelease(machPortRef);
    CFRelease(eventSrc);
}
    
risposta data 26.09.2017 - 00:14
fonte
3

In realtà avevo Karabiner Elements che funzionava alla grande con Sierra sul mio vecchio Mac Pro - fino a un recente aggiornamento del sistema operativo. Ho assegnato il tasto F6 per "espellere" e ho disabilitato il normale tasto "espelli". Karabiner aveva anche un recente aggiornamento (un paio di giorni fa) che appariva come predefinito per tutte le mie mod di tastiera per tornare alla Apple standard. Sono tornato a una versione precedente nel backup e non ha risolto il problema. Ora, continuo a assegnare F6 a "Eject" (e funziona bene), ma il pulsante "Eject" non è più disabilitato. Abbiamo fatto molte ricerche in rete e sembra che Apple ci abbia ospitato per ora. A questo punto, potrei provare a creare una copertina che si adatti a quell'angolo, quindi quando accidentalmente colpisco la chiave, non funziona.

Questa è la mia soluzione lo-tech.

    
risposta data 13.09.2017 - 03:44
fonte
2

Ho creato un'app, PowerKey , che consente di rimappare i tasti Power ed Eject sulle tastiere Mac.

Scegli una sostituzione chiave come Forward Delete , oppure usa No Action per disabilitare completamente la chiave.

Puoi anche avviare Apple Script o script di bash tramite il tasto.

link

link

    
risposta data 25.10.2017 - 08:18
fonte
0

Mentre dici "Nota che sto usando Sierra, quindi usare Karabiner non è un'opzione". troverai che Karabiner Elements , che funziona in Sierra, farà quello che vuoi.

    
risposta data 09.06.2017 - 02:07
fonte

Leggi altre domande sui tag