spacemacs/layers/+tools/shell/funcs.el
2016-05-30 21:02:59 -04:00

77 lines
3 KiB
EmacsLisp

;;; funcs.el --- Shell Layer functions File
;;
;; Copyright (c) 2012-2016 Sylvain Benner & Contributors
;;
;; Author: Sylvain Benner <sylvain.benner@gmail.com>
;; URL: https://github.com/syl20bnr/spacemacs
;;
;; This file is not part of GNU Emacs.
;;
;;; License: GPLv3
(defun spacemacs/projectile-shell-pop ()
"Open a term buffer at projectile project root."
(interactive)
(let ((default-directory (projectile-project-root)))
(call-interactively 'spacemacs/default-pop-shell)))
(defun spacemacs/disable-hl-line-mode ()
"Locally disable global-hl-line-mode"
(interactive)
(setq-local global-hl-line-mode nil))
(defun spacemacs/init-eshell-xterm-color ()
"Initialize xterm coloring for eshell"
(setq-local xterm-color-preserve-properties t)
(make-local-variable 'eshell-preoutput-filter-functions)
(add-hook 'eshell-preoutput-filter-functions 'xterm-color-filter)
(setq-local eshell-output-filter-functions
(remove 'eshell-handle-ansi-color
eshell-output-filter-functions)))
(defun ansi-term-handle-close ()
"Close current term buffer when `exit' from term buffer."
(when (ignore-errors (get-buffer-process (current-buffer)))
(set-process-sentinel (get-buffer-process (current-buffer))
(lambda (proc change)
(when (string-match "\\(finished\\|exited\\)"
change)
(kill-buffer (process-buffer proc))
(when (> (count-windows) 1)
(delete-window)))))))
(defun spacemacs/default-pop-shell ()
"Open the default shell in a popup."
(interactive)
(let ((shell (if (eq 'multi-term shell-default-shell)
'multiterm
shell-default-shell)))
(call-interactively (intern (format "spacemacs/shell-pop-%S" shell)))))
(defmacro make-shell-pop-command (func &optional shell)
"Create a function to open a shell via the function FUNC.
SHELL is the SHELL function to use (i.e. when FUNC represents a terminal)."
(let* ((name (symbol-name func)))
`(defun ,(intern (concat "spacemacs/shell-pop-" name)) (index)
,(format (concat "Toggle a popup window with `%S'.\n"
"Multiple shells can be opened with a numerical prefix "
"argument. Using the universal prefix argument will "
"open the shell in the current buffer instead of a "
"popup buffer.") func)
(interactive "P")
(require 'shell-pop)
(if (equal '(4) index)
;; no popup
(,func ,shell)
(shell-pop--set-shell-type
'shell-pop-shell-type
(backquote (,name
,(concat "*" name "*")
(lambda nil (,func ,shell)))))
(shell-pop index)))))
(defun projectile-multi-term-in-root ()
"Invoke `multi-term' in the project's root."
(interactive)
(projectile-with-default-dir (projectile-project-root) (multi-term)))