0

現在のファイルを取得して ConEmu の新しいシェルで実行する崇高な関数を作成しようとしていますが、\t のエスケープに問題があります。

次のようなパスがある場合

c:\ps\test.ps1

t がドロップされます。エスケープしていくつかのことを試みましたが、運がありませんでした。

ここに崇高な機能があります

class ConemuPstestCommand(sublime_plugin.TextCommand):
   def run(self, edit):
      if self.view.file_name():
         if self.view.is_dirty():
            self.view.run_command("save")

      folder = path.dirname(self.view.file_name())
      testFile =  path.join(folder, "test.ps1")
      if(not (path.exists(testFile))):
         testFile = path.join(path.split(folder)[0],"test.ps1")
      if(path.exists(testFile)):
         testFile = testFile + "\n"

         print(testFile)
         testFile = re.sub(r'\t', r'\\t', testFile)
         #testFile = testFile.translate(str.maketrans({"\t":  r"\\\t","\\": r"\\"}))
         print(testFile)
         subprocess.call([CONEMUC, "-GUIMACRO:0","Task(""{Shells::PowerShell}"")"],startupinfo=si)
         #subprocess.call([CONEMUC, "-GUIMACRO:0","Recreate(0,0,0)"],startupinfo=si)
         subprocess.call([CONEMUC, "-GUIMACRO:0", "PASTE", "2", testFile], startupinfo=si)

基本的には、powershell モジュールで F6 キーを押すと、そのフォルダー内の test.ps1 が実行されるという考え方です。print(testFile) の両方に基づいて、崇高なコンソールの出力は正しく見えますが、powershell に移行すると、テストの t が欠落しています (奇妙なことに、\ はまだ存在します)。

本当に奇妙なことは、Task() (新しい powershell コンソール) 行をコメントアウトすると、現在のコンソールに正しくコピーされることです (conemu タスク タイプと同じ)

バージョン 150513 [64] とサブライム 3 (3083) を実行しています

捕獲

簡単なテストとして、conemu コンソールからこの Python コードを実行しました。

import re,subprocess
CONEMUC = "C:\\Program Files\\ConEmu\\ConEmu\\ConEmuC64.exe"

si = subprocess.STARTUPINFO() 
si.dwFlags = subprocess.STARTF_USESHOWWINDOW
si.wShowWindow = subprocess.SW_HIDE

subprocess.call([CONEMUC, "-GUIMACRO:0","Task(""{Shells::PowerShell}"");context;print(""test"")"],startupinfo=si)

これにより、コンソールは正常に起動しますが、テキストは出力されません

また、Python のバージョンは Python 3.4.2 (v3.4.2:ab2c023a9432、2014 年 10 月 6 日、22:16:31) [MSC v.1600 64 ビット (AMD64)] on win32 です。

さらに簡単なテストとして、cmd シェルを起動してこのコマンドを実行しました

ConEmuC.exe -guimacro task("{Shells::cmd}");context;print("test")

OK;OK;OKと報告されます。 新しいシェルが開かれ、これを実行したコンソールにテストが表示されます。では、コンテキストが本来あるべきことを実際に行っていないように見えますか?

別の簡単なテストを試してみました

ConEmuC.exe -guimacro Create(0,0);context;print("test")

今度は正常に動作しました。Task() と Context は連携したくないようですか?

これがconemuが行っていることなのか、それともサブライム/python側のものなのか、よくわからないようです。何かご意見は?

ありがとう

4

1 に答える 1