From: Andreas Gerler Date: Sun, 11 Dec 2022 12:21:25 +0000 (+0100) Subject: add org-mac-link X-Git-Url: http://git.bundesbrandschatzamt.de/?a=commitdiff_plain;h=d7092b001684d5ad74dd82b2c382dc41aeaf3305;p=emacsconfig.git add org-mac-link Signed-off-by: Andreas Gerler --- diff --git a/elpa/org-mac-link-20220616.2340/org-mac-link-autoloads.el b/elpa/org-mac-link-20220616.2340/org-mac-link-autoloads.el new file mode 100644 index 00000000..a05f59e1 --- /dev/null +++ b/elpa/org-mac-link-20220616.2340/org-mac-link-autoloads.el @@ -0,0 +1,148 @@ +;;; org-mac-link-autoloads.el --- automatically extracted autoloads -*- lexical-binding: t -*- +;; +;;; Code: + +(add-to-list 'load-path (directory-file-name + (or (file-name-directory #$) (car load-path)))) + + +;;;### (autoloads nil "org-mac-link" "org-mac-link.el" (0 0 0 0)) +;;; Generated autoloads from org-mac-link.el + +(autoload 'org-mac-link-get-link "org-mac-link" "\ +Prompt for an application to grab a link from. +When done, go grab the link, and insert it at point." t nil) + +(autoload 'org-mac-link-firefox-get-frontmost-url "org-mac-link" "\ +Get the link to the frontmost window of the Firefox.app." t nil) + +(autoload 'org-mac-link-firefox-insert-frontmost-url "org-mac-link" "\ +Insert the link to the frontmost window of the Firefox.app." t nil) + +(autoload 'org-mac-link-vimperator-get-frontmost-url "org-mac-link" "\ +Get the link to the frontmost window of the Firefox.app with Vimperator." t nil) + +(autoload 'org-mac-link-vimperator-insert-frontmost-url "org-mac-link" "\ +Insert the link to the frontmost window of the Firefox.app with Vimperator." t nil) + +(autoload 'org-mac-link-chrome-get-frontmost-url "org-mac-link" "\ +Get the link to the frontmost window of the Chrome.app." t nil) + +(autoload 'org-mac-link-chrome-insert-frontmost-url "org-mac-link" "\ +Insert the link to the frontmost window of the Chrome.app." t nil) + +(autoload 'org-mac-link-brave-get-frontmost-url "org-mac-link" "\ +Get the link to the frontmost window of the Brave.app." t nil) + +(autoload 'org-mac-link-brave-insert-frontmost-url "org-mac-link" "\ +Insert the link to the frontmost window of the Brave.app." t nil) + +(autoload 'org-mac-link-safari-get-frontmost-url "org-mac-link" "\ +Get the link to the frontmost window of the Safari.app." t nil) + +(autoload 'org-mac-link-safari-insert-frontmost-url "org-mac-link" "\ +Insert the link to the frontmost window of the Safari.app." t nil) + +(autoload 'org-mac-link-together-get-selected "org-mac-link" "\ +Get the links to selected items in the Together.app." t nil) + +(autoload 'org-mac-link-together-insert-selected "org-mac-link" "\ +Insert the links to selected items in the Together.app." t nil) + +(autoload 'org-mac-link-finder-item-get-selected "org-mac-link" "\ +Get the links to selected items in the Finder.app." t nil) + +(autoload 'org-mac-link-finder-insert-selected "org-mac-link" "\ +Insert the links to selected items in the Finder.app." t nil) + +(autoload 'org-mac-link-addressbook-item-get-selected "org-mac-link" "\ +Get the links to selected items in the addressbook." t nil) + +(autoload 'org-mac-link-addressbook-item-insert-selected "org-mac-link" "\ +Insert the links to selected items in the addressbook." t nil) + +(autoload 'org-mac-link-skim-get-page "org-mac-link" "\ +Get the link to the page in the Skim.app." t nil) + +(autoload 'org-mac-link-skim-insert-page "org-mac-link" "\ +Insert the link to the page in the Skim.app." t nil) + +(autoload 'org-mac-link-acrobat-get-page "org-mac-link" "\ +Get the link to the page in the Adobe Acrobat Pro.app." t nil) + +(autoload 'org-mac-link-acrobat-insert-page "org-mac-link" "\ +Insert the link to the page in the Adobe Acrobat Pro.app." t nil) + +(autoload 'org-mac-link-outlook-message-get-links "org-mac-link" "\ +Create links to selected or flagged messages in Microsoft Outlook.app. +This will use AppleScript to get the message-id and the subject of the +messages in Microsoft Outlook.app and make a link out of it. +When SELECT-OR-FLAG is \"s\", get the selected messages (this is also +the default). When SELECT-OR-FLAG is \"f\", get the flagged messages. +The Org-syntax text will be pushed to the kill ring, and also returned. + +\(fn &optional SELECT-OR-FLAG)" t nil) + +(autoload 'org-mac-link-outlook-message-insert-selected "org-mac-link" "\ +Insert a link to the messages currently selected in Microsoft Outlook.app. +This will use AppleScript to get the message-id and the subject +of the active mail in Microsoft Outlook.app and make a link out of it." t nil) + +(autoload 'org-mac-link-outlook-message-insert-flagged "org-mac-link" "\ +Asks for an ORG-BUFFER and a heading within it, and replace message links. +If ORG-HEADING exists, delete all mac-outlook:// links in heading's first level. +If heading doesn't exist, create it at point-max. +Insert list of mac-outlook:// links to flagged mail after heading. + +\(fn ORG-BUFFER ORG-HEADING)" t nil) + +(autoload 'org-mac-link-evernote-note-insert-selected "org-mac-link" "\ +Insert a link to the notes currently selected in Evernote.app. +This will use AppleScript to get the note id and the title of the +note(s) in Evernote.app and make a link out of it/them." t nil) + +(autoload 'org-mac-link-devonthink-item-insert-selected "org-mac-link" "\ +Insert a link to the item(s) currently selected in DEVONthink Pro Office. +This will use AppleScript to get the `uuid'(s) and the name(s) of the +selected items in DEVONthink Pro Office and make link(s) out of it/them." t nil) + +(autoload 'org-mac-link-mail-get-links "org-mac-link" "\ +Create links to the messages currently selected or flagged in Mail.app. +This will use AppleScript to get the message-id and the subject of the +messages in Mail.app and make a link out of it. +When SELECT-OR-FLAG is \"s\", get the selected messages (this is also +the default). When SELECT-OR-FLAG is \"f\", get the flagged messages. +The Org-syntax text will be pushed to the kill ring, and also returned. + +\(fn &optional SELECT-OR-FLAG)" t nil) + +(autoload 'org-mac-link-mail-insert-selected "org-mac-link" "\ +Insert a link to the messages currently selected in Mail.app. +This will use AppleScript to get the message-id and the subject of the +active mail in Mail.app and make a link out of it." t nil) + +(autoload 'org-mac-link-mail-insert-flagged "org-mac-link" "\ +Asks for an ORG-BUFFER and a heading within it, and replace message links. +If ORG-HEADING exists, delete all message:// links within heading's first level. +If heading doesn't exist, create it at point-max. +Insert list of message:// links to flagged mail after heading. + +\(fn ORG-BUFFER ORG-HEADING)" t nil) + +(autoload 'org-mac-link-qutebrowser-get-frontmost-url "org-mac-link" "\ +Get the link to the frontmost window of the qutebrowser.app." t nil) + +(autoload 'org-mac-link-qutebrowser-insert-frontmost-url "org-mac-link" "\ +Insert the link to the frontmost window of the qutebrowser.app." t nil) + +(register-definition-prefixes "org-mac-link" '("org-mac-link-")) + +;;;*** + +;; Local Variables: +;; version-control: never +;; no-byte-compile: t +;; no-update-autoloads: t +;; coding: utf-8 +;; End: +;;; org-mac-link-autoloads.el ends here diff --git a/elpa/org-mac-link-20220616.2340/org-mac-link-pkg.el b/elpa/org-mac-link-20220616.2340/org-mac-link-pkg.el new file mode 100644 index 00000000..c8fa4ed0 --- /dev/null +++ b/elpa/org-mac-link-20220616.2340/org-mac-link-pkg.el @@ -0,0 +1,2 @@ +;;; Generated package description from org-mac-link.el -*- no-byte-compile: t -*- +(define-package "org-mac-link" "20220616.2340" "Insert org-mode links to items selected in various Mac apps" '((emacs "27.1")) :commit "0b18c1d070b9601cc65c40e902169e367e4348c9" :authors '(("Anthony Lander" . "anthony.lander@gmail.com") ("John Wiegley" . "johnw@gnu.org") ("Christopher Suckling ") ("Daniil Frumin" . "difrumin@gmail.com") ("Alan Schmitt" . "alan.schmitt@polytechnique.org") ("Mike McLean" . "mike.mclean@pobox.com")) :maintainer '("Aimé Bertrand" . "aime.bertrand@macowners.club") :keywords '("files" "wp" "url" "org") :url "https://gitlab.com/aimebertrand/org-mac-link") diff --git a/elpa/org-mac-link-20220616.2340/org-mac-link.el b/elpa/org-mac-link-20220616.2340/org-mac-link.el new file mode 100644 index 00000000..73a7646b --- /dev/null +++ b/elpa/org-mac-link-20220616.2340/org-mac-link.el @@ -0,0 +1,1112 @@ +;;; org-mac-link.el --- Insert org-mode links to items selected in various Mac apps -*- lexical-binding: t; -*- +;; +;; Copyright (c) 2010-2022 Free Software Foundation, Inc. +;; +;; Author: Anthony Lander +;; John Wiegley +;; Christopher Suckling +;; Daniil Frumin +;; Alan Schmitt +;; Mike McLean +;; Version: 1.9 +;; Package-Version: 20220616.2340 +;; Package-Commit: 0b18c1d070b9601cc65c40e902169e367e4348c9 +;; Keywords: files, wp, url, org +;; Package-Requires: ((emacs "27.1")) +;; Maintainer: Aimé Bertrand +;; Homepage: https://gitlab.com/aimebertrand/org-mac-link +;; +;; This file is not part of GNU Emacs. +;; +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 3, or (at your option) +;; any later version. +;; +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . +;; +;; +;;; Commentary: +;; +;; This code allows you to grab either the current selected items, or +;; the frontmost url in various mac appliations, and insert them as +;; hyperlinks into the current org-mode document at point. +;; +;; This code is heavily based on, and indeed incorporates, +;; org-mac-message.el written by John Wiegley and Christopher +;; Suckling. +;; +;; Detailed comments for each application interface are inlined with +;; the code. Here is a brief overview of how the code interacts with +;; each application: +;; +;; Finder.app - grab links to the selected files in the frontmost window +;; Mail.app - grab links to the selected messages in the message list +;; AddressBook.app - Grab links to the selected addressbook Cards +;; Firefox.app - Grab the url of the frontmost tab in the frontmost window +;; Vimperator/Firefox.app - Grab the url of the frontmost tab in the frontmost window +;; Safari.app - Grab the url of the frontmost tab in the frontmost window +;; Google Chrome.app - Grab the url of the frontmost tab in the frontmost window +;; Brave.app - Grab the url of the frontmost tab in the frontmost window +;; Together.app - Grab links to the selected items in the library list +;; Skim.app - Grab a link to the selected page in the topmost pdf document +;; Microsoft Outlook.app - Grab a link to the selected message in the message list +;; DEVONthink Pro Office.app - Grab a link to the selected DEVONthink item(s); open DEVONthink item by reference +;; Evernote.app - Grab a link to the selected Evernote item(s); open Evernote item by ID +;; qutebrowser.app - Grab the url of the frontmost tab in the frontmost window +;; +;; +;; Installation: +;; +;; Add (require 'org-mac-link) to your `.emacs' or `init.el'. +;; +;; If you are using `use-package' add the following: +;; (use-package org-mac-link +;; :ensure t) +;; +;; Optionally bind a key to activate the link grabber menu, like this: +;; (add-hook 'org-mode-hook (lambda () +;; (define-key org-mode-map (kbd "C-c g") 'org-mac-link-get-link))) +;; +;; Usage: +;; +;; Type C-c g (or whatever key you defined, as above), or type M-x +;; org-mac-link-get-link RET to activate the link grabber. This will present +;; you with a menu to choose an application from which to grab a link +;; to insert at point. You may also type C-g to abort. +;; +;; Customizing: +;; +;; You may customize which applications appear in the grab menu by +;; customizing the group `org-mac-link'. Changes take effect +;; immediately. +;; +;; +;;; Code: + +(require 'org) +(require 'org-goto) + +(defgroup org-mac-link nil + "Options for grabbing links from Mac applications." + :tag "Org Mac link" + :group 'org-link) + +(defcustom org-mac-link-finder-app-p t + "Add menu option [F]inder to grab links from the Finder." + :tag "Grab Finder.app links" + :group 'org-mac-link + :type 'boolean) + +(defcustom org-mac-link-mail-app-p t + "Add menu option [m]ail to grab links from Mail.app." + :tag "Grab Mail.app links" + :group 'org-mac-link + :type 'boolean) + +(defcustom org-mac-link-outlook-app-p t + "Add menu option [o]utlook to grab links from Microsoft Outlook.app." + :tag "Grab Microsoft Outlook.app links" + :group 'org-mac-link + :type 'boolean) + +(defcustom org-mac-link-outlook-path "/Applications/Microsoft Outlook.app" + "The path to the installed copy of Microsoft Outlook.app. +Do not escape spaces as the AppleScript call will quote this string." + :tag "Path to Microsoft Outlook" + :group 'org-mac-link + :type 'string) + +(defcustom org-mac-link-devonthink-app-p t + "Add menu option [d]EVONthink to grab links from DEVONthink Pro Office.app." + :tag "Grab DEVONthink Pro Office.app links" + :group 'org-mac-link + :type 'boolean) + +(defcustom org-mac-link-addressbook-app-p t + "Add menu option [a]ddressbook to grab links from AddressBook.app." + :tag "Grab AddressBook.app links" + :group 'org-mac-link + :type 'boolean) + +(defcustom org-mac-link-safari-app-p t + "Add menu option [s]afari to grab links from Safari.app." + :tag "Grab Safari.app links" + :group 'org-mac-link + :type 'boolean) + +(defcustom org-mac-link-firefox-app-p t + "Add menu option [f]irefox to grab links from Firefox.app." + :tag "Grab Firefox.app links" + :group 'org-mac-link + :type 'boolean) + +(defcustom org-mac-link-firefox-vimperator-p nil + "Add menu option [v]imperator to grab links from Firefox.app with Vimperator." + :tag "Grab Vimperator/Firefox.app links" + :group 'org-mac-link + :type 'boolean) + +(defcustom org-mac-link-chrome-app-p t + "Add menu option [c]hrome to grab links from Google Chrome.app." + :tag "Grab Google Chrome.app links" + :group 'org-mac-link + :type 'boolean) + +(defcustom org-mac-link-brave-app-p t + "Add menu option [b]rave to grab links from Brave.app." + :tag "Grab Brave.app links" + :group 'org-mac-link + :type 'boolean) + +(defcustom org-mac-link-together-app-p nil + "Add menu option [t]ogether to grab links from Together.app." + :tag "Grab Together.app links" + :group 'org-mac-link + :type 'boolean) + +(defcustom org-mac-link-skim-app-p + (< 0 (length (shell-command-to-string + "mdfind kMDItemCFBundleIdentifier == 'net.sourceforge.skim-app.skim'"))) + "Add menu option [S]kim to grab page links from Skim.app." + :tag "Grab Skim.app page links" + :group 'org-mac-link + :type 'boolean) + +(defcustom org-mac-link-highlight-selection-p nil + "Highlight the active selection when grabbing a link from Skim.app." + :tag "Highlight selection in Skim.app" + :group 'org-mac-link + :type 'boolean) + +(defcustom org-mac-link-acrobat-app-p t + "Add menu option [A]crobat to grab page links from Acrobat.app." + :tag "Grab Acrobat.app page links" + :group 'org-mac-link + :type 'boolean) + +(defcustom org-mac-link-mail-account nil + "The Mail.app account in which to search for flagged messages." + :tag "Org Mail.app Account" + :group 'org-mac-link + :type 'string) + +(defcustom org-mac-link-evernote-app-p nil + "Add menu option [e]vernote to grab note links from Evernote.app." + :tag "Grab Evernote.app note links" + :group 'org-mac-link + :type 'boolean) + +(defcustom org-mac-link-evernote-path nil + "The path to the installed copy of Evernote.app. +Do not escape spaces as the AppleScript call will quote this string." + :tag "Path to Evernote" + :group 'org-mac-link + :type 'string) + +(defcustom org-mac-link-qutebrowser-app-p t + "Add menu option [q]utebrowser to grab links from qutebrowser.app." + :tag "Grab qutebrowser.app links" + :group 'org-mac-link + :type 'boolean) + + + +;; In mac.c, removed in Emacs 23. +(declare-function org-mac-link-do-applescript "org-mac-message" (script)) +(unless (fboundp 'org-mac-link-do-applescript) + ;; Need to fake this using shell-command-to-string + (defun org-mac-link-do-applescript (script) + (let (start cmd return) + (while (string-match "\n" script) + (setq script (replace-match "\r" t t script))) + (while (string-match "'" script start) + (setq start (+ 2 (match-beginning 0)) + script (replace-match "\\'" t t script))) + (setq cmd (concat "osascript -e '" script "'")) + (setq return (shell-command-to-string cmd)) + (concat "\"" (org-trim return) "\"")))) + +;;;###autoload +(defun org-mac-link-get-link () + "Prompt for an application to grab a link from. +When done, go grab the link, and insert it at point." + (interactive) + (let* ((descriptors + `(("F" "inder" org-mac-link-finder-insert-selected ,org-mac-link-finder-app-p) + ("m" "ail" org-mac-link-mail-insert-selected ,org-mac-link-mail-app-p) + ("d" "EVONthink Pro Office" org-mac-link-devonthink-item-insert-selected + ,org-mac-link-devonthink-app-p) + ("o" "utlook" org-mac-link-outlook-message-insert-selected ,org-mac-link-outlook-app-p) + ("a" "ddressbook" org-mac-link-addressbook-item-insert-selected ,org-mac-link-addressbook-app-p) + ("s" "afari" org-mac-link-safari-insert-frontmost-url ,org-mac-link-safari-app-p) + ("f" "irefox" org-mac-link-firefox-insert-frontmost-url ,org-mac-link-firefox-app-p) + ("v" "imperator" org-mac-link-vimperator-insert-frontmost-url ,org-mac-link-firefox-vimperator-p) + ("c" "hrome" org-mac-link-chrome-insert-frontmost-url ,org-mac-link-chrome-app-p) + ("b" "rave" org-mac-link-brave-insert-frontmost-url ,org-mac-link-brave-app-p) + ("e" "evernote" org-mac-link-evernote-note-insert-selected ,org-mac-link-evernote-app-p) + ("t" "ogether" org-mac-link-together-insert-selected ,org-mac-link-together-app-p) + ("S" "kim" org-mac-link-skim-insert-page ,org-mac-link-skim-app-p) + ("A" "crobat" org-mac-link-acrobat-insert-page ,org-mac-link-acrobat-app-p) + ("q" "utebrowser" org-mac-link-qutebrowser-insert-frontmost-url ,org-mac-link-qutebrowser-app-p))) + (menu-string (make-string 0 ?x)) + input) + + ;; Create the menu string for the keymap + (mapc (lambda (descriptor) + (when (elt descriptor 3) + (setf menu-string (concat menu-string + "[" (elt descriptor 0) "]" + (elt descriptor 1) " ")))) + descriptors) + (setf (elt menu-string (- (length menu-string) 1)) ?:) + + ;; Prompt the user, and grab the link + (message menu-string) + (setq input (read-char-exclusive)) + (mapc (lambda (descriptor) + (let ((key (elt (elt descriptor 0) 0)) + (active (elt descriptor 3)) + (grab-function (elt descriptor 2))) + (when (and active (eq input key)) + (call-interactively grab-function)))) + descriptors))) + +(defun org-mac-link-paste-applescript-links (as-link-list) + "Paste in a list AS-LINK-LIST from an applescript handler. +The links are of the form ::split::." + (let* ((noquote-as-link-list + (if (string-prefix-p "\"" as-link-list) + (substring as-link-list 1 -1) + as-link-list)) + (link-list + (mapcar (lambda (x) (if (string-match "\\`\"\\(.*\\)\"\\'" x) + (setq x (match-string 1 x))) + x) + (split-string noquote-as-link-list "[\r\n]+"))) + split-link URL description orglink rtn orglink-list) + (while link-list + (setq split-link (split-string (pop link-list) "::split::")) + (setq URL (car split-link)) + (setq description (cadr split-link)) + (when (not (string= URL "")) + (setq orglink (org-link-make-string URL description)) + (push orglink orglink-list))) + (setq rtn (mapconcat #'identity orglink-list "\n")) + (kill-new rtn) + rtn)) + + + +;;; Handle links from Firefox.app +;; +;; This code allows you to grab the current active url from the main +;; Firefox.app window, and insert it as a link into an org-mode +;; document. Unfortunately, firefox does not expose an applescript +;; dictionary, so this is necessarily introduces some limitations. +;; +;; The applescript to grab the url from Firefox.app uses the System +;; Events application to give focus to the firefox application, select +;; the contents of the url bar, and copy it. It then uses the title of +;; the window as the text of the link. There is no way to grab links +;; from other open tabs, and further, if there is more than one window +;; open, it is not clear which one will be used (though emperically it +;; seems that it is always the last active window). + +(defun org-mac-link-applescript-firefox-get-frontmost-url () + "AppleScript to get the links to the frontmost window of the Firefox.app." + (let ((result + (org-mac-link-do-applescript + (concat + "set oldClipboard to the clipboard\n" + "set frontmostApplication to path to frontmost application\n" + "tell application \"Firefox\"\n" + " activate\n" + " delay 0.15\n" + " tell application \"System Events\"\n" + " keystroke \"l\" using {command down}\n" + " delay 0.2\n" + " keystroke \"c\" using {command down}\n" + " end tell\n" + " delay 0.15\n" + " set theUrl to the clipboard\n" + " set the clipboard to oldClipboard\n" + " set theResult to (get theUrl) & \"::split::\" & (get name of window 1)\n" + "end tell\n" + "activate application (frontmostApplication as text)\n" + "set links to {}\n" + "copy theResult to the end of links\n" + "return links as string\n")))) + (car (split-string result "[\r\n]+" t)))) + +;;;###autoload +(defun org-mac-link-firefox-get-frontmost-url () + "Get the link to the frontmost window of the Firefox.app." + (interactive) + (message "Applescript: Getting Firefox url...") + (org-mac-link-paste-applescript-links (org-mac-link-applescript-firefox-get-frontmost-url))) + +;;;###autoload +(defun org-mac-link-firefox-insert-frontmost-url () + "Insert the link to the frontmost window of the Firefox.app." + (interactive) + (insert (org-mac-link-firefox-get-frontmost-url))) + + + +;;; Handle links from Google Firefox.app running the Vimperator extension +;; Grab the frontmost url from Firefox+Vimperator. Same limitations are +;; Firefox + +(defun org-mac-link-applescript-vimperator-get-frontmost-url () + "AppleScript to get links of frontmost window of Firefox.app with Vimperator." + (let ((result + (org-mac-link-do-applescript + (concat + "set oldClipboard to the clipboard\n" + "set frontmostApplication to path to frontmost application\n" + "tell application \"Firefox\"\n" + " activate\n" + " delay 0.15\n" + " tell application \"System Events\"\n" + " keystroke \"y\"\n" + " end tell\n" + " delay 0.15\n" + " set theUrl to the clipboard\n" + " set the clipboard to oldClipboard\n" + " set theResult to (get theUrl) & \"::split::\" & (get name of window 1)\n" + "end tell\n" + "activate application (frontmostApplication as text)\n" + "set links to {}\n" + "copy theResult to the end of links\n" + "return links as string\n")))) + (replace-regexp-in-string + "\s+-\s+Vimperator" "" (car (split-string result "[\r\n]+" t))))) + +;;;###autoload +(defun org-mac-link-vimperator-get-frontmost-url () + "Get the link to the frontmost window of the Firefox.app with Vimperator." + (interactive) + (message "Applescript: Getting Vimperator url...") + (org-mac-link-paste-applescript-links (org-mac-link-applescript-vimperator-get-frontmost-url))) + +;;;###autoload +(defun org-mac-link-vimperator-insert-frontmost-url () + "Insert the link to the frontmost window of the Firefox.app with Vimperator." + (interactive) + (insert (org-mac-link-vimperator-get-frontmost-url))) + + + +;;; Handle links from Google Chrome.app +;; Grab the frontmost url from Google Chrome. Same limitations as +;; Firefox because Chrome doesn't publish an Applescript dictionary + +(defun org-mac-link-applescript-chrome-get-frontmost-url () + "AppleScript to get the links to the frontmost window of the Chrome.app." + (let ((result + (org-mac-link-do-applescript + (concat + "set frontmostApplication to path to frontmost application\n" + "tell application \"Google Chrome\"\n" + " set theUrl to get URL of active tab of first window\n" + " set theResult to (get theUrl) & \"::split::\" & (get name of window 1)\n" + "end tell\n" + "activate application (frontmostApplication as text)\n" + "set links to {}\n" + "copy theResult to the end of links\n" + "return links as string\n")))) + (replace-regexp-in-string + "^\"\\|\"$" "" (car (split-string result "[\r\n]+" t))))) + +;;;###autoload +(defun org-mac-link-chrome-get-frontmost-url () + "Get the link to the frontmost window of the Chrome.app." + (interactive) + (message "Applescript: Getting Chrome url...") + (org-mac-link-paste-applescript-links (org-mac-link-applescript-chrome-get-frontmost-url))) + +;;;###autoload +(defun org-mac-link-chrome-insert-frontmost-url () + "Insert the link to the frontmost window of the Chrome.app." + (interactive) + (insert (org-mac-link-chrome-get-frontmost-url))) + + + +;;; Handle links from Brave.app +;; Grab the frontmost url from Brave. Same limitations as +;; Firefox/Chrome because Brave doesn't publish an Applescript +;; dictionary + +(defun org-mac-link-applescript-brave-get-frontmost-url () + "AppleScript to get the links to the frontmost window of the Brave.app." + (let ((result + (org-mac-link-do-applescript + (concat + "set frontmostApplication to path to frontmost application\n" + "tell application \"Brave\"\n" + " set theUrl to get URL of active tab of first window\n" + " set theResult to (get theUrl) & \"::split::\" & (get name of window 1)\n" + "end tell\n" + "activate application (frontmostApplication as text)\n" + "set links to {}\n" + "copy theResult to the end of links\n" + "return links as string\n")))) + (replace-regexp-in-string + "^\"\\|\"$" "" (car (split-string result "[\r\n]+" t))))) + +;;;###autoload +(defun org-mac-link-brave-get-frontmost-url () + "Get the link to the frontmost window of the Brave.app." + (interactive) + (message "Applescript: Getting Brave url...") + (org-mac-link-paste-applescript-links (org-mac-link-applescript-brave-get-frontmost-url))) + +;;;###autoload +(defun org-mac-link-brave-insert-frontmost-url () + "Insert the link to the frontmost window of the Brave.app." + (interactive) + (insert (org-mac-link-brave-get-frontmost-url))) + + + +;;; Handle links from Safari.app +;; Grab the frontmost url from Safari. + +(defun org-mac-link-applescript-safari-get-frontmost-url () + "AppleScript to get the links to the frontmost window of the Safari.app." + (org-mac-link-do-applescript + (concat + "tell application \"Safari\"\n" + " set theUrl to URL of document 1\n" + " set theName to the name of the document 1\n" + " return theUrl & \"::split::\" & theName & \"\n\"\n" + "end tell\n"))) + +;;;###autoload +(defun org-mac-link-safari-get-frontmost-url () + "Get the link to the frontmost window of the Safari.app." + (interactive) + (message "Applescript: Getting Safari url...") + (org-mac-link-paste-applescript-links + (org-mac-link-applescript-safari-get-frontmost-url))) + +;;;###autoload +(defun org-mac-link-safari-insert-frontmost-url () + "Insert the link to the frontmost window of the Safari.app." + (interactive) + (insert (org-mac-link-safari-get-frontmost-url))) + + + +;;; Handle links from together.app +(org-link-set-parameters "x-together-item" :follow #'org-mac-link-together-item-open) + +(defun org-mac-link-together-item-open (uid _) + "Open UID, which is a reference to an item in Together." + (shell-command (concat "open -a Together \"x-together-item:" uid "\""))) + +(defun org-mac-link-applescript-get-selected-together-items () + "AppleScript to get the links to selected items in the Together.app." + (org-mac-link-do-applescript + (concat + "tell application \"Together\"\n" + " set theLinkList to {}\n" + " set theSelection to selected items\n" + " repeat with theItem in theSelection\n" + " set theLink to (get item link of theItem) & \"::split::\" & (get name of theItem) & \"\n\"\n" + " copy theLink to end of theLinkList\n" + " end repeat\n" + " return theLinkList as string\n" + "end tell"))) + +;;;###autoload +(defun org-mac-link-together-get-selected () + "Get the links to selected items in the Together.app." + (interactive) + (message "Applescript: Getting Together items...") + (org-mac-link-paste-applescript-links (org-mac-link-applescript-get-selected-together-items))) + +;;;###autoload +(defun org-mac-link-together-insert-selected () + "Insert the links to selected items in the Together.app." + (interactive) + (insert (org-mac-link-together-get-selected))) + + + +;;; Handle links from Finder.app + +(defun org-mac-link-applescript-get-selected-finder-items () + "AppleScript to get the links to selected items in the Finder.app." + (org-mac-link-do-applescript + (concat + "tell application \"Finder\"\n" + " set theSelection to the selection\n" + " set links to {}\n" + " repeat with theItem in theSelection\n" + " set theLink to \"file:\" & (POSIX path of (theItem as string)) & \"::split::\" & (get the name of theItem) & \"\n\"\n" + " copy theLink to the end of links\n" + " end repeat\n" + " return links as string\n" + "end tell\n"))) + +;;;###autoload +(defun org-mac-link-finder-item-get-selected () + "Get the links to selected items in the Finder.app." + (interactive) + (message "Applescript: Getting Finder items...") + (org-mac-link-paste-applescript-links (org-mac-link-applescript-get-selected-finder-items))) + +;;;###autoload +(defun org-mac-link-finder-insert-selected () + "Insert the links to selected items in the Finder.app." + (interactive) + (insert (org-mac-link-finder-item-get-selected))) + + + +;;; Handle links from AddressBook.app +(org-link-set-parameters "addressbook" :follow #'org-mac-link-addressbook-item-open) + +(defun org-mac-link-addressbook-item-open (uid _) + "Open UID, which is a reference to an item in the addressbook." + (shell-command (concat "open \"addressbook:" uid "\""))) + +(defun org-mac-link-applescript-get-selected-addressbook-items () + "AppleScript to get the links to selected items in the addressbook." + (org-mac-link-do-applescript + (concat + "tell application \"Address Book\"\n" + " set theSelection to the selection\n" + " set links to {}\n" + " repeat with theItem in theSelection\n" + " set theLink to \"addressbook://\" & (the id of theItem) & \"::split::\" & (the name of theItem) & \"\n\"\n" + " copy theLink to the end of links\n" + " end repeat\n" + " return links as string\n" + "end tell\n"))) + +;;;###autoload +(defun org-mac-link-addressbook-item-get-selected () + "Get the links to selected items in the addressbook." + (interactive) + (message "Applescript: Getting Address Book items...") + (org-mac-link-paste-applescript-links (org-mac-link-applescript-get-selected-addressbook-items))) + +;;;###autoload +(defun org-mac-link-addressbook-item-insert-selected () + "Insert the links to selected items in the addressbook." + (interactive) + (insert (org-mac-link-addressbook-item-get-selected))) + + + +;;; Handle links from Skim.app +;; +;; Original code & idea by Christopher Suckling (org-mac-protocol) + +(org-link-set-parameters "skim" :follow #'org-mac-link-skim-open) + +(defun org-mac-link-skim-open (uri _) + "Visit page of pdf in Skim from URI." + (let* ((page (when (string-match "::\\(.+\\)\\'" uri) + (match-string 1 uri))) + (document (substring uri 0 (match-beginning 0)))) + (org-mac-link-do-applescript + (concat + "tell application \"Skim\"\n" + "activate\n" + "set theDoc to \"" document "\"\n" + "set thePage to " page "\n" + "open theDoc\n" + "go document 1 to page thePage of document 1\n" + "end tell")))) + +(defun org-mac-link-applescript-get-skim-page-link () + "AppleScript to get the link to the page in the Skim.app." + (org-mac-link-do-applescript + (concat + "tell application \"Skim\"\n" + "set theDoc to front document\n" + "set theTitle to (name of theDoc)\n" + "set thePath to (path of theDoc)\n" + "set thePage to (get index of current page of theDoc)\n" + "set theSelection to selection of theDoc\n" + "set theContent to contents of (get text of theSelection)\n" + "if theContent is missing value then\n" + " set theContent to theTitle & \", p. \" & thePage\n" + (when org-mac-link-highlight-selection-p + (concat + "else\n" + " tell theDoc\n" + " set theNote to make new note with properties {type:highlight note, selection:theSelection} at page thePage\n" + " set text of theNote to (get text of theSelection)\n" + " end tell\n")) + "end if\n" + "set theLink to \"skim://\" & thePath & \"::\" & thePage & " + "\"::split::\" & theContent\n" + "end tell\n" + "return theLink as string\n"))) + +;;;###autoload +(defun org-mac-link-skim-get-page () + "Get the link to the page in the Skim.app." + (interactive) + (message "Applescript: Getting Skim page link...") + (org-mac-link-paste-applescript-links (org-mac-link-applescript-get-skim-page-link))) + +;;;###autoload +(defun org-mac-link-skim-insert-page () + "Insert the link to the page in the Skim.app." + (interactive) + (insert (org-mac-link-skim-get-page))) + + + +;;; Handle links from Adobe Acrobat Pro.app +;; +;; Original code & idea by Christopher Suckling (org-mac-protocol) +;; +;; The URI format is path_to_pdf_file::page_number + +(org-link-set-parameters "acrobat" :follow #'org-mac-link-acrobat-open) + +(defun org-mac-link-acrobat-open (uri _) + "Visit page of pdf in Acrobat from URI." + (let* ((page (when (string-match "::\\(.+\\)\\'" uri) + (match-string 1 uri))) + (document (substring uri 0 (match-beginning 0)))) + (org-mac-link-do-applescript + (concat + "tell application \"Adobe Acrobat Pro\"\n" + " activate\n" + " set theDoc to \"" document "\"\n" + " set thePage to " page "\n" + " open theDoc\n" + " tell PDF Window 1\n" + " goto page thePage\n" + " end tell\n" + "end tell")))) + +;; The applescript returns link in the format +;; "adobe:path_to_pdf_file::page_number::split::document_title, p.page_label" + +(defun org-mac-link-applescript-get-acrobat-page-link () + "AppleScript to get the link to the page in the Adobe Acrobat Pro.app." + (org-mac-link-do-applescript + (concat + "tell application \"Adobe Acrobat Pro\"\n" + " set theDoc to active doc\n" + " set theWindow to (PDF Window 1 of theDoc)\n" + " set thePath to (file alias of theDoc)\n" + " set theTitle to (name of theWindow)\n" + " set thePage to (page number of theWindow)\n" + " set theLabel to (label text of (page thePage of theWindow))\n" + "end tell\n" + "set theResult to \"acrobat:\" & thePath & \"::\" & thePage & \"::split::\" & theTitle & \", p.\" & theLabel\n" + "return theResult as string\n"))) + +;;;###autoload +(defun org-mac-link-acrobat-get-page () + "Get the link to the page in the Adobe Acrobat Pro.app." + (interactive) + (message "Applescript: Getting Acrobat page link...") + (org-mac-link-paste-applescript-links (org-mac-link-applescript-get-acrobat-page-link))) + +;;;###autoload +(defun org-mac-link-acrobat-insert-page () + "Insert the link to the page in the Adobe Acrobat Pro.app." + (interactive) + (insert (org-mac-link-acrobat-get-page))) + + + +;;; Handle links from Microsoft Outlook.app + +(org-link-set-parameters "mac-outlook" :follow #'org-mac-link-outlook-message-open) + +(defun org-mac-link-outlook-message-open (msgid _) + "Open a message in Outlook using MSGID." + (org-mac-link-do-applescript + (concat + "tell application \"" org-mac-link-outlook-path "\"\n" + (format "open message id %s\n" (substring-no-properties msgid)) + "activate\n" + "end tell"))) + +(defun org-mac-link-applescript-get-selected-outlook-mail () + "AppleScript to create links to selected messages in Microsoft Outlook.app." + (org-mac-link-do-applescript + (concat + "tell application \"" org-mac-link-outlook-path "\"\n" + "set msgCount to count current messages\n" + "if (msgCount < 1) then\n" + "return\n" + "end if\n" + "set theLinkList to {}\n" + "set theSelection to (get current messages)\n" + "repeat with theMessage in theSelection\n" + "set theID to id of theMessage as string\n" + "set theURL to \"mac-outlook:\" & theID\n" + "set theSubject to subject of theMessage\n" + "set theLink to theURL & \"::split::\" & theSubject & \"\n\"\n" + "copy theLink to end of theLinkList\n" + "end repeat\n" + "return theLinkList as string\n" + "end tell"))) + +(defun org-mac-link-shell-get-flagged-outlook-mail () + "Shell commands to create links to flagged messages in Microsoft Outlook.app." + (mapconcat + (lambda (x) "" + (concat + "mac-outlook:" + (mapconcat + (lambda (y) "" y) + (split-string + (shell-command-to-string + (format "mdls -raw -name com_microsoft_outlook_recordID -name kMDItemDisplayName \"%s\"" x)) + "\000") + "::split::") + "\n")) + (with-temp-buffer + (let ((coding-system-for-read (or file-name-coding-system 'utf-8)) + (coding-system-for-write 'utf-8)) + (shell-command + "mdfind com_microsoft_outlook_flagged==1" + (current-buffer))) + (split-string + (buffer-string) "\n" t)) + "")) + +;;;###autoload +(defun org-mac-link-outlook-message-get-links (&optional select-or-flag) + "Create links to selected or flagged messages in Microsoft Outlook.app. +This will use AppleScript to get the message-id and the subject of the +messages in Microsoft Outlook.app and make a link out of it. +When SELECT-OR-FLAG is \"s\", get the selected messages (this is also +the default). When SELECT-OR-FLAG is \"f\", get the flagged messages. +The Org-syntax text will be pushed to the kill ring, and also returned." + (interactive "sLink to (s)elected or (f)lagged messages: ") + (setq select-or-flag (or select-or-flag "s")) + (message "Org Mac Outlook: searching mailboxes...") + (org-mac-link-paste-applescript-links + (if (string= select-or-flag "s") + (org-mac-link-applescript-get-selected-outlook-mail) + (if (string= select-or-flag "f") + (org-mac-link-shell-get-flagged-outlook-mail) + (error "Please select \"s\" or \"f\""))))) + +;;;###autoload +(defun org-mac-link-outlook-message-insert-selected () + "Insert a link to the messages currently selected in Microsoft Outlook.app. +This will use AppleScript to get the message-id and the subject +of the active mail in Microsoft Outlook.app and make a link out of it." + (interactive) + (insert (org-mac-link-outlook-message-get-links "s"))) + +;;;###autoload +(defun org-mac-link-outlook-message-insert-flagged (org-buffer org-heading) + "Asks for an ORG-BUFFER and a heading within it, and replace message links. +If ORG-HEADING exists, delete all mac-outlook:// links in heading's first level. +If heading doesn't exist, create it at point-max. +Insert list of mac-outlook:// links to flagged mail after heading." + (interactive "bBuffer in which to insert links: \nsHeading after which to insert links: ") + (with-current-buffer org-buffer + (goto-char (point-min)) + (let ((isearch-forward t) + (message-re "\\[\\[\\(mac-outlook:\\)\\([^]]+\\)\\]\\(\\[\\([^]]+\\)\\]\\)?\\]")) + (if (org-goto--local-search-headings org-heading nil t) + (if (not (eobp)) + (progn + (save-excursion + (while (re-search-forward + message-re (save-excursion (outline-next-heading)) t) + (delete-region (match-beginning 0) (match-end 0))) + (insert "\n" (org-mac-link-outlook-message-get-links "f"))) + (flush-lines "^$" (point) (outline-next-heading))) + (insert "\n" (org-mac-link-outlook-message-get-links "f"))) + (goto-char (point-max)) + (insert "\n") + (org-insert-heading nil t) + (insert org-heading "\n" (org-mac-link-outlook-message-get-links "f")))))) + + + +;;; Handle links from Evernote.app + +(org-link-set-parameters "mac-evernote" :follow #'org-mac-link-evernote-note-open) + +(defun org-mac-link-evernote-path () + "Get path to evernote. +First consider the value of ORG-MAC-LINK-EVERNOTE-PATH, then attempt to find it. +Finding the path can be slow." + (or org-mac-link-evernote-path + (replace-regexp-in-string (rx (* (any " \t\n")) eos) + "" + (shell-command-to-string + "mdfind kMDItemCFBundleIdentifier == 'com.evernote.Evernote'")))) + +(defun org-mac-link-evernote-note-open (noteid _) + "Open a note in Evernote using the NOTEID." + (org-mac-link-do-applescript + (concat + "tell application \"" (org-mac-link-evernote-path) "\"\n" + " set theNotes to get every note of every notebook where its local id is \"" (substring-no-properties noteid) "\"\n" + " repeat with _note in theNotes\n" + " if length of _note is not 0 then\n" + " set _selectedNote to _note\n" + " end if\n" + " end repeat\n" + " open note window with item 1 of _selectedNote\n" + " activate\n" + "end tell"))) + +(defun org-mac-link-applescript-get-selected-evernote-notes () + "AppleScript to create links to selected notes in Evernote.app." + (org-mac-link-do-applescript + (concat + "tell application \"" (org-mac-link-evernote-path) "\"\n" + " set noteCount to count selection\n" + " if (noteCount < 1) then\n" + " return\n" + " end if\n" + " set theLinkList to {}\n" + " set theSelection to selection\n" + " repeat with theNote in theSelection\n" + " set theTitle to title of theNote\n" + " set theID to local id of theNote\n" + " set theURL to \"mac-evernote:\" & theID\n" + " set theLink to theURL & \"::split::\" & theTitle & \"\n\"\n" + " copy theLink to end of theLinkList\n" + " end repeat\n" + " return theLinkList as string\n" + "end tell\n"))) + +;;;###autoload +(defun org-mac-link-evernote-note-insert-selected () + "Insert a link to the notes currently selected in Evernote.app. +This will use AppleScript to get the note id and the title of the +note(s) in Evernote.app and make a link out of it/them." + (interactive) + (message "Org Mac Evernote: searching notes...") +(insert (org-mac-link-paste-applescript-links + (org-mac-link-applescript-get-selected-evernote-notes)))) + + + +;;; Handle links from DEVONthink Pro Office.app + +(org-link-set-parameters "x-devonthink-item" :follow #'org-mac-link-devonthink-item-open) + +(defun org-mac-link-devonthink-item-open (uid _) + "Open UID, which is a reference to an item in DEVONthink Pro Office." + (shell-command (concat "open \"x-devonthink-item:" uid "\""))) + +(defun org-mac-link-applescript-get-selected-devonthink-item () + "AppleScript to create links to selected items in DEVONthink Pro Office.app." + (org-mac-link-do-applescript + (concat + "set theLinkList to {}\n" + "tell application \"DEVONthink Pro\"\n" + "set selectedRecords to selection\n" + "set selectionCount to count of selectedRecords\n" + "if (selectionCount < 1) then\n" + "return\n" + "end if\n" + "repeat with theRecord in selectedRecords\n" + "set theID to uuid of theRecord\n" + "set theURL to \"x-devonthink-item:\" & theID\n" + "set theSubject to name of theRecord\n" + "set theLink to theURL & \"::split::\" & theSubject & \"\n\"\n" + "copy theLink to end of theLinkList\n" + "end repeat\n" + "end tell\n" + "return theLinkList as string"))) + +(defun org-mac-link-devonthink-get-links () + "Create links to the item(s) currently selected in DEVONthink Pro Office. +This will use AppleScript to get the `uuid' and the `name' of the +selected items in DEVONthink Pro Office.app and make links out of it/them. +This function will push the Org-syntax text to the kill ring, and return it." + (message "Org Mac DEVONthink: looking for selected items...") + (org-mac-link-paste-applescript-links (org-mac-link-applescript-get-selected-devonthink-item))) + +;;;###autoload +(defun org-mac-link-devonthink-item-insert-selected () + "Insert a link to the item(s) currently selected in DEVONthink Pro Office. +This will use AppleScript to get the `uuid'(s) and the name(s) of the +selected items in DEVONthink Pro Office and make link(s) out of it/them." + (interactive) + (insert (org-mac-link-devonthink-get-links))) + + + +;;; Handle links from Mail.app + +(org-link-set-parameters "message" :follow #'org-mac-link-mail-open) + +(defun org-mac-link-mail-open (message-id _) + "Visit the message with MESSAGE-ID. +This will use the command `open' with the message URL." + (start-process (concat "open message:" message-id) nil + "open" (concat "message://%3C" (substring message-id 2) "%3E"))) + +(defun org-mac-link-applescript-get-selected-mail () + "AppleScript to create links to selected messages in Mail.app." + (org-mac-link-do-applescript + (concat + "tell application \"Mail\"\n" + "set theLinkList to {}\n" + "set theSelection to selection\n" + "repeat with theMessage in theSelection\n" + "set theID to message id of theMessage\n" + "set theSubject to subject of theMessage\n" + "set theLink to \"message://\" & theID & \"::split::\" & theSubject\n" + "if (theLinkList is not equal to {}) then\n" + "set theLink to \"\n\" & theLink\n" + "end if\n" + "copy theLink to end of theLinkList\n" + "end repeat\n" + "return theLinkList as string\n" + "end tell"))) + +(defun org-mac-link-applescript-get-flagged-mail () + "AppleScript to create links to flagged messages in Mail.app." + (unless org-mac-link-mail-account + (error "You must set org-mac-link-mail-account")) + (org-mac-link-do-applescript + (concat + ;; Get links + "tell application \"Mail\"\n" + "set theMailboxes to every mailbox of account \"" org-mac-link-mail-account "\"\n" + "set theLinkList to {}\n" + "repeat with aMailbox in theMailboxes\n" + "set theSelection to (every message in aMailbox whose flagged status = true)\n" + "repeat with theMessage in theSelection\n" + "set theID to message id of theMessage\n" + "set theSubject to subject of theMessage\n" + "set theLink to \"message://\" & theID & \"::split::\" & theSubject & \"\n\"\n" + "copy theLink to end of theLinkList\n" + "end repeat\n" + "end repeat\n" + "return theLinkList as string\n" + "end tell"))) + +;;;###autoload +(defun org-mac-link-mail-get-links (&optional select-or-flag) + "Create links to the messages currently selected or flagged in Mail.app. +This will use AppleScript to get the message-id and the subject of the +messages in Mail.app and make a link out of it. +When SELECT-OR-FLAG is \"s\", get the selected messages (this is also +the default). When SELECT-OR-FLAG is \"f\", get the flagged messages. +The Org-syntax text will be pushed to the kill ring, and also returned." + (interactive "sLink to (s)elected or (f)lagged messages: ") + (setq select-or-flag (or select-or-flag "s")) + (message "AppleScript: searching mailboxes...") + (org-mac-link-paste-applescript-links + (cond + ((string= select-or-flag "s") (org-mac-link-applescript-get-selected-mail)) + ((string= select-or-flag "f") (org-mac-link-applescript-get-flagged-mail)) + (t (error "Please select \"s\" or \"f\""))))) + +;;;###autoload +(defun org-mac-link-mail-insert-selected () + "Insert a link to the messages currently selected in Mail.app. +This will use AppleScript to get the message-id and the subject of the +active mail in Mail.app and make a link out of it." + (interactive) + (insert (org-mac-link-mail-get-links "s"))) + +;; The following line is for backward compatibility +(defalias 'org-mac-link-mail-insert-link #'org-mac-link-mail-insert-selected) + +;;;###autoload +(defun org-mac-link-mail-insert-flagged (org-buffer org-heading) + "Asks for an ORG-BUFFER and a heading within it, and replace message links. +If ORG-HEADING exists, delete all message:// links within heading's first level. +If heading doesn't exist, create it at point-max. +Insert list of message:// links to flagged mail after heading." + (interactive "bBuffer in which to insert links: \nsHeading after which to insert links: ") + (with-current-buffer org-buffer + (goto-char (point-min)) + (let ((isearch-forward t) + (message-re "\\[\\[\\(message:\\)\\([^]]+\\)\\]\\(\\[\\([^]]+\\)\\]\\)?\\]")) + (if (org-goto--local-search-headings org-heading nil t) + (if (not (eobp)) + (progn + (save-excursion + (while (re-search-forward + message-re (save-excursion (outline-next-heading)) t) + (delete-region (match-beginning 0) (match-end 0))) + (insert "\n" (org-mac-link-mail-get-links "f"))) + (flush-lines "^$" (point) (outline-next-heading))) + (insert "\n" (org-mac-link-mail-get-links "f"))) + (goto-char (point-max)) + (insert "\n") + (org-insert-heading nil t) + (insert org-heading "\n" (org-mac-link-mail-get-links "f")))))) + + + +;;; Handle links from qutebrowser.app + +(defun org-mac-link-applescript-qutebrowser-get-frontmost-url () + "AppleScript to get the links to the frontmost window of the qutebrowser.app." + (let ((result + (org-mac-link-do-applescript + (concat + "set oldClipboard to the clipboard\n" + "set frontmostApplication to path to frontmost application\n" + "tell application \"qutebrowser\"\n" + " activate\n" + " delay 0.15\n" + " tell application \"System Events\"\n" + " keystroke \"y\"\n" + " keystroke \"y\"\n" + " end tell\n" + " delay 0.15\n" + " set theUrl to the clipboard\n" + " set the clipboard to oldClipboard\n" + " delay 0.15\n" + " tell application \"System Events\"\n" + " keystroke \"y\"\n" + " keystroke \"T\"\n" + " end tell\n" + " delay 0.15\n" + " set theTitle to the clipboard\n" + " set the clipboard to oldClipboard\n" + " set theResult to (get theUrl) & \"::split::\" & (get theTitle)\n" + "end tell\n" + "activate application (frontmostApplication as text)\n" + "set links to {}\n" + "copy theResult to the end of links\n" + "return links as string\n")))) + (car (split-string result "[\r\n]+" t)))) + +;;;###autoload +(defun org-mac-link-qutebrowser-get-frontmost-url () + "Get the link to the frontmost window of the qutebrowser.app." + (interactive) + (message "Applescript: Getting qutebrowser url...") + (org-mac-link-paste-applescript-links (org-mac-link-applescript-qutebrowser-get-frontmost-url))) + +;;;###autoload +(defun org-mac-link-qutebrowser-insert-frontmost-url () + "Insert the link to the frontmost window of the qutebrowser.app." + (interactive) + (insert (org-mac-link-qutebrowser-get-frontmost-url))) + + + +(provide 'org-mac-link) + +;;; org-mac-link.el ends here