From 84a1d8a3676c040090ae9ab61e73e6d982bbc5bf Mon Sep 17 00:00:00 2001 From: Artur Malabarba Date: Mon, 24 Nov 2014 12:41:53 +0000 Subject: Refactor view to tab --- sx-tab.el | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ sx-view.el | 94 -------------------------------------------------------------- 2 files changed, 94 insertions(+), 94 deletions(-) create mode 100644 sx-tab.el delete mode 100644 sx-view.el diff --git a/sx-tab.el b/sx-tab.el new file mode 100644 index 0000000..74d308e --- /dev/null +++ b/sx-tab.el @@ -0,0 +1,94 @@ +;;; sx-tab.el --- User-level functions for viewing frontpages. -*- 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-question-list) + +(defcustom sx-tab-default-site "emacs" + "Name of the site to use by default when listing questions." + :type 'string + :group 'stack-exchange) + +(defmacro sx-tab--define (page &optional printer refresher pager) + "Define a stack-exchange page called PAGE. +Page is a capitalized string. + +This defines a command `sx-tab-PAGE' for displaying the page, +and a variable `sx-tab--PAGE-buffer' for holding the bufer. + +The arguments PRINTER, REFRESHER, and PAGER, if non-nil, are +respectively used to set the value of the variables +`sx-question-list--print-function', +`sx-question-list--refresh-function', and +`sx-question-list--next-page-function'." + (declare (indent 1) (debug t)) + (let* ((name (downcase page)) + (buffer-variable + (intern (concat "sx-tab--" name "-buffer")))) + `(progn + (defvar ,buffer-variable nil + ,(format "Buffer where the %s questions are displayed." + page)) + (defun + ,(intern (concat "sx-tab-" name)) + (&optional no-update site) + ,(format "Display a list of %s questions for SITE. + +NO-UPDATE (the prefix arg) is passed to `sx-question-list-refresh'. +If SITE is nil, use `sx-tab-default-site'." + page) + (interactive + (list current-prefix-arg + (funcall (if ido-mode #'ido-completing-read #'completing-read) + (format "Site (%s): " sx-tab-default-site) + (sx-site-get-api-tokens) nil t nil nil + sx-tab-default-site))) + (sx-initialize) + (unless site (setq site sx-tab-default-site)) + ;; Create the buffer + (unless (buffer-live-p ,buffer-variable) + (setq ,buffer-variable + (generate-new-buffer "*question-list*"))) + ;; Fill the buffer with content. + (with-current-buffer ,buffer-variable + (sx-question-list-mode) + (when printer + (setq sx-question-list--next-page-function printer)) + (when refresher + (setq sx-question-list--refresh-function refresher)) + (when pager + (setq sx-question-list--print-function pager)) + (setq sx-question-list--current-site site) + (setq sx-question-list--current-page ,page) + (sx-question-list-refresh 'redisplay no-update)) + (switch-to-buffer ,buffer-variable))))) + + +;;; FrontPage +(sx-tab--define-tab "FrontPage") + +(provide 'sx-tab) +;;; sx-tab.el ends here diff --git a/sx-view.el b/sx-view.el deleted file mode 100644 index 9a7c3fd..0000000 --- a/sx-view.el +++ /dev/null @@ -1,94 +0,0 @@ -;;; sx-view.el --- User-level functions for viewing frontpages. -*- 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-question-list) - -(defcustom sx-view-default-site "emacs" - "Name of the site to use by default when listing questions." - :type 'string - :group 'stack-exchange) - -(defmacro sx-view--define-page (page &optional printer refresher pager) - "Define a stack-exchange page called PAGE. -Page is a capitalized string. - -This defines a command `sx-view-PAGE' for displaying the page, -and a variable `sx-view--PAGE-buffer' for holding the bufer. - -The arguments PRINTER, REFRESHER, and PAGER, if non-nil, are -respectively used to set the value of the variables -`sx-question-list--print-function', -`sx-question-list--refresh-function', and -`sx-question-list--next-page-function'." - (declare (indent 1) (debug t)) - (let* ((name (downcase page)) - (buffer-variable - (intern (concat "sx-view--" name "-buffer")))) - `(progn - (defvar ,buffer-variable nil - ,(format "Buffer where the %s questions are displayed." - page)) - (defun - ,(intern (concat "sx-view-" name)) - (&optional no-update site) - ,(format "Display a list of %s questions for SITE. - -NO-UPDATE (the prefix arg) is passed to `sx-question-list-refresh'. -If SITE is nil, use `sx-view-default-site'." - page) - (interactive - (list current-prefix-arg - (funcall (if ido-mode #'ido-completing-read #'completing-read) - (format "Site (%s): " sx-view-default-site) - (sx-site-get-api-tokens) nil t nil nil - sx-view-default-site))) - (sx-initialize) - (unless site (setq site sx-view-default-site)) - ;; Create the buffer - (unless (buffer-live-p ,buffer-variable) - (setq ,buffer-variable - (generate-new-buffer "*question-list*"))) - ;; Fill the buffer with content. - (with-current-buffer ,buffer-variable - (sx-question-list-mode) - (when printer - (setq sx-question-list--next-page-function printer)) - (when refresher - (setq sx-question-list--refresh-function refresher)) - (when pager - (setq sx-question-list--print-function pager)) - (setq sx-question-list--current-site site) - (setq sx-question-list--current-page ,page) - (sx-question-list-refresh 'redisplay no-update)) - (switch-to-buffer ,buffer-variable))))) - - -;;; FrontPage -(sx-view--define-page "FrontPage") - -(provide 'sx-view) -;;; sx-view.el ends here -- cgit v1.2.3