mylisp/pypi.el
author Oleksandr Gavenko <gavenkoa@gmail.com>
Wed, 16 Jun 2021 12:50:08 +0300
changeset 1734 ae2c6a001464
parent 1666 06937ff1ec5f
permissions -rw-r--r--
Add some standard places to PATH if they are not set by login script. Rearrange the order of paths so system's are first, user's are last. For Cygwin this helps with Cygwin's paths to be situated before "C:/Windows" (Emacs is not started from a login shell on Windows!).

;;; pypi.el --- Handle work with Python pypi site.

;;; Commentary:
;;

(require 'url-handlers)
(require 'thingatpt)

(eval-when-compile
  (defvar url-http-response-status))

;;; Code:

(defvar pypi/buffer-name "*Pip*")

(defvar pypi/pkg-history nil)

(defvar pypi/url "https://pypi.python.org/pypi/%s/json")

(defun pypi/pkg-callback (status)
  (let ( (buffer (current-buffer)) content-type status )
    (setq content-type (mail-fetch-field "Content-Type"))
    (setq status url-http-response-status)
    (switch-to-buffer pypi/buffer-name)
    (erase-buffer)
    (url-insert buffer)
    (fundamental-mode)
    (when (and (eq status 200) (string-match "application/json" content-type))
      (js-mode))))

;;;###autoload
(defun pypi-pkg (pkg)
  (interactive (list
                (read-string "Python package: "
                             (if (region-active-p) (buffer-substring (mark) (point)) (thing-at-point 'symbol))
                             'pypi/pkg-history)))
  (url-retrieve (format pypi/url pkg) #'pypi/pkg-callback))

(provide 'pypi)

;;; pypi.el ends here