Ativar modo projétil apenas para arquivos em projetos reais

8

O projétil é muito bom, mas acho difícil ativá-lo apenas em locais onde seria eficaz.

Pelo que entendi, as duas opções padrão são ativá-lo manualmente, como nos ganchos principais, ou ativá-lo globalmente projectile-global-mode. Acho que o primeiro não é amplo o suficiente; Quero poder acessar comandos de projéteis enquanto estiver visualizando qualquer arquivo em um projeto, independentemente do seu tipo. Mas ativar o modo globalmente é muito amplo; ele fica ligado mesmo quando visitam tais manifestamente diretórios não-projeto como o meu diretório home, /tmp, /etc, etc.

Existe uma maneira padrão para ativar projectile-modesomente quando visitar um arquivo que vive em um projeto real, como pode ser determinado por, digamos, verificando a existência de um .git, .svn, etc, diretório em algum diretório ancestral do arquivo atual?

Sean
fonte
A verificação da existência de .git, .svn... deve ser o padrão. Talvez você tenha projectile-require-project-rootdefinido nil.
Tu Do
Acabei de verificar e seu valor é t. Mas o modo ainda está ativado, /etcpor exemplo.
Sean
1
Qual é a sua versão do projétil? Quando você executa projectile-find-filesesses diretórios que não são do projeto, o Projectile simplesmente fornece a mensagem "Você não está em um projeto". Tem certeza de que executa o comando certo?
Tu Do
2
Ah, ok, eu vejo isso. Mas ainda vejo Projectile[etc]na linha de modo quando abro /etc. Ele ocupa um espaço valioso na linha de modo, e eu prefiro não ativar o modo em diretórios que não são de projeto.
21415 Sean

Respostas:

11

Então, é sobre a modelagem. Você pode configurar projectile-mode-linepara verificar se você está em uma raiz do projeto; nesse caso, é exibido na modeline; caso contrário, não exibe nada:

(setq projectile-mode-line
      '(:eval (if (projectile-project-p)
                  (format " Projectile[%s]"
                          (projectile-project-name))
                "")))
Tu Do
fonte
4
Essa mudança deve estar no próprio projétil.
abo-abo
Isso é definitivamente útil, mas o modo ainda estaria tecnicamente ativo, certo? Idealmente, o modo nem seria ativado nesses casos.
21415 Sean
2
@Sean para que serve? Há uma razão para que seja um modo secundário global. Existe algo que atrapalha se o modo global estiver ativo, além da modelagem? Quando o modo global está ativo, tudo o que faz é fornecer as combinações de teclas do projétil.
Tu Do
2
@ abo-abo Eu também acho que deveria funcionar assim, em vez de mostrar a corrente default-directory. Eu vou fazer um PR.
Tu Do
Coloquei isso no meu arquivo init e, eventualmente, notei uma tonelada de erros no *Messages*buffer, porque projectile-project-rootgera uma exceção se chamada de um diretório que não é do projeto. Portanto, essa chamada de função precisa ser agrupada em um condition-casee também projectile-require-project-rootprecisa ser vinculada t.
21415 Sean