Как сделать компиляцию в emacs через ALT-M? - PullRequest
0 голосов
/ 28 февраля 2019

Процесс компиляции в emacs очень неактивен, и поэтому я решил сделать его быстрее и удобнее, и у меня возникла проблема только в том, что эта программа (строки кода) не обновляется автоматически, то есть compile-command(после первого запуска), оставайтесь прежними и не изменится без вмешательства, и я решил добавить defin, но мое невежество в lisp остановило меня, результат был неудачным.

Вопрос: Как заставить мою функцию работать правильно, чтобы при каждом новом щелчке ALT-M compile-command был новый.

Что я пытался сделать:

(defun x-recompile (compile-command)
(setq compile-command '(concat "/usr/local/Cellar/gcc/8.3.0/bin/gcc-8 -O2 -Wall -o "
                   (if (file-name-sans-extension buffer-file-name)
                  (shell-quote-argument
                   (file-name-sans-extension buffer-file-name)))
                   " "
                    (if buffer-file-name
                    (shell-quote-argument (buffer-file-name))))))

(define-key global-map "\eM" 'compile)
(define-key global-map "\em" 'x-recompile)

Исходная версия:

(setq compile-command '(concat "/usr/local/Cellar/gcc/8.3.0/bin/gcc-8 -O2 -Wall -o "
                   (if (file-name-sans-extension buffer-file-name)
                  (shell-quote-argument
                   (file-name-sans-extension buffer-file-name)))
                   " "
                    (if buffer-file-name
                    (shell-quote-argument (buffer-file-name)))))
(define-key global-map "\eM" 'compile)
(define-key global-map "\em" 'recompile)

1 Ответ

0 голосов
/ 28 февраля 2019

Я думаю, что самый простой способ сделать это - использовать ловушку режима:

(add-hook 'c-mode-hook
  (lambda ()
    (set (make-local-variable 'compile-command)
         (concat "/usr/local/Cellar/gcc/8.3.0/bin/gcc-8 -O2 -Wall -o "
                 (if (file-name-sans-extension buffer-file-name)
                     (shell-quote-argument
                      (file-name-sans-extension buffer-file-name)))
                 " "
                 (if buffer-file-name
                     (shell-quote-argument (buffer-file-name)))))))

Это установит compile-command, когда вы откроете файл, а затем compile и recompile будут работать надлежащим образом..

  1. Добавьте приведенный выше код к .emacs
  2. Оцените форму
  3. Повторно посетите файл (уничтожьте буфер и снова откройте файл)
  4. Ch v команда компиляции RET , чтобы увидеть значение
  5. Mx компиляция RET или что бы вы ни связали compile с
...