aboutsummaryrefslogtreecommitdiffstats
path: root/oni-python/oni-python.el
diff options
context:
space:
mode:
authorGravatar Tom Willemse2019-08-28 00:06:55 -0700
committerGravatar Tom Willemse2019-08-28 00:07:35 -0700
commit5ad89196c2692e0018d6cfeb708d22fd6620a027 (patch)
tree2418bb691917bd1ac1cffc8c174688c38d1258ff /oni-python/oni-python.el
parente530fbfc5f47e5fb19107f442f3d752ed049817c (diff)
downloademacs-config-5ad89196c2692e0018d6cfeb708d22fd6620a027.tar.gz
emacs-config-5ad89196c2692e0018d6cfeb708d22fd6620a027.zip
Add snippets for ‘oni-python’
Diffstat (limited to 'oni-python/oni-python.el')
-rw-r--r--oni-python/oni-python.el110
1 files changed, 110 insertions, 0 deletions
diff --git a/oni-python/oni-python.el b/oni-python/oni-python.el
new file mode 100644
index 0000000..9be51f8
--- /dev/null
+++ b/oni-python/oni-python.el
@@ -0,0 +1,110 @@
+;;; oni-python.el --- Python configuration -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2019 Tom Willemse
+
+;; Author: Tom Willemse <tom@ryuslash.org>
+;; Keywords: local
+;; Version: 20190828000139
+;; 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