Skip to content

Instantly share code, notes, and snippets.

@dive
Created September 29, 2019 09:55
Show Gist options
  • Save dive/f64c645a9086afce8e5dd2590071dbf9 to your computer and use it in GitHub Desktop.
Save dive/f64c645a9086afce8e5dd2590071dbf9 to your computer and use it in GitHub Desktop.
Fix Emacs permissions on macOS Catalina
;;; package --- Fix permissions for Emacs.app on macOS Catalina
;;; Author: Artem Loenko
;;; Mail-To: <artyom.loenko@mac.com>
;;; Commentary:
;;; Code:
(defconst _default-emacs-app-plist-path "/Applications/Emacs.app/Contents/Info.plist")
(defconst _temp-buffer-name "*fixing Emacs permissions*")
(defconst _temp-buffer (get-buffer-create _temp-buffer-name))
(with-current-buffer _temp-buffer (erase-buffer))
(defun add-description-if-needed (description_key description)
"DESCRIPTION_KEY - DESCRIPTION."
(defconst read-args (list "read" _default-emacs-app-plist-path description_key))
(if (equal 1 (with-temp-buffer (apply 'call-process "defaults" nil (current-buffer) nil read-args)))
(progn
(princ (format "Missing: %s. Adding...\n" description_key) _temp-buffer)
(defconst write-args (list "write" _default-emacs-app-plist-path description_key "-string" description))
(apply 'call-process "defaults" nil (current-buffer) nil write-args))
(princ (format "Existed: %s. Skipping.\n" description_key) _temp-buffer)))
(add-description-if-needed
"NSDesktopFolderUsageDescription"
"Emacs requires permission to access the Desktop folder.")
(add-description-if-needed
"NSDocumentsFolderUsageDescription"
"Emacs requires permission to access the Documents folder.")
(add-description-if-needed
"NSDownloadsFolderUsageDescription"
"Emacs requires permission to access the Downloads folder.")
(add-description-if-needed
"NSRemovableVolumesUsageDescription"
"Emacs requires permission to access files on Removable Volumes.")
(switch-to-buffer-other-window _temp-buffer)
;;; fix-emacs-permissions-catalina.el ends here
@dku
Copy link

dku commented Oct 20, 2019

I solved this by creating a Automator "Application": Utilities -> Run Shell Script -> exec /Applications/Emacs.app/Contents/MacOS/Emacs 2>&1

Thanks -- that works for me for the time being.

@dixius99
Copy link

dixius99 commented Nov 3, 2019

I've tried all of the above, tried different Emacs distributions, and no matter what I do, File > Open crashes Emacs immediately, as does clicking on the File Open button on the tool bar, or "Open a File" on the splash page. This is what I get:

Application Specific Information:
*** Terminating app due to uncaught exception 'NSObjectNotAvailableException', reason: 'EmacsOpenPanel is not a supported subclass for sandboxing'
abort() called
terminating with uncaught exception of type NSException

Any thoughts?

@alchem0x2A
Copy link

I found that if I do File->Open (or ns-open-file-using-panel) and select ~/Documents/somedir/somefile, emacs can then see everything under ~/Documents/somedir/ (but still not ~/Documents). So to get emacs back to fully functional I had to be sure to open files at the root of the 3 special dirs: ~/Documents/somefile, ~/Downloads/somefile, ~/Desktop/somefile.

Exactly. Somehow in my case these files should also be "real" files under the ~/Documents (and etc.) folders but not symlinked.

This trick also works for mounted volumes under /Volumes folder.

@rtlong
Copy link

rtlong commented Nov 12, 2019

I've also installed via https://emacsformacosx.com/ – thanks for this script but it didn't help me either. What finally worked for me is adding /usr/bin/ruby and /usr/bin/emacsclient and Emacs.app under System Preferences > Security & Privacy > Full Disk Access

@TerryFunggg
Copy link

I fixed my problem by granting Full Disk Access to /usr/bin/ruby as instructed here.
https://emacs.stackexchange.com/a/53037/11143

Oh so it using a ruby script? Thanks! It‘s work!This problem confuse me as long time!😭

@tsuu32
Copy link

tsuu32 commented Jan 6, 2020

I didn't know Emacs.app/Contents/MacOS/Emacs executable from emacsformacosx.com is Ruby script file😮

@bushwakko
Copy link

After spending hours on getting emacs-plus from brew to get access to Documents when run as a service, i finally managed to click the file menu and saw that "bash" needed Accessability access to open the menu. I then added /bin/bash to "Full disk access" as well, and now it is working.

@haishengwu-okta
Copy link

Grant Full disk access and ns-open-file-using-panel opens a file in those directories having problem solve the problem for me.

@niallor
Copy link

niallor commented Apr 24, 2020

I find that using ns-open-file-using-panel with full disk access only makes the problem go away for a while: maybe a few weeks. Sooner or later, I have to repeat the ns-open-file-using-panel ritual. I would really like to learn of a definitive solution.

@dive
Copy link
Author

dive commented Apr 24, 2020

In general, this is a problem only for Emacs for Mac OS X version because they are using a Ruby script as an entry point for the application. I recommend to use emacs-plus, it works fine and properly asks for permissions (in version 27, where the patch was merged to the upstream).

@sugitach
Copy link

I also solved it with full disk access rights to /usr/bin/ruby.

@visini
Copy link

visini commented Jun 1, 2020

I also solved it with full disk access rights to /usr/bin/ruby.

This worked for me. Many thanks!

@roeeyn
Copy link

roeeyn commented Jun 2, 2020

I also solved it with full disk access rights to /usr/bin/ruby.

This worked for me too. Thank you very much 🎉 🎉

@juntakei
Copy link

juntakei commented Jul 6, 2020

I solved this by creating a Automator "Application": Utilities -> Run Shell Script -> exec /Applications/Emacs.app/Contents/MacOS/Emacs 2>&1

Thanks -- that works for me for the time being.

I got a similar issue with my Emacs which I compiled from GNU original source. When I called a command via Apple script (send a line message to Reminder), it failed even it is allowed on Security/Privacy Control panel. But calling emacs from Automator, it finally worked. Thank you!

@jcottrell
Copy link

@waqarsaleem Many thanks. Your fix worked for me.

I fixed my problem by granting Full Disk Access to /usr/bin/ruby as instructed here.
https://emacs.stackexchange.com/a/53037/11143

I had previously given access to Emacs under /System/Volumes/Data/Applications/Emacs.app. My install was the brew install cask. My original error happened when trying to add a new project to Treemacs that was under my Downloads directory. It was probably also wrapped up in the fact that I first opened emacs from iTerm for that session and then Ctrl+c quit it. After that I re-installed emacs altogether and only found this solution at that point.

@waqarsaleem
Copy link

@jcottrell I am glad. I know how important Emacs is to our workflows and understand the frustration and helplessness we feel when Emacs does not work!

@Kif11
Copy link

Kif11 commented Feb 5, 2022

As suggested by @waqarsaleem. I granted Full Disc access via System Preferences > Security > Full Disc Access for /bin /usr/bin/ruby and it worked!

@jccampagne
Copy link

Same for me... (As suggested by @waqarsaleem, thanks).
Giving Full Disc access to /usr/bin/ruby in System Preferences > Security > Full Disc Access helped.
https://gist.github.com/dive/f64c645a9086afce8e5dd2590071dbf9?permalink_comment_id=3049341#gistcomment-3049341

@leonardoce
Copy link

Same for me... (As suggested by @waqarsaleem, thanks). Giving Full Disc access to /usr/bin/ruby in System Preferences > Security > Full Disc Access helped. https://gist.github.com/dive/f64c645a9086afce8e5dd2590071dbf9?permalink_comment_id=3049341#gistcomment-3049341

Same for me too!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment