Register icons for git stash and nb shelve actions - #8373

Merged
mbien merged 1 commit into
apache:masterfrom
mbien:stash-and-shelve-action-icons
Apr 14, 2025
Merged

Register icons for git stash and nb shelve actions#8373
mbien merged 1 commit into
apache:masterfrom
mbien:stash-and-shelve-action-icons

Conversation

@mbien

Copy link
Copy Markdown
Member

So that they can be added to the tool bar.

image

The action registration in the context menu is a bit of a mess right now. Git stash via jgit does also only support repo wide "stash push", while shelve works on the selection. This isn't communicated anywhere in the UI though, so I updated the text for the shelve action to "Shelve selected Changes".

The way to get to the shelve action is via the stash window - which is super weird (one is global the other is selection based). Custom toolbar makes this easier.

@mbienmbien added UI User Interface git [ci] enable versioning job ci:dev-build [ci] produce a dev-build zip artifact (7 days expiration, see link on workflow summary page) labels Mar 30, 2025
@mbienmbien added this to the NB26 milestone Mar 30, 2025
Comment on lines +303 to +312
// TODO git unstash in shelve action?

@NbBundle.Messages({
"CTL_UnstashMenu.name=&Git Unstash",
"CTL_UnstashMenu.name.popup=Git Unstash",
"# {0} - stash index", "# {1} - stash name", "CTL_UnstashAction.name={0} - {1}"
})
private static class UnshelveMenu {
private static class UnstashMenu {

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this might indicate that things were copied around. Git unstash should not be in the shelve action.

this lead also to this:

// actions depending on the central patch storage
ShelveChangesActionProvideractionProvider = ShelveChangesActionsRegistry.getInstance().getActionProvider(vs[0]);

which is not the patch storage, but the git unstash action (unshelve is actually registered a few lines before that)

but this would be for other PRs.

@mbien
mbienforce-pushed the stash-and-shelve-action-icons branch 2 times, most recently from 4c5e954 to a667b48CompareApril 5, 2025 09:10
So that they can be added to the toolbar.
@mbien
mbienforce-pushed the stash-and-shelve-action-icons branch from a667b48 to e78d951CompareApril 5, 2025 09:12
Comment on lines +61 to +63
// TODO pick/create better icon
@StaticResource
private static final String ICON_RESOURCE = "org/netbeans/modules/git/resources/icons/get_clean.png"; //NOI18N

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eirikbakke having icons for "git stash" and "shelve changes" would be great I think. Possibly the clean icon combined with the diff icon or something like that? (not for NB 26, maybe some day later)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, I can look at that the next time I'm doing icon stuff.

Where does the word "shelve" come from? It sounds synonymous with "stash", but it's not an actual git command. Looking at this StackOverflow question, it's an IntelliJ term that seems to confuse users. Maybe it should be renamed in the NetBeans UI?

Git stash via jgit does also only support repo wide "stash push", while shelve works on the selection.

What is the "selection" referred to here?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shelve is used in Subversion, Perforce and Mercurial (with some extensions). They are used for similar purpose as git stash

@mbienmbienApr 7, 2025

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

shelve moves changes into patch files and stores those locally, this should work on any VCS. Stash is just git stash. Shelve will only shelve the selected files. Stash will stash the whole repo since I don't think jgit supports file stashing yet (git does for quite a while).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, maybe I understand now. Perhaps "Stash to Patch File" might be a better name?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here's the icon I drew for Shelve, if you think it makes sense:

image

icon_shelve

For stash, we could use ide/git/src/org/netbeans/modules/git/resources/icons/stashes.png, which I have redrawn in SVG as follows:

image

(The latter is part of #8424 )

I can install those two icons in a separate PR later.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did this PR actually add the Stash and Shelve actions to a toolbar somewhere? Which toolbar is it, and how do I access it? (Can't see the context from the very cropped screenshot on top.)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it only registered the icons for the actions, this is the precondition to add something to the toolbar. User has to do this manually via right click -> customize toolbar.

That is why it wasn't super important for me to pick the right icons. It is just for testing purposes mostly and to get an idea how useful shelve still is. We should update them to the new icons for NB 27 though.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, now I see. Thanks! One annoying thing about the main toolbar is that icons shown there must be prepared in both 16x16 and 24x24 versions. But I can do it for this action. (One would think that the SVG could just be scaled up 150%, but it doesn't look good, as borders end up with a non-standard thickness, and horizontal/vertical lines get pushed off the pixel grid.)

@matthiasblaesingmatthiasblaesing left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While I agree, that wording/nesting/workflow might be improved, the target of this PR is clearly spelled out and improves situation for people needing the actions.

Updated icons would be great, but that is also independent from this PR and also independent from the wording.

Lets get this in, it is an improvement.

@mbien
mbien merged commit 8b2daa3 into apache:masterApr 14, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci:dev-build[ci] produce a dev-build zip artifact (7 days expiration, see link on workflow summary page)git[ci] enable versioning jobUIUser Interface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mbien@eirikbakke@lkishalmi@matthiasblaesing
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Register icons for git stash and nb shelve actions - #8373

Merged
mbien merged 1 commit into
apache:masterfrom
mbien:stash-and-shelve-action-icons
Apr 14, 2025
Merged

Register icons for git stash and nb shelve actions#8373
mbien merged 1 commit into
apache:masterfrom
mbien:stash-and-shelve-action-icons

Conversation

@mbien

Copy link
Copy Markdown
Member

So that they can be added to the tool bar.

image

The action registration in the context menu is a bit of a mess right now. Git stash via jgit does also only support repo wide "stash push", while shelve works on the selection. This isn't communicated anywhere in the UI though, so I updated the text for the shelve action to "Shelve selected Changes".

The way to get to the shelve action is via the stash window - which is super weird (one is global the other is selection based). Custom toolbar makes this easier.

@mbienmbien added UI User Interface git [ci] enable versioning job ci:dev-build [ci] produce a dev-build zip artifact (7 days expiration, see link on workflow summary page) labels Mar 30, 2025
@mbienmbien added this to the NB26 milestone Mar 30, 2025
Comment on lines +303 to +312
// TODO git unstash in shelve action?

@NbBundle.Messages({
"CTL_UnstashMenu.name=&Git Unstash",
"CTL_UnstashMenu.name.popup=Git Unstash",
"# {0} - stash index", "# {1} - stash name", "CTL_UnstashAction.name={0} - {1}"
})
private static class UnshelveMenu {
private static class UnstashMenu {

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this might indicate that things were copied around. Git unstash should not be in the shelve action.

this lead also to this:

// actions depending on the central patch storage
ShelveChangesActionProvideractionProvider = ShelveChangesActionsRegistry.getInstance().getActionProvider(vs[0]);

which is not the patch storage, but the git unstash action (unshelve is actually registered a few lines before that)

but this would be for other PRs.

@mbien
mbienforce-pushed the stash-and-shelve-action-icons branch 2 times, most recently from 4c5e954 to a667b48CompareApril 5, 2025 09:10
So that they can be added to the toolbar.
@mbien
mbienforce-pushed the stash-and-shelve-action-icons branch from a667b48 to e78d951CompareApril 5, 2025 09:12
Comment on lines +61 to +63
// TODO pick/create better icon
@StaticResource
private static final String ICON_RESOURCE = "org/netbeans/modules/git/resources/icons/get_clean.png"; //NOI18N

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eirikbakke having icons for "git stash" and "shelve changes" would be great I think. Possibly the clean icon combined with the diff icon or something like that? (not for NB 26, maybe some day later)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, I can look at that the next time I'm doing icon stuff.

Where does the word "shelve" come from? It sounds synonymous with "stash", but it's not an actual git command. Looking at this StackOverflow question, it's an IntelliJ term that seems to confuse users. Maybe it should be renamed in the NetBeans UI?

Git stash via jgit does also only support repo wide "stash push", while shelve works on the selection.

What is the "selection" referred to here?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shelve is used in Subversion, Perforce and Mercurial (with some extensions). They are used for similar purpose as git stash

@mbienmbienApr 7, 2025

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

shelve moves changes into patch files and stores those locally, this should work on any VCS. Stash is just git stash. Shelve will only shelve the selected files. Stash will stash the whole repo since I don't think jgit supports file stashing yet (git does for quite a while).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, maybe I understand now. Perhaps "Stash to Patch File" might be a better name?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here's the icon I drew for Shelve, if you think it makes sense:

image

icon_shelve

For stash, we could use ide/git/src/org/netbeans/modules/git/resources/icons/stashes.png, which I have redrawn in SVG as follows:

image

(The latter is part of #8424 )

I can install those two icons in a separate PR later.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did this PR actually add the Stash and Shelve actions to a toolbar somewhere? Which toolbar is it, and how do I access it? (Can't see the context from the very cropped screenshot on top.)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it only registered the icons for the actions, this is the precondition to add something to the toolbar. User has to do this manually via right click -> customize toolbar.

That is why it wasn't super important for me to pick the right icons. It is just for testing purposes mostly and to get an idea how useful shelve still is. We should update them to the new icons for NB 27 though.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, now I see. Thanks! One annoying thing about the main toolbar is that icons shown there must be prepared in both 16x16 and 24x24 versions. But I can do it for this action. (One would think that the SVG could just be scaled up 150%, but it doesn't look good, as borders end up with a non-standard thickness, and horizontal/vertical lines get pushed off the pixel grid.)

@matthiasblaesingmatthiasblaesing left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While I agree, that wording/nesting/workflow might be improved, the target of this PR is clearly spelled out and improves situation for people needing the actions.

Updated icons would be great, but that is also independent from this PR and also independent from the wording.

Lets get this in, it is an improvement.

@mbien
mbien merged commit 8b2daa3 into apache:masterApr 14, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci:dev-build[ci] produce a dev-build zip artifact (7 days expiration, see link on workflow summary page)git[ci] enable versioning jobUIUser Interface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mbien@eirikbakke@lkishalmi@matthiasblaesing
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Register icons for git stash and nb shelve actions - #8373

Merged
mbien merged 1 commit into
apache:masterfrom
mbien:stash-and-shelve-action-icons
Apr 14, 2025
Merged

Register icons for git stash and nb shelve actions#8373
mbien merged 1 commit into
apache:masterfrom
mbien:stash-and-shelve-action-icons

Conversation

@mbien

Copy link
Copy Markdown
Member

So that they can be added to the tool bar.

image

The action registration in the context menu is a bit of a mess right now. Git stash via jgit does also only support repo wide "stash push", while shelve works on the selection. This isn't communicated anywhere in the UI though, so I updated the text for the shelve action to "Shelve selected Changes".

The way to get to the shelve action is via the stash window - which is super weird (one is global the other is selection based). Custom toolbar makes this easier.

@mbienmbien added UI User Interface git [ci] enable versioning job ci:dev-build [ci] produce a dev-build zip artifact (7 days expiration, see link on workflow summary page) labels Mar 30, 2025
@mbienmbien added this to the NB26 milestone Mar 30, 2025
Comment on lines +303 to +312
// TODO git unstash in shelve action?

@NbBundle.Messages({
"CTL_UnstashMenu.name=&Git Unstash",
"CTL_UnstashMenu.name.popup=Git Unstash",
"# {0} - stash index", "# {1} - stash name", "CTL_UnstashAction.name={0} - {1}"
})
private static class UnshelveMenu {
private static class UnstashMenu {

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this might indicate that things were copied around. Git unstash should not be in the shelve action.

this lead also to this:

// actions depending on the central patch storage
ShelveChangesActionProvideractionProvider = ShelveChangesActionsRegistry.getInstance().getActionProvider(vs[0]);

which is not the patch storage, but the git unstash action (unshelve is actually registered a few lines before that)

but this would be for other PRs.

@mbien
mbienforce-pushed the stash-and-shelve-action-icons branch 2 times, most recently from 4c5e954 to a667b48CompareApril 5, 2025 09:10
So that they can be added to the toolbar.
@mbien
mbienforce-pushed the stash-and-shelve-action-icons branch from a667b48 to e78d951CompareApril 5, 2025 09:12
Comment on lines +61 to +63
// TODO pick/create better icon
@StaticResource
private static final String ICON_RESOURCE = "org/netbeans/modules/git/resources/icons/get_clean.png"; //NOI18N

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eirikbakke having icons for "git stash" and "shelve changes" would be great I think. Possibly the clean icon combined with the diff icon or something like that? (not for NB 26, maybe some day later)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, I can look at that the next time I'm doing icon stuff.

Where does the word "shelve" come from? It sounds synonymous with "stash", but it's not an actual git command. Looking at this StackOverflow question, it's an IntelliJ term that seems to confuse users. Maybe it should be renamed in the NetBeans UI?

Git stash via jgit does also only support repo wide "stash push", while shelve works on the selection.

What is the "selection" referred to here?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shelve is used in Subversion, Perforce and Mercurial (with some extensions). They are used for similar purpose as git stash

@mbienmbienApr 7, 2025

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

shelve moves changes into patch files and stores those locally, this should work on any VCS. Stash is just git stash. Shelve will only shelve the selected files. Stash will stash the whole repo since I don't think jgit supports file stashing yet (git does for quite a while).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, maybe I understand now. Perhaps "Stash to Patch File" might be a better name?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here's the icon I drew for Shelve, if you think it makes sense:

image

icon_shelve

For stash, we could use ide/git/src/org/netbeans/modules/git/resources/icons/stashes.png, which I have redrawn in SVG as follows:

image

(The latter is part of #8424 )

I can install those two icons in a separate PR later.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did this PR actually add the Stash and Shelve actions to a toolbar somewhere? Which toolbar is it, and how do I access it? (Can't see the context from the very cropped screenshot on top.)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it only registered the icons for the actions, this is the precondition to add something to the toolbar. User has to do this manually via right click -> customize toolbar.

That is why it wasn't super important for me to pick the right icons. It is just for testing purposes mostly and to get an idea how useful shelve still is. We should update them to the new icons for NB 27 though.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, now I see. Thanks! One annoying thing about the main toolbar is that icons shown there must be prepared in both 16x16 and 24x24 versions. But I can do it for this action. (One would think that the SVG could just be scaled up 150%, but it doesn't look good, as borders end up with a non-standard thickness, and horizontal/vertical lines get pushed off the pixel grid.)

@matthiasblaesingmatthiasblaesing left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While I agree, that wording/nesting/workflow might be improved, the target of this PR is clearly spelled out and improves situation for people needing the actions.

Updated icons would be great, but that is also independent from this PR and also independent from the wording.

Lets get this in, it is an improvement.

@mbien
mbien merged commit 8b2daa3 into apache:masterApr 14, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci:dev-build[ci] produce a dev-build zip artifact (7 days expiration, see link on workflow summary page)git[ci] enable versioning jobUIUser Interface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mbien@eirikbakke@lkishalmi@matthiasblaesing
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Register icons for git stash and nb shelve actions - #8373

Merged
mbien merged 1 commit into
apache:masterfrom
mbien:stash-and-shelve-action-icons
Apr 14, 2025
Merged

Register icons for git stash and nb shelve actions#8373
mbien merged 1 commit into
apache:masterfrom
mbien:stash-and-shelve-action-icons

Conversation

@mbien

Copy link
Copy Markdown
Member

So that they can be added to the tool bar.

image

The action registration in the context menu is a bit of a mess right now. Git stash via jgit does also only support repo wide "stash push", while shelve works on the selection. This isn't communicated anywhere in the UI though, so I updated the text for the shelve action to "Shelve selected Changes".

The way to get to the shelve action is via the stash window - which is super weird (one is global the other is selection based). Custom toolbar makes this easier.

@mbienmbien added UI User Interface git [ci] enable versioning job ci:dev-build [ci] produce a dev-build zip artifact (7 days expiration, see link on workflow summary page) labels Mar 30, 2025
@mbienmbien added this to the NB26 milestone Mar 30, 2025
Comment on lines +303 to +312
// TODO git unstash in shelve action?

@NbBundle.Messages({
"CTL_UnstashMenu.name=&Git Unstash",
"CTL_UnstashMenu.name.popup=Git Unstash",
"# {0} - stash index", "# {1} - stash name", "CTL_UnstashAction.name={0} - {1}"
})
private static class UnshelveMenu {
private static class UnstashMenu {

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this might indicate that things were copied around. Git unstash should not be in the shelve action.

this lead also to this:

// actions depending on the central patch storage
ShelveChangesActionProvideractionProvider = ShelveChangesActionsRegistry.getInstance().getActionProvider(vs[0]);

which is not the patch storage, but the git unstash action (unshelve is actually registered a few lines before that)

but this would be for other PRs.

@mbien
mbienforce-pushed the stash-and-shelve-action-icons branch 2 times, most recently from 4c5e954 to a667b48CompareApril 5, 2025 09:10
So that they can be added to the toolbar.
@mbien
mbienforce-pushed the stash-and-shelve-action-icons branch from a667b48 to e78d951CompareApril 5, 2025 09:12
Comment on lines +61 to +63
// TODO pick/create better icon
@StaticResource
private static final String ICON_RESOURCE = "org/netbeans/modules/git/resources/icons/get_clean.png"; //NOI18N

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eirikbakke having icons for "git stash" and "shelve changes" would be great I think. Possibly the clean icon combined with the diff icon or something like that? (not for NB 26, maybe some day later)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, I can look at that the next time I'm doing icon stuff.

Where does the word "shelve" come from? It sounds synonymous with "stash", but it's not an actual git command. Looking at this StackOverflow question, it's an IntelliJ term that seems to confuse users. Maybe it should be renamed in the NetBeans UI?

Git stash via jgit does also only support repo wide "stash push", while shelve works on the selection.

What is the "selection" referred to here?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shelve is used in Subversion, Perforce and Mercurial (with some extensions). They are used for similar purpose as git stash

@mbienmbienApr 7, 2025

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

shelve moves changes into patch files and stores those locally, this should work on any VCS. Stash is just git stash. Shelve will only shelve the selected files. Stash will stash the whole repo since I don't think jgit supports file stashing yet (git does for quite a while).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, maybe I understand now. Perhaps "Stash to Patch File" might be a better name?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here's the icon I drew for Shelve, if you think it makes sense:

image

icon_shelve

For stash, we could use ide/git/src/org/netbeans/modules/git/resources/icons/stashes.png, which I have redrawn in SVG as follows:

image

(The latter is part of #8424 )

I can install those two icons in a separate PR later.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did this PR actually add the Stash and Shelve actions to a toolbar somewhere? Which toolbar is it, and how do I access it? (Can't see the context from the very cropped screenshot on top.)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it only registered the icons for the actions, this is the precondition to add something to the toolbar. User has to do this manually via right click -> customize toolbar.

That is why it wasn't super important for me to pick the right icons. It is just for testing purposes mostly and to get an idea how useful shelve still is. We should update them to the new icons for NB 27 though.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, now I see. Thanks! One annoying thing about the main toolbar is that icons shown there must be prepared in both 16x16 and 24x24 versions. But I can do it for this action. (One would think that the SVG could just be scaled up 150%, but it doesn't look good, as borders end up with a non-standard thickness, and horizontal/vertical lines get pushed off the pixel grid.)

@matthiasblaesingmatthiasblaesing left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While I agree, that wording/nesting/workflow might be improved, the target of this PR is clearly spelled out and improves situation for people needing the actions.

Updated icons would be great, but that is also independent from this PR and also independent from the wording.

Lets get this in, it is an improvement.

@mbien
mbien merged commit 8b2daa3 into apache:masterApr 14, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci:dev-build[ci] produce a dev-build zip artifact (7 days expiration, see link on workflow summary page)git[ci] enable versioning jobUIUser Interface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mbien@eirikbakke@lkishalmi@matthiasblaesing
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Register icons for git stash and nb shelve actions - #8373

Merged
mbien merged 1 commit into
apache:masterfrom
mbien:stash-and-shelve-action-icons
Apr 14, 2025
Merged

Register icons for git stash and nb shelve actions#8373
mbien merged 1 commit into
apache:masterfrom
mbien:stash-and-shelve-action-icons

Conversation

@mbien

Copy link
Copy Markdown
Member

So that they can be added to the tool bar.

image

The action registration in the context menu is a bit of a mess right now. Git stash via jgit does also only support repo wide "stash push", while shelve works on the selection. This isn't communicated anywhere in the UI though, so I updated the text for the shelve action to "Shelve selected Changes".

The way to get to the shelve action is via the stash window - which is super weird (one is global the other is selection based). Custom toolbar makes this easier.

@mbienmbien added UI User Interface git [ci] enable versioning job ci:dev-build [ci] produce a dev-build zip artifact (7 days expiration, see link on workflow summary page) labels Mar 30, 2025
@mbienmbien added this to the NB26 milestone Mar 30, 2025
Comment on lines +303 to +312
// TODO git unstash in shelve action?

@NbBundle.Messages({
"CTL_UnstashMenu.name=&Git Unstash",
"CTL_UnstashMenu.name.popup=Git Unstash",
"# {0} - stash index", "# {1} - stash name", "CTL_UnstashAction.name={0} - {1}"
})
private static class UnshelveMenu {
private static class UnstashMenu {

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this might indicate that things were copied around. Git unstash should not be in the shelve action.

this lead also to this:

// actions depending on the central patch storage
ShelveChangesActionProvideractionProvider = ShelveChangesActionsRegistry.getInstance().getActionProvider(vs[0]);

which is not the patch storage, but the git unstash action (unshelve is actually registered a few lines before that)

but this would be for other PRs.

@mbien
mbienforce-pushed the stash-and-shelve-action-icons branch 2 times, most recently from 4c5e954 to a667b48CompareApril 5, 2025 09:10
So that they can be added to the toolbar.
@mbien
mbienforce-pushed the stash-and-shelve-action-icons branch from a667b48 to e78d951CompareApril 5, 2025 09:12
Comment on lines +61 to +63
// TODO pick/create better icon
@StaticResource
private static final String ICON_RESOURCE = "org/netbeans/modules/git/resources/icons/get_clean.png"; //NOI18N

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eirikbakke having icons for "git stash" and "shelve changes" would be great I think. Possibly the clean icon combined with the diff icon or something like that? (not for NB 26, maybe some day later)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, I can look at that the next time I'm doing icon stuff.

Where does the word "shelve" come from? It sounds synonymous with "stash", but it's not an actual git command. Looking at this StackOverflow question, it's an IntelliJ term that seems to confuse users. Maybe it should be renamed in the NetBeans UI?

Git stash via jgit does also only support repo wide "stash push", while shelve works on the selection.

What is the "selection" referred to here?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shelve is used in Subversion, Perforce and Mercurial (with some extensions). They are used for similar purpose as git stash

@mbienmbienApr 7, 2025

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

shelve moves changes into patch files and stores those locally, this should work on any VCS. Stash is just git stash. Shelve will only shelve the selected files. Stash will stash the whole repo since I don't think jgit supports file stashing yet (git does for quite a while).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, maybe I understand now. Perhaps "Stash to Patch File" might be a better name?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here's the icon I drew for Shelve, if you think it makes sense:

image

icon_shelve

For stash, we could use ide/git/src/org/netbeans/modules/git/resources/icons/stashes.png, which I have redrawn in SVG as follows:

image

(The latter is part of #8424 )

I can install those two icons in a separate PR later.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did this PR actually add the Stash and Shelve actions to a toolbar somewhere? Which toolbar is it, and how do I access it? (Can't see the context from the very cropped screenshot on top.)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it only registered the icons for the actions, this is the precondition to add something to the toolbar. User has to do this manually via right click -> customize toolbar.

That is why it wasn't super important for me to pick the right icons. It is just for testing purposes mostly and to get an idea how useful shelve still is. We should update them to the new icons for NB 27 though.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, now I see. Thanks! One annoying thing about the main toolbar is that icons shown there must be prepared in both 16x16 and 24x24 versions. But I can do it for this action. (One would think that the SVG could just be scaled up 150%, but it doesn't look good, as borders end up with a non-standard thickness, and horizontal/vertical lines get pushed off the pixel grid.)

@matthiasblaesingmatthiasblaesing left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While I agree, that wording/nesting/workflow might be improved, the target of this PR is clearly spelled out and improves situation for people needing the actions.

Updated icons would be great, but that is also independent from this PR and also independent from the wording.

Lets get this in, it is an improvement.

@mbien
mbien merged commit 8b2daa3 into apache:masterApr 14, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci:dev-build[ci] produce a dev-build zip artifact (7 days expiration, see link on workflow summary page)git[ci] enable versioning jobUIUser Interface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mbien@eirikbakke@lkishalmi@matthiasblaesing
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Register icons for git stash and nb shelve actions - #8373

Merged
mbien merged 1 commit into
apache:masterfrom
mbien:stash-and-shelve-action-icons
Apr 14, 2025
Merged

Register icons for git stash and nb shelve actions#8373
mbien merged 1 commit into
apache:masterfrom
mbien:stash-and-shelve-action-icons

Conversation

@mbien

Copy link
Copy Markdown
Member

So that they can be added to the tool bar.

image

The action registration in the context menu is a bit of a mess right now. Git stash via jgit does also only support repo wide "stash push", while shelve works on the selection. This isn't communicated anywhere in the UI though, so I updated the text for the shelve action to "Shelve selected Changes".

The way to get to the shelve action is via the stash window - which is super weird (one is global the other is selection based). Custom toolbar makes this easier.

@mbienmbien added UI User Interface git [ci] enable versioning job ci:dev-build [ci] produce a dev-build zip artifact (7 days expiration, see link on workflow summary page) labels Mar 30, 2025
@mbienmbien added this to the NB26 milestone Mar 30, 2025
Comment on lines +303 to +312
// TODO git unstash in shelve action?

@NbBundle.Messages({
"CTL_UnstashMenu.name=&Git Unstash",
"CTL_UnstashMenu.name.popup=Git Unstash",
"# {0} - stash index", "# {1} - stash name", "CTL_UnstashAction.name={0} - {1}"
})
private static class UnshelveMenu {
private static class UnstashMenu {

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this might indicate that things were copied around. Git unstash should not be in the shelve action.

this lead also to this:

// actions depending on the central patch storage
ShelveChangesActionProvideractionProvider = ShelveChangesActionsRegistry.getInstance().getActionProvider(vs[0]);

which is not the patch storage, but the git unstash action (unshelve is actually registered a few lines before that)

but this would be for other PRs.

@mbien
mbienforce-pushed the stash-and-shelve-action-icons branch 2 times, most recently from 4c5e954 to a667b48CompareApril 5, 2025 09:10
So that they can be added to the toolbar.
@mbien
mbienforce-pushed the stash-and-shelve-action-icons branch from a667b48 to e78d951CompareApril 5, 2025 09:12
Comment on lines +61 to +63
// TODO pick/create better icon
@StaticResource
private static final String ICON_RESOURCE = "org/netbeans/modules/git/resources/icons/get_clean.png"; //NOI18N

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eirikbakke having icons for "git stash" and "shelve changes" would be great I think. Possibly the clean icon combined with the diff icon or something like that? (not for NB 26, maybe some day later)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, I can look at that the next time I'm doing icon stuff.

Where does the word "shelve" come from? It sounds synonymous with "stash", but it's not an actual git command. Looking at this StackOverflow question, it's an IntelliJ term that seems to confuse users. Maybe it should be renamed in the NetBeans UI?

Git stash via jgit does also only support repo wide "stash push", while shelve works on the selection.

What is the "selection" referred to here?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shelve is used in Subversion, Perforce and Mercurial (with some extensions). They are used for similar purpose as git stash

@mbienmbienApr 7, 2025

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

shelve moves changes into patch files and stores those locally, this should work on any VCS. Stash is just git stash. Shelve will only shelve the selected files. Stash will stash the whole repo since I don't think jgit supports file stashing yet (git does for quite a while).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, maybe I understand now. Perhaps "Stash to Patch File" might be a better name?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here's the icon I drew for Shelve, if you think it makes sense:

image

icon_shelve

For stash, we could use ide/git/src/org/netbeans/modules/git/resources/icons/stashes.png, which I have redrawn in SVG as follows:

image

(The latter is part of #8424 )

I can install those two icons in a separate PR later.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did this PR actually add the Stash and Shelve actions to a toolbar somewhere? Which toolbar is it, and how do I access it? (Can't see the context from the very cropped screenshot on top.)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it only registered the icons for the actions, this is the precondition to add something to the toolbar. User has to do this manually via right click -> customize toolbar.

That is why it wasn't super important for me to pick the right icons. It is just for testing purposes mostly and to get an idea how useful shelve still is. We should update them to the new icons for NB 27 though.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, now I see. Thanks! One annoying thing about the main toolbar is that icons shown there must be prepared in both 16x16 and 24x24 versions. But I can do it for this action. (One would think that the SVG could just be scaled up 150%, but it doesn't look good, as borders end up with a non-standard thickness, and horizontal/vertical lines get pushed off the pixel grid.)

@matthiasblaesingmatthiasblaesing left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While I agree, that wording/nesting/workflow might be improved, the target of this PR is clearly spelled out and improves situation for people needing the actions.

Updated icons would be great, but that is also independent from this PR and also independent from the wording.

Lets get this in, it is an improvement.

@mbien
mbien merged commit 8b2daa3 into apache:masterApr 14, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci:dev-build[ci] produce a dev-build zip artifact (7 days expiration, see link on workflow summary page)git[ci] enable versioning jobUIUser Interface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mbien@eirikbakke@lkishalmi@matthiasblaesing
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Register icons for git stash and nb shelve actions - #8373

Merged
mbien merged 1 commit into
apache:masterfrom
mbien:stash-and-shelve-action-icons
Apr 14, 2025
Merged

Register icons for git stash and nb shelve actions#8373
mbien merged 1 commit into
apache:masterfrom
mbien:stash-and-shelve-action-icons

Conversation

@mbien

Copy link
Copy Markdown
Member

So that they can be added to the tool bar.

image

The action registration in the context menu is a bit of a mess right now. Git stash via jgit does also only support repo wide "stash push", while shelve works on the selection. This isn't communicated anywhere in the UI though, so I updated the text for the shelve action to "Shelve selected Changes".

The way to get to the shelve action is via the stash window - which is super weird (one is global the other is selection based). Custom toolbar makes this easier.

@mbienmbien added UI User Interface git [ci] enable versioning job ci:dev-build [ci] produce a dev-build zip artifact (7 days expiration, see link on workflow summary page) labels Mar 30, 2025
@mbienmbien added this to the NB26 milestone Mar 30, 2025
Comment on lines +303 to +312
// TODO git unstash in shelve action?

@NbBundle.Messages({
"CTL_UnstashMenu.name=&Git Unstash",
"CTL_UnstashMenu.name.popup=Git Unstash",
"# {0} - stash index", "# {1} - stash name", "CTL_UnstashAction.name={0} - {1}"
})
private static class UnshelveMenu {
private static class UnstashMenu {

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this might indicate that things were copied around. Git unstash should not be in the shelve action.

this lead also to this:

// actions depending on the central patch storage
ShelveChangesActionProvideractionProvider = ShelveChangesActionsRegistry.getInstance().getActionProvider(vs[0]);

which is not the patch storage, but the git unstash action (unshelve is actually registered a few lines before that)

but this would be for other PRs.

@mbien
mbienforce-pushed the stash-and-shelve-action-icons branch 2 times, most recently from 4c5e954 to a667b48CompareApril 5, 2025 09:10
So that they can be added to the toolbar.
@mbien
mbienforce-pushed the stash-and-shelve-action-icons branch from a667b48 to e78d951CompareApril 5, 2025 09:12
Comment on lines +61 to +63
// TODO pick/create better icon
@StaticResource
private static final String ICON_RESOURCE = "org/netbeans/modules/git/resources/icons/get_clean.png"; //NOI18N

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eirikbakke having icons for "git stash" and "shelve changes" would be great I think. Possibly the clean icon combined with the diff icon or something like that? (not for NB 26, maybe some day later)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, I can look at that the next time I'm doing icon stuff.

Where does the word "shelve" come from? It sounds synonymous with "stash", but it's not an actual git command. Looking at this StackOverflow question, it's an IntelliJ term that seems to confuse users. Maybe it should be renamed in the NetBeans UI?

Git stash via jgit does also only support repo wide "stash push", while shelve works on the selection.

What is the "selection" referred to here?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shelve is used in Subversion, Perforce and Mercurial (with some extensions). They are used for similar purpose as git stash

@mbienmbienApr 7, 2025

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

shelve moves changes into patch files and stores those locally, this should work on any VCS. Stash is just git stash. Shelve will only shelve the selected files. Stash will stash the whole repo since I don't think jgit supports file stashing yet (git does for quite a while).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, maybe I understand now. Perhaps "Stash to Patch File" might be a better name?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here's the icon I drew for Shelve, if you think it makes sense:

image

icon_shelve

For stash, we could use ide/git/src/org/netbeans/modules/git/resources/icons/stashes.png, which I have redrawn in SVG as follows:

image

(The latter is part of #8424 )

I can install those two icons in a separate PR later.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did this PR actually add the Stash and Shelve actions to a toolbar somewhere? Which toolbar is it, and how do I access it? (Can't see the context from the very cropped screenshot on top.)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it only registered the icons for the actions, this is the precondition to add something to the toolbar. User has to do this manually via right click -> customize toolbar.

That is why it wasn't super important for me to pick the right icons. It is just for testing purposes mostly and to get an idea how useful shelve still is. We should update them to the new icons for NB 27 though.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, now I see. Thanks! One annoying thing about the main toolbar is that icons shown there must be prepared in both 16x16 and 24x24 versions. But I can do it for this action. (One would think that the SVG could just be scaled up 150%, but it doesn't look good, as borders end up with a non-standard thickness, and horizontal/vertical lines get pushed off the pixel grid.)

@matthiasblaesingmatthiasblaesing left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While I agree, that wording/nesting/workflow might be improved, the target of this PR is clearly spelled out and improves situation for people needing the actions.

Updated icons would be great, but that is also independent from this PR and also independent from the wording.

Lets get this in, it is an improvement.

@mbien
mbien merged commit 8b2daa3 into apache:masterApr 14, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci:dev-build[ci] produce a dev-build zip artifact (7 days expiration, see link on workflow summary page)git[ci] enable versioning jobUIUser Interface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mbien@eirikbakke@lkishalmi@matthiasblaesing
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Register icons for git stash and nb shelve actions - #8373

Merged
mbien merged 1 commit into
apache:masterfrom
mbien:stash-and-shelve-action-icons
Apr 14, 2025
Merged

Register icons for git stash and nb shelve actions#8373
mbien merged 1 commit into
apache:masterfrom
mbien:stash-and-shelve-action-icons

Conversation

@mbien

Copy link
Copy Markdown
Member

So that they can be added to the tool bar.

image

The action registration in the context menu is a bit of a mess right now. Git stash via jgit does also only support repo wide "stash push", while shelve works on the selection. This isn't communicated anywhere in the UI though, so I updated the text for the shelve action to "Shelve selected Changes".

The way to get to the shelve action is via the stash window - which is super weird (one is global the other is selection based). Custom toolbar makes this easier.

@mbienmbien added UI User Interface git [ci] enable versioning job ci:dev-build [ci] produce a dev-build zip artifact (7 days expiration, see link on workflow summary page) labels Mar 30, 2025
@mbienmbien added this to the NB26 milestone Mar 30, 2025
Comment on lines +303 to +312
// TODO git unstash in shelve action?

@NbBundle.Messages({
"CTL_UnstashMenu.name=&Git Unstash",
"CTL_UnstashMenu.name.popup=Git Unstash",
"# {0} - stash index", "# {1} - stash name", "CTL_UnstashAction.name={0} - {1}"
})
private static class UnshelveMenu {
private static class UnstashMenu {

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this might indicate that things were copied around. Git unstash should not be in the shelve action.

this lead also to this:

// actions depending on the central patch storage
ShelveChangesActionProvideractionProvider = ShelveChangesActionsRegistry.getInstance().getActionProvider(vs[0]);

which is not the patch storage, but the git unstash action (unshelve is actually registered a few lines before that)

but this would be for other PRs.

@mbien
mbienforce-pushed the stash-and-shelve-action-icons branch 2 times, most recently from 4c5e954 to a667b48CompareApril 5, 2025 09:10
So that they can be added to the toolbar.
@mbien
mbienforce-pushed the stash-and-shelve-action-icons branch from a667b48 to e78d951CompareApril 5, 2025 09:12
Comment on lines +61 to +63
// TODO pick/create better icon
@StaticResource
private static final String ICON_RESOURCE = "org/netbeans/modules/git/resources/icons/get_clean.png"; //NOI18N

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eirikbakke having icons for "git stash" and "shelve changes" would be great I think. Possibly the clean icon combined with the diff icon or something like that? (not for NB 26, maybe some day later)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, I can look at that the next time I'm doing icon stuff.

Where does the word "shelve" come from? It sounds synonymous with "stash", but it's not an actual git command. Looking at this StackOverflow question, it's an IntelliJ term that seems to confuse users. Maybe it should be renamed in the NetBeans UI?

Git stash via jgit does also only support repo wide "stash push", while shelve works on the selection.

What is the "selection" referred to here?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shelve is used in Subversion, Perforce and Mercurial (with some extensions). They are used for similar purpose as git stash

@mbienmbienApr 7, 2025

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

shelve moves changes into patch files and stores those locally, this should work on any VCS. Stash is just git stash. Shelve will only shelve the selected files. Stash will stash the whole repo since I don't think jgit supports file stashing yet (git does for quite a while).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, maybe I understand now. Perhaps "Stash to Patch File" might be a better name?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here's the icon I drew for Shelve, if you think it makes sense:

image

icon_shelve

For stash, we could use ide/git/src/org/netbeans/modules/git/resources/icons/stashes.png, which I have redrawn in SVG as follows:

image

(The latter is part of #8424 )

I can install those two icons in a separate PR later.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did this PR actually add the Stash and Shelve actions to a toolbar somewhere? Which toolbar is it, and how do I access it? (Can't see the context from the very cropped screenshot on top.)

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it only registered the icons for the actions, this is the precondition to add something to the toolbar. User has to do this manually via right click -> customize toolbar.

That is why it wasn't super important for me to pick the right icons. It is just for testing purposes mostly and to get an idea how useful shelve still is. We should update them to the new icons for NB 27 though.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, now I see. Thanks! One annoying thing about the main toolbar is that icons shown there must be prepared in both 16x16 and 24x24 versions. But I can do it for this action. (One would think that the SVG could just be scaled up 150%, but it doesn't look good, as borders end up with a non-standard thickness, and horizontal/vertical lines get pushed off the pixel grid.)

@matthiasblaesingmatthiasblaesing left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While I agree, that wording/nesting/workflow might be improved, the target of this PR is clearly spelled out and improves situation for people needing the actions.

Updated icons would be great, but that is also independent from this PR and also independent from the wording.

Lets get this in, it is an improvement.

@mbien
mbien merged commit 8b2daa3 into apache:masterApr 14, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci:dev-build[ci] produce a dev-build zip artifact (7 days expiration, see link on workflow summary page)git[ci] enable versioning jobUIUser Interface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mbien@eirikbakke@lkishalmi@matthiasblaesing