Après avoir ouvert une fois VS Code Remote Containers, accédez à cat ~ / Library / Application \ Support / Code / storage.json
Si vous regardez windowsState
> lastActiveWindow
> dossier
, vous pouvez voir qu'il ressemble à ce qui suit.
"windowsState": {
"lastActiveWindow": {
"folder": "vscode-remote://dev-container%2B2f557365722f6e616d652f646576656c6f702f70726f6a656374/usr/src",
"backupPath": "...",
"remoteAuthority": "dev-container+2f557365722f6e616d652f646576656c6f702f70726f6a656374",
"uiState": {
"mode": 1,
"x": 0,
"y": 23,
"width": 3440,
"height": 1417
}
},
"openedWindows": []
},
Si vous connaissez l'URL de ce dossier
$ code --folder-uri vscode-remote://dev-container%2B2f557365722f6e616d652f646576656c6f702f70726f6a656374/usr/src
Il est possible de lancer directement depuis la CLI de cette manière.
La partie de 2f557365722f6e616d652f646576656c6f702f70726f6a656374
est une chaîne de caractères hexadécimaux
Le décodage donnera / User / name / develop / project
. Vous pouvez également voir qu'il est encodé en URL car il contient % 2B
.
Le dernier / usr / src
est le chemin spécifié par workspaceFolder
dans devcontainer.json
.
Sur cette base, comme l'ensemble du composant URL
"vscode-remote://" + URI.encode_www_form_component("dev-container+" + "/User/name/develop/project".unpack('H*')) + "/usr/src"
Il semble que ce soit le cas.
Écrivons un script qui générera une URL pour démarrer VS Code Remote Containers après avoir spécifié le chemin.
Il est généré en lisant workspaceFolder
de .devcontainer / devcontainer.json
sous le chemin spécifié.
main.rb
# frozen_string_literal: true
# !/usr/bin/env ruby
require 'json'
module VSCodeRemoteContainer
class Utility
def initialize
end
def generate_url(root_path)
folder = find_workspace_folder(root_path)
path = "dev-container+#{root_path.unpack('H*')[0]}"
puts "vscode-remote://#{URI.encode_www_form_component(path)}#{folder}"
end
def find_workspace_folder(root_path)
unless File.exist?("#{root_path}/.devcontainer/devcontainer.json")
puts 'Not found devcontainer.json file.'
return
end
config = JSON.parse(File.read("#{root_path}/.devcontainer/devcontainer.json"))
config['workspaceFolder']
end
end
end
VSCodeRemoteContainer::Utility.new.generate_url(*ARGV)
Enregistrez ce qui précède en tant que main.rb
et exécutez comme suit pour générer l'URL
$ ruby main.rb '/User/name/xxxx'
# => vscode-remote://dev-container%2B2f557365722f6e616d652f646576656c6f702f70726f6a656374/usr/src
Cette fois, j'ai créé des workflows qui fonctionnent en combinaison avec ghq. VSCode est démarré directement dans le conteneur en spécifiant le nom du référentiel comme ↓ comme image d'opération.
Je l'ai ajouté au script ci-dessus lors de la création de flux de travail.
module VSCodeRemoteContainer
class Utility
attr_accessor :bin_path
def initialize
@bin_path = ENV['GHQ_PATH'] || '/usr/local/bin'
end
def ghq_exists?
!`which #{@bin_path}/ghq`.empty?
end
def search
return unless ghq_exists?
result = []
`#{@bin_path}/ghq list --full-path`.split(/\R/).each do |d|
Dir.foreach(d) do |path|
next if ['.', '..'].include?(path)
file = File.join(d, path)
result << d if file.include?('.devcontainer')
end
end
result
end
end
end
Ce que je fais, c'est utiliser ghq
pour obtenir une liste des dépôts cibles
J'essaie de ne renvoyer que le référentiel contenant le répertoire .devcontainer
.
Le produit fini est https://gist.github.com/Slowhand0309/253bb296cd7acb089601d2b32da4723b Je l'ai mis ici. Je viens de le faire pour le moment, donc si vous trouvez des problèmes Nous vous serions reconnaissants si vous pouviez nous contacter.
zsh
, mais si vous pouvez le modifier avec votre shell comme vous le souhaitez: priez:Recommended Posts