Conquer your Microsoft Outlook agenda from the comfort of Emacs.
Disclaimer: org-outlook is currently in pre-alpha. Updates & responses to issues will be sporadic.
- Integrated with org-roam
- Find outlook events with
org-roam-node-find
- Refile outlook events to any file within
org-roam-directory
- Find outlook events with
- Accept and Decline meeting requests from the agenda buffer
- Join Teams calls directly from the agenda buffer (launches Teams or web browser)
- At-a-glance overview of your appointments and fee timeslots when used with org-timeblock
Planned features & improvements:
- Reduce the number of dependencies
- Provide a universal App Registration
- More configurability
- Two-way sync of event body (owned events only).
- Org capture template to quickly plan meetings.
Future:
- Org contacts integration
Upon first launch you will be asked to give org-outlook
permission to read and write to
your Outlook calendar. Note: Some organisations will have disabled third-party
applications. In this case, unfortunately, you won’t be able to use org-outlook
.
- gnupg: org-outlook requires you to have a public/private gpg keypair capable of encryption
- html2org
- org-ml
- org-roam
- org-msg
- emacs-request
- htmlize
A standard oauth client is provided with org-outlook
, you are of course, free to use your
own Microsoft Entra App Registration instead. To do so you will need to create an App
Registration in Microsoft Entra (Formally Azure Active Directory) via
https://portal.azure.com. Optionally make a note of your tenant-id
(you can provide
org-outlook-tenant-id
to restrict the scope of your app to your Azure tenant). The app
will need the Calendars.Read
, Calendars.ReadWrite
, and offline_access
API
permissions. Under “Authentication” click Add a platform
and add http://localhost:9004
as
the redirect uri. At the bottom of the page ensure Allow public client flows
is toggled to
“Yes”. From the “Overview” tab copy the Application (client) id
and insert into your
config as specified below.
The package org-outlook
is not currently available from MELPA, but can be installed
directly from github with Quelpa.
Installing with Quelpa is easy:
- Install quelpa-use-package (which can be installed directly from MELPA).
- Add this form to your init file:
(use-package org-outlook
:quelpa (org-outlook :fetcher github :repo "ifitzpat/org-outlook")
:config
;(setq org-outlook-client-id "client-id-of-your-registered-app") ;; OPTIONAL
;(setq org-outlook-tenant-id "your-azure-tenant-id") ;; OPTIONAL
(setq org-outlook-gpg-recipient "you@example.com")
(setq org-outlook-local-timezone "Central European Standard Time") ; Your local time zone
(setq org-outlook-file "/path/to/outlook.org")
(setq org-outlook-sync-start 14) ; number of days in the past to keep in sync
(setq org-outlook-sync-end 90) ; number of days in the future to keep in sync
)
- Syncing Outlook events:
org-outlook-sync
- Accepting a meeting request:
- With point on the entry in the agenda view or within the org entry body:
org-outlook-accept-event
- With point on the entry in the agenda view or within the org entry body:
- Declining a meeting request:
- With point on the entry in the agenda view or within the org entry body:
org-outlook-decline-event
- With point on the entry in the agenda view or within the org entry body:
- Joining a Teams meeting:
- With point on the entry in the agenda view or within the org entry body:
org-outlook-join-teams-call
- With point on the entry in the agenda view or within the org entry body:
- Calling
org-outlook-sync
viaemacs --batch
avoids blocking your main emacs session.
Note: Breaking changes may be made before version 1.0, but in the event of major changes, attempts at backward compatibility will be made with obsolescence declarations, translation of arguments, etc. Users who need stability guarantees before 1.0 may choose to use tagged stable releases.
Switch to PKCE oauth flow & provide default auth client
Initial release
- Winter-to-summer time switching may cause duplicate events to appear.
- Events that are rescheduled sometimes show up twice.
- Accepting an event doesn’t change the event status from
REQUEST
toMEETING
until the next sync.
GPLv3