Ocasionalmente, começo a abrir um arquivo e, antes de selecioná-lo, por algum motivo, executo C-x oantes de responder ao prompt. Então, toda vez que eu tento executar find-file
novamente, ele reclama que o Command tentou usar o minibuffer enquanto estava no minibuffer . No entanto, se eu usar um comando como isearch-forward-regexp
(mesmo se já estiver em um find-file
prompt), o erro não será gerado e não posso voltar ao minibuffer usando other-window
.
Por que alguns prompts atualizam temporariamente o minibuffer de modo que o other-window
considere um possível alvo e outros não?
Só para esclarecer, não estou perguntando como se soltar.
Originalmente, quando eu encontrava isso, eu alternava para o minibuffer e fazia Esc Esc Escou C-gescapava do prompt, para poder iniciar um novo comando que usa o minibuffer. No entanto, ao refletir sobre essa questão, percebi que abort-recursive-edit
( C-]) encerraria esse minibuffer em andamento sem ter que fazer other-window
+ keyboard-quit
.
Ainda assim, não tenho muita certeza para que serve o caso de uso original. Talvez isso tenha como objetivo ajudar a colar a cópia em um prompt de minibuffer ou auxiliar na execução de um comando no meio de uma macro?
O que eu não quero saber é se existe uma maneira de desativar este recursividade do jeito que está com isearch
. É isearch
seguro porque está usando evento de leitura em vez de um prompt de bloqueio? Existe um gancho para disparar abort-recursive-edit
ao sair do minibuffer?
TL; DR
- Por que alguns comandos do minibuffer atualizam o minibuffer para um destino
other-window
e bloqueiam a execução de novos comandos do minibuffer, enquanto outros, comoisearch
, não? - Existe uma maneira de desativar isto?
- Qual é o caso de uso pretendido desse recurso?
fonte
C-]
aborta um nível de minibuffer, sim. O Isearch não usa o minibuffer. E o que " preso no prompt " tem a ver com o restante do que você descreve? Você não precisa usarswitch-window
, em tais contextos. Mas não está claro o que você está tentando fazer. Tente separar as várias partes da sua descrição e tente criar uma única pergunta.enable-recursive-minibuffers
parat
evitar que o comando tente usar o minibuffer enquanto estiver na mensagem do minibuffer . Pode ajudar a esclarecer a pergunta original, se você a postourecursive-edit
separadamente.Respostas:
find-file
é um desses comandos. A leitura da entrada do minibuffer "ativa" a janela do minibuffer, e é por isso que você pode alternar para ela com oother-window
comando Interativoisearch
é especial porque é implementado como um modo secundário. Tecnicamente, ele não lê sua string de pesquisa no minibuffer, mas captura as teclas pressionadas enquanto você digita e as repete no minibuffermessage
. É por isso que você vê umother-window
comportamento diferente.find-file
, modificando a função armazenada emread-file-name-function
. Eu não tentei aconselhar a função com base na resposta do @ kaushalmodi, mas se isso funcionar, atualizarei isso.fonte
O trecho abaixo [ Fonte ] interrompe a edição recursiva quando o foco se afasta do minibuffer. Isso evita as ocasiões irritantes em que
C-g
pressionar repetidamente não edita o mini-buffer quando o foco do cursor sai dele.fonte
Drew já comentou sobre isso, mas ...
isearch
1 realmente não usar o minibuffer, o que provavelmente é responsável por parte de sua confusão. Ele exibe itens na área de eco (que fica na mesma janela do minibuffer, mas na verdade não é o minibuffer).Sendo esse o caso, a noção de alternar de e para o mini-buffer durante a execução de uma pesquisa não faz nenhum sentido.
1 comandos Ignorando como
isearch-edit-string
o que fazer usar o minibuffer, mas não fazem parte dos mais básicos isearch workflow.fonte