Skip to content

Add support for icons for TouchBar submenus (and maybe other customizations) #1105

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

Closed
jabrouwer82 opened this issue Oct 7, 2020 · 15 comments
Labels
Feature Request New features request. Not an existing issue or bug. UI Issues related to UI elements, tabs, scrollbars, window resizing, etc.
Milestone

Comments

@jabrouwer82
Copy link

According to the code, :menu doesn't support setting an icon for touchbar submenus.

For example in the hypothetical nested menu TouchBar.Example.Thing, TouchBar.Example can only be plain a plain text (or emoji) button, but TouchBar.Example.Thing could have an icon declared in the :menu command that defined it.

The (semi) original touchbar implementation (#715) suggests using the macmenu command to support extra customization options.

@ychin
Copy link
Member

ychin commented Oct 7, 2020

Yes that's correct. Thinking more about it I think just fixing Vim's :menu variants to be able to set icon on TouchBar subfolders may be better and more consistent for users instead of having to learn a new thing.

@ychin ychin added this to the Backlog milestone Oct 7, 2020
@ychin ychin added the UI Issues related to UI elements, tabs, scrollbars, window resizing, etc. label Oct 7, 2020
@jabrouwer82
Copy link
Author

But other options like color, priority, etc, would probably need to be something special, right?

@ychin
Copy link
Member

ychin commented Oct 8, 2020

I haven't quite decided on them, but yes, maybe. The macmenu command is always a little odd and I would like to keep things as consistent as possible. So if you define icons through the normal :menu commands for toolbar and non-subfolder Touch Bar items, then ideally that's the way we define icons for Touch Bar subfolders too, just to reduce the cognitive load. I haven't looked at the code yet though, so I don't have a sense how big a refactor from upstream that is. It's likely that it's a simple check that we just need to fix.

Some other special items like the emoji picker is specified by special menu item names, like amenu TouchBar.-characterpicker- <Nop> or -flexspace-. Those probably won't fly for color and priority though. I think priority is relatively low in usefulness because you can always choose to enable/disable menu items, but if we have a generic way to hook it up, why not.

@DesantBucie
Copy link

Maybe not entirely on topic but is it possible to update touchbar names dynamicaly during one session? Like when I i press button name1 it changes to name2?

@ychin
Copy link
Member

ychin commented Oct 15, 2020

Use :tmenu

@DesantBucie
Copy link

Yea I tried, but it does not seem to update in the same session. Anyway thanks :)

@ychin
Copy link
Member

ychin commented Oct 19, 2020

@DesantBucie that should not be the case. Do you have the exact sequence of commands you used?

@DesantBucie
Copy link

DesantBucie commented Oct 19, 2020

Well I tried something like this

let g:TabSpaces = 4

function! TabSpaces()

    if g:TabSpaces == 4
        set tabstop = 2 | set shiftwidth = 2
        let g:TabSpaces = 2
        
    else
        set tabstop = 4 | set shiftwidth = 4
        let g:TabSpaces = 4
        
    endif
endfunction

nmenu TouchBar.Settings.Tab :TabSpaces<CR>
if g:TabSpaces == 4
    tmenu TouchBar.Settings.Tab Set Tab 2
else
    tmenu TouchBar.Settings.Tab Set Tab 4
endif

@ychin
Copy link
Member

ychin commented Oct 19, 2020

@DesantBucie You need to debug your script more and make sure it works before even trying out the fancier Touch Bar label functionality. I don't think your script currently works at all.

  1. You can't put spaces after "=" in set tabstop = 2(it should be throwing errors at you). You have to do set tabstop=2.
  2. You are not invoking the tmenu command inside the function so it's not going to magically update the label for you after you call TabSpaces().
  3. Your menu is calling :TabSpaces which assumes TabSpaces is a command, but it is a function instead. You need to be doing :call TabSpaces()<CR> instead.
  4. Try to use nnoremenu instead of nmenu because it's more foolproof. If you don't mind it showing up in other modes (insert, command, etc), you could consider using anoremenu.

@DesantBucie
Copy link

I fixed 1,2,3, put both tmenus to function, got "default" one on vimrc and it works like magic. And no I wanted it to be available only on normal mode so it's fine. Thanks awfully for your time.

@ychin ychin added the Feature Request New features request. Not an existing issue or bug. label Dec 28, 2020
@destructobeam
Copy link

Sorry to just hop in here, this could possibly be a separate issue, but is related to icons. In the toolbar and Touch Bar would it be possible to add SF Symbols support? So you could do something like:

nnoremenu icon=cross.case.fill TouchBar.Fix :ALEFix <CR>

@ychin
Copy link
Member

ychin commented Feb 8, 2021

Yeah it's something on my mind. I will likely touch these after the next release. It will also make the toolbars look better and fit macOS 11 better.

ychin added a commit to ychin/macvim that referenced this issue Oct 30, 2022
Can now specify SF Symbols for tool bar / Touch Bar icons. The API
remains the same where we use the "icon=" syntax in Vim menus to specify
the icon, and just passing in the symbol name (e.g. 'gear.circle'). Also
extended this to system named images like 'NSAdvanced' (the old gear
shaped image), as previously we only had a specical case for Touch Bar
system named template images. When loading the icon, MacVim will
automatically determine whether it's an SF Symbol, system named image,
or a file.

SF Symbols can also be customized to be of a particular symbol style, or
have a variable number set, by using colon-delimted option strings. For
example: `aqi.high:palette:variable-0.5` is a symbol that uses the
palette style, set to 0.5 variable value.

Menu items now also support icons, the same as tool bars. We still don't
support specifying icons for a submenu (which has been an issue for
Touch Bar) since the Vim menu API doesn't support a way to do so.

Also add an ability to use a `:template` value to specify that an image
file is a template image. This is important to fix a minor regression
introduced in macvim-dev#1214 where every image loaded in were assumed to be
template.

Add documentation to make this clear. See `:help macvim-toolbar-icon`.

Also see comment in macvim-dev#1105 which requested this feature
@ychin
Copy link
Member

ychin commented Oct 30, 2022

@destructobeam, #1329 will add the ability to use SF Symbols for tool bar and Touch Bar icons! This includes the ability to customize the symbol to use palette color etc.

As for the original request, @jabrouwer82 , submenu icons isn't supported yet. I may eventually add this but there are a lot of other things on my plate that are higher priority MacVim-wise. One compromise is that SF Symbols can be used in raw text form. You can actually copy the symbol out and paste it in as text (easiest way to do so is by using the SF Symbols app that you can download from Apple). For example, you can do this to make a submenu with the SF Symbol "gearshape.2.fill" as the icon for it: an icon=arrowshape.backward TouchBar.􀥏.Back <Nop> (you may need to copy the string out to a text edit program to see this as web browser doesn't show it correctly). It doesn't work as well as specifying a symbol using icon=, because the OS treats the symbol as text rather than an icon so it looks a little smaller, but it works. You also cannot customize the style of the symbol (e.g. palette, multicolor, etc) unlike using the icon= syntax as introduced in #1329. So it's not a slam dunk.

@ychin
Copy link
Member

ychin commented Oct 31, 2023

With the release of the M3 14" MacBook Pro, Apple has officially stopped making any new hardware that has a Touch Bar, with the M2 13" MacBook Pro being the last product that had it. Because of that, there will be no more effort put in for new Touch Bar features, sorry.

Meanwhile, 🪦🫗 Touch Bar. I personally liked it despite it being a little polarizing and seemed to never really catch on with other third-party apps (or even first-party Apple ones).

@ychin ychin closed this as not planned Won't fix, can't repro, duplicate, stale Oct 31, 2023
@destructobeam
Copy link

@ychin Late reply, but just a thanks for your work on this. I too liked the touch bar, a lot, and I will miss it. I feel like the disdain for it from a few popular commentators/podcasters killed this very useful feature.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Feature Request New features request. Not an existing issue or bug. UI Issues related to UI elements, tabs, scrollbars, window resizing, etc.
Projects
None yet
Development

No branches or pull requests

4 participants