76 lines
3 KiB
EmacsLisp
76 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)))
|