What is the Keyboard Shortcut for Moving to the First/Last Message in Mail.app in Mac OS X Lion?

In Snow Leopard holding option-up arrow (for > 1s) will select the first message and option-down arrow will select the last message in Mail.app (see: What Is the Keyboard Shortcut for Moving to Last Message in Mac OS X Mail.app?) but this no longer works in Lion. Does anyone know if there is a new shortcut?


Solution 1:

Unfortunately, I can only offer workarounds...

You can deselect all messages e.g. by clicking the empty area if the list doesn't fill all vertical space, then press

  • ArrowUp to select the last message
  • ArrowDown to select the first message

To get the last message, press Cmd-A, Shift-ArrowUp, ArrowDown.


If you don't use Mail's full screen mode, you can do the following:

Open Automator and create a new Service that receives no input in Mail. From the Utilities library, add a Run AppleScript action by double-clicking. Then use the following script code:

on run {input, parameters}
    tell application "System Events"
        tell application "System Events"
            tell application process "Mail"
                select first row of table 1 of scroll area 1 of first group of second splitter group of first splitter group of first window
            end tell
        end tell
    end tell
end run

This script has been developed for the new three-column view. If you use the classic pre-Lion view, remove "of first group" from that script.

Save as Select first row and assign a keyboard shortcut, e.g. Option-UpArrow, in System Preferences » Keyboard » Keyboard Shortcuts » Services.

Create a new Service and repeat this, but replace first row by last row and name it Select last row.

These services will only be available in Mail, and select the first and last row respectively when you press the assigned keyboard shortcuts.


An alternative AppleScript, that works even in full screen mode and doesn't require the Accessibility API (UI scripting):

on run {input, parameters}
    tell application "Mail" to set selected messages of first message viewer to last item of messages of first message viewer
end run

Replace last item by first item for the first list element. Again, create two Services and assign keyboard shortcuts.

If you are in threaded view, select View » Expand all Conversations first, as single messages that are part of a thread cannot be selected, and it cannot easily be determined which messages belong to a thread.

The alternative script below will select the bottom-most non-threaded message in the list, bounded by 50 attempts to not run forever:

on run {input, parameters}
tell application "Mail"
    set cnt to number of items of messages of first message viewer
    set lastitem to item cnt of messages of first message viewer
    set selected messages of first message viewer to lastitem

    set offst to 0
    repeat while selected messages of first message viewer = missing value and offst is less than 50
        set offst to offst + 1
        set lastitem to item (cnt - offst) of messages of first message viewer
        set selected messages of first message viewer to lastitem
    end repeat
    offst
end tell
end run