.emacs.d / configs / cfg_shell.el

; various shells
(require 'python)
(add-hook 'shell-output-filter-functions
	  '(lambda () "" 
	     (when (shell-interactive-process)
	       (python-pdbtrack-set-tracked-buffer 
            (buffer-substring (shell-beginning-of-output) shell-last-output-end)))))

(global-unset-key (kbd "s-s"))
(defun switch-to-shell(n) ()
  (interactive)
  (if (get-buffer (concat "*shell*<" n ">"))
      (switch-to-buffer (concat "*shell*<" n ">"))
    (shell (concat "*shell*<" n ">")))
)

(global-set-key (kbd "s-s 1") (lambda () (interactive) (switch-to-shell "1")))
(global-set-key (kbd "s-s 2") (lambda () (interactive) (switch-to-shell "2")))
(global-set-key (kbd "s-s 3") (lambda () (interactive) (switch-to-shell "3")))
(global-set-key (kbd "s-s 4") (lambda () (interactive) (switch-to-shell "4")))
(global-set-key (kbd "s-s 5") (lambda () (interactive) (switch-to-shell "5")))
(global-set-key (kbd "s-s 6") (lambda () (interactive) (switch-to-shell "6")))
(global-set-key (kbd "s-s 7") (lambda () (interactive) (switch-to-shell "7")))
(global-set-key (kbd "s-s 8") (lambda () (interactive) (switch-to-shell "8")))
(global-set-key (kbd "s-s 9") (lambda () (interactive) (switch-to-shell "9")))
(global-set-key (kbd "s-s 0") 'shell)
(global-set-key (kbd "s-s e") 'eshell)

(global-set-key (kbd "C-z x 1") (lambda () (interactive) (switch-to-shell "1")))
(global-set-key (kbd "C-z x 2") (lambda () (interactive) (switch-to-shell "2")))
(global-set-key (kbd "C-z x 3") (lambda () (interactive) (switch-to-shell "3")))
(global-set-key (kbd "C-z x 4") (lambda () (interactive) (switch-to-shell "4")))
(global-set-key (kbd "C-z x 5") (lambda () (interactive) (switch-to-shell "5")))
(global-set-key (kbd "C-z x 6") (lambda () (interactive) (switch-to-shell "6")))
(global-set-key (kbd "C-z x 7") (lambda () (interactive) (switch-to-shell "7")))
(global-set-key (kbd "C-z x 8") (lambda () (interactive) (switch-to-shell "8")))
(global-set-key (kbd "C-z x 9") (lambda () (interactive) (switch-to-shell "9")))
(global-set-key (kbd "C-z x 0") 'shell)


; ansi-term
(defun switch-to-ansi-term(n) ()
       (interactive)
       (setq ansi-term-color-vector
             [term term-color-black term-color-red term-color-green term-color-yellow 
                   term-color-blue term-color-magenta term-color-cyan term-color-white])
       (if (get-buffer (concat "**ansi-term<" n ">**"))
           (switch-to-buffer (concat "**ansi-term<" n ">**"))
         (ansi-term "/bin/zsh" (concat "*ansi-term<" n ">*")))
       )

(global-set-key [(control meta menu)] 'pylookup-lookup)
(global-set-key (kbd "C-x a 1") (lambda () (interactive) (switch-to-ansi-term "1")))
(global-set-key (kbd "C-x a 2") (lambda () (interactive) (switch-to-ansi-term "2")))
(global-set-key (kbd "C-x a 3") (lambda () (interactive) (switch-to-ansi-term "3")))
(global-set-key (kbd "C-x a 4") (lambda () (interactive) (switch-to-ansi-term "4")))
(global-set-key (kbd "C-x a 5") (lambda () (interactive) (switch-to-ansi-term "5")))
(global-set-key (kbd "C-x a 6") (lambda () (interactive) (switch-to-ansi-term "6")))
(global-set-key (kbd "C-x a 7") (lambda () (interactive) (switch-to-ansi-term "7")))
(global-set-key (kbd "C-x a 8") (lambda () (interactive) (switch-to-ansi-term "8")))
(global-set-key (kbd "C-x a 9") (lambda () (interactive) (switch-to-ansi-term "9")))
(global-set-key (kbd "C-x a 0") 'ansi-term)

;; http://emacs.stackexchange.com/questions/5585/how-to-copy-command-output-in-ansi-term-mode
(require 'term)
(defun jnm/term-toggle-mode ()
  "Toggles term between line mode and char mode"
  (interactive)
  (if (term-in-line-mode)
      (term-char-mode)
    (term-line-mode)))

(define-key term-mode-map (kbd "C-c C-j") 'jnm/term-toggle-mode)
(define-key term-mode-map (kbd "C-c C-k") 'jnm/term-toggle-mode)

(define-key term-raw-map (kbd "C-c C-j") 'jnm/term-toggle-mode)
(define-key term-raw-map (kbd "C-c C-k") 'jnm/term-toggle-mode)


(global-set-key (kbd "s-s t") '(lambda ()
                                 (interactive)
                                 (call-process "terminator" nil 0 nil)))

(defun my-shell-mode-hook ()
  (hide-trailing-whitespace)
  )

(add-hook 'shell-mode-hook 'my-shell-mode-hook)
(add-hook 'term-mode-hook 'my-shell-mode-hook)

;; from http://stackoverflow.com/questions/13185729/npm-dont-display-prompt-correctly-under-emacs-eshell
;; to filter out npm special chars
(add-to-list
         'comint-preoutput-filter-functions
         (lambda (output)
           (replace-regexp-in-string "\033\[[0-9]+[AGK]" "" output)))

(defun ansible-highlight()
  "Hightlight ok, failed, changed lines"
  (interactive)
  (highlight-lines-matching-regexp "^ok:" 'hi-green-b)
  (highlight-lines-matching-regexp "failed:" 'hi-red-b)
  (highlight-lines-matching-regexp "changed:" 'font-lock-warning-face)
  )

(defun sql-highlight()
  "SQL updates, inserts"
  (interactive)
  (highlight-lines-matching-regexp "INSERT\sINTO\s" 'hi-pink)
  (highlight-lines-matching-regexp "DELETE\sFROM\s" 'hi-red-b)
  (highlight-lines-matching-regexp "UPDATE\s" 'hi-yellow)
  )