Loading ...
Sorry, an error occurred while loading the content.
 

Re: Command-key menu equivalents

Expand Messages
  • Dany St-Amant
    I don t know why, but I haven t yet learned the lesson Always compile/test code before publishing it . I forgot a set of curly braces. ... { ... }
    Message 1 of 16 , Dec 10 7:54 PM
      I don't know why, but I haven't yet learned the lesson
      "Always compile/test code before publishing it".
      I forgot a set of curly braces.

      Le Lundi 10 décembre 2001, à 10:01 , Dany St-Amant a écrit :

      > You can replace the code around there by:
      >
      > /* TODO: should override be allowed? Require YAO or could use
      > 'winaltkey' */
      > if (theEvent->modifiers & cmdKey)
      {
      > /* Only accept CMD alone or with CAPLOCKS and the mouse button.
      > * Why the mouse button? */
      > #ifndef USE_CARBONIZED
      > if ((theEvent->modifiers & (~(cmdKey | btnState | alphaLock))) == 0)
      > {
      > menu = MenuKey(key_char);
      > #else
      > menu = MenuEvent(theEvent);
      > #endif
      > if (HiWord(menu))
      > {
      > gui_mac_handle_menu(menu);
      > return;
      > }
      > #ifndef USE_CARBONIZED
      > }
      > #endif
      }
    • raindog@mediaone.net
      ... I see now the difficulty of supporting Option mappings--thanks for the explanation. Is this an issue for menu equivalents, though? Since MenuEvent() would
      Message 2 of 16 , Dec 10 10:11 PM
        On Monday, December 10, 2001, at 07:01 PM, Dany St-Amant wrote:

        > As for the problem with the meta (option) key, it still apply when
        > the command key is used (unless the control key is also used).
        > The problem with the option key have two side.
        >
        > a. <M-x> is not equal to (x | 0x80)
        > b. <M-x> change depending on the keyboard used.
        > ...

        I see now the difficulty of supporting Option mappings--thanks for
        the explanation. Is this an issue for menu equivalents, though?
        Since MenuEvent() would do the work of extracting the modifiers,
        it should be possible to use any combination of modifiers safely.
        Of course, registering these with the Menu Manager in the first
        place would require parsing a string like "<M-C-x>" to get, say,
        MOD_MASK_ALT|MOD_MASK_CTRL and the character 'x'. But that seems
        a simpler problem than the one that find_special_key() addresses
        already.

        > The patch seem to be functional (beside special keys), but I don't
        > like (and I'm sure Bram agree with me) the idea of having to provide
        > two different menu.vim or having to many :if has() in menu.vim or
        > having to redefine the same menu definition more than once.

        I agree. On the other hand, some sort of dichotomy seems inevitable
        if one wants to respect UI conventions on multiple platforms. Could
        platform-specific settings like this be handled in the same way that
        multiple languages (:he multilang) are?


        P.S. I'm now pretty certain that some of my mapping problems are due
        to my not having an up-to-date source tree. I've applied patches 1-93
        to the 6.0 sources, and also vim60_93_mac.diff from your site. Am I
        missing anything?
      • Benji Fisher
        ... I tried the patch, and it seems to work fine. Thanks! The only slight worry is that patch reported an offset of 183 lines. Did you base the patch on the
        Message 3 of 16 , Dec 11 2:06 PM
          On Sunday, December 9, 2001, at 04:44 PM, raindog@... wrote:

          > On Tuesday, November 27, 2001, at 02:37 PM, Benji Fisher wrote:
          >
          > > Now that I can map <D-x> again, I will borrow the mac.vim file that
          > > Axel Kielhorn distributed. It enables several of the standard Mac
          > > keyboard shortcuts.
          > >
          > > BTW, I see keyboard shortcuts right-justified in several menus.
          > > (For example, the Mail and File menus of Mail.app list a few
          > > shortcuts.) The Apple developers didn't manually insert the right
          > > number of spaces, did they?
          >
          > They didn't, and here's a patch that enables the display
          > (right-justified,
          > with clover symbol) of command-key equivalents in Vim menus. It does
          > this
          > by looking for a command-key-like keycode in the accelerator text of a
          > menu item. Examples include "<D-t>", "<D-C-8>", "<C-p>", and "<S-]>";
          > these could be set with :amenu commands along the lines of the
          > following:
          >
          > :amenu MyMenu.MyCmd<Tab><D-t> <D-t>
          > :amenu MyMenu.MyCmd<Tab><D-C-8> <D-C-8>
          > :amenu MyMenu.MyCmd<Tab><C-p> :ls<CR>
          > :amenu MyMenu.MyCmd<Tab><S-]> :qa<CR>
          >
          > A few remarks:
          > [snip]

          I tried the patch, and it seems to work fine. Thanks! The only
          slight worry is that patch reported an offset of 183 lines. Did you
          base the patch on the original vim 6.0 sources (I assume so) or on top
          of Dany St-Amant's patches?

          If anyone wants me to post the binary, give a shout. Otherwise, I
          will wait for further improvements (such as a :browse that works).

          --Benji Fisher
        • raindog@mediaone.net
          ... On top of patches 1-93 and one of Dany s patches (I didn t know there are others). Are there instructions somewhere with a list of the necessary patches?
          Message 4 of 16 , Dec 12 8:16 AM
            On Tuesday, December 11, 2001, at 02:06 PM, Benji Fisher wrote:
            >
            > > On Sunday, December 9, 2001, at 04:44 PM, raindog@... wrote:
            > >
            > > here's a patch that enables the display (right-justified,
            > > with clover symbol) of command-key equivalents in Vim menus.
            >
            > I tried the patch, and it seems to work fine. Thanks! The only slight
            > worry is that patch reported an offset of 183 lines. Did you base the
            > patch on the original vim 6.0 sources (I assume so) or on top of Dany
            > St-Amant's patches?

            On top of patches 1-93 and one of Dany's patches (I didn't know there
            are others). Are there instructions somewhere with a list of the
            necessary patches?

            RD
          • Benji Fisher
            ... I am afraid we are not that organized. Pretty soon, dany should send his patch to Bram, and it will be made official. In the mean time, you just have to
            Message 5 of 16 , Dec 12 5:17 PM
              raindog@... wrote:
              >
              > On Tuesday, December 11, 2001, at 02:06 PM, Benji Fisher wrote:
              > >
              > > > On Sunday, December 9, 2001, at 04:44 PM, raindog@... wrote:
              > > >
              > > > here's a patch that enables the display (right-justified,
              > > > with clover symbol) of command-key equivalents in Vim menus.
              > >
              > > I tried the patch, and it seems to work fine. Thanks! The only slight
              > > worry is that patch reported an offset of 183 lines. Did you base the
              > > patch on the original vim 6.0 sources (I assume so) or on top of Dany
              > > St-Amant's patches?
              >
              > On top of patches 1-93 and one of Dany's patches (I didn't know there
              > are others). Are there instructions somewhere with a list of the
              > necessary patches?

              I am afraid we are not that organized. Pretty soon, dany should send his
              patch to Bram, and it will be made official. In the mean time, you just have
              to watch this list (or have a look at the archive). If you want, I'll send
              you a copy of the patch off the list (or maybe Dany will send you something
              more up-to-date).

              --Benji Fisher
            • Benji Fisher
              ... I have been using this for a while but only recently noticed (after all, I am a typical vim user and rarely use the menus, even my own ;) that this only
              Message 6 of 16 , Jan 11, 2002
                On Sunday, December 9, 2001, at 04:44 PM, raindog@... wrote:

                > [snip]
                > They didn't, and here's a patch that enables the display
                > (right-justified,
                > with clover symbol) of command-key equivalents in Vim menus. It does
                > this
                > by looking for a command-key-like keycode in the accelerator text of a
                > menu item. Examples include "<D-t>", "<D-C-8>", "<C-p>", and "<S-]>";
                > these could be set with :amenu commands along the lines of the
                > following:
                >
                > :amenu MyMenu.MyCmd<Tab><D-t> <D-t>
                > :amenu MyMenu.MyCmd<Tab><D-C-8> <D-C-8>
                > :amenu MyMenu.MyCmd<Tab><C-p> :ls<CR>
                > :amenu MyMenu.MyCmd<Tab><S-]> :qa<CR>
                >
                > A few remarks:
                >
                > [snip]

                I have been using this for a while but only recently noticed (after
                all, I am a typical vim user and rarely use the menus, even my own ;)
                that this only works with modified keys. Is there any way to get '\t'
                (my keyboard shortcut for running tex) right-justified in the menu?

                :menu TeX.run\ tex<Tab>\t \t
                :map \t :call TeX()<CR>

                The menu command and the key mapping both work, but I do not see '\t' in
                the menu.

                --Benji Fisher

                P.S. Does anyone need any of the latest 30 patches applied to Vim.app ?
              • raindog@mediaone.net
                ... Not without a good deal of effort, I m afraid. Carbon menu routines support only single-key equivalents with optional modifiers. To display arbitrary
                Message 7 of 16 , Jan 11, 2002
                  On Friday, January 11, 2002, at 11:20 AM, Benji Fisher wrote:

                  > :menu TeX.run\ tex<Tab>\t \t
                  > :map \t :call TeX()<CR>
                  >
                  > Is there any way to get '\t' (my keyboard shortcut for running
                  > tex) right-justified in the menu?

                  Not without a good deal of effort, I'm afraid. Carbon menu routines
                  support only single-key equivalents with optional modifiers. To display
                  arbitrary text, one would have to implement a custom menu (known as an
                  "MDEF")--not an easy task thanks to I18N considerations. (It's a
                  different
                  story in Cocoa, incidentally, where it looks to be a relatively
                  simple matter
                  of overriding a couple of NSMenuItemCell methods.)

                  > The menu command and the key mapping both work, but I do not see
                  > '\t' in
                  > the menu.

                  Out of curiosity, does ":menu TeX.run\ tex<Tab><D-t> :call TeX()<CR>"
                  work for you (i.e., does it allow you to type Cmd-t to run TeX)?
                  Since I applied Dany St-Amant's patch (correctly this time, I think),
                  command-key equivalents such as this don't work for me, unless at least
                  one other modifier key is involved. This one has me stumped.

                  RD
                • Benji Fisher
                  ... That s too bad. How about a workaround, so that we can use the same menu files in Mac OS X as in other OS s? A couple of spaces between the run TeX and
                  Message 8 of 16 , Jan 12, 2002
                    raindog@... wrote:
                    >
                    > On Friday, January 11, 2002, at 11:20 AM, Benji Fisher wrote:
                    >
                    > > :menu TeX.run\ tex<Tab>\t \t
                    > > :map \t :call TeX()<CR>
                    > >
                    > > Is there any way to get '\t' (my keyboard shortcut for running
                    > > tex) right-justified in the menu?
                    >
                    > Not without a good deal of effort, I'm afraid. Carbon menu routines
                    > support only single-key equivalents with optional modifiers. To display
                    > arbitrary text, one would have to implement a custom menu (known as an
                    > "MDEF")--not an easy task thanks to I18N considerations. (It's a
                    > different
                    > story in Cocoa, incidentally, where it looks to be a relatively
                    > simple matter
                    > of overriding a couple of NSMenuItemCell methods.)

                    That's too bad. How about a workaround, so that we can use the same menu
                    files in Mac OS X as in other OS's? A couple of spaces between the "run TeX"
                    and the "\t" would be good enough. A little extra work might get some
                    approximation to right-justified.

                    > > The menu command and the key mapping both work, but I do not see
                    > > '\t' in
                    > > the menu.
                    >
                    > Out of curiosity, does ":menu TeX.run\ tex<Tab><D-t> :call TeX()<CR>"
                    > work for you (i.e., does it allow you to type Cmd-t to run TeX)?
                    > Since I applied Dany St-Amant's patch (correctly this time, I think),
                    > command-key equivalents such as this don't work for me, unless at least
                    > one other modifier key is involved. This one has me stumped.

                    I cannot test it right now, but I think that <D-s> and <D-S> (or maybe
                    <D-S-s>) are working properly for File.Save and File.Save\ As. The latter
                    brings up a browser window, which still does not work. :-( Maybe someone else
                    is using the binary I posted, with the Mac-customized File menu, and can test
                    it now.

                    --Benji Fisher
                  • Benji Fisher
                    ... I think I see the problem now. Adding to the :menu command does not do anything besides add (right justified) text to the menu item. You
                    Message 9 of 16 , Jan 14, 2002
                      On Saturday, January 12, 2002, at 12:19 PM, Benji Fisher wrote:

                      > raindog@... wrote:
                      >>
                      >> On Friday, January 11, 2002, at 11:20 AM, Benji Fisher wrote:
                      >>> [snip]
                      >> Out of curiosity, does ":menu TeX.run\ tex<Tab><D-t> :call TeX()<CR>"
                      >> work for you (i.e., does it allow you to type Cmd-t to run TeX)?
                      >> Since I applied Dany St-Amant's patch (correctly this time, I think),
                      >> command-key equivalents such as this don't work for me, unless at least
                      >> one other modifier key is involved. This one has me stumped.

                      I think I see the problem now. Adding "<Tab><D-t>" to the :menu
                      command does not do anything besides add (right justified) text to the
                      menu item. You need a :map command as well. From my gvimrc file:

                      aunmenu &File.&New
                      amenu 10.325 &File.&New<Tab><D-n> <D-n>
                      nmap <D-n> :confirm enew<CR>

                      and there are also :[vico]map lines. I just tested it: Cmd-n seems to
                      work. (I think I tested all of the menu commands when I wrote the
                      gvimrc file a couple of months ago.)

                      I think the binary on my i-disk did not include the patch for
                      showing menu equivalents. I have just posted a version that includes
                      this patch, along with the official ones through 131.

                      --Benji Fisher
                    • raindog@mediaone.net
                      ... It s supposed to do more, actually: gui_mac_doKeyEvent() dispatches each keystroke to the Menu Manager, which responds with the ID of a menu if the key is
                      Message 10 of 16 , Jan 14, 2002
                        On Saturday, January 12, 2002, at 12:19 PM, Benji Fisher wrote:
                        >
                        > raindog@... wrote:
                        >>
                        >> Out of curiosity, does ":menu TeX.run\ tex<Tab><D-t> :call TeX()<CR>"
                        >> work for you (i.e., does it allow you to type Cmd-t to run TeX)?
                        >> Since I applied Dany St-Amant's patch (correctly this time, I think),
                        >> command-key equivalents such as this don't work for me, unless at
                        >> least
                        >> one other modifier key is involved. This one has me stumped.
                        >
                        > I think I see the problem now. Adding "<Tab><D-t>" to the
                        > :menu command does not do anything besides add (right justified)
                        > text to the menu item. You need a :map command as well.

                        It's supposed to do more, actually: gui_mac_doKeyEvent() dispatches each
                        keystroke to the Menu Manager, which responds with the ID of a menu
                        if the
                        key is a registered equivalent for one of that menu's items. In
                        that case,
                        the command associated with the item is executed.

                        This works in some cases:

                        :menu File.Test<Tab><D-S-t> :echo "Test"<CR>

                        causes Cmd-Shift-t to print "Test", but

                        :menu File.Test<Tab><D-t> :echo "Test"<CR>

                        doesn't have the same effect for Cmd-t.

                        RD
                      • Benji Fisher
                        ... I would rather not have the menu code define key mappings. Vim scripts written for use on OS X should work the same on other OS s, and vice versa. Of
                        Message 11 of 16 , Jan 15, 2002
                          raindog@... wrote:
                          >
                          > On Saturday, January 12, 2002, at 12:19 PM, Benji Fisher wrote:
                          > >
                          > > raindog@... wrote:
                          > >>
                          > >> Out of curiosity, does ":menu TeX.run\ tex<Tab><D-t> :call TeX()<CR>"
                          > >> work for you (i.e., does it allow you to type Cmd-t to run TeX)?
                          > >> Since I applied Dany St-Amant's patch (correctly this time, I think),
                          > >> command-key equivalents such as this don't work for me, unless at
                          > >> least
                          > >> one other modifier key is involved. This one has me stumped.
                          > >
                          > > I think I see the problem now. Adding "<Tab><D-t>" to the
                          > > :menu command does not do anything besides add (right justified)
                          > > text to the menu item. You need a :map command as well.
                          >
                          > It's supposed to do more, actually: gui_mac_doKeyEvent() dispatches each
                          > keystroke to the Menu Manager, which responds with the ID of a menu
                          > if the
                          > key is a registered equivalent for one of that menu's items. In
                          > that case,
                          > the command associated with the item is executed.
                          >
                          > This works in some cases:
                          >
                          > :menu File.Test<Tab><D-S-t> :echo "Test"<CR>
                          >
                          > causes Cmd-Shift-t to print "Test", but
                          >
                          > :menu File.Test<Tab><D-t> :echo "Test"<CR>
                          >
                          > doesn't have the same effect for Cmd-t.

                          I would rather not have the menu code define key mappings. Vim scripts
                          written for use on OS X should work the same on other OS's, and vice versa.
                          Of course, there is the difference that <D-> is not available on other
                          systems, but this difference is visible to the person writing the menu in the
                          vim script.

                          --Benji Fisher
                        Your message has been successfully submitted and would be delivered to recipients shortly.