Modo de recuo personalizado com guias para o Emacs

1

Eu adoro o Emacs, mas meus poderes de personalização são fracos e agradeço qualquer ajuda sobre isso.

Minhas configurações padrão são nunca usar paradas de tabulação literais ( indent-tabs-mode nil ). No entanto, para um projeto específico, eu preciso usar paradas de tabulação e preciso exibir guias com espaçamento 4 (não o padrão 8) e quero que tab-stop-list seja 4, 8, 12, ....

Agora, a pergunta: Como posso definir (no meu ~/.emacs.d ) uma única função que eu posso M-x chamar de dentro de qualquer modo em que eu já esteja, para que essas configurações específicas sejam substituídas por esses requisitos? Alternativamente, como posso fazer dessas configurações um modo secundário que eu possa ativar opcionalmente dentro de um determinado modo principal (digamos algum modo PHP fictício (que eu não encontrei ainda))?

    
por Kerrek SB 04.09.2011 / 13:04

3 respostas

5
(setq-default 
          tab-width 4                                     ; Set tab stops
          tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44
                            48 52 56 60 64 68 72 76 80 84)
          )

coloque isso no seu .emacs.d/init.el e use M-i para ir para a próxima posição da guia

ATUALIZAÇÃO:

(defun my-tab-width ()
  "set tab-width as local variable"
  (interactive)
  (progn
    (set (make-local-variable 'tab-width) 4)
     (set (make-local-variable 'tab-stop-list)
     '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84))))

chame essa função iterativamente com M-x ou coloque um gancho no modo desejado para carregar automaticamente

(add-hook 'php-mode-hook 'my-tab-width)
    
por 04.09.2011 / 13:56
2

Você provavelmente não precisa criar um modo. Você só deseja definir variáveis ( indent-tabs-mode , tab-width e tab-stop-list ) para um ou vários arquivos.

Isso também foi solicitado em esta pergunta sobre estouro de pilha .

Minha sugestão: Crie um arquivo ".dir-locals.el" no diretório desse projeto com este conteúdo:

((nil . ((tab-width . 4)
         (indent-tabs-mode . t)
         (tab-stop-list . (4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84)))))

Isso definirá essas três variáveis para todos os arquivos nessa pasta.

Mas você precisa ter certeza de que seus ganchos de modo / arquivo também não definem essas variáveis. Configurá-los diretamente dessa maneira sempre terá prioridade, não importa o que você configure.

E lembre-se de que essas variáveis afetam apenas o recuo de texto puro. Os modos de programação geralmente têm suas próprias variáveis para recuo (por exemplo, c-basic-offset ).

    
por 04.09.2011 / 14:54
0

Eu não sou especialista em eLISP, mas você pode adicionar algo como

(add-hook 'your-minor-mode '(set-variable 'tab-width 4))

para o seu .emacs

    
por 04.09.2011 / 13:44

Tags