diff options
author | Sean Allred <code@seanallred.com> | 2014-12-03 17:59:02 -0500 |
---|---|---|
committer | Sean Allred <code@seanallred.com> | 2014-12-03 17:59:02 -0500 |
commit | 6b2ecadd89e31feb994883987c38f6988a140b8c (patch) | |
tree | c77890b4800813287f5d2fdf38effd389c219164 /sx-tab.el | |
parent | 114ca09da984738df2510bc72753a3443d16857c (diff) | |
parent | 67b60ea558f0386a1ea3dadcf3a9c4d22d398620 (diff) |
Merge branch 'master' into issue-130
Conflicts:
sx-request.el
Conflict was trivial.
Diffstat (limited to 'sx-tab.el')
-rw-r--r-- | sx-tab.el | 103 |
1 files changed, 100 insertions, 3 deletions
@@ -29,9 +29,21 @@ (defcustom sx-tab-default-site "emacs" "Name of the site to use by default when listing questions." - :type 'string + :type 'string :group 'sx) +(defvar sx-tab--list nil + "List of the names of all defined tabs.") + +(defun sx-tab-switch (tab) + "Switch to another question-list tab." + (interactive + (list (funcall (if ido-mode #'ido-completing-read #'completing-read) + "Switch to tab: " sx-tab--list + (lambda (tab) (not (equal tab sx-question-list--current-tab))) + t))) + (funcall (intern (format "sx-tab-%s" (downcase tab))))) + (defun sx-tab--interactive-site-prompt () "Query the user for a site." (let ((default (or sx-question-list--site @@ -42,6 +54,7 @@ (format "Site (%s): " default) (sx-site-get-api-tokens) nil t nil nil default))) + ;;; The main macro (defmacro sx-tab--define (tab pager &optional printer refresher @@ -98,14 +111,98 @@ If SITE is nil, use `sx-tab-default-site'." (setq sx-question-list--current-tab ,tab) ,@body (sx-question-list-refresh 'redisplay no-update)) - (switch-to-buffer ,buffer-variable))))) + (switch-to-buffer ,buffer-variable)) + ;; Add this tab to the list of existing tabs. So we can prompt + ;; the user with completion and stuff. + (add-to-list 'sx-tab--list ,tab)))) ;;; FrontPage (sx-tab--define "FrontPage" (lambda (page) (sx-question-get-questions - sx-question-list--site page))) + sx-question-list--site page '((sort . activity))))) +;;;###autoload +(autoload 'sx-tab-frontpage + (expand-file-name + "sx-tab" + (when load-file-name + (file-name-directory load-file-name))) + nil t) + + +;;; Newest +(sx-tab--define "Newest" + (lambda (page) + (sx-question-get-questions + sx-question-list--site page '((sort . creation))))) +;;;###autoload +(autoload 'sx-tab-newest + (expand-file-name + "sx-tab" + (when load-file-name + (file-name-directory load-file-name))) + nil t) + + + +;;; TopVoted +(sx-tab--define "TopVoted" + (lambda (page) + (sx-question-get-questions + sx-question-list--site page '((sort . votes))))) +;;;###autoload +(autoload 'sx-tab-topvoted + (expand-file-name + "sx-tab" + (when load-file-name + (file-name-directory load-file-name))) + nil t) + + + +;;; Hot +(sx-tab--define "Hot" + (lambda (page) + (sx-question-get-questions + sx-question-list--site page '((sort . hot))))) +;;;###autoload +(autoload 'sx-tab-hot + (expand-file-name + "sx-tab" + (when load-file-name + (file-name-directory load-file-name))) + nil t) + + + +;;; Week +(sx-tab--define "Week" + (lambda (page) + (sx-question-get-questions + sx-question-list--site page '((sort . week))))) +;;;###autoload +(autoload 'sx-tab-week + (expand-file-name + "sx-tab" + (when load-file-name + (file-name-directory load-file-name))) + nil t) + + + +;;; Month +(sx-tab--define "Month" + (lambda (page) + (sx-question-get-questions + sx-question-list--site page '((sort . month))))) +;;;###autoload +(autoload 'sx-tab-month + (expand-file-name + "sx-tab" + (when load-file-name + (file-name-directory load-file-name))) + nil t) (provide 'sx-tab) ;;; sx-tab.el ends here |