1 件 見つかりました。

CHALOW Search - hiChangeLog ChangeLog INDEX

あふの表示ディレクトリをEshellで開く方法 [emacs][Eshell][シェル][VBScript(WSH)]

シェル環境としてはMSYSのbashをコマンドプロンプトで開くのがお気に入りであるが、日本語に難があるのが玉にキズ。Eshell => MSYS と辿ってきたのだが、日本語対策としてEshellも考え直してみることにした。

私がシェル環境に求めるものは、コピペ環境、キーバインドなどがあるが、実は第一条件はあふの表示ディレクトリに素早く飛べることである。これができなければ試す気にもならない。というわけでその方法についてメモ。

まずはEshellで指定したディレクトリに飛ぶ関数を作っておく。(Emacs - Hirotake Itoh's memo by PukiWiki

(defun eshell-in-the-directory (targetdir)
  (interactive)
  (let ((dir default-directory))
    (eshell)
    (cd targetdir)
    (eshell-interactive-print (concat "cd " targetdir "\n"))
    (eshell-emit-prompt)
    (cd dir)
    (end-of-buffer)
    ))
以上の関数を外部から呼出せればよい。NTEmacs 22.0.90を用いているのだが、付属のemacsclientwを使うことを考える。gnuclientと違ってemacsウィンドウをアクティブ(フォアグラウンド)にするオプションが無いので、自分でそこまで面倒を見る必要がある。この条件からVBScript(WSH)を用いるのが便利と思う。([2007-4-17-1])以下で、ダブルクォーテーションが2連続な場所は、ダブルクォーテーションで囲まれた中で自分自身をエスケープしているという意味(バックスラッシュではない)。
Option Explicit
''' パスの準備
Dim strArg      ' 引数情報
' WScript.Arguments.Count が引数の数

Dim path
path = WScript.Arguments(0)
path = Replace(path, "\", "/")

''' EShellの起動

Dim objWshShell     ' WshShell オブジェクト
Dim strCmdLine      ' 実行するコマンド

Set objWshShell = WScript.CreateObject("WScript.Shell")
If Err.Number = 0 Then
    strCmdLine = "C:\programs\emacs-22.0.90\22.0.90\bin\emacsclientw.exe -e ""(eshell-in-the-directory \""" + path + "\"")"" -n"
    objWshShell.Exec(strCmdLine)
    objWshShell.AppActivate("emacs@ITOH")
    If Err.Number = 0 Then
        ' successful
    Else
        msgbox "error"
    End If
Else
    msgbox "エラー: " & Err.Description
End If

Set objWshShell = Nothing

以上をEshell.vbsなどと保存しておき、あふから
wscript C:\programs\afx\Eshell.vbs $P
などとパスを引数として渡して起動してやれば、あふの表示ディレクトリをEshellで開くことができる。

ここまでやって、eshellじゃなくってshellだけで充分じゃないかと思うようになったが、試すのはまた後日。

ChangeLog INDEX
Powered by chalow