macvim icon indicating copy to clipboard operation
macvim copied to clipboard

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

Open jabrouwer82 opened this issue 4 years ago • 12 comments

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.

jabrouwer82 avatar Oct 07 '20 21:10 jabrouwer82

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 avatar Oct 07 '20 21:10 ychin

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

jabrouwer82 avatar Oct 08 '20 16:10 jabrouwer82

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.

ychin avatar Oct 08 '20 19:10 ychin

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?

DesantBucie avatar Oct 15 '20 21:10 DesantBucie

Use :tmenu

ychin avatar Oct 15 '20 22:10 ychin

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

DesantBucie avatar Oct 18 '20 18:10 DesantBucie

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

ychin avatar Oct 19 '20 00:10 ychin

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

DesantBucie avatar Oct 19 '20 13:10 DesantBucie

@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.

ychin avatar Oct 19 '20 18:10 ychin

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.

DesantBucie avatar Oct 19 '20 18:10 DesantBucie

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>

destructobeam avatar Feb 06 '21 03:02 destructobeam

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 avatar Feb 08 '21 18:02 ychin

@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 avatar Oct 30 '22 22:10 ychin

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 avatar Oct 31 '23 09:10 ychin

@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.

destructobeam avatar Feb 28 '24 01:02 destructobeam