1

最近、SUA ( http://www.suacommunity.com ) サブシステムにアクセスするために Windows 7 Ultimate を購入したので、SUA の bash ユーティリティ (/usr/local/bin/bash) を EmacsW32 で動作させるのに苦労しています。SUA にはデフォルトで ksh と csh が付属しているため、コミュニティ バンドルをインストールして bash プロセスを取得しました。

Mx シェルは通常、シェル プロセスを呼び出し、Emacs バッファーを介して stdio をパイプします。これは Cygwin でうまく機能します。w32-shell-* などの emacs 変数を SUA bash 実行可能ファイルを指すように調整してみました。また、SUA に付属の posix.exe ツールを使用して bash を呼び出してみました。EmacsW32 によってプロセスが作成されるとすぐに、bash プロセスに関連付けられたファイル記述子が削除されることがよくあります。

Cygwin は SUA に比べて非常に遅いので、この機能を EmacsW32 + SUA の組み合わせで動作させたいと思っています。ヒント、経験、解決策をいただければ幸いです。

4

1 に答える 1

1

w32-shell-* 変数がわかりません。たぶん、あなたが何を意味するかを説明するためにいくつかのコードを示すことができます.

SUAもわかりません。私は Windows で GNU emacs v22 を使用しており、powershell を下位シェルとして実行しています。最初はあなたと同じようにいくつかの問題がありましたが、シェルの起動方法をよりよく理解して解決しました。多分これはあなたを助けるでしょう。

私はこれらの変数を使用します:

(setq explicit-shell-file-name 
      "c:\\windows\\system32\\WindowsPowerShell\\v1.0\\powershell.exe")  
(setq explicit-powershell.exe-args 
      '("-Command" "-" )) ;; interactive, but no command prompt

次の 2 つのことに気付くまでは苦労しました。

  1. シェルプロセスのコマンドライン引数を指定しない場合、emacs は黙ってデフォルトで using を使用し-iます。powershell の場合、その引数はサポートされていなかったか、または私が望んでいたものとは異なる動作をしたかのどちらかでした (忘れました)。そのため、シェルを呼び出すために引数を明示的に設定する必要がありました。

  2. シェルに引数を指定するための変数の名前は、シェルの起動に使用されるプログラムの名前によって異なります。私が知る限り、これは文書化されていません (ソース コードが文書化されていると考えない限り!)。Linux で sh を実行している場合、変数はexplicit-sh-args. bsh の場合、explicit-bsh-args. Windows を使用している場合は、.exe サフィックスを含む、exe の適切な名前を使用する必要があります。奇妙に見える変数名になりますが、機能します。

powershell を下位の emacs シェルとして起動する完全なコードは次のようになります。

;; get a name for the buffer
(setq buffer (get-buffer-create "*PowerShell*"))

(let ((tmp-shellfile explicit-shell-file-name))
  (setq explicit-shell-file-name 
        "c:\\windows\\system32\\WindowsPowerShell\\v1.0\\powershell.exe")  
  (setq explicit-powershell.exe-args 
        '("-Command" "-" )) ; interactive, but no command prompt

  ;; launch the shell
  (shell buffer)

  ; restore the original shell
  (if tmp-shellfile
    (setq explicit-shell-file-name tmp-shellfile)))

たぶん、そのようなものがあなたのために働くでしょう。

于 2010-05-20T17:31:18.283 に答える