macvim-dev / macvim-dev/macvim

Implement native color picker support

Ouverte
#1,272 0 commentaires 4 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Feature Request
Langage dominant
Vim Script
Étoiles
7.9k
Forks
691
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

Is your feature request about something that is currently impossible or hard to do? Please describe the problem.
I think it would be nice if MacVim supports native color picking. macOS provides a system color picker (NSColorPanel), and we could hook into it to allow Vim scripts to get the color picked by the user and update texts and whatnot. This feature is very useful for web development, but even things like developing Vim color schemes would benefit from this.

Describe the solution you'd like
We can provide provide an API that looks something like :call pick_color(callback, <options>). This will bring up a color panel that lets you pick the color. Once you are done, it will call the callback with the provided color, and the script can do whatever it wants.

<options> can specify a continuous mode (it's a feature of NSColorPanel) so that every time the user clicks on the color it will immediately send the color to the callback (without needing to close the panel) so it's much better for fast iteration. For example, the script can be hooked up so that every time it gets a new color it remotely commands Safari to reload the tab to preview the updated color you just picked.

Other options include: the current color, whether to force an output color space for the picked color (e.g. forcing the picked color to conform to sRGB), whether to use alpha or not.

Describe alternatives you've considered
There is already a plugin that does this (https://github.com/KabbAmine/vCoolor.vim) but it uses osascript to invoke AppleScript to activate a color picker. This way of invoking it doesn't provide a lot of customizable options (e.g. alpha vs no alpha), and it doesn't let you pick the colors in continuous mode. It's better to have native support.

Additional context
Ideally this can be made into a native Vim feature (e.g. Gtk also provides a color picker) so it can be used cross-platform. I would imagine the API needs some room for flexibility though (e.g. the Gtk one doesn't have continuous mode, and it appears it doesn't even let you pick a different color space like sRGB vs P3).

I'm not sure if this will work in terminal Vim. Probably not. You need an AppKit application in order to invoke this.

Also see VSCode's version of this: https://code.visualstudio.com/Docs/languages/css#_syntax-coloring-color-preview (it's not as powerful because it's just a built-in support for color picking in certain situations, but it's not an extensible API). Note that the other portion of previewing colors in place in Vim can be done in Vim 9 using virtual text (see https://www.reddit.com/r/vim/comments/wm08fl/simple_vim_9_virtual_text_example_for_hex_colors/)

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Aucun fichier ni test du dépôt n’est nommé ; commencez par localiser l’intégration de MacVim avec AppKit et les points d’entrée existants de l’API Vim-script. Examinez le comportement de NSColorPanel au regard des exigences proposées concernant callback, options, continuous mode, color-space et alpha. Le travail est considéré comme terminé lorsqu’une API native peut renvoyer les couleurs sélectionnées avec les options demandées et que les limitations de MacVim/AppKit et du terminal sont prises en compte.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
macos, objective-c, vim
Domaine
api, desktop
Type d'issue
Fonctionnalité
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
30/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.