Re-direct Sketchup to a Common Shortcut File

Hello all,

I run sketch up on two computers, one at home and one at the office. I find myself constantly trying to reconcile my keyboard shortcuts between the two computers as I make adjustments. Is there a way to have a common Keyboard shortcut file that I can tell Sketchup to look to rather than the default location?

Thanks!

You could put your shortcuts file on a cloud disk like Dropbox, then symlink to it from both computers.

For SketchUp 2018 and higher, the shortcuts are saved into the "Settings" object of the "SharedPreferences.json" file. This file is saved into the User AppData path on Windows, and the user ApplicationSupport path on Mac.

There is no preference override to point SketchUp toward other locations for the two preference json files.

You have two choices for “sharing” the shortcuts.

(1) Export a "Preferences.dat" file to a location that is accessible to both computers (like a Cloud sync service as McGordon suggests.) Then Import this file whenever you need to sync the shortcuts.

(2) Copy the "SharedPreferences.json" file to a likewise accessible location, and copy to whichever computer’s User Application Support directory that needs syncing.

A shell script could make this syncing easier. But syncing needs to be done whilst SketchUp is not running as it overwrites the json files when it closes from it’s own memory.


I have to disagree about the symbolic link idea. If the cloud service is unavailable SketchUp is likely not to load (ie lockup) or to crash during load.

Dropbox is a bit different, at least the way I have it installed here. There’s local copies of the files so if the internet is down, the file would still load. I don’t do this myself with SketchUp’s preferences. I just add missing shortcuts when I realise I added a new on on the other computer.

Yes, that is how my Dropbox setup works too.

OK, I’m not sure shell script would work. I would need the shell script on both machines and it would have to do the following:

desktop:

  1. monitor Prefs file/execute upon change

  2. “agnostify” the paths which currently are hard-linked to local locations like: /Users/imac/Library/Application Support/ which won’t work on the laptop which is /Users/macbook/Library/Application Support/

  3. , copy agnostified Prefs file to the shared (Dropbox) location.

laptop:

  1. monitor shared Prefs file/execute on change

  2. translate agnostic paths again to local paths

  3. copy/overwrite the laptops local Prefs file.

Is that possible? I am pretty versed in PHP but nothing like C or whatever you would use for that!

@McGordon how would a symlink work and what language would it be in… never done that before either!

Dan, I understand that

There is no preference override to point SketchUp toward other locations for the two preference json files.

But could a ruby loader script go into the prefs files and tweak the paths?

I think that link is out of date, SketchUp doesn’t write to the Shortcuts.plist file any more and exporting Preferences.dat is only on Windows.

That works fine, I do that too sometimes, but it requires manual syncing.

Try this at your own risk, don’t blame me if you break something.
A symbolic link isn’t really in any language, it’s just a command you’d type in the terminal, a bit like creating an alias in the Finder. You can type the same commands on both computers if you use the tilde character (~) to represent your home folder, it will be expanded to the correct path for your home directory.

First close SketchUp on both computers.
Choose which of the two computers has the most up to date preferences and make a backup copy of your SharedPreferences.json file, then move the SharedPreference.json to your Dropbox.
I’ll assume you’ve moved it to here:
~/Dropbox/SketchUp/SharedPreferences.json
If you move it somewhere else, adjust the paths in the commands later in this post.

So now at this point you’ll have two copies: one backup and the moved copy in Dropbox.

Open Terminal on your iMac, paste this command and press return:

ln -s ~/Dropbox/SketchUp/SharedPreferences.json ~/Library/Application\ Support/SketchUp\ 2020/SketchUp/SharedPreferences.json

Open Terminal on your MacBook and paste exactly the same comand again, press return.

That’s it, good luck!

If you look at the file it creates in the Finder, it will look like an alias, with the curved arrow on its icon. If you do “Get Info”, you’ll see the path of the original file. If you select it and press ⌘R(or right-click ‘show original’) it will show you the original file (on Dropbox).
I’ve tested without an internet connection and SketchUp opens up reading the preferences correctly no problems. I’ve not tested on two computers. Having two copies of SketchUp open at the same time could be a really bad idea. They could both be trying to access it at the same time.

1 Like

Tweak what paths? I thought you were wanting to share the shortcuts from the prefs files.

(I’ll just bow out since I’m not a Mac user.)

If you mean a Ruby run by SketchUp, no. By the time Ruby starts up in SketchUp it is too late. The preferences files have already been loaded. It has to be that way because extension settings are among the things saved in the json preference files.

If you mean a stand-alone Ruby independent of SketchUp, that has no advantage over other external techniques (other than if you are fluent in Ruby but not other languages).

Thanks @McGordon but it looks like SU just overwrites the json files on startup. It seems to convert the symlink to an actual file because the shortcuts are preserved. Good for getting setup but not for ongoing file synchronization.

There has to be an easier way. Say you had 40 computers to setup. There is no way you’d go into every computer and click through all the settings to give everyone the right working environment.

And hard drive image flashing doesn’t count because that is brute force.

Yeah, you’re right, SketchUp overwrites the file at startup. What you could do was move the entire SketchUp folder to Dropbox then symlink the folder and that wouldn’t get overwritten. This wouldn’t be a good idea for 40 computers, but you said it was just 2 in your original post. With 40, there would be conflicts with multiple computers trying to read/write the same files. With 2 you might get away with it, especially if you’re careful to only have SketchUp open on one computer at any time.

I’m talking about this folder:
~/Library/Application Support/SketchUp 2020/SketchUp/
The one that contains PrivatePreferences.json and SharedPreferences.json along with Components, Materials, Plugins, Templates, Styles, etc. This could take up quite a lot of space on your Dropbox (and time to upload) if you have a lot of materials and plugins.

• Make a backup copy of your original SketchUp 2020/SketchUp/ folder.

• Move the entire folder to somewhere on your Dropbox. For example, I put it here:
~/Dropbox/SketchUp/SketchUp-sync
so e.g. the Materials folder would be here:
~/Dropbox/SketchUp/SketchUp-sync/Materials
the prefs file would be here:
~/Dropbox/SketchUp/SketchUp-sync/SharedPreferences.json

• Then use this command in Terminal:
ln -s ~/Dropbox/SketchUp/SketchUp-sync/ ~/Library/Application\ Support/SketchUp\ 2020/SketchUp

This will obviously sync all the above mentioned files too, like your plugins, templates, etc. It would be nice if the preferences were in their own folder inside ‘SketchUp’ as then you could just symlink that folder. This isn’t quite as bad as copying the whole hard drive, but it’s still a bit ‘brute force’. Maybe you’d prefer to sync materials, plugins, templates too anyway?

If you’re on one of the paid plans for Dropbox, you’ll have Smart Sync which tries to free up space on your hard drive by letting you choose to store files online-only. Make sure you set this folder to be always stored locally.

1 Like

Interesting indeed. I will play around with it. Thanks @McGordon!