From 903067e0ef19166b4569cd33989860550b815841 Mon Sep 17 00:00:00 2001
From: Valentin Gehrke <madmaurice@zom.bi>
Date: Wed, 24 May 2017 12:41:33 +0200
Subject: [PATCH] reasonable term windows

---
 emacs/.emacs | 74 ++++++++++++++++++----------------------------------
 1 file changed, 25 insertions(+), 49 deletions(-)

diff --git a/emacs/.emacs b/emacs/.emacs
index 7b72730..e21dc5a 100644
--- a/emacs/.emacs
+++ b/emacs/.emacs
@@ -37,6 +37,13 @@
    (quote
 	(swiper neotree centered-cursor-mode ivy avy heroku-theme auto-complete use-package yasnippet evil-surround org evil-magit magit makefile-runner evil)))
  '(scroll-bar-mode nil)
+ '(shell-pop-shell-type
+   (quote
+	("ansi-term" "*ansi-term*"
+	 (lambda nil
+	   (ansi-term shell-pop-term-shell)))))
+ '(shell-pop-window-position "top")
+ '(shell-pop-window-size 20)
  '(tool-bar-mode nil))
 (custom-set-faces
  ;; custom-set-faces was added by Custom.
@@ -190,33 +197,11 @@
 ;; Easy terminal
 (setq my/default-shell (or (executable-find "zsh") (executable-find "bash")))
 
-(defun term-split ()
-  "creates terminal window below"
-  (interactive)
-  (let ((window (split-window-below -7)))
-    (select-window window)
-    (term my/default-shell)
-	(set-window-dedicated-p window t)))
-;
-;(use-package term
-;  :bind ("C-x t" . term-split))
-;
-;(defun term-handle-exit--close-buffer (&rest args)
-;  (let ((term-window (get-buffer-window "*terminal*")))
-;	(when (and term-window (window-dedicated-p term-window))
-;	  (delete-window term-window))))
-
-;(advice-add 'term-handle-exit :after #'term-handle-exit--close-buffer)
-
-;(add-to-list 'display-buffer-alist
-;	     '("\\*terminal\\*" display-buffer-pop-up-window))
-
-(defun my/term ()
-  (interactive)
-  (term my/default-shell))
-
-(use-package term
-  :bind ("C-x t" . my/term))
+(use-package shell-pop
+  :ensure t
+  :bind ("C-x t" . shell-pop)
+  :config
+  (setq-default shell-pop-term-shell my/default-shell))
 
 ;; tabbing (doesn't really work yet)
 (setq-default indent-tabs-mode t)
@@ -229,28 +214,19 @@
 ;; compilation buffer
 ; Set buffer scrolling
 (setq compilation-scroll-output 'first-error)
-
-; kill window if successfull
-;(defun bury-compile-buffer-if-successful (buffer string)
-; "Bury a compilation buffer if succeeded without warnings "
-; (when (and
-;         (buffer-live-p buffer)
-;         (string-match "compilation" (buffer-name buffer))
-;         (string-match "finished" string)
-;         (not
-;          (with-current-buffer buffer
-;            (goto-char (point-min))
-;            (search-forward "warning" nil t))))
-;    (run-with-timer 1 nil
-;                    (lambda (buf)
-;                      (bury-buffer buf)
-;                      (switch-to-prev-buffer (get-buffer-window buf) 'kill))
-;                    buffer)))
-;(add-hook 'compilation-finish-functions 'bury-compile-buffer-if-successful)
-; set window height
 (setq compilation-window-height 10)
 
-(defun my-compilation-hook ()
+(defun my/compilation-bury-buffer-without-error (buffer string)
+  (cond ((string-match "finished" string)
+		 (message "Build maybe successful: closing window.")
+		 (run-with-timer 3 nil
+						 'delete-window
+						 (get-buffer-window buffer t)))
+		(t (message "Compilation exited abnormaly: %s" string))))
+
+(setq compilation-finish-function 'my/compilation-bury-buffer-without-error)
+  
+(defun my/setup-compilation-window ()
   (when (not (get-buffer-window "*compilation*"))
     (save-selected-window
       (save-excursion
@@ -259,7 +235,7 @@
           (select-window w)
           (switch-to-buffer "*compilation*")
           (shrink-window (- h compilation-window-height)))))))
-(add-hook 'compilation-mode-hook 'my-compilation-hook)
+(add-hook 'compilation-mode-hook 'my/setup-compilation-window)
 
 ;; Window movement
 ; Old keys
@@ -314,7 +290,7 @@
 (add-to-list 'display-buffer-alist
 	     '("*Apropos*" display-buffer-same-window))
 (add-to-list 'display-buffer-alist
-	     '("*Help*" display-buffer-same-window))
+	     '("*Help*" display-buffer-in-side-window))
 
 ;; Change all prompts to y or n
 (fset 'yes-or-no-p 'y-or-n-p)