Atalhos

Esta página foi traduzida automaticamente e pode conter erros. Encontrou um problema? Use o link "Edit this page" para ajudar a corrigir.

Os atalhos de teclado do Studio são baseados em um registro central de comandos (editor.shortcuts), em vez de verificações de tecla fixas espalhadas pelos painéis. Todo atalho pode ser remapeado, conflitos são detectados automaticamente, e os itens de menu mostram seu binding atual.


Atalhos padrão

Comando Padrão Contexto
Desfazer (Undo) Ctrl+Z Global
Refazer (Redo) Ctrl+Shift+Z, Ctrl+Y Global
Copiar Ctrl+C Global
Recortar Ctrl+X Global
Colar Ctrl+V Global
Play / Stop Ctrl+P Global
Salvar Ctrl+S Global
Salvar Tudo Ctrl+Shift+S Global
Fechar Aba Ctrl+W Global
Próxima / Aba Anterior Ctrl+Tab / Ctrl+Shift+Tab Global
Ferramenta Mover / Rotacionar / Escalar W / E / R Scene View (hover)
Focar Seleção F Scene View (hover)
Renomear F2 Hierarchy / Asset Browser (em foco)
Excluir Delete, Backspace Hierarchy / Asset Browser (em foco)

Comandos "Global" disparam independentemente de qual painel está em foco. Comandos com escopo de painel (as teclas de ferramenta da Scene View, o renomear e a navegação da Hierarchy/Asset Browser) só disparam enquanto aquele painel específico é o que você está de fato interagindo — passando o mouse sobre o viewport, ou tendo clicado em uma linha/tile — não apenas porque o painel está aberto em algum lugar da tela. É isso que impede, por exemplo, que a tecla R da Scene View mude o gizmo para Escala enquanto você digita um R em um campo de renomear em outro lugar.

Digitar em qualquer campo de texto também suprime todo atalho que não seja pressionado com Ctrl ou Cmd — letras simples e Shift+letra sempre chegam ao campo que você está editando.

Remapeando

Abra Turian ▸ Settings, selecione a categoria Shortcuts na barra lateral. Cada linha mostra o comando, a qual painel ele está vinculado, e seu binding atual:

  • Clique no botão de binding e pressione uma nova combinação de teclas. Esc cancela; Backspace limpa o binding por completo (o comando fica sem vínculo, não apenas "redefinido para o padrão").
  • Um ícone de aviso aparece ao lado de um binding que colide com outro comando cujo escopo se sobrepõe a ele (dois comandos Global, ou um Global e um com escopo de painel) — passe o mouse sobre ele para ver com qual comando ele conflita. Bindings conflitantes ainda são permitidos, assim como na maioria dos editores; é um aviso, não um bloqueio rígido.
  • O ícone de reverter ao lado de uma linha substituída redefine aquele comando de volta ao padrão. Reset All faz o mesmo para todos os comandos.
  • Os remapeamentos têm efeito imediato assim que você os faz. Save os grava no arquivo de configurações; Reload descarta quaisquer remapeamentos não salvos.

Rótulos de menu

Itens de menu que têm um comando registrado mostram seu atalho atual alinhado à direita e esmaecido, obtido ao vivo do registro — um remapeamento no painel de configurações Shortcuts é refletido no menu no próximo frame, sem nenhum texto separado para manter sincronizado.

Para autores de plugins / módulos

Os comandos são registrados em tempo de execução, não declarados em um único arquivo central — cada módulo de funcionalidade é dono de seus próprios comandos, da mesma forma que studio/main-window/Panels.zig permite que cada painel se registre:

const Shortcuts = @import("studio/services/Shortcuts.zig");

const my_commands = [_]Shortcuts.CommandDesc{
    .{
        .id = "myPlugin.doThing",
        .title = "Do The Thing",
        .context = .global, // ou .scene_viewport / .hierarchy / .asset_browser / .ui_editor / .text_input
        .requires_focus = false, // true se isso só faz sentido enquanto seu painel está de fato em uso
        .defaults = &.{Shortcuts.Binding.single(.{ .key = .t, .ctrl = true })},
    },
};
const my_handlers = [_]?Shortcuts.Handler{myHandler};

// uma vez, por exemplo no primeiro draw:
Shortcuts.register(&my_commands, &my_handlers);

Para um comando com escopo no seu próprio painel (context diferente de .global), não passe um handler — em vez disso, verifique-o diretamente dentro do próprio loop de eventos do seu painel, no lugar de uma verificação de tecla fixa:

for (gui.events()) |*e| {
    if (Shortcuts.eventMatches(e, "myPlugin.panelAction", panel_is_engaged)) {
        e.handle(@src(), my_widget_data);
        doPanelAction();
    }
}

panel_is_engaged é o que quer que "o usuário está olhando para o meu painel" signifique para você — foco de teclado real do dvui para um painel baseado em widget, ou hover do mouse para uma superfície não focável, como um viewport 3D.

IDs de comando são strings namespaced (area.action) e também servem como sufixo da chave de configuração (shortcut.<command_id>) — escolha um que você esteja disposto a manter estável, já que renomeá-lo deixa órfão qualquer remapeamento salvo de um usuário.


← Toda a documentação Editar esta página