diff --git a/emacs/emacs.nix b/emacs/emacs.nix index ff3fe08..fa76fbd 100644 --- a/emacs/emacs.nix +++ b/emacs/emacs.nix @@ -21,6 +21,10 @@ enable = true; text = builtins.readFile ./lib/smartparens-scheme.el; }; + home.file.".emacs.d/lib/smartparens-clojure.el" = { + enable = true; + text = builtins.readFile ./lib/smartparens-clojure.el; + }; programs.emacs = { enable = true; package = pkgs.emacs29-gtk3; diff --git a/emacs/init.el b/emacs/init.el index 75e55ba..9b0eda5 100644 --- a/emacs/init.el +++ b/emacs/init.el @@ -12,8 +12,8 @@ ;; hypermedia i18n internal languages lisp local maint mail matching ;; mouse multimedia news outlines processes terminals tex tools unix ;; vc wp -;; Homepage: https://github.com/dziltener@lyrion.ch/init -;; Package-Requires: ((emacs "24.3")) +;; Homepage: https://gitea.lyrion.ch/zilti/guixconfig +;; Package-Requires: ((emacs "29.1")) ;; ;; This file is not part of GNU Emacs. ;; @@ -505,6 +505,8 @@ Point must be at the beginning of balanced expression (sexp)." (add-to-list 'sp-lisp-modes 'clojure-ts-mode) (add-to-list 'sp-lisp-modes 'clojurec-ts-mode) (add-to-list 'sp-lisp-modes 'clojurescript-ts-mode) + ;; TODO: Remove the following three lines once merge request got accepted + (load-file (concat init-dir "lib/smartparens-clojure.el")) (load-file (concat init-dir "lib/smartparens-emacs-lisp.el")) (load-file (concat init-dir "lib/smartparens-scheme.el")) (require 'smartparens-clojure) diff --git a/emacs/lib/smartparens-clojure.el b/emacs/lib/smartparens-clojure.el new file mode 100644 index 0000000..c187e53 --- /dev/null +++ b/emacs/lib/smartparens-clojure.el @@ -0,0 +1,59 @@ +;;; smartparens-clojure.el --- Additional configuration for Clojure mode. -*- lexical-binding: t; -*- + +;; Copyright (C) 2016, 2018-2019 Vitalie Spinu, Matus Goljer + +;; Author: Vitalie Spinu +;; Maintainer: Matus Goljer +;; Created: 14 July 2016 +;; Keywords: abbrev convenience editing +;; URL: https://github.com/Fuco1/smartparens +;; +;; This file is not part of GNU Emacs. +;; +;;; License: +;; +;; This file is part of Smartparens. +;; +;; Smartparens 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. +;; +;; Smartparens 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 Smartparens. If not, see . +;; +;;; Commentary: +;; +;; This file provides some additional configuration for Clojure mode. To use +;; it, simply add: +;; +;; (require 'smartparens-clojure) +;; +;; into your configuration. You can use this in conjunction with the +;; default config or your own configuration. +;; +;;; Code: + +(require 'smartparens) + +(defvar sp-clojure-prefix "\\(?:[@`'#~,_?^]+\\)" + "Prefix used in `sp-sexp-prefix' for clojure modes.") + +(dolist (mode '(clojure-mode clojurescript-mode clojurec-mode cider-repl-mode)) + (add-to-list 'sp-sexp-prefix `(,mode regexp ,sp-clojure-prefix))) + +;; Match "`" with "`" in strings and comments +(sp-with-modes sp-clojure-modes + (sp-local-pair "'" nil :actions nil) + (sp-local-pair "`" "`" + :when '(sp-in-string-p + sp-in-comment-p) + :unless '(sp-lisp-invalid-hyperlink-p))) + +(provide 'smartparens-clojure) +;;; smartparens-clojure.el ends here diff --git a/emacs/lib/smartparens-emacs-lisp.el b/emacs/lib/smartparens-emacs-lisp.el index 70db920..e885495 100644 --- a/emacs/lib/smartparens-emacs-lisp.el +++ b/emacs/lib/smartparens-emacs-lisp.el @@ -51,10 +51,11 @@ ;; Match "`" with "`" in strings and comments (sp-with-modes sp-emacs-lisp-modes + (sp-local-pair "'" nil :actions nil) (sp-local-pair "`" "`" :when '(sp-in-string-p - sp-in-comment-p) - :unless '(sp-lisp-invalid-hyperlink-p))) + sp-in-comment-p))) (provide 'smartparens-emacs-lisp) ;;; smartparens-emacs-lisp.el ends here + diff --git a/emacs/lib/smartparens-scheme.el b/emacs/lib/smartparens-scheme.el index f3c0fd1..dd80c74 100644 --- a/emacs/lib/smartparens-scheme.el +++ b/emacs/lib/smartparens-scheme.el @@ -51,10 +51,10 @@ ;; Match "`" with "`" in strings and comments (sp-with-modes sp-scheme-modes + (sp-local-pair "'" nil :actions nil) (sp-local-pair "`" "`" :when '(sp-in-string-p - sp-in-comment-p) - :unless '(sp-lisp-invalid-hyperlink-p))) + sp-in-comment-p))) (provide 'smartparens-scheme) ;;; smartparens-scheme.el ends here