aboutsummaryrefslogtreecommitdiff
path: root/sx.el
diff options
context:
space:
mode:
Diffstat (limited to 'sx.el')
-rw-r--r--sx.el25
1 files changed, 22 insertions, 3 deletions
diff --git a/sx.el b/sx.el
index 6f4e7c7..1b15ad3 100644
--- a/sx.el
+++ b/sx.el
@@ -303,9 +303,12 @@ DATA can also be the link itself."
DATA can be a question, answer, comment, or user (or any object
with a `link' property)."
(when data
- (unless (assq 'site data)
- (setcdr data (cons (cons 'site (sx--site data))
- (cdr data))))
+ (let-alist data
+ (unless .site_par
+ (setcdr data (cons (cons 'site_par
+ (or .site.api_site_parameter
+ (sx--site data)))
+ (cdr data)))))
data))
(defmacro sx-assoc-let (alist &rest body)
@@ -318,6 +321,22 @@ If ALIST doesn't have a `site' property, one is created using the
(sx--ensure-site ,alist)
(let-alist ,alist ,@body)))
+(defun sx--link-to-data (link)
+ "Convert string LINK into data that can be displayed."
+ (let ((result (list (cons 'site_par (sx--site link)))))
+ (when (or
+ ;; Answer
+ (and (or (string-match "/a/\\([0-9]+\\)/[0-9]+\\(#.*\\|\\)\\'" link)
+ (string-match "/questions/[0-9]+/[^/]+/\\([0-9]\\)/?\\(#.*\\|\\)\\'" link))
+ (push (cons 'type 'answer) result))
+ ;; Question
+ (and (or (string-match "/q/\\([0-9]+\\)/[0-9]+\\(#.*\\|\\)\\'" link)
+ (string-match "/questions/\\([0-9]+\\)/" link))
+ (push (cons 'type 'question) result)))
+ (push (cons 'id (string-to-number (match-string-no-properties 1 link)))
+ result))
+ result))
+
(defcustom sx-init-hook nil
"Hook run when SX initializes.
Run after `sx-init--internal-hook'."