2010-08-28 12 views
7

Ecco cosa mi piacerebbe fare: quando viene premuto Cc Cl, viene lanciata una nuova finestra di terminale se non c'è già una finestra di terminale, quindi, in quel terminale, gcc viene richiamato con alcune bandiere e il file del buffer corrente. Come potrei farlo?emacs keybinding per compilare il file C

risposta

11

provare il costruito in:

M-x compile gcc ... 

compile non è legata a nessuna chiavi di default, ma si poteva fare qualcosa di simile:

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

ci sono un sacco di pacchetti persone hanno scritto intorno alla compilazione su Emacs Wiki. Controlla SmartCompile, CompileCommand e la categoria Programmer Utils.

Il vantaggio di utilizzare M-x compile ... sopra solo in esecuzione in un "terminale" è che si ottiene C-x ` (aka next-error) che vi passare al file e la linea che ha causato il comando di errore. E c'è il comando M-x ricompilare che fa quello che ti aspetteresti. E, naturalmente, come tutti i comandi di Emacs, il comando compile mantiene una cronologia delle chiamate di compilazione e puoi scorrere la cronologia con M-p e M-n.

+5

Si noti che dopo aver eseguito 'M-x compile' una volta è possibile utilizzare' M-x ricompilare' per eseguire lo stesso comando dell'ultima volta. – alternative

0

faccio esattamente questo di eseguire il mio test di unità perl in un vicino eshell: http://github.com/jrockway/elisp/blob/master/_local/cperl-extras.el#L15

La forma generale del codice è:

(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 è ciò che in realtà trova il buffer eshell. Se non si desidera installare eproject, è possibile semplicemente effettuare il ciclo attraverso i buffer e trovarlo da soli.