[MlMt] Sharing my current key bindings

Kee Hinckley kee+freron at hinckley.com
Fri Sep 19 13:01:24 EDT 2014


I have a bunch of key bindings for mass selection and deletion of mail 
messages. The deletion ones can be rather dangerous, so sometimes I just 
use the selection ones and then hit delete (or file, or whatever is 
appropriate).

(I also have an action that sends me a Growl notification of the 
subjects and number of messages deleted if I delete more than a few, 
that's useful for when I accidentally go overboard. I can upload that if 
people are interested.)

The selection ones are particularly useful now that I'm using the 
recently shared modification that adds an extra pane showing the 
selected messages and (in my case) everything else with the same 
subject. It makes it far easier to see what I just selected.

Of those, I probably use t, i, s, and f most often. 'dt' is great for 
nuking a conversation you are done with. 'di' is good for deleting just 
the conversation in your inbox, but not the items you've filed already 
(e.g. you filed that useful post to MailMate, but you want to delete all 
the replies). 'ds' is good for when threading isn't capturing 
everything, or it's a bunch of automated messages with the same subject. 
And 'df' is great for email notifications from online services (a dozen 
messages from a store about new products).

In any case, here they are if anyone would like to try them. If you 
haven't modified keybindings, they go in 
`~/MailMate/Resources/KeyBindings/Kee.plist` and then you'd set your 
Custom Key Bindings in preferences to 'Kee'.

Thanks to all the other MailMate users who made it possible to build 
these. And of course, our favorite developer!

```json
{
     // "r"     = ( "replyAll:", "selectAll:", "decreaseQuoteLevel:", 
"deselectAll:", "moveToBeginningOfDocument:", "insertNewline:", 
"insertNewline:", "moveToBeginningOfDocument:" );
     "r"     = ( "addTag:", "HTMLReply", "replyAll:" );
     "c"     = "collapseThread:";
     "e"     = "expandThread:";
     "j"     = "nextMessage:";
     "k"     = "previousThread:";
     "n"     = "nextUnreadMessage:";
     "p"     = "previousUnreadMessage:";
     "J" = ( "markAsNotJunk:", "removeTag:", "\\Seen", 
"moveToMailbox:",'INBOX');

     // delete commands
     "d" = {
             // Delete entire thread
             "t" = ( "selectThread:", "deleteMessage:" );
             // Delete the thread in the inbox, but leave filed items 
alone
             "i"     = ( "selectWithFilter:", "#thread-id = 
${#thread-id} and #source.path = 'INBOX'", "deleteMessage:" );
             // Delete thread except mail that was mine (I sent)
             "m" = ( "selectWithFilter:", "#thread-id = ${#thread-id} 
and #source.path != 'Sent Messages' and #source.path != 'Sent Items'", 
"deleteMessage:" );
             // Delete thread except the stuff in inbox or sent (other)
             "o"     = ( "selectWithFilter:", "#thread-id = 
${#thread-id} and #source.path != 'INBOX' and #source.path != 'Sent 
Messages' and #source.path != 'Sent Items'", "deleteMessage:" );
             // Delete the subject
             "s"     = ( "selectWithFilter:", "subject = '${subject}'", 
"moveToMailbox:", "trash" );
             // Delete by from address
             "f"     = ( "selectWithFilter:", "from.address = 
'${from.address}'", "moveToMailbox:", "trash" );
             // Delete any mail to this recipient
             "r"     = ( "selectWithFilter:", "#recipient.address = 
'${#recipient.address}'", "moveToMailbox:", "trash" );
     };

     // select commands (good if you aren't sure what the delete in 
thread action is going to do!)
     "s" = {
             // Select an entire thread
             "t"     = "selectThread:";
             // Select just the items in the thread that are in my 
inbox, leaving filed messages alone
             "i"     = ( "selectWithFilter:", "#thread-id = 
${#thread-id} and #source.path = 'INBOX'" );
             // Select thread except mail that was mine (I sent)
             "m"     = ( "selectWithFilter:", "#thread-id = 
${#thread-id} and #source.path != 'Sent Messages' and #source.path != 
'Sent Items'" );
             // Select thread except the stuff in inbox or sent (other)
             "o"     = ( "selectWithFilter:", "#thread-id = 
${#thread-id} and #source.path != 'INBOX' and #source.path != 'Sent 
Messages' and #source.path != 'Sent Items'" );
             // Select the subject
             "s"     = ( "selectWithFilter:", "subject = '${subject}'" 
);
             // Select by from address
             "f"     = ( "selectWithFilter:", "from.address = 
'${from.address}'" );
             // Select any mail to this recipient (warning, I've had 
this crash MailMate)
             "r"     = ( "selectWithFilter:", "#recipient.address = 
'${#recipient.address}'" );

             //"m"     = ( "selectWithFilter:", "#thread-id = 
${#thread-id} and #source.mailto !=[x] \\$SENT.source.mailto" );
             // "m"     = ( "selectWithFilter:", "#thread-id = 
${#thread-id} and from.address !=[x] \\$SENT.from.address" );

     };

     // FROM SOMEONE "c" = ( "showThread:", "showCorrespondence" );

     // Editing commands
     // bold selection
     "@b" = (selectWord:, setMark:, swapWithMark:, deleteToMark:, 
insertText:, "**", yank:, insertText:, " ", moveLeft:, insertText:, 
"**", moveRight:, deleteBackward:);
     // italicize selection
     "@i" = (selectWord:, setMark:, swapWithMark:, deleteToMark:, 
insertText:, "_", yank:, insertText:, " ", moveLeft:, insertText:, "_", 
moveRight:, deleteBackward:);
     // typewriterize selection
     "@t" = (selectWord:, setMark:, swapWithMark:, deleteToMark:, 
insertText:, "`", yank:, insertText:, " ", moveLeft:, insertText:, "`", 
moveRight:, deleteBackward:);
}
```
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freron.com/pipermail/mailmate/attachments/20140919/b191542b/attachment-0001.html>


More information about the mailmate mailing list