aboutsummaryrefslogtreecommitdiff
path: root/sx-question-list.el
diff options
context:
space:
mode:
Diffstat (limited to 'sx-question-list.el')
-rw-r--r--sx-question-list.el53
1 files changed, 45 insertions, 8 deletions
diff --git a/sx-question-list.el b/sx-question-list.el
index 9e08787..c72dc0d 100644
--- a/sx-question-list.el
+++ b/sx-question-list.el
@@ -1,4 +1,4 @@
-;;; sx-question-list.el --- Major-mode for navigating questions list. -*- lexical-binding: t; -*-
+;;; sx-question-list.el --- major-mode for navigating questions list -*- lexical-binding: t; -*-
;; Copyright (C) 2014 Artur Malabarba
@@ -19,6 +19,8 @@
;;; Commentary:
+;; Provides question list logic (as used in e.g. `sx-tab-frontpage').
+
;;; Code:
(require 'tabulated-list)
(require 'cl-lib)
@@ -104,6 +106,21 @@
""
:group 'sx-question-list-faces)
+(defface sx-question-list-bounty
+ '((t :inherit font-lock-warning-face))
+ ""
+ :group 'sx-question-list-faces)
+
+(defface sx-question-list-reputation
+ '((t :inherit sx-question-list-date))
+ ""
+ :group 'sx-question-list-faces)
+
+(defface sx-question-list-user
+ '((t :inherit font-lock-builtin-face))
+ ""
+ :group 'sx-question-list-faces)
+
;;; Backend variables
(defvar sx-question-list--print-function #'sx-question-list--print-info
@@ -141,20 +158,35 @@ Also see `sx-question-list-refresh'."
'sx-question-list-answers-accepted
'sx-question-list-answers))
(concat
+ ;; First line
(propertize
.title
'face (if (sx-question--read-p question-data)
'sx-question-list-read-question
'sx-question-list-unread-question))
(propertize " " 'display "\n ")
+ ;; Second line
(propertize favorite 'face 'sx-question-list-favorite)
- " "
- (propertize (concat (sx-time-since .last_activity_date)
- sx-question-list-ago-string)
+ (if (and (numberp .bounty_amount) (> .bounty_amount 0))
+ (propertize (format "%4d" .bounty_amount)
+ 'face 'sx-question-list-bounty)
+ " ")
+ " "
+ (propertize (format "%3s%s"
+ (sx-time-since .last_activity_date)
+ sx-question-list-ago-string)
'face 'sx-question-list-date)
" "
- (propertize (mapconcat #'sx-question--tag-format .tags " ")
+ ;; @TODO: Make this width customizable. (Or maybe just make
+ ;; the whole thing customizable)
+ (propertize (format "%-40s" (mapconcat #'sx-question--tag-format .tags " "))
'face 'sx-question-list-tags)
+ " "
+ (let-alist .owner
+ (format "%15s %5s"
+ (propertize .display_name 'face 'sx-question-list-user)
+ (propertize (number-to-string .reputation)
+ 'face 'sx-question-list-reputation)))
(propertize " " 'display "\n")))))))
(defvar sx-question-list--pages-so-far 0
@@ -196,7 +228,7 @@ and thus not displayed in the list of questions.
This is ignored if `sx-question-list--refresh-function' is set.")
(make-variable-buffer-local 'sx-question-list--dataset)
-(defvar sx-question-list--header-line
+(defconst sx-question-list--header-line
'(" "
(:propertize "n p j k" face mode-line-buffer-id)
": Navigate"
@@ -319,10 +351,11 @@ into consideration.
("S" sx-search)
("s" sx-switchto-map)
("v" sx-visit-externally)
- ("u" sx-toggle-upvote)
- ("d" sx-toggle-downvote)
+ ("u" sx-upvote)
+ ("d" sx-downvote)
("h" sx-question-list-hide)
("m" sx-question-list-mark-read)
+ ("*" sx-favorite)
([?\r] sx-display)
))
@@ -575,3 +608,7 @@ Sets `sx-question-list--site' and then call
(provide 'sx-question-list)
;;; sx-question-list.el ends here
+
+;; Local Variables:
+;; indent-tabs-mode: nil
+;; End: