Tom Willemse
8af6f8d160
Loading ‘yasnippet’ shouldn't automatically load my package configuration. If my package configuration hasn't been loaded it shouldn't try to include my snippets.
105 lines
3.4 KiB
EmacsLisp
105 lines
3.4 KiB
EmacsLisp
;;; oni-python.el --- Python configuration -*- lexical-binding: t; -*-
|
||
|
||
;; Copyright (C) 2019 Tom Willemse
|
||
|
||
;; Author: Tom Willemse <tom@ryuslash.org>
|
||
;; Keywords: local
|
||
;; Version: 2021.1201.134230
|
||
;; Package-Requires: (oni-yasnippet oni-company oni-flycheck oni-hydra oni-lsp rainbow-delimiters reformatter traad)
|
||
|
||
;; 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))
|
||
|
||
(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))
|
||
|
||
(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 'company-mode)
|
||
(add-hook 'python-mode-hook 'display-fill-column-indicator-mode)
|
||
(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 'lsp)
|
||
(add-hook 'python-mode-hook 'oni-python-set-fill-column)
|
||
(add-hook 'python-mode-hook 'oni-python-whitespace-mode)
|
||
(add-hook 'python-mode-hook 'python-black-on-save-mode)
|
||
(add-hook 'python-mode-hook 'rainbow-delimiters-mode)
|
||
|
||
(with-eval-after-load 'python
|
||
(with-eval-after-load 'yasnippet
|
||
(oni-python-snippets-initialize)))
|
||
|
||
(provide 'oni-python)
|
||
;;; oni-python.el ends here
|