Lighthouse has a new layout. Prefer the old one? Return to the old layout, and switch back any time from the link at the top of each page.

Feature request: hybrid widescreen + correspondence view

#3068

Am trying out MailMate: very nice! I would really like a view which is widescreen, but with the left-hand pane (message list) split vertically with the message list on top and the corresponding list on bottom. ie. two columns: left column is message list on top of correspondence; right column is current message contents. I tried to create a custom layout, but although it looks correct (to me) and is a valid plist file, MailMate ignores it. Here it is:

{
    name = "Wide Correspondence";
    rootViewer =
    {
        viewerType = "MmSplitView";
        orientation = "horizontal";
        children =
        (
            {
                viewerType = "MmBoxView";
                orientation = "vertical";
                defaultSize = 200;
                minWidth = 100;
                autoresize = 0;
                toggleMenuTitle = "Mailboxes";
                toggleKeyEquivalent = "^~@d";

                dragRect = { width = 16.0; height = 16.0; location = "bottomRight"; };

                children =
                (
                    {
                        identifier = "mailboxesOutline";
                        viewerType = "MmMailboxesOutlineView";
                        stickyMessages = 1;
                    },
                    {
                        viewerType = "MmMailboxesStatusBar";
                    },
                );
            },
            {
                viewerType = "MmBoxView";
                orientation = "vertical";
                children =
                (
                    {
                        identifier = "pathControl";
                        viewerType = "MmPathControlView";
                        sources = ( { sourceIdentifier = "mailboxesOutline"; } );
                    },
                    {
                        viewerType = "MmSplitView";
                        collapsibleSubview = 2; // Incomplete support -- no way to get it back (1 = first, 2 = last)
                        children =
                        (
                            { // THIS WAS JUST THE MESSAGE LIST: SHOULD NOW BE SPLIT VERTICALLY: (EXISTING) MESSAGE LIST ON TOP, (NEW) CORRESPONDENCE ON BOTTOM
                                viewerType = "MmSplitView";
                                collapsibleSubview = 2; // Incomplete support -- no way to get it back (1 = first, 2 = last)
                                orientation = "vertical";
                                children =
                                (
                                    { // THIS IS THE MESSAGE LIST
                                        identifier = "mainOutline";
                                        viewerType = "MmMessagesOutlineView";
                                        minWidth = 200;
                                        defaultSize = 300;
                                        autoresize = 0;
                                        columnSettings = "outlineColumns";
                                        sources = ( { sourceIdentifier = "pathControl"; } );
                                    },
                                    { // THIS IS THE (NEW) CORRESPONDENCE LIST
                                        identifier = "correspondenceOutline";
                                        viewerType = "MmMessagesOutlineView";
                                        minWidth = 100;
                                        sources = ( { sourceIdentifier = "mainOutline"; } );
                                        selectionSources = ( { sourceIdentifier = "mainOutline"; } );
                                        // FIXME: The transformation does not work 'per' message, i.e., it tries to combine any 'from' with any 'to' in $mainOutline.
                                        transformation = "$ALL_MESSAGES.filter((from.address = $mainOutline.from.address and #recipient.address = $mainOutline.#recipient.address) or (from.address = $mainOutline.#recipient.address and #recipient.address = $mainOutline.from.address))";
                                        defaultColumns = ( "subject", "relativeDate" );
                                        outlineColumn = "subject";
                                    },
                                );
                            },
                            { // THIS IS THE CURRENT MESSAGE ITSELF: NO CHANGE REQUIRED
                                inject = ( "messageView.plist" );
                            },
                        );
                    },
                );
            },
        );
    };
}

Reported by Mike Potts · May 3rd, 2022 @ 09:06 PM

State: resolved
Milestone: none
Assigned to: benny benny

Activity

  1. benny
    benny
    • State changed from new to resolved

    Make sure you save the file in the correct location:

    ~/Library/Application Support/MailMate/Resources/Layouts/Mailboxes/WideCorrespondence.plist
    

    You cannot inject the message view since then it does not display what is selected in the correspondence list. Also, the layout system isn't perfect and some setups don't work well, but I believe the following works (based on what I got from another user):

    Make sure you use the latest test release for this.

    {
        name = "Wide Correspondence";
        rootViewer =
        {
            viewerType = "MmSplitView";
            orientation = "horizontal";
            children =
            (
                {
                    viewerType = "MmBoxView";
                    orientation = "vertical";
                    defaultSize = 200;
                    minWidth = 100;
                    autoresize = 0;
                    toggleMenuTitle = "Mailboxes";
                    toggleKeyEquivalent = "^~@d";
    
                    dragRect = { width = 16.0; height = 16.0; location = "bottomRight"; };
    
                    children =
                    (
                        {
                            identifier = "mailboxesOutline";
                            viewerType = "MmMailboxesOutlineView";
                            stickyMessages = 1;
                        },
                        {
                            viewerType = "MmMailboxesStatusBar";
                        },
                    );
                },
                {
                    viewerType = "MmSplitView";
                    orientation = "vertical";
                    collapsibleSubview = 2; // Incomplete support -- no way to get it back (1 = first, 2 = last)
                    children =
                    (
                        {
                            identifier = "pathOutlineBox";
                            viewerType = "MmBoxView";
                            orientation = "vertical";
                            defaultSize = 250;
                            autoresize = 0;
                            children =
                            (
                                {
                                    identifier = "pathControl";
                                    viewerType = "MmPathControlView";
                                    sources = ( { sourceIdentifier = "mailboxesOutline"; } );
                                },
                                {
                                    identifier = "mainOutline";
                                    viewerType = "MmMessagesOutlineView";
                                    // columnSettings = "outlineColumns";
                                    // Keeps selected messages in the view even if they no longer match the main query
                                    // sources = ( { sourceIdentifier = "mainOutline"; }, { sourceIdentifier = "pathControl"; } );
                                    sources = ( { sourceIdentifier = "pathControl"; } );
                                    minHeight = 50;
                                },
                            );
                        },
                        {
                            viewerType = "MmBoxView";
                            orientation = "vertical";
                            defaultSize = 200;
                            autoresize = 0;
                            children =
                            (
                                {
                                    viewerType = "MmLabelView";
                                    label = "Correspondence";
                                },
                                {
                                    identifier = "correspondenceOutline";
                                    viewerType = "MmMessagesOutlineView";
                                    minWidth = 100;
                                    sources = ( { sourceIdentifier = "mainOutline"; } );
                                    selectionSources = ( { sourceIdentifier = "mainOutline"; } );
                                    // FIXME: The transformation does not work 'per' message, i.e., it tries to combine any 'from' with any 'to' in $mainOutline.
                                    transformation = "$ALL_MESSAGES.filter((from.address = $mainOutline.from.address and #recipient.address = $mainOutline.#recipient.address) or (from.address = $mainOutline.#recipient.address and #recipient.address = $mainOutline.from.address))";
                                    defaultColumns = ( "subject", "relativeDate" );
                                    outlineColumn = "subject";
                                },
                            );
    
                            toggleMenuTitle = "Correspondence View";
                            toggleKeyEquivalent = "^~@c";
                        },
                    );
                },
                {
                    viewerType = "MmBoxView";
                    orientation = "vertical";
                    children =
                    (
                        {
                            identifier = "tagsEditor";
                            viewerType = "MmTagsEditor";
                            sources = ( { sourceIdentifier = "correspondenceOutline"; } );
                        },
                        {
                            viewerType = "MmMultiMessageView";
                            identifier = "messageView";
                            minHeight = 150;
                            minWidth = 250;
                            sources = ( { sourceIdentifier = "correspondenceOutline"; } );
                        },
                    );
    
                    toggleMenuTitle = "Message View";
                    toggleKeyEquivalent = "^~@h";
                }
            );
        };
    }
    

    May 4th, 2022 @ 03:03 PM

  2. Mike Potts
    Mike Potts

    Awesome: works perfectly: thanks!!

    (Also I had missed the "Mailboxes" subfolder in the original blog post, so my original effort wasn't even in the right folder!)

    May 5th, 2022 @ 02:58 PM

  3. Kinh Nguyen
    Kinh Nguyen

    Hi, I tried the version above but it is not showing in the Layout menu. I copied to the said path and restarted Mailmate. I'm having Version 1.14 (5937).

    February 6th, 2023 @ 04:37 PM

  4. Kinh Nguyen
    Kinh Nguyen

    sorry, figure out some error in the code so it was not recognised as a plist file. Work great now. I made a four columns layout |mailbox|inbox|message|correspondence| to use full of my wide screen.

    February 6th, 2023 @ 05:17 PM

  5. Kinh Nguyen
    Kinh Nguyen

    Could you show me how to add a view that list all the tags?

    February 6th, 2023 @ 05:22 PM

Please Sign in or create a free account to add a new ticket.

With your very own profile, you can contribute to projects, track your activity, watch tickets, receive and update tickets through your email and much more.