Terminal: wt ne gère pas correctement les nouvelles lignes

Créé le 16 févr. 2020  ·  3Commentaires  ·  Source: microsoft/terminal

Environnement

Windows build number: Microsoft Windows [Version 10.0.18363.657]
Windows Terminal Version: 0.9.433.0

Étapes à suivre pour reproduire

Exécutez ceci dans PowerShell:

wt `
new-tab -p PowerShell` Core`;`
split-pane -H -p Windows` PowerShell `;`
split-pane -p cmd

Comportement prévisible

Je devrais avoir un nouvel onglet divisé deux fois (trois volets)

Comportement réel

  1. Une nouvelle fenêtre
    2, trois onglets
  2. Les deuxième et troisième onglets contiennent des erreurs:
[error 0x80070002 when launching `
                                  split-pane -H -p "Windows PowerShell"']

et

[error 0x80070002 when launching `
                                  split-pane -H -p "Windows PowerShell"']

SOLUTION DE CONTOURNEMENT

J'ai finalement trouvé que si j'ajoute un espace après chaque ; cela fonctionne (sauf pour # 4618):

wt `
new-tab -p PowerShell` Core`; `
split-pane -H -p Windows` PowerShell `; `
split-pane -p cmd
Area-Commandline Help Wanted Issue-Bug Product-Terminal Resolution-External

Tous les 3 commentaires

@Jaykul
J'ai essayé d'ajouter un retour chariot et un saut de ligne aux séparateurs de jetons pour l'analyse de la ligne de commande dans mes tests pour # 4724. Mais quand j'ai essayé d'exécuter votre exemple, il s'avère que la coche arrière n'échappe jamais à la nouvelle ligne à moins qu'elle ne soit précédée d'un espace. Quelle que soit l'application que vous essayez d'appeler. Tout autre caractère (pas seulement le point-virgule) directement devant la graduation arrière ne déclenchera pas l'échappement de la nouvelle ligne dans la console PowerShell. Pouvez-vous confirmer? Je suppose que c'est plutôt un problème PowerShell.
Si vous exécutez votre exemple depuis un shell CMD (nouvelle ligne échappée avec ^ ), cela fonctionne déjà même sans avoir \ r et \ n comme séparateurs de jetons dans le code source du terminal.

wt ^
new-tab -p "PowerShell Core";^
split-pane -H -p Windows` PowerShell ;^
split-pane -p cmd

En fait, ouais, quand j'exécute l'exemple du problème d'origine mais que je mets des espaces devant les backticks d'échappement de nouvelle ligne, j'obtiens ceci:

image

On dirait un problème dans la façon dont PowerShell gère les nouvelles lignes échappées.

Vous avez absolument raison. Je suis désolé - je voulais proposer un exemple purement PowerShell de cette syntaxe (ou utiliser echoargs.exe) afin de pouvoir dire avec certitude ce qui se passait, et je ne l'ai pas fait avant de déposer le problème. Au cas où cela faciliterait les discussions avec d'autres utilisateurs de PowerShell comme moi - qui oublient que PowerShell fait des chaînes _implied_ - voici un exemple simple de ce que PowerShell fait mal:

Remarque: Write-Host prend n'importe quel nombre de paramètres de chaînes

image

Et bien sûr, si vous passez une chaîne étrange comme celle-ci à une commande "native", PowerShell la met entre guillemets:

image

En gros, voici ce qui se passe:

  1. Comme il s'agit d'un shell, PowerShell ne _require_ pas de guillemets autour des paramètres de chaîne.
    2, PowerShell traite une nouvelle ligne échappée _inside_ une chaîne différemment d'une nouvelle ligne échappée à la fin d'une ligne de commande (qui est la continuation de la ligne)

Lorsque nous ne laissons pas d'espace entre le `; (que nous avons échappé, donc c'est juste une chaîne) et la nouvelle ligne, PowerShell est obligé de supposer que cela fait partie d'une chaîne, et non d'une ligne séparée -continuation mark. Nous pouvons éviter cela en le séparant de la chaîne _implicitement_ avec un espace (comme je l'ai fait dans ma "solution de contournement" ci-dessus), ou explicitement, en mettant des guillemets autour de la chaîne:

wt `
new-tab -p "PowerShell Core" ";"`
split-pane -H -p "Windows PowerShell" ";"`
split-pane -p cmd
Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

NickITGuy picture NickITGuy  ·  3Commentaires

zadjii-msft picture zadjii-msft  ·  3Commentaires

warpdesign picture warpdesign  ·  3Commentaires

ghvanderweg picture ghvanderweg  ·  3Commentaires

TayYuanGeng picture TayYuanGeng  ·  3Commentaires