Czy można wyłączyć przełącznik aplikacji z kartą poleceń w systemie Mac OS X Lion?

11

Ten skrót doprowadza mnie do szału. Chciałbym ponownie przypisać kartę poleceń do wstawiania fragmentu kodu podczas kodowania, ale przełącznik przeszkadza ...

Sean Mackesey
źródło
możliwy duplikat. superuser.com/questions/548146/…
Daniel Dropik

Odpowiedzi:

6

Możesz zamapować kartę poleceń na inną kombinację klawiszy za pomocą KeyRemap4MacBook :

<autogen>__KeyToKey__ KeyCode::TAB, VK_COMMAND | ModifierFlag::NONE, KeyCode::F19</autogen>

Spowodowałoby to wyłączenie karty Command i Shift-Command-Tab:

<autogen>__KeyToKey__ KeyCode::TAB, VK_COMMAND | ModifierFlag::NONE, KeyCode::VK_NONE</autogen>
<autogen>__KeyToKey__ KeyCode::TAB, VK_COMMAND | VK_SHIFT | ModifierFlag::NONE, KeyCode::VK_NONE</autogen>
Lri
źródło
Dzięki, to dobry trop. Warto również wiedzieć, że ponowne mapowanie za pomocą DefaultKeyBinding.dict to ślepy zaułek. Wypróbuję KeyRemap4MacBook
Sean Mackesey
1
Działa świetnie, dzięki. W przypadku, gdy nie jest to jasne dla innych, musisz dodać te definicje do private.xmlwłasnego <item>tagu pod <root>. Następnie ponownie załaduj private.xmli przełącz nową opcję.
jrhorn424,
Pamiętaj, aby dodać nazwę i identyfikator do wpisu <item> <name>Disable Command Tab</name> <identifier>private.disable_command_tab</identifier>
Willem D'Haeseleer
1

Możesz to zrobić jako poziom zestawu. W przypadku ML 10.8.3 ta Cmd+ Tabrejestracja odbywa się w podprogramie pod adresem 0x10000b258. W pseudokodzie wygląda to tak:

rax = CPSRegisterForKeyOnConnection(*(int32_t *)rbx, 0x1002cd078, 0x1, 0x1);
if (rax != 0x0) {
    fprintf(**__stderrp, "Error registering cmd-tab key, %d\\n");
}
rax = CPSRegisterForKeyOnConnection(*(int32_t *)0x1002ccda8, 0x1002cd078, 0x2, 0x1);
if (rax != 0x0) {
    fprintf(**__stderrp, "Error registering cmd-shift-tab key, %d\\n");
}

Więc jeśli zastąpisz następujące kody bajtów:

488D35691C2C008B3BBA01000000B901000000E85CD71B0085C0741A488B0DD5FC2400488B39488D355B341C0089C230C0E892C51B00488D0563192C008B38488D352A1C2C00BA02000000B901000000E81FD71B0085C0741A488B0D98FC2400488B39488D3541341C0089C230C0E855C51B00

z:

909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090 9090

I zrezygnuj z Dock.app, będzie działać. Musisz również odblokować plik binarny Dock, zanim to zrobisz, ponieważ plik binarny Dock jest szyfrowany.

użytkownik2199684
źródło
5
czy możesz wykonać kopię zapasową swojej odpowiedzi za pomocą jakiegoś źródła? cały ten kod może być mylący i nieufny dla przyszłych czytelników. nadzieję, że rozumiesz.
Lorenzo Von Matterhorn
1
Dodaj także, co robi oryginalny kod, i zastąpienie (w moim przekonaniu byłoby w porządku)
vonbrand
3
To całkiem fajna odpowiedź. Chociaż obawy w pozostałych dwóch komentarzach są prawdopodobnie słuszne, smutne jest, że wszystkie komentarze go kwestionują, ale nikt nie wskazuje, że jest to całkiem fajne. Skąd wiesz, który adres podprogramu i jaki jest numer 090909? (no-op?)
Gal
0

Czy akceptowalna odpowiedź obejmowałaby powtórzenie ?

Mac OS X Lion (10.7) ma trudności z wykryciem układu klawiatury, gdy go po raz pierwszy podłączyłem. Ale po wykonaniu instrukcji (tj. Wciśnięciu klawisza z prawej strony Lewego Shift itp.) Poprawnie rozpoznaje układ.

W Preferencjach systemowych Lion ma wspaniały panel klawiatury:

Zrzut ekranu panelu klawiatury Lion

Następnie przejdź do klawiszy modyfikujących…

wprowadź opis zdjęcia tutaj

Bingo, teraz CapsLock zachowuje się jak Kontrola.

Lub możesz spróbować wprowadzić powiązania klawiszy:

Edytuj domyślny plik skrótów klawiszowych ~ / Library / KeyBindings / DefaultKeyBinding.dict. Utwórz katalog i / lub plik, jeśli jeszcze go nie ma, i spraw, aby wyglądał tak:

{
  /* Remap Home / End to be correct */
  "\UF729" = "moveToBeginningOfLine:"; /* Home */
  "\UF72B" = "moveToEndOfLine:"; /* End */
  "$\UF729" = "moveToBeginningOfLineAndModifySelection:"; /* Shift + Home */
  "$\UF72B" = "moveToEndOfLineAndModifySelection:"; /* Shift + End */
}

Jeśli w DefaultKeyBinding.dict są już wpisy, po prostu dodaj 4 nowe mapowania powyżej do głównej sekcji pliku. Może być konieczne ponowne uruchomienie komputera, aby zadziałało.

Musisz dostosować powyższy kod do tego, co próbujesz zrobić

Everett
źródło
1
Chociaż teoretycznie może to odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
Kanadyjczyk Łukasz
3
Zgadzam się z powyższym komentatorem - ta odpowiedź jest zdecydowanie zbyt ogólna. Doceniam twoją próbę odpowiedzi, ale staraj się być bardziej bezpośredni. Wydaje mi się, że ten wpis prawdopodobnie wprowadzi w błąd innych, którzy znajdą to pytanie w przyszłości. Również ponowne mapowanie całego klawisza polecenia na coś innego nie jest dla mnie akceptowalnym rozwiązaniem, ponieważ używam tego klawisza do wielu innych rzeczy. Nie wiem, czy kod pokazany w drugiej części rozwiązania pozwoliłby mi selektywnie wyłączyć CMD + TAB, ale czy może wyjaśnić, jak to wyraźnie.
Sean Mackesey,
Ponowne przypisanie klawisza polecenia do Caps Lock to prawdopodobnie najlepszy pomysł, jaki mógłbym zaoferować. Wciąż dostajesz klawisz polecenia i byłbym oszołomiony słysząc, że faktycznie używasz do czegoś Caps Lock. Drugą opcją było wykazanie ilości pracy, którą musiałbyś wykonać, jeśli masz powód, dla którego prosty sposób nie zadziała. Poza tymi dwoma nie mam dla ciebie nic więcej. Dostarczyłem niezbędne części zgodnie z zaleceniami Łukasza.
Everett,
Właściwie mam już CapsLock odwzorowany na Escape (niezbędne, jeśli używasz Vima!). Dziękuję za twój wysiłek, jeszcze raz zalecę jednak edycję swojego postu. Proszę tylko link do czegoś na temat mapowania klawiszy modyfikujących, aby przyszłe przeglądarki nie musiały przedzierać się przez całe wyjaśnienie, gdy wiedzą, że to rozwiązanie nie będzie dla nich działać.
Sean Mackesey,