diff options
author | William Carroll <wpcarro@gmail.com> | 2018-09-10T18·51-0400 |
---|---|---|
committer | William Carroll <wpcarro@gmail.com> | 2018-09-10T18·53-0400 |
commit | 17ee0e400bef47c371afcae76037f9ea6a44ad13 (patch) | |
tree | 0e5efee6f00e402890e91f3eceb4b29408a498b6 /configs/shared/emacs/.emacs.d/elpa/circe-20180525.531/lui-autopaste.el | |
parent | 8b2fadf4776b7ddb4a67b4bc8ff6463770e56028 (diff) |
Support Vim, Tmux, Emacs with Stow
After moving off of Meta, Dotfiles has a greater responsibility to manage configs. Vim, Tmux, and Emacs are now within Stow's purview.
Diffstat (limited to 'configs/shared/emacs/.emacs.d/elpa/circe-20180525.531/lui-autopaste.el')
-rw-r--r-- | configs/shared/emacs/.emacs.d/elpa/circe-20180525.531/lui-autopaste.el | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/configs/shared/emacs/.emacs.d/elpa/circe-20180525.531/lui-autopaste.el b/configs/shared/emacs/.emacs.d/elpa/circe-20180525.531/lui-autopaste.el new file mode 100644 index 000000000000..7582839c268d --- /dev/null +++ b/configs/shared/emacs/.emacs.d/elpa/circe-20180525.531/lui-autopaste.el @@ -0,0 +1,115 @@ +;;; lui-autopaste.el --- Extension for lui for long text input + +;; Copyright (C) 2012 Jorgen Schaefer <forcer@forcix.cx> + +;; Author: Jorgen Schaefer <forcer@forcix.cx> + +;; This file is part of Lui. + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License +;; as published by the Free Software Foundation; either version 3 +;; of the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see <http://www.gnu.org/licenses/>. + +;;; Commentary: + +;; This extension for lui will intercept long input and replace it by +;; an URL to a paste service. + +;; What is considered "long" is defined by `lui-autopaste-lines'. You +;; can configure which paste service to use by changing +;; `lui-autopaste-function'. + +;; Run `enable-lui-autopaste' to enable this. + +;;; Code: + +(defgroup lui-autopaste nil + "The Lui autopaste extension." + :prefix "lui-autopaste-" + :group 'lui) + +(defcustom lui-autopaste-lines 3 + "Starting at this number of lines, Lui will ask to paste the input." + :type 'integer + :group 'lui-autopaste) + +(defcustom lui-autopaste-function 'lui-autopaste-service-ixio + "Which paste service to use. + +This function will be called with some text as its only argument, +and is expected to return an URL to view the contents." + :type '(choice (const :tag "ix.io" lui-autopaste-service-ixio) + (const :tag "ptpb.pw" lui-autopaste-service-ptpb-pw)) + :group 'lui-autopaste) + +;;;###autoload +(defun enable-lui-autopaste () + "Enable the lui autopaste feature. + +If you enter more than `lui-autopaste-lines' at once, Lui will +ask if you would prefer to use a paste service instead. If you +agree, Lui will paste your input to `lui-autopaste-function' and +replace it with the resulting URL." + (interactive) + (add-hook 'lui-pre-input-hook 'lui-autopaste)) + +;;;###autoload +(defun disable-lui-autopaste () + "Disable the lui autopaste feature." + (interactive) + (remove-hook 'lui-pre-input-hook 'lui-autopaste)) + +(defun lui-autopaste () + "Check if the lui input is too large. If so, paste it instead." + (when (and (>= (count-lines (point-min) (point-max)) + lui-autopaste-lines) + (y-or-n-p "That's pretty long, would you like to use a paste service instead? ")) + (let ((url (funcall lui-autopaste-function + (buffer-substring (point-min) + (point-max))))) + (delete-region (point-min) (point-max)) + (insert url)))) + +(defun lui-autopaste-service-ptpb-pw (text) + "Paste TEXT to ptpb.pw and return the paste url." + (let ((url-request-method "POST") + (url-request-extra-headers + '(("Content-Type" . "application/x-www-form-urlencoded"))) + (url-request-data (format "c=%s" (url-hexify-string text))) + (url-http-attempt-keepalives nil)) + (let ((buf (url-retrieve-synchronously "https://ptpb.pw/"))) + (unwind-protect + (with-current-buffer buf + (goto-char (point-min)) + (if (re-search-forward "^url: \\(.*\\)" nil t) + (match-string 1) + (error "Error during pasting to ptpb.pw"))) + (kill-buffer buf))))) + +(defun lui-autopaste-service-ixio (text) + "Paste TEXT to ix.io and return the paste url." + (let ((url-request-method "POST") + (url-request-extra-headers + '(("Content-Type" . "application/x-www-form-urlencoded"))) + (url-request-data (format "f:1=%s" (url-hexify-string text))) + (url-http-attempt-keepalives nil)) + (let ((buf (url-retrieve-synchronously "http://ix.io/"))) + (unwind-protect + (with-current-buffer buf + (goto-char (point-min)) + (if (re-search-forward "\n\n" nil t) + (buffer-substring (point) (point-at-eol)) + (error "Error during pasting to ix.io"))) + (kill-buffer buf))))) + +(provide 'lui-autopaste) +;;; lui-autopaste.el ends here |