Multiple Desktops, how to have them be different?

When I create a new desktop it has all the same crud on it that my original desktop has on it.

How do I create a new desktop that's empty, and use that as a new work area... like a new desktop?


The source of my confusion is that they're named "DESKTOPS", and given unique numbers, yet they completely fail to follow the ideas of their own metaphor:

Look at the names of these **DESKTOPS**

Desktop 1 is exactly the same as Desktop 2, only it's got the possibility of having different app windows in it. That's not a new desktop. It's the same desktop.


Solution 1:

@Confused I too had the same issue. I wanted different desktops for different projects. So, I made an Python/Applescript app which allows you to have multiple desktops in the "true sense" that you refer to:

http://www.shirt-ediss.me/clarity/

It should serve your purpose, but please see the "Tips" sections for caveats with my approach. It works simply by moving files and folders from the Desktop to a storage folder, and recording their icon positions. This means that this desktop can be restored to exactly the same state later. There is still only one Desktop/ folder on the Mac, and Mission Control works just as it did before.

I now have about 20 different desktops and switch between them all of the time - great for productivity.

Solution 2:

Here's an easy shell script I wrote to implement multiple desktops (tested on High Sierra and Mojave). It does require root permissions to initially configure and works nicely when mapped to "hot keys" using Automator.

The only downside I've found is that you'll have to create an alias on the Finder sidebar to the folder containing the desktops, since the old "Desktop" Finder alias will only point to desktop1.

#!/bin/bash
  
# chdt - Trivial script for multiple Deskops a la X-Windows for MacOS
#        (smoke and mirrors using rm and ln -s)
#
# Jeff Bloomfield - 2/23/2021
# [email protected]

#
# Setup Instructions:
# 1. Make the directory $DESKTOP_DIRS as $USER with rwxr-xr-x permissions.
# 2. As root, mv $HOME/Desktop $DESKTOP_DIRS
#    Root needed because of existing extended permissions "everyone deny delete".
#    You can see extended permissions with ls -led.
#    The mv should keep the directory permissions and ownership as they are.
# 3. As $USER, make the empty directories for your new alternate desktops in
#    $DESKTOP_DIRS
#    Name the alternate desktop directories DesktopN, where N is the desktop
#    number (or character, I suppose) you intend to pass in chdt's argument.
# 4. You might want to give your alternate desktops the same extended perms as
#    your original Desktop directory. See ls(1) for pointers to more information
#    on this [squirrley] topic.
# 5. You can map chdt to hot keys using Automator workflow scripts.

#    Usage:
#       chdt N
#    where N is the desktop number or suffix
#
#    Example:
#       chdt 2
#    Changes the active desktop to the contents of 

$DESKTOP_DIRS/${DESKTOP_NAME}2
    
PROG=$(basename $0)
    
DESKTOP_SYMLINK=$HOME/Desktop
DESKTOP_DIRS=$HOME/Desktops
DESKTOP_NAME=Desktop    # Used here to set the basename of the desktop
                        # as in Desktop1, Desktop2...DesktopN, etc.
    
DesktopNum=$1

# Catch some errors and exit with an error message:

# Warn me in case the OS does some sneaky things like recreate the Desktop
# directory or some other untoward behavior I don't know about yet.
if [ ! -L $DESKTOP_SYMLINK ]; then
    echo "$PROG: $DESKTOP_SYMLINK is not symlink or does not exist."
    exit 1
fi
 
if [ ! "$DesktopNum" ]; then echo "$PROG: Missing desktop argument:"; \
                             echo "        $PROG desktop"
    exit 1
fi

if [ ! -d $DESKTOP_DIRS/$DESKTOP_NAME${DesktopNum} ]; then
    echo "$PROG: Desktop${DesktopNum} is not a directory or does not exist."
    echo exiting...
    exit 1
fi

# Do the work:
    
if ! /bin/rm $DESKTOP_SYMLINK; then
    echo "$PROG: Failed to remove symlink \"$DESKTOP_SYMLINK\""
    echo exiting...
    exit 1
fi

if ! /bin/ln -s $DESKTOP_DIRS/$DESKTOP_NAME${DesktopNum} $HOME/Desktop; then
    echo "$PROG: Failed to create symlink $DESKTOP_DIRS/$DesktopNum -> $DESKTOP_SYMLINK"
    exit 1
fi

sleep 1     # Avoid possible race conditions w/the Finder on fast machines
if ! killall Finder; then
    echo "$PROG: Failed to restart the Finder for possibly unknown reason to point to Desktop${DesktopNum}"
    echo exiting...
    exit 1
fi

exit 0  #success

Solution 3:

Files, folders, aliases, etc. on the OS X desktop remain "stuck" to all desktops assigned to that monitor. On a second monitor, the desktop will not be replicated from the first but again it will be repeated for all of its assigned desktops or spaces. Desktops are primarily useful for organizing apps and windows—not file system objects.

While I'm sure you have an intuitive understanding of how your proposal would work for 95% of your use case, I think there are a number of edge cases that would lead to very unpredictable behavior for many, many users (possibly even yourself).