Como altero os atalhos do Controle de Missão na linha de comando?

11

Eu tenho tentado descobrir isso por um longo tempo. Eu tenho um script de provisionamento bastante típico do Mac OS:

https://gist.github.com/ryanpcmcquen/b2e608311f286a4ab3e1

Gostaria de alterar os atalhos de controle da missão para todos ser Ctrl+ Alt+ em ...vez de Ctrl+ .... Por exemplo, o padrão é: Ctrl+ Uppara ativar o Controle da Missão. Gostaria de mudar isso para Ctrl+ Alt+ Up, porque o atalho atual está em conflito com outros programas que eu uso.

Observe que já estou ciente de como fazer isso System Preferences > Keyboard > Shortcuts. Estou procurando uma solução de linha de comando com script.

EDIT: Graças a @ user3439894, eu fiz um script para alterar todas as chaves plist para o que eu quero que elas sejam. O único problema é que não funciona. :-(

Aqui está o que eu tenho até agora:

#!/bin/bash
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 32 "{enabled = 1; value = { parameters = (65535, 126, 2883584); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 33 "{enabled = 1; value = { parameters = (65535, 125, 2883584); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 34 "{enabled = 1; value = { parameters = (65535, 126, 3014656); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 35 "{enabled = 1; value = { parameters = (65535, 125, 3014656); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 79 "{enabled = 1; value = { parameters = (65535, 123, 2883584); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 80 "{enabled = 1; value = { parameters = (65535, 123, 3014656); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 81 "{enabled = 1; value = { parameters = (65535, 124, 2883584); type = standard; }; }"
defaults write ~/Library/Preferences/com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 82 "{enabled = 1; value = { parameters = (65535, 124, 3014656); type = standard; }; }"
chown -Rf `whoami` ~/Library/Preferences/com.apple.symbolichotkeys.plist;
defaults read com.apple.symbolichotkeys
ryanpcmcquen
fonte
Você já descobriu uma solução para isso?
Nathan
@ Nathan, não. Eu apenas rolo com os padrões agora.
Ryanpcmcquen
Eu tive uma questão semelhante. Talvez você pode tentar a minha solução: apple.stackexchange.com/questions/344494/...
Nathan
@ Nathan, parece que sua solução requer intervenção manual. Acabei de aprender como alterar os outros programas que utilizo para ter teclas de atalho diferentes. Hammerspoon FTW.
Ryanpcmcquen
Esta parte do comando type = standard;deve realmente type = 'standard';observar as aspas 'standard'. Dito isto, porém, às vezes, mesmo com uma linha de comando devidamente formada, a alteração simplesmente não entra em vigor, mesmo com a ; killall -u $USER cfprefsdadição ao final do defaults comando . Além disso, o caminho completo para o .plistarquivo neste caso de uso não é necessário e, simplesmente, por exemplo, defaults write com.apple.symbolichotkeys AppleSymbolicHotKeys ...e o restante do comando é tudo o que é necessário.
user3439894

Respostas:

5

Esta não é uma resposta direta, embora eu espere que as informações aqui apresentadas ajudem você a obter uma resposta direta.

Posso dizer o que muda em qual arquivo quando você altera o atalho de teclado padrão para o Controle de Missão, de Seta para Cima para Controle e Seta para Cima para Opção de Controle. É o "Número do item 2" da matriz "parameters" no dicionário "value" do dicionário "32" e no dicionário "34" do dicionário "AppleSymbolicHotKeys" no /Users/$USER/Library/Preferences/com.apple.symbolichotkeys.plistarquivo.

Aqui está uma defaults readrepresentação da com.apple.symbolichotkeys.plistestrutura do arquivo, no que se refere às alterações feitas nas circunstâncias definidas acima.

Controle de missão com o padrão de seta de controle

{
    AppleSymbolicHotKeys =     {
        32 =         {
            enabled = 1;
            value =             {
                parameters =                 (
                    65535,
                    126,
                    2359296
                );
                type = standard;
            };
        };
        34 =         {
            enabled = 1;
            value =             {
                parameters =                 (
                    65535,
                    126,
                    2490368
                );
                type = standard;
            };
        };
    };
}

O Controle da Missão foi alterado para Seta com Ctrl e Opção Acima

{
    AppleSymbolicHotKeys =     {
        32 =         {
            enabled = 1;
            value =             {
                parameters =                 (
                    65535,
                    126,
                    2883584
                );
                type = standard;
            };
        };
        34 =         {
            enabled = 1;
            value =             {
                parameters =                 (
                    65535,
                    126,
                    3014656
                );
                type = standard;
            };
        };
    };
}

A seção BUGS da defaultspágina de manual diz:

Os padrões podem ser estruturados de maneiras muito complexas, dificultando a inserção do usuário com este comando.

E este é um exemplo perfeito, pois será uma linha de comando muito complexa, usada defaultspara gravar os valores de destino nos elementos da matriz de destino, se possível. Apenas um FYI ... Se você tentar defaults write com.apple.symbolichotkeys ...executar um comando, primeiro faça backup do arquivo de destino.

A outra opção é usar um AppleScript para alterar as configurações, navegando na GUI de Preferências do Sistema e isso também será um pouco complexo em comparação com a configuração de um objeto de nível superior, que o destino aqui não é. Eu nem tenho certeza de que é possível, no entanto, se eu precisasse de uma maneira automatizada, eu descobriria, no entanto, não tenho tempo para descobrir nenhum dos métodos, desculpe.

Pelo menos agora você sabe o que muda de onde e de onde você pode descobrir por conta própria ou obter ajuda adicional para saber um pouco mais.

Aqui está uma imagem cortada no Xcode do com.apple.symbolichotkeys.plistarquivo.

insira a descrição da imagem aqui

Entre, prendi as alterações usando um utilitário de terceiros que registrou as alterações no sistema de arquivos e depois converti essas informações em uma saída legível por humanos para fornecer essas informações.

user3439894
fonte
Parece alterar os arquivos plist adequados, o único problema é que os atalhos não são realmente alterados, nem após reinicializações, relendo o arquivo ou qualquer outra coisa.
Ryanpcmcquen
Qual o nome desse "utilitário de terceiros que registrou o sistema de arquivos muda e depois converteu essas informações em uma saída legível por humanos"?
Allen Bargi
1
@ Allen Bargi, IIRC Provavelmente filemonfoi parte dos extras do livro "Mac OS X Internals - Para o núcleo da Apple" na forma de código-fonte filemon.c que eu compilei para um executável no meu sistema. Em seguida, comparei as diferenças no arquivo alterado de seu estado atual com o arquivo de um backup do Time Machine feito pouco antes das alterações. Você também pode usar o comando nativo fs_usage .
User3439894
@ryanpcmcquen seu link está quebrado
charlesreid1
@ charlesreid1, oh bem, não funcionou.
Ryanpcmcquen
1

Esta é minha recomendação: use um utilitário como o Karabiner para aceitar essa personalização.

Como desenvolvedor, quero dizer que, pessoalmente, acho que é um problema fascinante e tentador, e realmente mostra o lado mais feio e sombrio do macOS se escondendo nos bastidores que apenas os desenvolvedores e hackers de software podem realmente apreciar ...

O problema é bastante simples: eu só quero remapear a combinação de teclas padrão para minha própria ligação.

Por que diabos é tão difícil / complicado? Pretendo descobrir e publicar uma solução ... Fique ligado.

Steve Benner
fonte
Obrigado, estou ansioso para ver o que você descobriu. Mas o download de um programa externo leva o tempo necessário para configurá-lo através das interfaces padrão do Mac. Ainda estou esperando por uma solução de linha de comando embutida.
precisa saber é o seguinte