@yukiya68k

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

バッチファイルから実行するEmacs Lispのスクリプトについて その2

解決したいこと

バッチファイルから実行しているEmacs Lispのスクリプトから子プロセスにきちんと引数を渡したい。

発生している問題・エラー

ファイル名に全角’~’や’﨑’などが入っていると認識されない。

該当するソースコード

--- foo.bat ---
echo off
emacs --script foo-script.el %*
pause


--- foo-script.el ---
(let (fname)
  (dolist (fname argv)
	(message "%s" (shell-command-to-string (concat "dir " (shell-quote-argument fname))))))

自分で試したこと

上記のような形でWindowsのバッチファイルからEmacs Lispのスクリプトを実行しています。ファイル名(パス名)に全角’~’や’﨑’などが含まれていると子プロセスにうまく渡せません。今のところ該当文字を他に置換して処理していますが、設定などありましたら教えていただきたです。

環境 Windows10 Emacs30.1

0 likes

1Answer

シェル関係の設定や言語環境や文字コード関係の設定はどうなっているのですか?

0Like

Comments

  1. @yukiya68k

    Questioner

    シェルは無指定でコマンドプロンプト。
    (defvar explicit-shell-file-name "C:/Program Files/Git/usr/bin/bash.exe")を
    スクリプトに入れたこともありますが、開いたのはcmd.exeの窓でどちらも同じ結果でした。そして今、
    (defvar explicit-shell-file-name "C:/Program Files/PowerShell/7/pwsh.exe")も試してみたのですが、やはりcmd.exeが開いたのでそういうものなのでしょうか。
    言語について、設定ファイル.emacsには
    (set-language-environment "Japanese")
    (add-hook 'shell-mode-hook
    '(lambda ()
    (set-buffer-process-coding-system 'utf-8-unix 'utf-8-unix)))
    .emacsと同じディレクトリに
    chcp 65001 とだけ書いた.emacs_cmdproxy.exe を置いています。
    スクリプトは設定ファイルなど読み込まない -q -Q オプションなども試しましたが同じでした。
    パス名の'~'や'﨑'が子プロセスに認識されない問題はバッチファイルからの呼び出しでスクリプトを実行したときだけで、エディタとして起動しているEmacsから同じスクリプトを実行した場合は正常に読み書き出来ます.
    Emacsとelispはまだ4か月程度なのでうまく説明できてないと思いますが、よろしくお願いします。

  2. うーん、ちょっとうまく環境を揃えられませんでしたが、試しに最後の fname(encode-coding-string fname 'cp932) とかにしてみるとうまくいったりしないでしょうか?

  3. @yukiya68k

    Questioner

    うまくいきました。たった二日で両方とも解決していただいて、誠にありがとうございました。多分、自分だけの問題で設定ファイルから見直さなければいけないんだと思いました。
    ひとつお尋ねしたいのですが、回答者さんの環境ではバッチファイルからでも encode-coding-string なしで子プロセスに'~'などが渡せているということで良いのでしょうか?

Your answer might help someone💌