-
Notifications
You must be signed in to change notification settings - Fork 28.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[icon-themes] Support glob keys in file icon associations #174286
base: main
Are you sure you want to change the base?
Conversation
@microsoft-github-policy-service agree |
Can you explain what css classes you generate? |
Done in PR description |
While we are here:
|
Sorry, can you give examples how this works (maybe a table covering the various cases, prefix, suffix,
Give some example of resources in the explorer and how the class names match. The tricky part is that file name matches are always stronger than file extension matches and stronger than fold name matches. |
Fair enough: updated replit with table
|
Now ready for review |
Made some small tweaks in my work lunch, but please feel free to review now @aeschli |
ok, now I understand. So The problem is to make sure the matching order holds: 'full file match' beats 'file match with pattern' beats 'file extension match' beats 'file extension with pattern' beats language beats folder name beats folder name with How this is implemented is the number of classes matching IMO we're at a dead end with CSS class name matching. I'm reluctant in adding even more class names. |
NB: I wanted to add an extra level of depth in generating |
Refs: [#issuecomment-1429874059](github.com/microsoft/pull/174286#issuecomment-1429874059)
That's done. BTW:
The "underscore or minus separated segments" feature, that is matching targets filenames in this format:
This is for a specific use case with A11Y benefit as explained here - vscode-icons/vscode-icons#2754 Took 18 lines of code to implement, but I hope this feature is worth it. |
I'm all in favour of simplifying the syntax (and capabilities). The suggested solution is not trivial, complicates the current implementation but still doesn't provide the full glob support that (I suspect) file-icon-theme authors are hoping for. One idea is to only support If you have any ideas, let's discuss before implementing. |
This commit brings consistency with `vscode.GlobPattern` API. Refs: microsoft#174286 @aeschli review
Because of laravel+php I will be implementing |
If you want this PR to be merged, we first need to first communicate and agree on an approach. I recommend you to wait with implementing before we agree. |
Okay.
Not the feedback I was hoping for but I really think these use cases are all good to add. (With dash/camel as less key maybe).
I feel the Eagerly awaiting some direction here 🙂 |
1141b71
to
d0ec167
Compare
You might still think "well, |
This commit brings consistency with `vscode.GlobPattern` API. Refs: microsoft#174286 @aeschli review
This limits the spec to: - `non-coalescing-wildcard` - `basename-prefix-with-undescore` - `basename-suffix-with-undescore` Refs: microsoft#174286
@aeschli please look at 5c5ec59...6256740 from a PR fork where I aggressively cut down the spec to a sane level (3 independent glob features).
Simplified specification
Changeset
|
@zm-cttae Sorry I didn't get back earlier, it was quite a busy week. I like your last change. Thanks a lot! I wanted to bring up an idea. Could we use the CSS Substring matching selectors) to further reduce the number of classes needed and allow some more ways on how theme authors can use the See #177650 to see a sketch of this. What do you think? |
…3879783 Apply feedback from PR microsoft#174286
I'll review by COB tomorrow (Tuesday 21/03). Merged in my reduced spec and will update PR description today |
Hi @zm-cttae, is this something you're still working on? |
This is ready to go but we have a better impl that @aeschli demoed - not clear whether that's been packaged up. We're also both busy, it seems. (Currently there's endgame for VS Code & I'm wrangling with Textmate library migration). |
Whats the status on this? |
Hoping this gets off the backburner soon. A lack of glob patterns has been the most obvious weakpoint of the icon API for nearly a decade, and it feels like we're so close to finally fixing that. |
Closes #12493.
Background
The feature request is for glob support in the key of icon mappings for file icon themes
This PR sets up a number of glob use cases - see table:
Jenkinsfile.*
Jenkinsfile.prod
test_*.py
(special case forsegment.ext
)test_component.py
*_test.go
(special case forsegment.ext
)component_test.go
.env.*
.env.development
web.*.config
web.prod.config
webpack.*.config.js
webpack.dev.config.js
pop goes the weasel.*
pop goes ...................................... the weasel.md
Specification
In file icon theme keys, add
*
to match A. 1 dot segment OR B. dash-separated basename.*
to glob second, third or fourth segment (wildcard-glob
)segment.ext
using prefix and suffix globs (e.g.test_*.py
or*_test.go
)test_*.py
(basename-prefix-with-undescore
)*_test.go
(basename-suffix-with-undescore
)Implementation
File/folder icon association keys that can be augmented by globs:
folderNames
,folderNamesExpanded
,fileNames
Any
*
in the key of the file/folder icon mapping:-glob-file-icon
or-glob-folder-icon
) suffixWe generate class names for globs on the icon CSS service side. This is necessary to prevent a FOUC when opening any collapsed folder or any text document. See algorithm complexity writeup @ #12493 (comment)
The output classes are demoed here: #174286 (comment)
EDIT:
EDIT 2:
Apply changeset from #174286 (comment)