aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sx-button.el2
-rw-r--r--sx-question-list.el2
-rw-r--r--sx-question-print.el8
-rw-r--r--sx-search.el12
-rw-r--r--sx-tag.el26
5 files changed, 37 insertions, 13 deletions
diff --git a/sx-button.el b/sx-button.el
index 8a4bcc0..9f6d3b3 100644
--- a/sx-button.el
+++ b/sx-button.el
@@ -169,7 +169,7 @@ usually part of a code-block."
'face 'sx-user-name
:supertype 'sx-button)
-(declare-function sx-search-tag-at-point "sx-tag")
+(declare-function sx-search-tag-at-point "sx-search")
(define-button-type 'sx-button-tag
'action #'sx-search-tag-at-point
'help-echo sx-button--tag-help-echo
diff --git a/sx-question-list.el b/sx-question-list.el
index 333fd83..6bae225 100644
--- a/sx-question-list.el
+++ b/sx-question-list.el
@@ -166,7 +166,7 @@ Also see `sx-question-list-refresh'."
" "
;; @TODO: Make this width customizable. (Or maybe just make
;; the whole thing customizable)
- (format "%-40s" (mapconcat #'sx-tag--format .tags " "))
+ (format "%-40s" (sx-tag--format-tags .tags sx-question-list--site))
" "
(sx-user--format "%15d %4r" .owner)
(propertize " " 'display "\n")))))))
diff --git a/sx-question-print.el b/sx-question-print.el
index 190c924..abf3236 100644
--- a/sx-question-print.el
+++ b/sx-question-print.el
@@ -223,7 +223,7 @@ DATA can represent a question or an answer."
;; Tags
(sx-question-mode--insert-header
sx-question-mode-header-tags
- (mapconcat #'sx-tag--format .tags " ")
+ (sx-tag--format-tags .tags .site_par)
nil))
;; Body
(insert "\n"
@@ -320,7 +320,8 @@ E.g.:
(defconst sx-question-mode--link-regexp
;; Done at compile time.
- (rx (or (and "[tag:" (group-n 5 (+ (not (any " ]")))) "]")
+ (rx (or (and "[" (optional (group-n 6 "meta-")) "tag:"
+ (group-n 5 (+ (not (any " ]")))) "]")
(and "[" (group-n 1 (1+ (not (any "]")))) "]"
(or (and "(" (group-n 2 (1+ (not (any ")")))) ")")
(and "[" (group-n 3 (1+ (not (any "]")))) "]")))
@@ -373,7 +374,8 @@ E.g.:
(let ((tag (match-string-no-properties 5)))
(if (and tag (> (length tag) 0))
(progn (replace-match "")
- (sx-tag--insert tag))
+ ;; `match-string' 6 is the "meta-" prefix.
+ (sx-tag--insert tag (match-string 6)))
;; Other links are link-buttons.
(let* ((text (match-string-no-properties 1))
(url (or (match-string-no-properties 2)
diff --git a/sx-search.el b/sx-search.el
index b33efff..b245cbe 100644
--- a/sx-search.el
+++ b/sx-search.el
@@ -126,9 +126,15 @@ prefix argument, the user is asked for everything."
(let ((tag (save-excursion
(when pos (goto-char pos))
(or (get-text-property (point) 'sx-tag)
- (thing-at-point 'symbol)))))
- (sx-search (or sx-question-list--site
- (sx-assoc-let sx-question-mode--data .site_par))
+ (thing-at-point 'symbol))))
+ (meta (save-excursion
+ (when pos (goto-char pos))
+ (get-text-property (point) 'sx-tag-meta)))
+ (site (replace-regexp-in-string
+ (rx string-start "meta.") ""
+ (or sx-question-list--site
+ (sx-assoc-let sx-question-mode--data .site_par)))))
+ (sx-search (concat (when meta "meta.") site)
nil tag)))
(provide 'sx-search)
diff --git a/sx-tag.el b/sx-tag.el
index 316226b..3c00ae2 100644
--- a/sx-tag.el
+++ b/sx-tag.el
@@ -142,19 +142,35 @@ tags."
;;; Printing
-(defun sx-tag--format (tag)
- "Format and return TAG for display."
+(defun sx-tag--format (tag &optional meta)
+ "Format and return TAG for display.
+If META is non-nil, the tag is for the meta site."
(with-temp-buffer
- (sx-tag--insert tag)
+ (sx-tag--insert tag meta)
(buffer-string)))
-(defun sx-tag--insert (tag)
- "Insert TAG button."
+(defun sx-tag--insert (tag &optional meta)
+ "Insert TAG button.
+If META is non-nil, the tag is for the meta site."
(insert-text-button (concat "[" tag "]")
'sx-button-copy tag
'sx-tag tag
+ 'sx-tag-meta meta
:type 'sx-button-tag))
+(defun sx-tag--format-tags (tags &optional site)
+ "Format and concatenate a sequence of TAGS.
+Returns a string of all tags in TAGS, separated by a space.
+
+SITE is the site to which the tags refer, it is only used to
+decide whether they are main or meta tags. SITE can also be t or
+nil, which respectively indicate meta and main."
+ (let ((is-meta
+ (if (stringp site) (string-match (rx string-start "meta.") site)
+ site)))
+ (mapconcat (lambda (tag) (sx-tag--format tag is-meta))
+ tags " ")))
+
(provide 'sx-tag)
;;; sx-tag.el ends here