DéveloppeurWeb.Com
    DéveloppeurWeb.Com
    • Agile Zone
    • AI Zone
    • Cloud Zone
    • Database Zone
    • DevOps Zone
    • Integration Zone
    • Web Dev Zone
    DéveloppeurWeb.Com
    Home»Uncategorized»Utiliser Alfred pour ouvrir rapidement des espaces de travail
    Uncategorized

    Utiliser Alfred pour ouvrir rapidement des espaces de travail

    février 26, 2023
    Utiliser Alfred pour ouvrir rapidement des espaces de travail
    Share
    Facebook Twitter Pinterest Reddit WhatsApp Email

    J’utilise VSCode pour la quasi-totalité de mon développement, ce qui me permet d’enregistrer des dossiers et leurs paramètres personnalisés dans des fichiers d’espace de travail.

    Alfred est un programme macOS qui sert de lanceur, de gestionnaire de presse-papiers, de chercheur et bien plus encore. Dans ce cas, je souhaite utiliser Alfred pour choisir rapidement et de manière interactive un espace de travail VSCode à ouvrir.

    Structure requise

    Les filtres de script d’Alfred nous permettent de rechercher un élément dans une liste dynamique, puis de faire quelque chose avec cet élément. La documentation est ensuite liée au format JSON du filtre de script. Nous allons créer un script (binaire) qui affiche tous les espaces de travail découverts dans le format requis.

    Code

    Nous pouvons utiliser des commandes de base pour découvrir tous les espaces de travail que nous voulons inclure :

    find ~/code -type file -maxdepth 1 -name '*.code-workspace'

    Cela nous donne tous les fichiers de l’espace de travail dans le répertoire ~/code. À partir de là, nous pouvons facilement créer l’objet JSON requis par Alfred.

    La commande équivalente de go est :

    filepath.Glob(fmt.Sprintf("%s/*%s", filepath.Join(home, codeDir), workspaceFileType))

    Où home est notre répertoire personnel, et codeDir est le dossier de notre répertoire personnel qui contient nos espaces de travail. Maintenant que j’ai trouvé tous nos fichiers d’espace de travail, j’ai juste besoin de créer des objets JSON à partir d’eux qu’Alfred consommera.

    Nous allons définir une structure de base pour représenter cet objet :

    type alfredList struct {
        Items []alfredItem `json:"items"` // All the items to choose from
    }
    type alfredItem struct {
        UID          string `json:"uid"`          // ID, just the basename
        Type         string `json:"type"`         // Type of item, always 'file'
        Title        string `json:"title"`        // Title to display - friendly name
        Subtitle     string `json:"subtitle"`     // Subtitle to display - short filepath
        File         string `json:"arg"`          // Filepath to open if the item is selected
        Autocomplete string `json:"autocomplete"` // String to use for autocomplete
    }

    Nous pouvons certainement devenir plus fantaisistes avec nos objets, mais pour l’instant, nous allons rester simples. Notre fonction créera un alfredItem étant donné le chemin du fichier vers un fichier d’espace de travail :

    // newAlfredItem creates an alfredItem given the path of a workspace file
    func newAlfredItem(workspaceFile string) alfredItem {
        // Remove leading path and file extension
        baseName := strings.Replace(filepath.Base(workspaceFile), workspaceFileType, "", 1)
    
        return alfredItem{
            UID:          baseName,
            Type:         "file",
            Title:        baseName,
            Subtitle:     filepath.Join("~", codeDir, baseName), // Use '~' instead of $HOME
            File:         workspaceFile,
            Autocomplete: strings.ReplaceAll(baseName, "-", " ") // Split dash-separated words
      }
    }

    Nous souhaitons donc intégrer tous les fichiers de flux de travail découverts dans notre newAlfredItem méthode, puis imprimez-les dans le format requis. Avec la gestion des erreurs de base, nous nous retrouvons avec ceci :

    matches, err := filepath.Glob(fmt.Sprintf("%s/*%s", filepath.Join(home, codeDir), workspaceFileType))
    if err != nil {
      log.Fatal(err)
    }
    
    list := alfredList{}
    for _, m := range matches {
      list.Items = append(list.Items, newAlfredItem(m))
    }
    
    output, err := json.Marshal(list)
    if err != nil {
      log.Fatal(err)
    }
    fmt.Println(string(output))

    Utilisation d’Alfred

    Créez un nouveau workflow vierge. Dans le nouveau workflow, ajoutez un filtre de script en sélectionnant Entrées -> Filtre de script. Nous devons lui donner des mots-clés qui feront apparaître la liste lorsque nous la taperons. J’ai utilisé ‘vc’ parce que rien d’autre ne l’utilisait.

    Pour obtenir le résultat de notre programme dans la liste des éléments, nous allons simplement compiler notre programme Go et exécuter le binaire à partir de notre flux de travail.

    Mot clé vc

    Lorsque nous exécutons le workflow en entrant le mot-clé vc, nous voyons une liste des espaces de travail découverts :

    Résultats

    En appuyant sur Entrée sur un seul espace de travail, nous l’ouvrirons dans VS Code.

    Améliorations

    À moins que nous n’ajoutions beaucoup d’espaces de travail chaque jour, nous n’aurons aucun problème à obtenir notre liste à partir d’un fichier JSON statique. Dans le passé, j’ai utilisé Lingon pour créer un travail qui redécouvre périodiquement chaque fichier d’espace de travail et les enregistre dans un fichier JSON.

    Share. Facebook Twitter Pinterest LinkedIn WhatsApp Reddit Email
    Add A Comment

    Leave A Reply Cancel Reply

    Catégories

    • Politique de cookies
    • Politique de confidentialité
    • CONTACT
    • Politique du DMCA
    • CONDITIONS D’UTILISATION
    • Avertissement
    © 2023 DéveloppeurWeb.Com.

    Type above and press Enter to search. Press Esc to cancel.