🗂️ Workspace & Produtividade de Projeto#
Esta página cobre o conjunto de ferramentas voltadas à organização do workspace (pasta de projeto) e à produtividade ao alternar entre projetos: troca rápida de workspace, templates de novo projeto, execução de código multi-linguagem, gravação de macros, remapeamento de atalhos e o modelo de confiança de pastas (Workspace Trust).
Acesso à maioria delas: menu Ferramentas → Workspace & Editor.
🔁 Workspace Switcher (src/ui/workspace_switcher.py)#
Atalho: Ctrl+Shift+W ou Ferramentas → Workspace & Editor → Alternar Workspace.
Painel flutuante (700×480) para trocar rapidamente entre workspaces recentemente abertos.
- Lista de workspaces recentes com ícone indicando o tipo detectado (Git, projeto Python, projeto JS/Node...)
- Pré-visualização da árvore de diretórios ao passar o mouse sobre um item
- Busca em tempo real por nome de pasta
- Ações: abrir, remover da lista de recentes, abrir no explorador de arquivos do sistema
📋 Project Templates (src/ui/project_templates.py)#
Atalho: Ferramentas → Workspace & Editor → Novo Projeto a partir de Template.
Cria projetos novos a partir de templates pré-definidos ou customizados pelo usuário. Cada template é uma pasta com arquivos e um template.json de metadados.
Templates embutidos#
| ID | Descrição |
|---|---|
python_basic |
Script Python simples |
python_package |
Pacote Python instalável (com pyproject.toml) |
fastapi |
API REST com FastAPI |
flask |
Aplicação web com Flask |
cli_tool |
Ferramenta de linha de comando |
node_basic |
Projeto Node.js básico |
typescript_basic |
Projeto TypeScript básico |
data_science |
Estrutura para notebooks/análise de dados |
mkdocs |
Site de documentação com MkDocs |
makefile_c |
Projeto C/C++ com Makefile |
Funcionalidades#
- Janela de criação (820×580) com preview da estrutura de arquivos antes de confirmar
- Variáveis de substituição nos arquivos do template:
{{project_name}},{{author}},{{year}}e outras, substituídas no momento da criação - Templates customizados: qualquer pasta pode ser salva como template novo
- Suporte a comandos pós-criação (ex.:
git init,pip install -r requirements.txt) executados automaticamente após gerar os arquivos
▶️ Code Runner Configurável (src/ui/code_runner.py)#
Atalho: Ferramentas → Workspace & Editor → Configurar Code Runner. A execução em si é via F5 (Executar Arquivo).
Permite rodar arquivos em qualquer linguagem com comando, argumentos e variáveis de ambiente customizáveis por linguagem.
Linguagens pré-configuradas#
Python, JavaScript, TypeScript, Ruby, PHP, Go, Rust, Java, Kotlin, Swift, Lua, Perl, Bash, PowerShell, R, Julia, Dart, Scala, Elixir, Haskell, C e C++ - mais de 30 linguagens no total, incluindo variações de runtime.
Funcionalidades#
- Editar o comando de execução de qualquer linguagem (por exemplo, trocar
pythonporpython3.12ou adicionar flags) - Argumentos extras e variáveis de ambiente específicas por linguagem
- Timeout configurável por execução (evita que um script travado prenda o terminal indefinidamente)
- Histórico de execuções com timestamp
🎬 Macro Recorder (src/ui/macro_recorder.py)#
Atalhos: Ctrl+Shift+M (iniciar/parar gravação) · Ctrl+Alt+M (reproduzir).
Grava e reproduz sequências de teclas e ações do editor.
Funcionalidades#
- Toolbar flutuante com botões Gravar / Parar / Reproduzir
- Captura texto digitado, atalhos de teclado e navegação de cursor
- Múltiplas macros nomeadas, com persistência em JSON
- Reprodução com delay configurável (útil para visualizar a macro rodando passo a passo)
- Importar/exportar macros como arquivo JSON, para compartilhar com outra instância do Codis
⌨️ Key Remapper (src/ui/key_remapper.py)#
Acesso: Configurações → Atalhos de Teclado...
Permite remapear qualquer atalho de teclado da aplicação. Os atalhos customizados são persistidos separadamente da configuração principal e aplicados em toda a sessão.
Arquitetura interna#
| Componente | Responsabilidade |
|---|---|
KeyRemapperStore |
Lê/grava keybindings.json, separado do config.json |
KeyRemapperDialog |
Janela de edição (760×560) com lista pesquisável e captura interativa de tecla |
KeyRemapperManager |
Aplica os bindings customizados na janela raiz do Tk; usado pelo CodisApp na inicialização |
Para redefinir um atalho: localize a ação na lista pesquisável, clique em Capturar, pressione a nova combinação desejada - a janela de captura (320×120) registra a combinação e a salva imediatamente.
🔒 Workspace Trust (src/ui/workspace_trust.py)#
Sistema de segurança acionado automaticamente ao abrir uma pasta nunca aberta antes nesta máquina.
Como funciona#
Ao abrir um workspace novo, o Codis exibe um diálogo de confiança perguntando se o conteúdo da pasta é confiável. Pastas marcadas como não confiáveis têm os seguintes recursos restringidos automaticamente:
| Recurso | Comportamento em pasta não confiável |
|---|---|
| Plugins | Carregados em modo somente-leitura, sem execução de código |
| Execução de tarefas/scripts | Bloqueada |
| LSP | Desabilitado (servidores de linguagem podem executar código arbitrário) |
| Terminal integrado | Exibe aviso visual de modo restrito |
Persistência#
A lista de pastas confiáveis fica em ~/.codis/trusted_workspaces.json. Uma vez confiada, a pasta (e qualquer subpasta dela) não pergunta novamente. Para revogar a confiança de uma pasta, edite ou remova a entrada correspondente nesse arquivo.
Este modelo é equivalente ao "Workspace Trust" do VS Code: protege contra a abertura descuidada de repositórios desconhecidos que poderiam, por exemplo, embutir um
.codis/plugins/malicioso.pyou configurar um LSP apontando para um binário malicioso.
🪟 Panel Detach (src/ui/panel_detach.py)#
Gerencia o destacamento de painéis (Terminal, Output, Git, Debug, Regex, Problems) para janelas flutuantes independentes, arrastáveis e redimensionáveis.
Antes da versão atual, o destacamento só funcionava com o modo K-UI ativo, pois a lógica vivia dentro do controlador holográfico. O PanelDetachManager foi extraído como uma classe independente, instanciada uma única vez na inicialização do CodisApp, e funciona tanto no modo clássico quanto no modo K-UI - incluindo a janela flutuante com moldura holográfica (KFloatWindow), que é reaproveitada de K-UI.
Compartilhar uma única instância entre os dois modos resolve um problema de UX: painéis destacados não são fechados à força quando o usuário alterna o K-UI ligado/desligado - eles continuam abertos normalmente.