仅在必要时才能看到编辑屏幕

时间:2015-10-23 08:08:29

标签: emacs

我已将(global-set-key "\C-x\C-m" 'compile)放入.emacs。因此,在Emacs下,如果我使用快捷方式C-x C-m C-m,1)我会被问到是否要保存修改; 2)将在Emacs下打开另一个缓冲区,其中显示编译(此外,它没有系统地显示编译结束,我们需要手动浏览)。

是否可以不让包含编辑的缓冲区干扰?

理想情况下,我希望C-x C-m C-m切换编译(我希望默认保存修改)。如果没有错误,我不想看到编辑屏幕;否则,我会找到屏幕并看到错误信息。

有谁知道是否可以设置它?

修改1:

根据@maxy的回答,我修改了.emacs并做了一些测试。奇怪的是,有两种情况:

1)如果先前的编译成功,另一个编译将生成一个缓冲区,然后在编译后不会删除缓冲区:

enter image description here

2)如果先前的编译没有成功,在删除编译缓冲区并纠正tex文件中的错误后,另一个编译将生成一个缓冲区,然后在编译后删除缓冲区。

有谁知道如何修复它?

编辑2:

我知道了。在@maxy的答案中,将(run-at-time 0.5 nil 'delete-windows-on buf)更改为(run-at-time 0.5 nil 'delete-other-windows)即可。

2 个答案:

答案 0 :(得分:2)

我很久以前就解决了这个问题,我认为这是默认的emacs。可悲的是,事实并非如此。来自我的emacs.el

;; get rid of compilation window on success
;; source: http://www.bloomington.in.us/~brutt/emacs-c-dev.html [dead link]
(setq compilation-finish-function
      (lambda (buf str)
        (if (string-match "exited abnormally" str)
            ;;there were errors
            ;(message "compilation errors, press C-x ` to visit")
            (message "ERRORs while compiling.")
          ;;no errors, make the compilation window go away in 0.5 seconds
          (run-at-time 0.5 nil 'delete-windows-on buf)
          (message "Compilation done."))))

另外,请使用M-x customize-variable

 '(compilation-ask-about-save nil)
 '(compilation-context-lines 0)
 '(compilation-scroll-output t)
 '(compilation-window-height 21)

如果您使用的是swbuff,请参阅swbuff-exclude-buffer-regexps的示例,忽略最近使用的缓冲区列表中的*compilation*缓冲区。

答案 1 :(得分:1)

EmacsWiki,将以下内容放入.emacs:

;; If there were no compilation errors, delete the compilation window
(setq compilation-exit-message-function
      (lambda (status code msg)
        ;; If M-x compile exists with a 0
        (when (and (eq status 'exit) (zerop code))
          ;; then bury the *compilation* buffer, so that C-x b doesn't go there
          (bury-buffer "*compilation*")
          ;; and return to whatever were looking at before
          (replace-buffer-in-windows "*compilation*"))
        ;; Always return the anticipated result of compilation-exit-message-function
        (cons msg code)))

这实际上会短暂显示窗口,但如果没有错误则立即删除它,恢复它所替换的任何窗口。

此外,您可以使Emacs滚动到第一个错误或滚动到编译缓冲区的末尾,如下所示:

(require 'cl)

(setq
 ;; Either
 compilation-scroll-output 'first-error      ;; scroll until first error
 ;; or
 compilation-scroll-output 't                ;; scroll to bottom
)