[RUBY] Öffnen Sie VS Code Remote Containers direkt über die CLI auf Ihrem Mac

Wie es funktioniert

Gehen Sie nach dem einmaligen Öffnen von VS Code Remote Containers zu "cat ~ / Library / Application \ Support / Code / storage.json" Wenn Sie sich "windowsState"> "lastActiveWindow"> "folder" ansehen, sehen Sie, dass es wie folgt aussieht.

    "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": []
    },

Wenn Sie die URL dieses Ordners kennen

$ code --folder-uri vscode-remote://dev-container%2B2f557365722f6e616d652f646576656c6f702f70726f6a656374/usr/src

Auf diese Weise kann direkt von der CLI aus gestartet werden.

Der Teil von "2f557365722f6e616d652f646576656c6f702f70726f6a656374" ist "hexadezimale Zeichenfolge" Wenn Sie dies dekodieren, erhalten Sie "/ Benutzer / Name / Entwicklung / Projekt". Sie können auch sehen, dass es URL-codiert ist, weil es "% 2B" enthält. Das letzte "/ usr / src" ist der Pfad, der durch "workspaceFolder" in "devcontainer.json" angegeben wird. Basierend auf diesen als gesamte URL-Komponente

"vscode-remote://" + URI.encode_www_form_component("dev-container+" + "/User/name/develop/project".unpack('H*')) + "/usr/src"

Es scheint so.

Ein Skript erstellen

Schreiben wir ein Skript, das eine URL generiert, um VS Code Remote Containers nach Angabe des Pfads zu starten. Es wird durch Lesen von workspaceFolder von .devcontainer / devcontainer.json unter dem angegebenen Pfad generiert.

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)

Speichern Sie das obige als "main.rb" und führen Sie es wie folgt aus, um die URL zu generieren

$ ruby main.rb '/User/name/xxxx'
# => vscode-remote://dev-container%2B2f557365722f6e616d652f646576656c6f702f70726f6a656374/usr/src

Erstellen von Alfred-Workflows

Dieses Mal habe ich Workflows erstellt, die in Kombination mit ghq funktionieren. VSCode wird direkt im Container gestartet, indem der Repository-Name als Operationsabbild als ↓ angegeben wird.

Ich habe es dem obigen Skript beim Erstellen von Workflows hinzugefügt.

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

Ich verwende ghq, um eine Liste der Ziel-Repositorys zu erhalten Ich versuche nur das Repository zurückzugeben, das das Verzeichnis .devcontainer hat.

Das fertige Produkt ist https://gist.github.com/Slowhand0309/253bb296cd7acb089601d2b32da4723b Ich habe es hierher gebracht. Ich habe es gerade erst gemacht, also wenn Sie irgendwelche Probleme finden Wir würden uns freuen, wenn Sie uns kontaktieren könnten.

Recommended Posts

Öffnen Sie VS Code Remote Containers direkt über die CLI auf Ihrem Mac
Hallo Welt auf Mac VSCode Java
[Ruby on Rails] Geben Sie automatisch eine Adresse aus einer Postleitzahl ein
So öffnen Sie eine Skriptdatei von Ubuntu mit VS-Code
Führen Sie die AWS CLI in Docker aus
Erstellen Sie Java mit Mac vs Code
Wechseln Sie von Eclipse zu VS Code
Java-Entwicklungsumgebung (Mac, VS Code)
Überprüfen Sie mithilfe des Remote-Containers von VSCode, ob Sie vom Host in der Docker-Umgebung Laravel on nicht auf den Container zugreifen können.