Captee for macOS

by Charles Y. Choi


Support

Please provide all Captee feedback on the Mac App Store.

FAQ

Why is Captee not in the Share menu?

When Captee is first installed, you will need to enable the permission to let it be included in the Share menu. The following steps illustrate how to enable Captee for the Share menu.

1. Select Edit Extensions… from the macOS Share menu. This will launch macOS Settings and raise a pop-up window.

captee share menu

There are no actions to be done in the pop-up. Press the Done button at the bottom of the pop-up window to dismiss it.

settings for share extensions pop-up

2. Select Added extensions.

added extensions selection

A pop-up window showing 3rd-party extensions that can be enabled for sharing is raised. Captee should be listed with its Sharing checkbox unchecked.

captee unchecked

3. Enable the checkbox for Sharing for Captee and select Done to dismiss the pop-up window.

captee checked

Success! Captee is now enabled in the macOS Share menu.

captee in share menu

Where is the native macOS Share Menu on Chrome and why can't I share selected text from it?

Chrome puts the macOS Share menu in the top-level menu bar File > Share. Some history on why it was put there: 465302 - Introduce system Share menu item on OS X - chromium

Sharing selected text is long-standing request on the Chromium team. Ticket here: 916291 - Add Share to context menu on macOS - chromium

What kind of formatted text can be exported to Markdown or Org Mode markup?

Captee supports translating styled text (for example bold, italic, code, underline, strikethrough) and lists to Markdown or Org markup. Headers however are not supported, as macOS does not provide this information in formatted text that is exchanged through the clipboard.

What is Org Protocol?

Captee can share a link or content directly to Emacs through the use of Org Protocol. Org Protocol is a means for external applications to share content and trigger actions to Emacs Org Mode via a URL scheme.

How do I get Org Protocol capture working with Captee?

To capture selected text via org-protocol you’ll need to define a capture template on the Emacs side first before you use Captee. Here’s an example capture template using the key "a" that uses the placeholders described in the Org capture protocol.

1
2
3
4
5
6
(setq org-capture-templates
      '(
        ("a" "Captee Capture" entry
         (file+headline "~/org/captee.org" "Captee Captures")
         "* %:description\n%:annotation\n%i\n%?" :empty-lines 1)
        ))

Template placeholders you can use in a capture template are as follows:

Placeholder Description
%:link The URL
%:description   The webpage title
%:annotation Equivalent to [[%:link][%:description]]
%i The selected text

Learn more about capture templates at the official Org website.

What macOS builds of Emacs work with Captee's Org Protocol support?

At current (2023-05-05) only builds which use the Mitsuharu Yamamoto fork of Emacs will support Org Protocol natively. Native Org Protocol support means that support for handling the custom URL scheme org-protocol:// is configured and code-signed into the Emacs app bundle.

Known builds of Emacs that support Org Protocol natively are available at the following links:

I use Homebrew Emacs Plus. How do I get Org Protocol working with Captee?

Out of the box, Emacs Plus does not directly support Org Protocol URL handling on macOS. This is a known issue as described in the following ticket.

Enable org-protocol support out of the box · Issue #285 · d12frosted/homebrew-emacs-plus

Why doesn't Captee use emacsclient to work with Org Protocol?

A core feature to Captee is its ability to be in the macOS Share menu. Apps in the Share menu must be app sandboxed, effectively requiring that such apps be distributed on the App Store. However, app sandboxing also effectively prevents Captee from supporting Org Protocol via emacsclient because emacsclient operates outside of Captee's sandbox.

Really? Tell me more about why sandboxed apps can not use emacsclient

From the Emacs side, Org Protocol is supported from two approaches:

  1. via server.el/emacsclient which can require access via:
    1. Unix local domain socket
    2. TCP socket
  2. via custom code that implements the org-protocol URL scheme natively. This is done in the Mitsuharu Emacs build.

App sandboxing prevents either the Captee host app or share extension from directly accessing the emacsclient executable on the file system without forcing the user to directly access said file as described in Troubleshooting AppKit File Permissions. Our opinion is that such direct access is really not tenable from an ease-of-use lens.

An alternate approach was explored of directly building a client that talked to the local domain socket used by Emacs server.el. Problematic with this approach is that the local domain socket is by default put in an area that is inaccessible to a sandboxed app. Again, not using sandboxing is untenable as sandboxing is required to deliver a macOS share extension.

Configuring Emacs server to use TCP is also problematic as it by default also requires filesystem access to support authorization. Although defining a static authorization key is possible, for now our opinion is that such configuration is untenable from an ease-of-use lens.


Known Issues

 

SupportPrivacy

Powered by Pelican