#3068 ✓resolved
Mike Potts

Feature request: hybrid widescreen + correspondence view

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

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" );
                            },
                        );
                    },
                );
            },
        );
    };
}

Comments and changes to this ticket

  • benny

    benny May 4th, 2022 @ 03:03 PM

    • 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";
                }
            );
        };
    }
    
  • Mike Potts

    Mike Potts May 5th, 2022 @ 02:58 PM

    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!)

  • Kinh Nguyen

    Kinh Nguyen February 6th, 2023 @ 04:37 PM

    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).

  • Kinh Nguyen

    Kinh Nguyen February 6th, 2023 @ 05:17 PM

    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.

  • Kinh Nguyen

    Kinh Nguyen February 6th, 2023 @ 05:22 PM

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

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.

New-ticket Create new ticket

Create your profile

Help contribute to this project by taking a few moments to create your personal profile. Create your profile ยป

Mac OS X email client.

Shared Ticket Bins

People watching this ticket

Pages