Pergunta

Depois de abrir um arquivo no emacs (em um sistema de arquivos com túnel ssh e montado em sshfs), recebo links simbólicos como este:

.#jobid.php -> ddh@localhost.localdomain.31678:1260471633

Determinamos que estes são arquivos emacs LOCK.

O sistema de arquivos sshfs é montado com follow_symlinks e transform_symlinks, mas parece se recusar a retornar o link 'texto' via readlink, então o emacs não os remove.

Foi útil?

Solução

Caso você esteja procurando documentação, o Emacs se refere a esses arquivos como bloqueios de arquivo.

Em vez de usar o SSHFS/FUSE, você pode acessar arquivos remotos diretamente do EMACS:

C-x C-f /ssh:host.name:/path/to/file RET

O EMACS não cria bloqueios de arquivos ao editar arquivos remotos dessa maneira- pesquise "TRAMP" para obter mais informações sobre a edição de arquivos remotos. (Infelizmente, acho que os Emacs não sabem dizer que seu fusível MountPoint é apoiado por um sistema de arquivos remoto ou que a criação de bloqueios de arquivos é problemática.)

Outras dicas

Esses links simbólicos são usados ​​pelo emacs para evitar que múltiplas instâncias do emacs modifiquem o mesmo arquivo.O link simbólico normalmente desaparece quando você salva o arquivo, mas parece que o fuse-sshfs está interferindo nesse processo, pois o alvo do link simbólico não é um arquivo real (não era para ser, mas o sshfs espera isso).

Infelizmente, não conheço uma maneira de desabilitar esse recurso ou forçar o emacs a armazenar esses links simbólicos em um diretório diferente (eu uso o emacs com pouca frequência e não encontrei nada no manual), então talvez você precise excluir periodicamente receio manualmente.

o follow_symlinks A opção força os links simulados no sistema remoto a aparecer como arquivos reais. Isso é útil quando o symlink refere -se a um alvo no host remoto fora do diretório que é montado via SSHFS, mas quebra as suposições da Emacs porque, quando o Emacs cria um link simbólico, espera que o mesmo caminho pareça um symlink mais tarde.

No entanto, você deve poder fazer com que todos os links simbólicos no host remoto funcionem corretamente enquanto ainda aparecem como síndulos usando o transform_symlinks opção (e não follow_symlinks) e sempre montando a raiz do sistema remoto (em vez de apenas seu diretório doméstico ou algo assim). Isso deve permitir que os Emacs abusem de links simbilizados como arquivos enquanto ainda tornam acessíveis os alvos remotos do Symlink.

Esses symlinks são criados pelo EMACS quando um buffer está visitando um arquivo e impedem que duas instâncias do EMACS editem o mesmo arquivo (como mencionado em outras respostas). Emacs refere -se a isso como "detecção de conflito".

Infelizmente, a única maneira de impedir esse comportamento no GNU Emacs é no momento da compilação. Os documentos de origem descrevem como fazer isso alterando um cabeçalho.

Isso ocorre porque as funções de buffer de bloqueio e desbloqueio são primitivas e são chamadas por outros primitivos para criar esses symbrinks. Em versões mais antigas do EMACS, elas podem ser redefinidas ou defalias em ELISP, mas um primitivo não notará essa alteração.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top