はじめに

以前から, Emacs の shell 環境として eshell をつかいつづけてきた.

だいたい, ノウハウがまとまりつつあるので, ここらでスナップショットと して設定をメモしておこうと思う.

Eshell 固有

prompt のフォーマット

prompt のフォーマットを自分独自のものにする.

(setq eshell-prompt-function
      (lambda ()
        (concat "[tsu-nera"
                (eshell/pwd)
                (if (= (user-uid) 0) "]\n# " "]\n$ "))))

eshell alias

eshell の alias 設定

eshell 上では eshell/hoge というコマンドは hoge に置き換えられる.

(setq eshell-command-aliases-list
      (append
       (list
        (list "ll" "ls -ltr")
        (list "la" "ls -a")
        (list "o" "xdg-open")
        (list "emacs" "find-file $1")
        (list "m" "find-file $1")
        (list "mc" "find-file $1")
        (list "d" "dired .")
        (list "l" "eshell/less $1"))))

eshell からファイルを開く.

find-file を利用すると, emacs [ファイル名] というかたちでファイル を開くことができる.

(list "emacs" "find-file $1")
(list "m" "find-file $1")
(list "mc" "find-file $1")

eshell から dired を開く.

(list "d" "dired .")

eshell から less を開く

独自巻数を追加.

;; written by Stefan Reichoer <reichoer@web.de>
(defun eshell/less (&rest args)
  "Invoke `view-file' on the file.
\"less +42 foo\" also goes to line 42 in the buffer."
  (interactive)
  (while args
    (if (string-match "\\`\\+\\([0-9]+\\)\\'" (car args))
    (let* ((line (string-to-number (match-string 1 (pop args))))
           (file (pop args)))
      (view-file file)
      (goto-line line))
      (view-file (pop args)))))

新しいシェルを開く

Eshell を複数起動するためには, 一工夫必要.

(defun eshell/make-new-eshell (name)
  "Create a shell buffer named NAME."
  (interactive "sName: ")
  (setq name (concat "$" name))
  (eshell)
  (rename-buffer name))

eshell with helm

Eshell と helm を組合せ.

つかいかた

(use-package helm-eshell
  :init
  (add-hook 'eshell-mode-hook
        #'(lambda ()
        (define-key eshell-mode-map [remap eshell-pcomplete] 'helm-esh-pcomplete)))
  (add-hook 'eshell-mode-hook
        #'(lambda ()
                (define-key eshell-mode-map (kbd "M-p") 'helm-eshell-history))))

shell 共通

ここからは, eshell 以外でも利用できるものを.

shell-toggle

現在ページに移動してでシェルを起動する.

(require 'shell-toggle)
;; eshell をつかう.
(setq shell-toggle-launch-shell 'shell-toggle-eshell)

;; フルスクリーンで切り替え
(setq shell-toggle-full-screen-window-only t)

(global-set-key [M-f1] 'shell-toggle)
(global-set-key [C-f1] 'shell-toggle-cd)

shell-pop

シェルをポップアップ.

設定すると, 下からピョコットシェルがでてくるので便利.

(require 'shell-pop)'

(custom-set-variables
 '(shell-pop-default-directory "~/")
 '(shell-pop-shell-type (quote ("eshell" "*eshell*"
                                (lambda nil (eshell shell-pop-term-shell)))))
 '(shell-pop-term-shell "/usr/bin/zsh")
 '(shell-pop-universal-key "C-t")
 '(shell-pop-window-height 30)
 '(shell-pop-full-span t)
 '(shell-pop-window-position "bottom"))

exec-path-from-shell

環境変数 PATH を引き継ぐ.

(require 'exec-path-from-shell)
(exec-path-from-shell-initialize)

Emacs の起動フォルダを変更する.

C-x C-f で開くディレクトリがデフォルト. Windows だと, Emacs の起動ディレクトリになってしまう.

default-directory を利用する

(when windows-p
  (setq default-directory "C:/cygwin64/home/tsu-nera"))

term-run

interactive なターミナルアプリを動かす.

これで, ますます Emacs に引きこもれる.

(require 'term-run)

(defun term-run-alsamixer ()
  (interactive)
  (term-run-shell-command "alsamixer"))