私は Lisp に非常に慣れていません (特に Elisp は)、文字列の処理に問題があります。
Windows スタイルのパスを Unix スタイルのパスに変換したい - 特に、Visual Studio から取得したパスを Cygwin パスに変換する必要がある.Emacs で Visual Studio からファイルを開くことができるようにしたい (私はこれには emacsclient --eval を使用します):
Visual Studio パスの形式は次のとおりです。
C:\Users\name\documents\visual studio 2010\projects\test
次のような適切な Cygwin パスに変更したいと思います。
/cygdrive/c/Users/name/documents/visual studio 2010/projects/test
ただし、スクラッチ バッファーで次のことを試みても、既に失敗しています。
(replace-regexp-in-string "\\" "\/" "C:\users\someone")
(subst-char-in-string ?\ ?/ "C:\users\someone")
>> Debugger entered--Lisp error: (error "Non-hex digit used for Unicode escape")
Elispがすべての文字列でバックスラッシュをエスケープしないようにする方法はありますか?
編集:
外部ツールを介して Visual Studio から emacs を呼び出す方法は次のとおりです。
emacsclient -d 127.0.0.1:0.0 --eval '(convert-win-to-cygwin-path $(ItemPath))'
$(ItemPath)は、私が影響を与えることができないものに置き換えられC:\Users\asf
ます。そのため、emacs で変更する必要がある 1 つのバックスラッシュを含む文字列が emacs に渡されます。
1 つのバックスラッシュから 2 つのバックスラッシュを作成する必要があることを emacs に知らせることはできますか?
編集2:解決策
emacs を起動するシェル スクリプトを実際に呼び出すことで、emacs を起動しようとする方法を変更しました。このようにして、emacs が正しいパスを取得することを確認できます。
#!/bin/bash
export PATH="/usr/bin/:/bin/:$PATH"
filename=$1
line=$2
column=$3
cyged_path=$(cygpath "$filename")
echo "Cyged path: $cyged_path"
emacsclient -d 127.0.0.1:0.0 -n +$line:$column "$cyged_path"
そして、外部ツール ウィンドウで次の引数を使用して Visual Studio から呼び出します。
Path: <path_to_cygwin>\bin\bash.exe
Arguments: <path_to_script> $(ItemPath) $(CurLine) $(CurCol)