Acho que a parte que está faltando é a forma interactive
. É como o Emacs distingue entre uma função projetada para ser chamada por outras funções e uma função projetada para ser chamada diretamente pelo usuário. Veja o nó nó do Emacs Lisp
Agora, se você ler a definição de ansi-color-apply-on-region
, verá que ela não foi projetada para uso interativo. "ansi-color" é projetado para filtrar a saída comint. No entanto, é fácil criar um wrapper interativo para ele.
(defun ansi-color-apply-on-region-int (beg end)
"interactive version of func"
(interactive "r")
(ansi-color-apply-on-region beg end))
A próxima parte é que você deseja ativar as cores ansi para a extensão .col. Você pode adicionar uma função de gancho ao modo principal que deseja usar para editar esses arquivos. A função será executada sempre que você ligar o modo principal, então você terá que adicionar uma verificação para o sufixo de arquivo apropriado.
Alternativamente, você pode hackear um modo derivado rápido baseado no modo "fundamental".
(define-derived-mode fundamental-ansi-mode fundamental-mode "fundamental ansi"
"Fundamental mode that understands ansi colors."
(require 'ansi-color)
(ansi-color-apply-on-region (point-min) (point-max)))
e associá-lo a essa extensão.
(setq auto-mode-alist
(cons '("\.col\'" . fundamental-ansi-mode) auto-mode-alist))