Tom Willemse
bb29ee8a12
In order to support my tablet which seems to have a lower maximum integer value (I guess it’s 32-bit? I’m surprised) and can’t handle the version numbers I was using before. It would turn them into floating point numbers, which adds a ~.0~, this made it impossible to install any package. Any installations I have will need to reinstall all their oni packages so that the new version number is picked up, since the new version number will be lower than the old one.
110 lines
3.5 KiB
EmacsLisp
110 lines
3.5 KiB
EmacsLisp
;;; oni-python.el --- Python configuration -*- lexical-binding: t; -*-
|
||
|
||
;; Copyright (C) 2019 Tom Willemse
|
||
|
||
;; Author: Tom Willemse <tom@ryuslash.org>
|
||
;; Keywords: local
|
||
;; Version: 2019.0904.210747
|
||
;; Package-Requires: (oni-yasnippet oni-company company-jedi oni-fci oni-flycheck rainbow-delimiters reformatter traad hydra)
|
||
|
||
;; 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 <https://www.gnu.org/licenses/>.
|
||
|
||
;;; Commentary:
|
||
|
||
;; My Python configuration.
|
||
;;
|
||
;; It features:
|
||
;; - Completion
|
||
;; - Syntax checking
|
||
;; - Right margin
|
||
;; - Delimiter balancing
|
||
;; - Automatic reformatting
|
||
;; - Delimiter highlighting
|
||
|
||
;;; Code:
|
||
|
||
(require 'company)
|
||
(require 'hydra)
|
||
(require 'python)
|
||
(require 'reformatter)
|
||
(require 'traad)
|
||
(require 'whitespace)
|
||
(require 'yasnippet)
|
||
|
||
(autoload 'hl-indent-mode "hl-indent-mode")
|
||
|
||
(defconst oni-python-root
|
||
(file-name-directory
|
||
(or load-file-name
|
||
(buffer-file-name)))
|
||
"The directory where ‘oni-python’ was loaded from.")
|
||
|
||
(defconst oni-python-snippets-dir
|
||
(expand-file-name "snippets" oni-python-root)
|
||
"The directory where ‘oni-python’ stores its snippets.")
|
||
|
||
(defun oni-python-set-fill-column ()
|
||
"Set the `fill-column' and `comment-fill-column' for the current buffer.
|
||
|
||
The values are taken from the PEP8 coding standard for Python."
|
||
(setq-local fill-column 80)
|
||
(setq-local comment-fill-column 72))
|
||
|
||
;;;###autoload
|
||
(defun oni-python-snippets-initialize ()
|
||
"Initialize the snippets for ‘oni-python’."
|
||
(when (boundp 'yas-snippet-dirs)
|
||
(add-to-list 'yas-snippet-dirs oni-python-snippets-dir))
|
||
(yas-load-directory oni-python-snippets-dir))
|
||
|
||
(defun oni-python-whitespace-mode ()
|
||
"Set the `whitespace-style' to show the relevat whitespace.
|
||
In Python buffers it should show any tabs being used and and used
|
||
for indentation."
|
||
(setq-local whitespace-style '(face tabs))
|
||
(whitespace-mode))
|
||
|
||
(add-to-list 'company-backends 'company-jedi)
|
||
|
||
(reformatter-define python-black
|
||
:program "black"
|
||
:args `("--line-length" ,(number-to-string fill-column) "-")
|
||
:lighter ""
|
||
:group 'python-black)
|
||
|
||
(defhydra python-refactor-hydra (:color blue)
|
||
("r" traad-rename "Rename object")
|
||
("m" traad-extract-method "Extract method"))
|
||
|
||
(define-key python-mode-map (kbd "C-c r") 'python-refactor-hydra/body)
|
||
|
||
(add-hook 'python-mode-hook 'electric-indent-local-mode)
|
||
(add-hook 'python-mode-hook 'electric-pair-local-mode)
|
||
(add-hook 'python-mode-hook 'flycheck-mode)
|
||
(add-hook 'python-mode-hook 'fci-mode)
|
||
(add-hook 'python-mode-hook 'company-mode)
|
||
(add-hook 'python-mode-hook 'rainbow-delimiters-mode)
|
||
(add-hook 'python-mode-hook 'python-black-on-save-mode)
|
||
(add-hook 'python-mode-hook 'oni-python-set-fill-column)
|
||
(add-hook 'python-mode-hook 'oni-python-whitespace-mode)
|
||
|
||
;;;###autoload
|
||
(with-eval-after-load 'python
|
||
(with-eval-after-load 'yasnippet
|
||
(oni-python-snippets-initialize)))
|
||
|
||
;;;###autoload(with-eval-after-load 'python (require 'oni-python))
|
||
|
||
(provide 'oni-python)
|
||
;;; oni-python.el ends here
|