4
votes

Comment réutiliser une fenêtre de tâche VS Code, sans la fermer

Mon objectif est de réutiliser une fenêtre de tâches dans VS Code. Cependant, lorsque j'entre ctrl + c, la tâche s'arrête, mais écrit alors: "Le terminal sera réutilisé par les tâches, appuyez sur n'importe quelle touche pour le fermer. ".

Je ne veux pas fermer la fenêtre. C'est frustrant car cela m'oblige à ouvrir une nouvelle fenêtre et à naviguer vers le bon répertoire.

J'ai enregistré un gif du problème (c'est la fenêtre à droite):

entrez la description de l'image ici

Ma configuration de tâches ressemble à ceci:

{
    "label": "some label",
    "type": "npm",
    "script": "build",
    "path": "some-path/",
    "problemMatcher": [],
    "runOptions": { "runOn": "folderOpen" },
    "group": "build",
    "presentation": {
        "echo": true,
        "reveal": "silent",
        "focus": false,
        "panel": "shared",
        "showReuseMessage": false,
        "clear": false,
        "group": "build"
    }
}

J'ai essayé diverses combinaisons des propriétés de presentation , mais sans aucune aide.

La demande de fonctionnalité associée sur le code VS est ici .


1 commentaires

Cela ressemble à un double de stackoverflow.com/questions/46899480/ ... Essayez la solution macro, c'est la plus simple - faites-moi savoir si cela fonctionne pour vous.


3 Réponses :


0
votes

Il semble que vous souhaitiez lancer un shell dans le bon dossier une fois la tâche terminée. Je ne sais pas si c'est la meilleure façon de le faire, mais je fais quelque chose de similaire avec des tâches composées.

{
    "label": "some label",
    "type": "npm",
    "script": "build",
    "path": "some-path/",
    "problemMatcher": [],
    "runOptions": { "runOn": "folderOpen" },
    "group": "build",
    "presentation": {
        "echo": true,
        "reveal": "silent",
        "focus": false,
        "panel": "shared",
        "showReuseMessage": false,
        "clear": false,
        "group": "build"
    }
},
{
    "label": "shell",
    "type": "shell",
    "command": "cd app; bash",
    "group": {
        "kind": "build",
        "isDefault": true
    }
},
{
    "label": "Task and Shell",
    "group": "build",
    "dependsOn": ["some label", "shell"],
    "dependsOrder": "sequence",
}

Cette configuration exécute bash dans le bon dossier après la tâche (dans la même fenêtre). Remplacez bash par le shell que vous utilisez si nécessaire.


3 commentaires

J'ai essayé de mettre en œuvre votre solution, mais cela ne semble pas garder la fenêtre ouverte?


Vérification juste: exécutez-vous la tâche composite? Ou la tâche originale?


Je ne suis pas sûr de votre question?



1
votes

Je ne pense pas que ce soit possible et cela peut être intentionnel.

Si vous regardez le schéma de tasks.json , vous voyez:

{
  "version": "2.0.0",
  "tasks": [
    {

      "label": "10 9 8 ...",
      "type": "shell",
      "command": "seq 10 1 && sh",
      "presentation": {
        "echo": true,
        "focus": true,
        "reveal": "always",
        "panel": "shared",
      },
      "problemMatcher": [],
    }
  ]
}

Le type d'une tâche personnalisée. Les tâches de type "shell" sont exécutées à l'intérieur d'un shell

Donc, pour moi, cela implique que si vous avez une tâche de compte à rebours de type "shell" exécutant cette commande seq 10 1 , dans les coulisses, cela ferait:

devbox:~ dev$ bash -c "seq 10 1"
10
9
8
7
6
5
4
3
2
1
devbox:~ dev$

Comme vous pouvez le voir, il sort immédiatement et je ne suis pas sûr que vous puissiez y faire quoi que ce soit. (Je peux me tromper cependant)

Même si vous définissez une tâche de type "process" (la commande étant le chemin vers un exécutable), cela ne vous permet pas de réutiliser le terminal.

Cela dit, vous pouvez le forcer mais VS Code n'en serait pas trop content: (remarquez le && sh à la fin de la commande)

/**
 * The description of a task.
 */
interface TaskDescription {
  /**
   * The task's name
   */
  label: string;

  /**
   * The type of a custom task. Tasks of type "shell" are executed
   * inside a shell (e.g. bash, cmd, powershell, ...)
   */
  type: 'shell' | 'process';

  //...
}

Lorsque vous exécutez la tâche, vous obtenez immédiatement un autre shell:

entrez la description de l'image ici

Cependant, si vous réexécutez la même tâche, VS Code devient grincheux:

entrez la description de l'image ici

Le fait que je ne puisse pas voir une option dans .vscode/settings.json pour prendre en charge votre cas d'utilisation me fait penser que c'est vraiment un choix par conception :

entrez la description de l'image ici


0 commentaires

0
votes

J'ai trouvé une solution pour cela, ma tâche ressemble à ceci

"tasks": [
        {
            "label": "start server",
            "type": "shell",
            "command": "RUN='cd backend && npm run dev' bash",
            "problemMatcher": [],
        },
   ]

et à la fin de mon .bashrc j'ai eval "$RUN"


0 commentaires