On Sun, Sep 05, 2021 at 05:25:16PM -0700, Tom Tunguz <ttun...@gmail.com> wrote:
> To be clear, I've tried this: > > macro *compose* \cx ":wq<enter><send-message>" > > On Sun, Sep 5, 2021 at 5:22 PM Tom Tunguz <ttun...@gmail.com> wrote: > > > I'd like to set a macro to send mail directly from the compose window > > using vim. > > > > In other words, I'm responding to a mail, I reply to it, open it in vim. > > Then I want to hit a macro and have it execute :wq<enter> and then > > <send-message>. > > > > I've tried > > > > bind macro S ":wq<enter><send-message>" > > > > but that doesn't work. Thank you for your help! Hi, I'll be very surprised if what you are trying to do can work. Firstly, I think the "compose" refers to the compose menu (http://www.mutt.org/doc/manual/#intro-compose), not the editor, which is a separate process. If you want a macro that you can enter while in vim (to save the file and then tell mutt to send the message), it would have to be a vim macro, not a mutt macro, and it would have to do something like place extra keystrokes into stdin for mutt to consume after vim has terminated. That might be possible, but I wouldn't know how to do that. You might have luck asking on the vim users mailing list (but see below). But I don't really know much about the compose menu. Perhaps I'm wrong. However, what might work is some feature of your overall environment, rather than individual programs like mutt or vim. For example, if you use X11, and run vim from a xterm, and it runs vim in the same xterm (i.e. not gvim), then you could create the macro as an Xresource like XTerm*VT100.Translations. It works at the terminal emulator level, rather than at the level of the programs running within the terminal emulator. Maybe something like this: ~/.xresources: XTerm*VT100.Translations: #override \ Ctrl <Key> F1: string(":wq\ny") No, that doesn't work. The y character gets lots. Vim must be reading it. And I think you can only translate a single keystroke combination, not multiple keys like \cx. If you use a mac, you might be able to do something similar with Karabiner, or Automator. Sorry, I think I've run out of ideas. It seems like too much effort to save a single keystroke. But since you're willing to expend three keystrokes "\cx", you could probably change it to \cy or similar, where the \c is a vim map that does :wq<CR> and the y is left for mutt to consume. That seems to work, and you don't even need to pause before the y. ~/.vimrc: map \c :wq<CR> map! \c :wq<CR> But it won't work if your editor is gvim, and its window isn't directly over the terminal emulator that mutt is in. It would be more reliable if you used vim rather than gvim as the editor, or make sure that your gvim window has the same size and position as mutt's terminal emulator window. cheers, raf