aboutsummaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorfap <fap-@users.noreply.github.com>2017-04-14 23:57:38 +0200
committerJohnson Denen <johnson.denen@gmail.com>2017-04-15 21:15:08 -0400
commitcb985db2f37eabd76b9c2643387b4e94009b3f88 (patch)
tree0c15935d55454e7e1172d0d6739b0e1b8182ce50 /lisp
parentf731da950c0f5f461c0dc23bb1cdd990ca1f7992 (diff)
Fixes #29 - Provide context menu for discover mode
* provides a `discover.el` context menu through mode-hook * moves lambdas from keymap to functions so `discover-my-major` can pick them up
Diffstat (limited to 'lisp')
-rw-r--r--lisp/mastodon-tl.el21
-rw-r--r--lisp/mastodon.el40
2 files changed, 55 insertions, 6 deletions
diff --git a/lisp/mastodon-tl.el b/lisp/mastodon-tl.el
index 2d2a588..19e6cd8 100644
--- a/lisp/mastodon-tl.el
+++ b/lisp/mastodon-tl.el
@@ -42,6 +42,27 @@
'((t (:foreground "cyan")))
"Mastodon user handle face.")
+(defun mastodon-tl--get-federated-timeline ()
+ "Opens federated timeline."
+ (interactive)
+ (mastodon-tl--get "public"))
+
+(defun mastodon-tl--get-home-timeline ()
+ "Opens home timeline."
+ (interactive)
+ (mastodon-tl--get "home"))
+
+(defun mastodon-tl--get-local-timeline ()
+ "Opens local timeline."
+ (interactive)
+ (mastodon-tl--get "public?local=true"))
+
+(defun mastodon-tl--get-tag-timeline ()
+ "Prompts for tag and opens its timeline."
+ (interactive)
+ (let ((tag (read-string "Tag: ")))
+ (mastodon-tl--get (concat "tag/" tag))))
+
(defun mastodon-tl--from-toot (key toot)
"Return value for KEY in TOOT."
(cdr (assoc key toot)))
diff --git a/lisp/mastodon.el b/lisp/mastodon.el
index 5fd069d..8511d9e 100644
--- a/lisp/mastodon.el
+++ b/lisp/mastodon.el
@@ -53,6 +53,12 @@
(defvar mastodon--api-version "v1")
+(defcustom mastodon-mode-hook nil
+ "Hook run when entering Mastodon mode."
+ :type 'hook
+ :options '(provide-discover-context-menu)
+ :group 'mastodon)
+
;; FIXME #25
(defun mastodon-version ()
"Message package version."
@@ -88,15 +94,37 @@
"Major mode for Mastodon, the federated microblogging network."
:group 'mastodon
(let ((map mastodon-mode-map))
- (define-key map (kbd "F") (lambda () (interactive) (mastodon-tl--get "public")))
- (define-key map (kbd "H") (lambda () (interactive) (mastodon-tl--get "home")))
- (define-key map (kbd "L") (lambda () (interactive) (mastodon-tl--get "public?local=true")))
+ (define-key map (kbd "F") #'mastodon-tl--get-federated-timeline)
+ (define-key map (kbd "H") #'mastodon-tl--get-home-timeline)
+ (define-key map (kbd "L") #'mastodon-tl--get-local-timeline)
(define-key map (kbd "n") #'mastodon-toot)
(define-key map (kbd "q") #'kill-this-buffer)
(define-key map (kbd "Q") #'kill-buffer-and-window)
- (define-key map (kbd "T") (lambda () (interactive)
- (let ((tag (read-string "Tag: ")))
- (mastodon-tl--get (concat "tag/" tag)))))))
+ (define-key map (kbd "T") #'mastodon-tl--get-tag-timeline)))
+
+(defun provide-discover-context-menu ()
+ "Provides a shortcut overview through Discover mode.
+Press '?' to activate it."
+ (when (bound-and-true-p discover-mode)
+ (discover-add-context-menu
+ :bind "?"
+ :mode 'mastodon-mode
+ :mode-hook 'mastodon-mode-hook
+ :context-menu '(mastodon
+ (description "Mastodon feed viewer")
+ (actions
+ ("Feed switch"
+ ("F" "Open federated timeline" mastodon-tl--get-federated-timeline)
+ ("H" "Open home timeline" mastodon-tl--get-home-timeline)
+ ("L" "Open local timeline" mastodon-tl--get-local-timeline)
+ ("T" "Prompt for tag and open its timeline" mastodon-tl--get-tag-timeline))
+ ("Toot"
+ ("n" "Switch to 'mastodon-toot' buffer" mastodon-toot))
+ ("Quit"
+ ("q" "Quit mastodon buffer. Leave window open." kill-this-buffer)
+ ("Q" "Quit mastodon buffer and kill window." kill-buffer-and-window)))))))
+
+(add-hook 'mastodon-mode-hook 'provide-discover-context-menu t)
(provide 'mastodon)
;;; mastodon.el ends here