From ec747395c64a1d6c64ce98dbe6b365f1578d2314 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johan=20Thor=C3=A9n?= Date: Thu, 18 Feb 2021 21:49:49 +0100 Subject: [PATCH] Add support for parinfer-rust-mode (#1) This commit adds support for the module flag +rust, which will use parinfer-rust-mode instead of parinfer-mode. Parinfer-rust-mode makes use of an external library named parinfer-rust to do the heavy lifting. As such, --with-modules must be enabled. --- modules/editor/parinfer/README.org | 4 +- modules/editor/parinfer/config.el | 68 +++++++++++++++++++---------- modules/editor/parinfer/packages.el | 6 ++- 3 files changed, 53 insertions(+), 25 deletions(-) diff --git a/modules/editor/parinfer/README.org b/modules/editor/parinfer/README.org index 807245f92..530df8764 100644 --- a/modules/editor/parinfer/README.org +++ b/modules/editor/parinfer/README.org @@ -17,7 +17,9 @@ https://raw.githubusercontent.com/DogLooksGood/parinfer-mode/a7c041454e05ec2b883 More information can be found about it [[https://shaunlebron.github.io/parinfer/][in the project's documentation]]. ** Module Flags -This module provides no flags. ++ =+rust= Use [[github:justinbarclay/parinfer-rust-mode][parinfer-rust-mode]] instead of the now deprecated [[github:DogLooksGood/parinfer-mode][parinfer-mode]]. + This depends on Emacs being compiled with the option `--with-modules`. The + pre-built library is only available for Linux, Windows and MacOS. ** Packages + [[https://github.com/DogLooksGood/parinfer-mode][parinfer]] diff --git a/modules/editor/parinfer/config.el b/modules/editor/parinfer/config.el index 912dfff39..92c0eb90a 100644 --- a/modules/editor/parinfer/config.el +++ b/modules/editor/parinfer/config.el @@ -1,24 +1,48 @@ ;;; editor/parinfer/config.el -*- lexical-binding: t; -*- -(use-package! parinfer - :hook ((emacs-lisp-mode - clojure-mode - scheme-mode - lisp-mode - racket-mode - hy-mode) . parinfer-mode) - :init - (setq parinfer-extensions - '(defaults - pretty-parens - smart-tab - smart-yank)) - (when (featurep! :editor evil +everywhere) - (push 'evil parinfer-extensions)) - :config - (map! :map parinfer-mode-map - "\"" nil ; smartparens handles this - :i "" #'parinfer-smart-tab:dwim-right-or-complete - :i "" #'parinfer-smart-tab:dwim-left - :localleader - :desc "Toggle parinfer-mode" "m" #'parinfer-toggle-mode)) +(if (not (featurep! +rust)) + (use-package! parinfer + :hook ((emacs-lisp-mode + clojure-mode + scheme-mode + lisp-mode + racket-mode + hy-mode) . parinfer-mode) + :init + (setq parinfer-extensions + '(defaults + pretty-parens + smart-tab + smart-yank)) + (when (featurep! :editor evil +everywhere) + (push 'evil parinfer-extensions)) + :config + (map! :map parinfer-mode-map + "\"" nil ; smartparens handles this + :i "" #'parinfer-smart-tab:dwim-right-or-complete + :i "" #'parinfer-smart-tab:dwim-left + :localleader + :desc "Toggle parinfer-mode" "m" #'parinfer-toggle-mode)) + (defvar parinfer-rust--doom-lib-name (cond ((eq system-type 'darwin) + "parinfer-rust-darwin.so") + ((eq system-type 'gnu/linux) + "parinfer-rust-linux.so") + ((eq system-type 'windows-nt) + "parinfer-rust-windows.dll"))) + (use-package! parinfer-rust-mode + :hook ((emacs-lisp-mode + clojure-mode + scheme-mode + lisp-mode + racket-mode + hy-mode) . parinfer-rust-mode) + :init + (setq! parinfer-rust-library (concat user-emacs-directory + ".local/etc/parinfer-rust/" + parinfer-rust--doom-lib-name)) + :config + (map! :map parinfer-rust-mode-map + :localleader + :desc "Switch parinfer-rust-mode" "m" #'parinfer-rust-switch-mode + :desc "Temporarily disable parinfer-rust-mode" "M" + #'parinfer-rust-switch-mode))) diff --git a/modules/editor/parinfer/packages.el b/modules/editor/parinfer/packages.el index 7b64e035b..c8bb373f2 100644 --- a/modules/editor/parinfer/packages.el +++ b/modules/editor/parinfer/packages.el @@ -1,7 +1,7 @@ ;; -*- no-byte-compile: t; -*- ;;; editor/parinfer/packages.el -(when (featurep! :editor evil) +(when (and (not (featurep! +rust)) (featurep! :editor evil)) ;; Parinfer uses `evil-define-key' without loading evil, so if evil is ;; installed *after* parinfer, parinfer will throw up void-function errors. ;; because evil-define-key (a macro) wasn't expanded at compile-time. So we @@ -11,4 +11,6 @@ ;; separate session: (autoload 'evil-define-key "evil-core" nil nil 'macro)) -(package! parinfer :pin "8659c99a9475ee34af683fdf8f272728c6bebb3a") +(if (featurep! +rust) + (package! parinfer-rust-mode :pin "c825606e6aca4a2ed18c0af321df5f36a3c8c774") + (package! parinfer :pin "8659c99a9475ee34af683fdf8f272728c6bebb3a"))