From b9b2ce0f72604064d68540b72279d7068a3fb121 Mon Sep 17 00:00:00 2001 From: Elis Axelsson Date: Fri, 12 May 2017 19:54:59 +0200 Subject: [PATCH] Added support for languages for providers that appends language to the URL --- webpaste.el | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/webpaste.el b/webpaste.el index e04eae6..9db68d7 100644 --- a/webpaste.el +++ b/webpaste.el @@ -81,6 +81,12 @@ if that variable is nil, it will use the list of names from ‘webpaste-provider each run.") +(defvar webpaste/provider-separators () + "Variable for storing separators for providers that doesn't post language. +Some providers accepts a post parameter with which language the code is. But +some providers want to append the language to the resulting URL.") + + (defvar webpaste/provider-lang-alists () "Variable for storing alists with languages for highlighting for providers. This list will be populated when you add providers to have the languages @@ -168,6 +174,7 @@ precalculated, and also available both for pre and post request access.") (post-lang-field-name nil) (parser 'buffer-string) (lang-overrides '()) + (lang-uri-separator nil) (error-lambda webpaste/providers-error-lambda) (post-field-lambda webpaste/providers-default-post-field-lambda) (sync nil)) @@ -200,6 +207,10 @@ Optional params: a mode is set to nil, it will use fundamental-mode's value as fallback. Fundamental-mode's value can also be overridden. +:lang-uri-separator Lang URI separator. This is used for providers that + appends the language to the end of the resulting URI and + needs a separator between language and link. + :parser Defines how request.el parses the result. Look up :parser for `request'. This defaults to 'buffer-string. @@ -222,6 +233,11 @@ Optional params: :sync Set to t to wait until request is done. Defaults to nil. This should only be used for debugging purposes." + ;; If we get a separator sent to the function, append it to the list of + ;; separators for later use + (when lang-uri-separator + (cl-pushnew (cons uri lang-uri-separator) webpaste/provider-separators)) + ;; Add pre-calculated list of webpaste lang alists (cl-pushnew (cons uri (webpaste/get-lang-alist-with-overrides lang-overrides)) webpaste/provider-lang-alists) @@ -253,18 +269,24 @@ Optional params: ,(webpaste-provider :uri "https://ptpb.pw/" :post-field "c" + :lang-uri-separator "/" + :lang-overrides '((emacs-lisp-mode . "elisp")) :success-lambda webpaste/providers-success-location-header)) ("ix.io" ,(webpaste-provider :uri "http://ix.io/" :post-field "f:1" + :lang-uri-separator "/" + :lang-overrides '((emacs-lisp-mode . "elisp")) :success-lambda webpaste/providers-success-returned-string)) ("sprunge.us" ,(webpaste-provider :uri "http://sprunge.us/" :post-field "sprunge" + :lang-uri-separator "?" + :lang-overrides '((emacs-lisp-mode . "elisp")) :success-lambda webpaste/providers-success-returned-string)) ("dpaste.com" @@ -334,6 +356,19 @@ return it to the user." (defun webpaste-return-url (returned-url) "Return RETURNED-URL to user from the result of the paste service." + ;; Loop providers separators + (dolist (provider-separator webpaste/provider-separators) + ;; Match if the separator is for this URI + (when (string-match-p (regexp-quote (car provider-separator)) returned-url) + ;; Get alist of languages for this provider + (let ((provider-lang-alist (cdr (assoc (car provider-separator) webpaste/provider-lang-alists)))) + ;; Get language name from list of languages + (let ((language-name (cdr (assoc major-mode provider-lang-alist)))) + ;; If we get a language name + (when language-name + ;; Override link with link where we appended the language + (setq returned-url (concat returned-url (cdr provider-separator) language-name))))))) + ;; Reset tested providers after successful paste (setq webpaste/tested-providers nil)