From b4bd8dd1b1c94a880372872560f32839807c56a0 Mon Sep 17 00:00:00 2001 From: Artur Malabarba Date: Tue, 23 Dec 2014 15:13:36 -0200 Subject: Implement sx-tab-meta-or-main command --- sx-tab.el | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/sx-tab.el b/sx-tab.el index 6c5e21e..d2e278f 100644 --- a/sx-tab.el +++ b/sx-tab.el @@ -189,5 +189,20 @@ If SITE is nil, use `sx-default-site'." (file-name-directory load-file-name))) nil t) + +;;; Inter-modes navigation +(defun sx-tab-meta-or-main () + "Switch to the meta version of a main site, or vice-versa. +Inside a question, go to the frontpage of the site this question +belongs to." + (interactive) + (if (and (derived-mode-p 'sx-question-list-mode) + sx-question-list--site) + (sx-question-list-switch-site + (if (string-match "\\`meta\\." sx-question-list--site) + (replace-match "" :fixedcase nil sx-question-list--site) + (concat "meta." sx-question-list--site))) + (sx-tab-frontpage nil (sx--site (sx--data-here 'question))))) + (provide 'sx-tab) ;;; sx-tab.el ends here -- cgit v1.2.3 From 6b837ca538576d97c30af8091a2ebbc2691ddaff Mon Sep 17 00:00:00 2001 From: Artur Malabarba Date: Tue, 23 Dec 2014 23:33:19 -0200 Subject: get-questions accepts a submethod argument --- sx-question.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sx-question.el b/sx-question.el index 3fcc438..a890d37 100644 --- a/sx-question.el +++ b/sx-question.el @@ -26,7 +26,7 @@ (require 'sx-filter) (require 'sx-method) -(defun sx-question-get-questions (site &optional page keywords) +(defun sx-question-get-questions (site &optional page keywords submethod) "Get SITE questions. Return page PAGE (the first if nil). Return a list of question. Each question is an alist of properties returned by the API with an added (site SITE) @@ -39,6 +39,7 @@ KEYWORDS are added to the method call along with PAGE. :keywords `((page . ,page) ,@keywords) :site site :auth t + :submethod submethod :filter sx-browse-filter)) (defun sx-question-get-question (site question-id) -- cgit v1.2.3 From 635c863b0c0d19db45d44ce0f25f41f0be650c92 Mon Sep 17 00:00:00 2001 From: Artur Malabarba Date: Tue, 23 Dec 2014 23:33:37 -0200 Subject: 3 more tabs: unanswered, unanswered my tags, featured --- sx-tab.el | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/sx-tab.el b/sx-tab.el index d2e278f..4b9d50b 100644 --- a/sx-tab.el +++ b/sx-tab.el @@ -189,6 +189,48 @@ If SITE is nil, use `sx-default-site'." (file-name-directory load-file-name))) nil t) + +;;; Unanswered +(sx-tab--define "Unanswered" + (lambda (page) + (sx-question-get-questions + sx-question-list--site page nil 'unanswered))) +;;;###autoload +(autoload 'sx-tab-unanswered + (expand-file-name + "sx-tab" + (when load-file-name + (file-name-directory load-file-name))) + nil t) + + +;;; Unanswered My-tags +(sx-tab--define "Unanswered-my-tags" + (lambda (page) + (sx-question-get-questions + sx-question-list--site page nil 'unanswered/my-tags))) +;;;###autoload +(autoload 'sx-tab-unanswered + (expand-file-name + "sx-tab" + (when load-file-name + (file-name-directory load-file-name))) + nil t) + + +;;; Featured +(sx-tab--define "Featured" + (lambda (page) + (sx-question-get-questions + sx-question-list--site page nil 'featured))) +;;;###autoload +(autoload 'sx-tab-featured + (expand-file-name + "sx-tab" + (when load-file-name + (file-name-directory load-file-name))) + nil t) + ;;; Inter-modes navigation (defun sx-tab-meta-or-main () -- cgit v1.2.3 From 542ddf73506c2c297106e4b3f4ec0a1d80a35ad8 Mon Sep 17 00:00:00 2001 From: Artur Malabarba Date: Tue, 23 Dec 2014 23:40:01 -0200 Subject: Define new keymap for inter-modes motion --- sx-goto.el | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 sx-goto.el diff --git a/sx-goto.el b/sx-goto.el new file mode 100644 index 0000000..f1a55bc --- /dev/null +++ b/sx-goto.el @@ -0,0 +1,56 @@ +;;; sx-goto.el --- Keymap for navigating between pages. -*- lexical-binding: t; -*- + +;; Copyright (C) 2014 Artur Malabarba + +;; Author: Artur Malabarba + +;; 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 of the License, 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 this program. If not, see . + +;;; Commentary: + +;;; Code: + +(require 'sx) +(require 'sx-filter) +(require 'sx-method) +(require 'sx-question-list) + + +;;; Keybinds +;;;###autoload +(define-prefix-command 'sx-goto-map) + +(mapc (lambda (x) (define-key sx-goto-map (car x) (cadr x))) + '( + ;; These immitate the site's G hotkey. + ("m" sx-tab-meta-or-main) + ("a" sx-ask) + ("h" sx-tab-frontpage) + ;; This is `n' on the site. + ("u" sx-tab-unanswered) + ;; These are extra things we can do, because we're awesome. + ("i" sx-inbox) + ("f" sx-tab-featured) + ("U" sx-tab-unanswered-my-tags) + ("n" sx-tab-newest) + ("w" sx-tab-week) + ("v" sx-tab-topvoted) + )) + +(provide 'sx-goto) +;;; sx-goto.el ends here + +;; Local Variables: +;; indent-tabs-mode: nil +;; End: -- cgit v1.2.3 From 38c7c3e8f062dc8f0f61136312d8bccdb78f8f2e Mon Sep 17 00:00:00 2001 From: Artur Malabarba Date: Sun, 4 Jan 2015 11:36:36 -0200 Subject: Rename to sx-switchto.el --- sx-goto.el | 56 -------------------------------------------------------- sx-switchto.el | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 56 deletions(-) delete mode 100644 sx-goto.el create mode 100644 sx-switchto.el diff --git a/sx-goto.el b/sx-goto.el deleted file mode 100644 index f1a55bc..0000000 --- a/sx-goto.el +++ /dev/null @@ -1,56 +0,0 @@ -;;; sx-goto.el --- Keymap for navigating between pages. -*- lexical-binding: t; -*- - -;; Copyright (C) 2014 Artur Malabarba - -;; Author: Artur Malabarba - -;; 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 of the License, 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 this program. If not, see . - -;;; Commentary: - -;;; Code: - -(require 'sx) -(require 'sx-filter) -(require 'sx-method) -(require 'sx-question-list) - - -;;; Keybinds -;;;###autoload -(define-prefix-command 'sx-goto-map) - -(mapc (lambda (x) (define-key sx-goto-map (car x) (cadr x))) - '( - ;; These immitate the site's G hotkey. - ("m" sx-tab-meta-or-main) - ("a" sx-ask) - ("h" sx-tab-frontpage) - ;; This is `n' on the site. - ("u" sx-tab-unanswered) - ;; These are extra things we can do, because we're awesome. - ("i" sx-inbox) - ("f" sx-tab-featured) - ("U" sx-tab-unanswered-my-tags) - ("n" sx-tab-newest) - ("w" sx-tab-week) - ("v" sx-tab-topvoted) - )) - -(provide 'sx-goto) -;;; sx-goto.el ends here - -;; Local Variables: -;; indent-tabs-mode: nil -;; End: diff --git a/sx-switchto.el b/sx-switchto.el new file mode 100644 index 0000000..064ba82 --- /dev/null +++ b/sx-switchto.el @@ -0,0 +1,56 @@ +;;; sx-switchto.el --- Keymap for navigating between pages. -*- lexical-binding: t; -*- + +;; Copyright (C) 2014 Artur Malabarba + +;; Author: Artur Malabarba + +;; 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 of the License, 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 this program. If not, see . + +;;; Commentary: + +;;; Code: + +(require 'sx) +(require 'sx-filter) +(require 'sx-method) +(require 'sx-question-list) + + +;;; Keybinds +;;;###autoload +(define-prefix-command 'sx-switchto-map) + +(mapc (lambda (x) (define-key sx-switchto-map (car x) (cadr x))) + '( + ;; These immitate the site's G hotkey. + ("m" sx-tab-meta-or-main) + ("a" sx-ask) + ("h" sx-tab-frontpage) + ;; This is `n' on the site. + ("u" sx-tab-unanswered) + ;; These are extra things we can do, because we're awesome. + ("i" sx-inbox) + ("f" sx-tab-featured) + ("U" sx-tab-unanswered-my-tags) + ("n" sx-tab-newest) + ("w" sx-tab-week) + ("v" sx-tab-topvoted) + )) + +(provide 'sx-switchto) +;;; sx-switchto.el ends here + +;; Local Variables: +;; indent-tabs-mode: nil +;; End: -- cgit v1.2.3 From 6c7093fd2b9e0bc411e350b009a96fbe1ee53e27 Mon Sep 17 00:00:00 2001 From: Artur Malabarba Date: Sun, 4 Jan 2015 11:36:48 -0200 Subject: Add switchto to sx-load --- sx-load.el | 1 + 1 file changed, 1 insertion(+) diff --git a/sx-load.el b/sx-load.el index e7cb6b0..8de4374 100644 --- a/sx-load.el +++ b/sx-load.el @@ -43,6 +43,7 @@ sx-request sx-search sx-site + sx-switchto sx-tab )) -- cgit v1.2.3 From 7792498420eeb3c1ba8de447b90ae19a9b9e5410 Mon Sep 17 00:00:00 2001 From: Artur Malabarba Date: Sun, 4 Jan 2015 11:42:01 -0200 Subject: Alphabetical sort. --- sx-switchto.el | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sx-switchto.el b/sx-switchto.el index 064ba82..8305644 100644 --- a/sx-switchto.el +++ b/sx-switchto.el @@ -34,18 +34,18 @@ (mapc (lambda (x) (define-key sx-switchto-map (car x) (cadr x))) '( ;; These immitate the site's G hotkey. - ("m" sx-tab-meta-or-main) ("a" sx-ask) ("h" sx-tab-frontpage) + ("m" sx-tab-meta-or-main) ;; This is `n' on the site. ("u" sx-tab-unanswered) ;; These are extra things we can do, because we're awesome. - ("i" sx-inbox) ("f" sx-tab-featured) - ("U" sx-tab-unanswered-my-tags) + ("i" sx-inbox) ("n" sx-tab-newest) - ("w" sx-tab-week) + ("U" sx-tab-unanswered-my-tags) ("v" sx-tab-topvoted) + ("w" sx-tab-week) )) (provide 'sx-switchto) -- cgit v1.2.3 From bab11dd61c08f3522d874166d7033dd867492d11 Mon Sep 17 00:00:00 2001 From: Artur Malabarba Date: Sun, 4 Jan 2015 11:42:30 -0200 Subject: ADd sx-tab-switch --- sx-switchto.el | 1 + 1 file changed, 1 insertion(+) diff --git a/sx-switchto.el b/sx-switchto.el index 8305644..46a085e 100644 --- a/sx-switchto.el +++ b/sx-switchto.el @@ -43,6 +43,7 @@ ("f" sx-tab-featured) ("i" sx-inbox) ("n" sx-tab-newest) + ("t" sx-tab-switch) ("U" sx-tab-unanswered-my-tags) ("v" sx-tab-topvoted) ("w" sx-tab-week) -- cgit v1.2.3 From 191dc355ae2ca00cdb84d01298a8caea14dbe8da Mon Sep 17 00:00:00 2001 From: Artur Malabarba Date: Sun, 4 Jan 2015 11:43:03 -0200 Subject: Add sx-question-list-switch-site --- sx-switchto.el | 1 + 1 file changed, 1 insertion(+) diff --git a/sx-switchto.el b/sx-switchto.el index 46a085e..e5889e1 100644 --- a/sx-switchto.el +++ b/sx-switchto.el @@ -43,6 +43,7 @@ ("f" sx-tab-featured) ("i" sx-inbox) ("n" sx-tab-newest) + ("s" sx-question-list-switch-site) ("t" sx-tab-switch) ("U" sx-tab-unanswered-my-tags) ("v" sx-tab-topvoted) -- cgit v1.2.3 From 25cf5bf2e784ac870fa4c6f00502eda6dc8e7f22 Mon Sep 17 00:00:00 2001 From: Artur Malabarba Date: Sun, 4 Jan 2015 12:06:23 -0200 Subject: Define some keys conditionally --- sx-switchto.el | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/sx-switchto.el b/sx-switchto.el index e5889e1..1a2c3a0 100644 --- a/sx-switchto.el +++ b/sx-switchto.el @@ -43,13 +43,31 @@ ("f" sx-tab-featured) ("i" sx-inbox) ("n" sx-tab-newest) - ("s" sx-question-list-switch-site) ("t" sx-tab-switch) ("U" sx-tab-unanswered-my-tags) ("v" sx-tab-topvoted) ("w" sx-tab-week) )) + +;;; These are keys which depend on context. +;;;; For instance, it makes no sense to have `switch-site' bound to a +;;;; key on a buffer with no `sx-question-list--site' variable. +(defmacro sx--define-conditional-key (keymap key def &rest body) + "In KEYMAP, define key sequence KEY as DEF conditionally. +This is like `define-key', except the definition \"disapears\" +whenever BODY evaluates to nil." + (declare (indent 3) + (debug (form form form &rest sexp))) + `(define-key ,keymap ,key + '(menu-item + ,(format "maybe-%s" (or (car (cdr-safe def)) def)) ignore + :filter (lambda (&optional _) + (when (progn ,@body) ,def))))) + +(sx--define-conditional-key sx-switchto-map "s" #'sx-question-list-switch-site + (and (boundp 'sx-question-list--site) sx-question-list--site)) + (provide 'sx-switchto) ;;; sx-switchto.el ends here -- cgit v1.2.3 From 33d0e830929ef07f0e1aee84189fb8aec8d52f62 Mon Sep 17 00:00:00 2001 From: Artur Malabarba Date: Sun, 4 Jan 2015 12:08:31 -0200 Subject: Bind switchto-map to "s" --- sx-question-list.el | 4 ++-- sx-question-mode.el | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/sx-question-list.el b/sx-question-list.el index cf849db..c189ad8 100644 --- a/sx-question-list.el +++ b/sx-question-list.el @@ -314,10 +314,10 @@ into consideration. ("J" sx-question-list-next-far) ("K" sx-question-list-previous-far) ("g" sx-question-list-refresh) - (":" sx-question-list-switch-site) ("t" sx-tab-switch) ("a" sx-ask) - ("s" sx-search) + ("S" sx-search) + ("s" sx-switchto-map) ("v" sx-visit-externally) ("u" sx-toggle-upvote) ("d" sx-toggle-downvote) diff --git a/sx-question-mode.el b/sx-question-mode.el index 721f935..c618c96 100644 --- a/sx-question-mode.el +++ b/sx-question-mode.el @@ -231,7 +231,8 @@ Letters do not insert themselves; instead, they are commands. (" " scroll-up-command) ("a" sx-answer) ("e" sx-edit) - ("s" sx-search) + ("S" sx-search) + ("s" sx-switchto-map) (,(kbd "S-SPC") scroll-down-command) ([backspace] scroll-down-command) ([tab] forward-button) -- cgit v1.2.3 From 671dceecafb9cb48b739b7fb54bf2b71bbc7e32c Mon Sep 17 00:00:00 2001 From: Artur Malabarba Date: Sun, 4 Jan 2015 12:54:28 -0200 Subject: Make question-list--site buffer local. Don't ask me why it wasn't already. --- sx-question-list.el | 1 + 1 file changed, 1 insertion(+) diff --git a/sx-question-list.el b/sx-question-list.el index c189ad8..9e08787 100644 --- a/sx-question-list.el +++ b/sx-question-list.el @@ -399,6 +399,7 @@ Non-interactively, DATA is a question alist." (defvar sx-question-list--site nil "Site being displayed in the *question-list* buffer.") +(make-variable-buffer-local 'sx-question-list--site) (defun sx-question-list-refresh (&optional redisplay no-update) "Update the list of questions. -- cgit v1.2.3