aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArtur Malabarba <bruce.connor.am@gmail.com>2015-03-02 21:25:49 -0300
committerArtur Malabarba <bruce.connor.am@gmail.com>2015-03-02 21:25:49 -0300
commit2de52c27e4a3fdc370039f8afacd8b212bcc37d4 (patch)
treef6efcb5daf48263f5b4144dbaa42406a3fc0c306
parent69a2cfa822f966ded1e4ffe26ef17b265aec5a3c (diff)
parent15f8ff56312f16f79a2520c08a184f8d79732d1f (diff)
Merge branch 'master' into json-false
-rw-r--r--sx-filter.el3
-rw-r--r--sx-question-print.el49
2 files changed, 51 insertions, 1 deletions
diff --git a/sx-filter.el b/sx-filter.el
index 1ccf611..5848e34 100644
--- a/sx-filter.el
+++ b/sx-filter.el
@@ -111,6 +111,9 @@ return the compiled filter."
bounty_amount
comments
creation_date
+ closed_reason
+ closed_date
+ closed_details
answers
answer_count
score
diff --git a/sx-question-print.el b/sx-question-print.el
index 6a21199..d50eb94 100644
--- a/sx-question-print.el
+++ b/sx-question-print.el
@@ -141,6 +141,20 @@ the editor's name."
"Face used for accepted answers in the question buffer."
:group 'sx-question-mode-faces)
+(defface sx-question-mode-closed
+ '((t :box 2 :inherit font-lock-warning-face))
+ "Face used for closed question header in the question buffer."
+ :group 'sx-question-mode-faces)
+
+(defface sx-question-mode-closed-reason
+ `((t :box (:line-width 2 :color ,(face-attribute 'sx-question-mode-closed
+ :foreground nil t))
+ :inherit sx-question-mode-title))
+ "Face used for closed question header in the question buffer.
+Aesthetically, it's important that the color of this face's :box
+attribute match the color of the face `sx-question-mode-closed'."
+ :group 'sx-question-mode-faces)
+
(defcustom sx-question-mode-answer-accepted-title "Accepted Answer"
"Title used at the start of accepted \"Answer\" section."
:type 'string
@@ -201,6 +215,10 @@ type is not available, images won't work."
;;; Functions
;;;; Printing the general structure
+(defconst sx-question-mode--closed-mode-line-string
+ '(:propertize " [CLOSED] " face font-lock-warning-face)
+ "String indicating closed questions in the mode-line.")
+
(defun sx-question-mode--print-question (question)
"Print a buffer describing QUESTION.
QUESTION must be a data structure returned by `json-read'."
@@ -211,8 +229,11 @@ QUESTION must be a data structure returned by `json-read'."
(mapc #'delete-overlay sx--overlays)
(setq sx--overlays nil)
;; Print everything
- (sx-question-mode--print-section question)
(sx-assoc-let question
+ (when .closed_reason
+ (add-to-list 'mode-line-format sx-question-mode--closed-mode-line-string)
+ (sx-question-mode--print-close-reason .closed_reason .closed_date .closed_details))
+ (sx-question-mode--print-section question)
(mapc #'sx-question-mode--print-section
(cl-remove-if
#'sx--deleted-p
@@ -223,6 +244,32 @@ QUESTION must be a data structure returned by `json-read'."
(goto-char (point-min))
(sx-question-mode-next-section))
+(defun sx-question-mode--print-close-reason (reason date &optional details)
+ "Print a header explaining REASON and DATE.
+DATE is an integer.
+
+DETAILS, when given is an alist further describing the close."
+ (let ((l (point)))
+ (let-alist details
+ (insert "\n "
+ (propertize (format " %s as %s, %s ago. "
+ (if .on_hold "Put on hold" "Closed")
+ reason
+ (sx-time-since date))
+ 'face 'sx-question-mode-closed)
+ "\n")
+ (when .description
+ (insert (replace-regexp-in-string "<[^>]+>" "" .description)
+ "\n")))
+ (save-excursion
+ (goto-char l)
+ (search-forward " as " nil 'noerror)
+ (setq l (point))
+ (skip-chars-forward "^,")
+ (let ((ov (make-overlay l (point))))
+ (overlay-put ov 'face 'sx-question-mode-closed-reason)
+ (push ov sx--overlays)))))
+
(defun sx-question-mode--print-section (data)
"Print a section corresponding to DATA.
DATA can represent a question or an answer."