aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormousebot <mousebot@riseup.net>2021-10-21 14:35:40 +0200
committermousebot <mousebot@riseup.net>2021-10-21 14:41:05 +0200
commitc08bc9dea693388a779d5702fc6cc421353bb889 (patch)
treede9e653a41873bd75c9d9e02ef33ae3c0cf158a6
parent156b32132f78ede03e3e6188ecf3bf67790b6846 (diff)
improvements to toot mentions completion
- customize option for completion off, following-only, or all. - 'following=true' is forwarded to http--get-search accordingly. - use company-grab-symbol-cons + regex, prepend "@" to it - also prepend '@' to the list in get-user-info-no-url - this makes company display user handles prepended with '@', and to match and - enter a handle without duplicating the '@'
-rw-r--r--lisp/mastodon-http.el14
-rw-r--r--lisp/mastodon-search.el8
-rw-r--r--lisp/mastodon-toot.el23
3 files changed, 24 insertions, 21 deletions
diff --git a/lisp/mastodon-http.el b/lisp/mastodon-http.el
index 2d91840..fbcf855 100644
--- a/lisp/mastodon-http.el
+++ b/lisp/mastodon-http.el
@@ -163,18 +163,20 @@ Pass response buffer to CALLBACK function."
(kill-buffer)
(json-read-from-string json-string)))
-(defun mastodon-http--get-search-json (url query)
+(defun mastodon-http--get-search-json (url query &optional param)
"Make GET request to URL, searching for QUERY and return JSON response."
- (let ((buffer (mastodon-http--get-search url query)))
+ (let ((buffer (mastodon-http--get-search url query param)))
(with-current-buffer buffer
(mastodon-http--process-json-search))))
-(defun mastodon-http--get-search (base-url query)
+(defun mastodon-http--get-search (base-url query &optional param)
"Make GET request to BASE-URL, searching for QUERY.
-
-Pass response buffer to CALLBACK function."
+Pass response buffer to CALLBACK function.
+PARAM is a formatted request parameter, eg 'following=true'."
(let ((url-request-method "GET")
- (url (concat base-url "?q=" (url-hexify-string query)))
+ (url (if param
+ (concat base-url "?" param "&q=" (url-hexify-string query))
+ (concat base-url "?q=" (url-hexify-string query))))
(url-request-extra-headers
`(("Authorization" . ,(concat "Bearer "
(mastodon-auth--access-token))))))
diff --git a/lisp/mastodon-search.el b/lisp/mastodon-search.el
index 14e40d8..40f134d 100644
--- a/lisp/mastodon-search.el
+++ b/lisp/mastodon-search.el
@@ -48,7 +48,7 @@
(defun mastodon-search--get-user-info-no-url (account)
"Get user handle, display name and account URL from ACCOUNT."
(list (cdr (assoc 'display_name account))
- (cdr (assoc 'acct account))))
+ (concat "@" (cdr (assoc 'acct account)))))
(defun mastodon-search--search-accounts-query (query)
"Prompt for a search QUERY and return accounts.
@@ -56,8 +56,10 @@ Returns a nested list containing user handle, display name, and URL."
(interactive "sSearch mastodon for: ")
(let* ((url (format "%s/api/v1/accounts/search" mastodon-instance-url))
(buffer (format "*mastodon-search-%s*" query))
- (response (mastodon-http--get-search-json url query)))
- (mapcar #'mastodon-search--get-user-info-no-url ;-handle-flat-propertized
+ (response (if (equal mastodon-toot--enable-completion-for-mentions "followers")
+ (mastodon-http--get-search-json url query "following=true")
+ (mastodon-http--get-search-json url query))))
+ (mapcar #'mastodon-search--get-user-info-no-url
response)))
;; functions for mastodon search
diff --git a/lisp/mastodon-toot.el b/lisp/mastodon-toot.el
index da559ef..51c2431 100644
--- a/lisp/mastodon-toot.el
+++ b/lisp/mastodon-toot.el
@@ -80,10 +80,13 @@ Must be one of \"public\", \"unlisted\", \"private\" (for followers-only), or \"
:type 'string)
(when (require 'company nil :noerror)
- (defcustom mastodon-toot--use-company-completion-for-mentions t
+ (defcustom mastodon-toot--enable-completion-for-mentions "followers"
"Whether to enable company completion for mentions in toot compose buffer."
:group 'mastodon-toot
- :type 'boolean))
+ :type '(choice
+ (const :tag "off" nil)
+ (const :tag "followers only" "followers")
+ (const :tag "all users" "all"))))
(defvar mastodon-toot--content-warning nil
"A flag whether the toot should be marked with a content warning.")
@@ -406,20 +409,16 @@ The prefix string is tested against both user handles and display names."
(handle (cadr candidate)))
(propertize handle 'meta display-name)))
-(defun mastodon-toot--mentions-company-backend (command &optional arg &rest ignored)
+(defun mastodon-toot--mentions-completion (command &optional arg &rest ignored)
"A company completion backend for toot mentions."
(interactive (list 'interactive))
(cl-case command
- (interactive (company-begin-backend 'mastodon-toot--mentions-company-backend))
+ (interactive (company-begin-backend 'mastodon-toot--mentions-completion))
(prefix (and (bound-and-true-p mastodon-toot-mode) ; if masto toot minor mode
- (save-excursion
- (backward-word)
- (backward-char)
- (looking-at "@")) ; if we have a mention
- (company-grab-symbol))) ;; get thing before point, sans @
+ ;; @ + thing before point
+ (concat "@" (company-grab-symbol-cons "^@[0-9A-Za-z-.\\_@]+" 2))))
(candidates (mastodon-toot--mentions-company-candidates arg))
(annotation (mastodon-toot--mentions-company-annotation arg))))
- ;; (meta (mastodon-toot--mentions-company-meta arg))))
(defun mastodon-toot--reply ()
"Reply to toot at `point'."
@@ -677,9 +676,9 @@ If REPLY-TO-ID is provided, set the MASTODON-TOOT--REPLY-TO-ID var."
(mastodon-toot--display-docs-and-status-fields)
(mastodon-toot--setup-as-reply reply-to-user reply-to-id))
(mastodon-toot-mode t)
- (when mastodon-toot--use-company-completion-for-mentions
+ (when mastodon-toot--enable-completion-for-mentions
(set (make-local-variable 'company-backends)
- (add-to-list 'company-backends 'mastodon-toot--mentions-company-backend))
+ (add-to-list 'company-backends 'mastodon-toot--mentions-completion))
(company-mode-on))
(make-local-variable 'after-change-functions)
(push #'mastodon-toot--update-status-fields after-change-functions)