el/dot-emacs.el: Indent string literals correctly, e.g., in Lisp mode.
authorMark Wooding <mdw@distorted.org.uk>
Sun, 26 Jul 2020 21:46:17 +0000 (22:46 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Sun, 26 Jul 2020 21:46:17 +0000 (22:46 +0100)
I had formed the impression that my indentation machinery worked
correctly on Common Lisp docstrings, but this turns out to be completely
wrong.

Of course, my life would be better if it did work, and now it does.

el/dot-emacs.el

index f86044d..4b4be86 100644 (file)
@@ -1337,13 +1337,20 @@ case where there isn't a sensible static one."
   (let ((fill-prefix (mdw-choose-dynamic-fill-prefix)))
     (fill-paragraph nil)))
 
+(defun mdw-point-within-string-p ()
+  "Return non-nil if point is within a string."
+  (let ((state (syntax-ppss)))
+    (elt state 3)))
+
 (defun mdw-standard-fill-prefix (rx &optional mat)
   "Set the dynamic fill prefix, handling standard hanging indents and stuff.
 This is just a short-cut for setting the thing by hand, and by
 design it doesn't cope with anything approximating a complicated
 case."
   (setq mdw-fill-prefix
-       `((,(concat rx mdw-hanging-indents)
+       `(((if (mdw-point-within-string-p)
+              ,(concat "\\(\\s-*\\)" mdw-hanging-indents)
+            ,(concat rx mdw-hanging-indents))
           (match . 1)
           (pad . ,(or mat 2))))))