Skip to main content

Emacs and MacOS Catalina

Catalina introduced a lot of security changes and the most intrusive is probably all the popups asking to give permission for apps to access directories under Home, like Documents. Worse still, apps which weren't written to handle the new security measures might just fail silently with no clues for the user.

A solution is to give apps like Emacs "Full Disk Access" under "Security & Privacy" in Preferences, to give unfettered access to your files and avoid all the popups and silent failures.

Sounds good, but that doesn't actually work for Emacs because "Emacs" in the app bundle is actually a Ruby script which decides which flavour of Emacs executable to run. This never mattered before, but it does under Catalina because MacOS thinks the executable is /usr/bin/ruby.

Conventional wisdom is therefore to give "Full Disk Access" to Ruby. While this does work, I've always been uncomfortable giving all Ruby scripts full access, particularly as I never write Ruby scripts myself.

I also recently realised the Ruby launcher causes other problems on Catalina:

  • Opening a file associated with Emacs from the Finder doesn't work if Emacs is already running.
  • Opening Emacs with Spotlight (e.g. with Cmd-Space e) doesn't work if Emacs is already running.

After some investigation, I was able to remove the dependency on the launcher and everything is now working fine.

Here are the steps:

  1. Use the Emacs executable rather than the Ruby launcher
$ cd /Applications/Emacs.app/Contents/MacOS
$ mv Emacs Emacs-launcher
$ ln -s Emacs-x86_64-10_14 Emacs
  1. Use the correct versions of bin & libexec
$ rm bin
$ ln -s bin-x86_64-10_14 bin
$ rm libexec
$ ln -s libexec-x86_64-10_14 libexec

Of course, this will have to be redone after upgrading Emacs.app to a different version.

Giving Emacs Full Disk Access
Giving Emacs.app Full Disk Access


Comments

Popular posts from this blog

Merging Git Repositories

No project of significant size that I've ever seen has retained its initial structure. Restructuring projects is a fact of life, but unfortunately Git doesn't make it easy. Fundamentally this stems from the way Git works, treating changes as a succession of snapshots and not storing any other metadata. Of course this is part of what makes Git fast and efficient, but at the expense of making some common operations more difficult for users. Git really is a perfect 21st century illustration of the classic  "Worse Is Better"  paradigm of successful software 😀 Previously I discussed how to split a Git project apart into separate repositories . Now I'm going to discuss how to do the opposite and merge separate repositories into one. On the face of it, this would seem a simpler task as Git has powerful support for merging... Let's take the opposite example to my splitting apart article - say you have a main Git repo (ProjA) and a second repo (ProjB) in...

East Devon Continued

Some iPhone pictures: Seaton Bay from Beer Hill at Sunset Gulls on Beer Beach We also had a pair of Pheasants in the garden, which was a bit of a surprise. There are always plenty of rabbits and wild birds, but this is the first time I've seen game birds. Here is the male, sitting on the garden wall, wondering what I'm up to: Male Pheasant I also spotted these attractive white Cyclamen in the garden: Cyclamen

Setting Environment Variables and the PATH on MacOS

Time Was setting environment variables and the PATH on a Mac running OSX was just like any other *IX.  However with successive OS releases Apple have changed how this works (more than once) and generally made it more difficult 😢  This article discusses how I go about setting environment variables on Mojave and Catalina. Why does this matter? MacOS doesn't add  /usr/local/bin to the PATH by default, which is unfortunate as most *IX-style programs you build yourself will be installed in there. If you only ever launch stuff from Terminal, all you have to do is set environment variables and the path from Shell startup files in the time immemorial fashion. However, this doesn't help with native Mac Apps like Emacs, which aren't launched from a shell and where you may still want to access custom environment variables and programs in /usr/local/bin . Setting the PATH In the past you could add to the path via /etc/paths (or paths.d ), however this no longer works...