Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2010-12-29

日常LISP (3) 常用シェルをCLISPに その2

| 11:41 | 日常LISP (3) 常用シェルをCLISPに その2 - わだばLisperになる を含むブックマーク はてなブックマーク - 日常LISP (3) 常用シェルをCLISPに その2 - わだばLisperになる

シェルをCLISPにしてみる実験の経過報告。

  • まだ全部をCLISPにする、というのは辛い
  • パイプの問題をどうするか
  • プログラミングが簡単にできるので、部分的には、既存のシェルより楽になるところもある
  • やっぱりEmacsのシェルモードから入力すると楽
  • 履歴機能をもう少し充実させたい

といったところです。

改善点は、

  • 括弧/ダブルクォートの対を簡単に入力できるようにした
  • ユーティリティ関数を定義している

というところです。

括弧の入力支援については、

.inputrcに

"\eL": "()\C-b"
"\e\"": "\"\"\C-b"

というようなものを追加しました。

m-"とで、""が入力され、m-sh-Lで()が入力されます。括弧の方はちょっとイレギュラーですが、"("が遠いのでこういう風にしてみました。

また、Emacsのシェルモードで使うのに便利なように、

;; Emacs
(define-key shell-mode-map [(meta ?c)]
  (defun insert-\#\[\] ()
    (interactive)
    (insert "#[]")
    (backward-char)))

こんなのも定義してみました。

ユーティリティ関数については、

;; swank起動
(defun swank (&key (lisp :sbcl))
  (case lisp
    (otherwise #[/lisp/swank-sbcl-1.0.38])))

;; capistranoでデプロイ
(defun cap-staging (name)
  (prog1 (run-program "/home/foo/bin/cap-staging" ;; 既存のシェルスクリプト
                      :arguments (list (string-downcase name)))
         (princ #\Bell)
         (run-program "mpg123" :ARGUMENTS '("/home/foo/sounds/eudora-sound.mp3"))
         (run-program "firefox" :ARGUMENTS (list (case name
                                                   (:project-foo "/var/tmp/deployfinish.html")
                                                   (otherwise "http://unicodesnowmanforyou.com/"))))))

;; ssh
(defun foo ()
  #[ssh foo])

;; IE6マシンに接続
(defun ie6 ()
  #[xvncviewer 192.168.1.6])

という非常にどうでも良いものばかりをずらずら定義していますが、割と便利です。

関数を定義するとファイルに書き出されるようにするともっと便利かもしれません。対話環境については、Interlispの環境がヒントになる気がしたのでちょっと真似してみたいと思っています。