2010-08-28 2 views
7

Вот что я хотел бы сделать: когда Cc Cl нажата, новое окно терминала запускается, если уже нет окон терминала, а затем в этом терминале gcc вызывается с некоторыми флагами и файл текущего буфера. Как мне это сделать?emacs keybinding для компиляции файла C

ответ

11

Постарайся встроенный:

M-x compile gcc ... 

compile не привязан к каким-либо ключей по умолчанию, но вы могли бы сделать что-то вроде:

(add-hook 'c-mode-common-hook 
      (lambda() (define-key c-mode-base-map (kbd "C-c C-l") 'compile)))) 

Там куча пакетов людей написали вокруг компиляции в Emacs Wiki. Отъезд SmartCompile, CompileCommand, а также категория Programmer Utils.

Преимущество использования M-x compile ... над просто запустив его в «Терминал» является то, что вы получите C-х ` (ака next-error), который позволит вам перейти к файлу и строке, вызвавшей команду ошибки. И есть команда M-x recompile, которая делает то, что вы ожидаете. И, конечно же, как и все команды Emacs, команда compile хранит историю вызовов компиляции, и вы можете просмотреть историю с помощью M-p и M-n.

+5

Следует отметить, что после запуска 'M-x compile', вы можете использовать' M-x recompile' для запуска той же команды, что и в прошлый раз. – alternative

0

Я именно это запускать мои тесты перл единицы в соседнем eshell: http://github.com/jrockway/elisp/blob/master/_local/cperl-extras.el#L15

Общая форма код:

(defun run-in-eshell (cmd use-hidden-eshell-p) 
    (with-current-buffer (eproject-eshell-cd-here use-hidden-eshell-p) 
    (eshell-preinput-scroll-to-bottom) 
    (goto-char (point-max)) 
    (insert cmd) 
    (eshell-send-input nil t) 
    (goto-char (point-max)) 
    (ignore-errors 
     (set-window-point (get-buffer-window) (point-max))))) 

eproject-eshell-cd-here является то, что на самом деле находит буфер eshell. Если вы не хотите устанавливать eproject, то вы можете просто пропустить буферы и найти его сами.

Смежные вопросы