;;; funcs.el --- Shell Layer functions File ;; ;; Copyright (c) 2012-2016 Sylvain Benner & Contributors ;; ;; Author: Sylvain Benner ;; 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)))