Um programa Lisp está no modo prog e no modo lisp?

7

Após a leitura (emacs) Program Modes:

A entrada de um modo de linguagem de programação executa as funções personalizadas do Lisp especificadas na variável hook prog-mode-hook, seguidas pelas especificadas no gancho de modo do próprio modo (consulte Modos principais). Por exemplo, entrar no modo C executa os ganchos prog-mode-hooke c-mode-hook. Consulte Ganchos, para obter informações sobre ganchos.

Isso significa que a programação C está sendo executada sob prog-modee c-mode?

É prog-modeum modo universal para todos os programas?

Além disso, implica que prog-modeé um modo principal como c-mode.

Mesmo assim:

Os modos principais são mutuamente exclusivos; cada buffer possui um e apenas um modo principal a qualquer momento.

(de (emacs) Modes)

O que prog-modefaz aqui, é um modo menor, mas afirmado amplamente na parte do modo principal?

Cálculo
fonte

Respostas:

10

Isso significa que a programação C está sendo executada sob prog-modee c-mode?

Não, porque, como você citará mais tarde:

Os modos principais são mutuamente exclusivos; cada buffer possui um e apenas um modo principal a qualquer momento.

Portanto, seu buffer pode estar apenas em um ou outro.

É prog-modeum modo universal para todos os programas?

Não, é um modo pai universal para todos os modos de programação.

Além disso, implica que prog-modeé um modo principal como c-mode.

Sim, prog-modeé derivado de um modo principal normal fundamental-mode. Da mesma forma, c-modeé derivado um modo principal normal prog-mode. A diferença é que, por prog-modesi só, é bastante simples e não se destina a ser ativado diretamente.

O que prog-modefaz aqui, é um modo menor, mas afirmado amplamente na parte do modo principal?

Não, é um modo principal normal. É fornecido como uma convenção para os principais autores do modo derivar seus modos e como uma conveniência para os usuários personalizarem mais facilmente todos os seus modos de programação.

Por exemplo, se um usuário deseja ativar show-trailing-whitespaceem todos os seus modos de programação, ele pode primeiro definir um gancho como o seguinte:

(defun my-show-trailing-space ()
  "Enable `show-trailing-whitespace' in the current buffer."
  (setq show-trailing-whitespace t))

Em vez de adicionar esta função ao gancho de modo de todos os modos de programação que eles usam, assim:

(mapc (lambda (hook)
        (add-hook hook #'my-show-trailing-space))
      '(c-mode-common-hook
        emacs-lisp-mode-hook
        perl-mode-hook
        prolog-mode-hook
        ...))

Em vez disso, eles podem simplesmente adicioná-lo ao gancho de modo do modo pai, ou seja prog-mode-hook:

(add-hook 'prog-mode-hook #'my-show-trailing-space)

Como tal, prog-modefornece configurações comuns para todos os modos de programação derivados dele.

Manjericão
fonte
explicação impressionante, ty.
Cálculo
2
Você pode encontrar mais detalhes sobre modos de derivados e ganchos modo em esta resposta: stackoverflow.com/a/19295380/324105
phils