el/dot-emacs.el: Collapse to adjacent and related `setq' forms.
[profile] / el / dot-emacs.el
index cd2d13b..07b6d03 100644 (file)
@@ -56,13 +56,13 @@ This may be at the expense of cool features.")
 
 (eval-when-compile
   (unless (fboundp 'make-regexp) (load "make-regexp"))
 
 (eval-when-compile
   (unless (fboundp 'make-regexp) (load "make-regexp"))
-  (require 'cl))
+  (require 'cl-lib))
 
 (defmacro mdw-regexps (&rest list)
   "Turn a LIST of strings into a single regular expression at compile-time."
   (declare (indent nil)
           (debug 0))
 
 (defmacro mdw-regexps (&rest list)
   "Turn a LIST of strings into a single regular expression at compile-time."
   (declare (indent nil)
           (debug 0))
-  `',(make-regexp (sort (copy-list list) #'string<)))
+  `',(make-regexp (sort (cl-copy-list list) #'string<)))
 
 (defun mdw-wrong ()
   "This is not the key sequence you're looking for."
 
 (defun mdw-wrong ()
   "This is not the key sequence you're looking for."
@@ -105,10 +105,10 @@ This may be at the expense of cool features.")
   "Read the configuration variable named SYM."
   (unless mdw-config
     (setq mdw-config
   "Read the configuration variable named SYM."
   (unless mdw-config
     (setq mdw-config
-           (flet ((replace (what with)
-                    (goto-char (point-min))
-                    (while (re-search-forward what nil t)
-                      (replace-match with t))))
+           (cl-flet ((replace (what with)
+                       (goto-char (point-min))
+                       (while (re-search-forward what nil t)
+                         (replace-match with t))))
              (with-temp-buffer
                (insert-file-contents "~/.mdw.conf")
                (replace  "^[ \t]*\\(#.*\\)?\n" "")
              (with-temp-buffer
                (insert-file-contents "~/.mdw.conf")
                (replace  "^[ \t]*\\(#.*\\)?\n" "")
@@ -215,8 +215,9 @@ cruft."
     (let ((tot 0))
       (dolist (what '(scroll-bar fringe))
        (dolist (side '(left right))
     (let ((tot 0))
       (dolist (what '(scroll-bar fringe))
        (dolist (side '(left right))
-         (incf tot (funcall (intern (concat (symbol-name what) "-columns"))
-                            side))))
+         (cl-incf tot
+                  (funcall (intern (concat (symbol-name what) "-columns"))
+                           side))))
       tot)))
 
 (defun mdw-split-window-horizontally (&optional width)
       tot)))
 
 (defun mdw-split-window-horizontally (&optional width)
@@ -352,7 +353,7 @@ prevailing configuration."
                    (and (consp register-value)
                         (window-configuration-p (car register-value))
                         (integer-or-marker-p (cadr register-value))
                    (and (consp register-value)
                         (window-configuration-p (car register-value))
                         (integer-or-marker-p (cadr register-value))
-                        (null (caddr register-value)))))
+                        (null (cl-caddr register-value)))))
           (error "Register `%c' is not a window configuration" register))
          (t
           (cond ((null register-value)
           (error "Register `%c' is not a window configuration" register))
          (t
           (cond ((null register-value)
@@ -496,8 +497,8 @@ as output rather than a string."
     (if (eq (cdr ddate) 'st-tibs-day)
        (format "St Tib's Day %s" tail)
       (let ((season (cadr ddate))
     (if (eq (cdr ddate) 'st-tibs-day)
        (format "St Tib's Day %s" tail)
       (let ((season (cadr ddate))
-           (daynum (caddr ddate))
-           (dayname (cadddr ddate)))
+           (daynum (cl-caddr ddate))
+           (dayname (cl-cadddr ddate)))
       (format "%s, the %d%s day of %s %s"
              dayname
              daynum
       (format "%s, the %d%s day of %s %s"
              dayname
              daynum
@@ -765,9 +766,8 @@ Pretend they don't exist.  They might be on other display devices."
   (ad-set-arg 2 nil))
 
 (setq even-window-sizes nil
   (ad-set-arg 2 nil))
 
 (setq even-window-sizes nil
-      even-window-heights nil)
-
-(setq display-buffer-reuse-frames nil)
+      even-window-heights nil
+      display-buffer-reuse-frames nil)
 
 (defun mdw-last-window-in-frame-p (window)
   "Return whether WINDOW is the last in its frame."
 
 (defun mdw-last-window-in-frame-p (window)
   "Return whether WINDOW is the last in its frame."
@@ -909,14 +909,14 @@ to force interactive compilation."
   (interactive
    (let* ((prefix (prefix-numeric-value current-prefix-arg))
          (command (eval compile-command))
   (interactive
    (let* ((prefix (prefix-numeric-value current-prefix-arg))
          (command (eval compile-command))
-         (dir (and (plusp (logand prefix #x54))
+         (dir (and (cl-plusp (logand prefix #x54))
                    (read-directory-name "Compile in directory: "))))
      (list (if (or compilation-read-command
                    (read-directory-name "Compile in directory: "))))
      (list (if (or compilation-read-command
-                  (plusp (logand prefix #x42)))
+                  (cl-plusp (logand prefix #x42)))
               (compilation-read-command command)
             command)
           dir
               (compilation-read-command command)
             command)
           dir
-          (plusp (logand prefix #x58)))))
+          (cl-plusp (logand prefix #x58)))))
   (let ((default-directory (or directory default-directory)))
     (compile command comint)))
 
   (let ((default-directory (or directory default-directory)))
     (compile command comint)))
 
@@ -926,13 +926,13 @@ to force interactive compilation."
   (catch 'found
     (let* ((src-dir (file-name-as-directory (expand-file-name ".")))
           (dir src-dir))
   (catch 'found
     (let* ((src-dir (file-name-as-directory (expand-file-name ".")))
           (dir src-dir))
-      (loop
+      (cl-loop
        (when (file-exists-p (concat dir build-file))
          (throw 'found dir))
        (let ((sub (expand-file-name (file-relative-name src-dir dir)
                                     (concat dir "build/"))))
          (catch 'give-up
        (when (file-exists-p (concat dir build-file))
          (throw 'found dir))
        (let ((sub (expand-file-name (file-relative-name src-dir dir)
                                     (concat dir "build/"))))
          (catch 'give-up
-           (loop
+           (cl-loop
              (when (file-exists-p (concat sub build-file))
                (throw 'found sub))
              (when (string= sub dir) (throw 'give-up nil))
              (when (file-exists-p (concat sub build-file))
                (throw 'found sub))
              (when (string= sub dir) (throw 'give-up nil))
@@ -1074,12 +1074,12 @@ Use this to arrange for per-server settings."
 (defun mdw-nnimap-transform-headers ()
   (goto-char (point-min))
   (let (article lines size string)
 (defun mdw-nnimap-transform-headers ()
   (goto-char (point-min))
   (let (article lines size string)
-    (block nil
+    (cl-block nil
       (while (not (eobp))
        (while (not (looking-at "\\* [0-9]+ FETCH"))
          (delete-region (point) (progn (forward-line 1) (point)))
          (when (eobp)
       (while (not (eobp))
        (while (not (looking-at "\\* [0-9]+ FETCH"))
          (delete-region (point) (progn (forward-line 1) (point)))
          (when (eobp)
-           (return)))
+           (cl-return)))
        (goto-char (match-end 0))
        ;; Unfold quoted {number} strings.
        (while (re-search-forward
        (goto-char (match-end 0))
        ;; Unfold quoted {number} strings.
        (while (re-search-forward
@@ -1413,7 +1413,7 @@ CHECK is fboundp, and returning the correponding FUNC."
             "http://bugs.debian.org/cgi-bin/pkgreport.cgi?pkg=%s")
            ("ljlogin" "LJ login" "http://www.livejournal.com/login.bml")))
        (add-to-list 'w3m-search-engine-alist
             "http://bugs.debian.org/cgi-bin/pkgreport.cgi?pkg=%s")
            ("ljlogin" "LJ login" "http://www.livejournal.com/login.bml")))
        (add-to-list 'w3m-search-engine-alist
-                   (list (cadr item) (caddr item) nil))
+                   (list (cadr item) (cl-caddr item) nil))
        (add-to-list 'w3m-uri-replace-alist
                    (list (concat "\\`" (car item) ":")
                          'w3m-search-uri-replace
        (add-to-list 'w3m-uri-replace-alist
                    (list (concat "\\`" (car item) ":")
                          'w3m-search-uri-replace
@@ -1484,12 +1484,12 @@ This is mainly useful in `auto-fill-mode'."
        ((eq (car pat) 'if)
         (if (or (null (cdr pat))
                 (null (cddr pat))
        ((eq (car pat) 'if)
         (if (or (null (cdr pat))
                 (null (cddr pat))
-                (null (cdddr pat))
-                (cddddr pat))
+                (null (cl-cdddr pat))
+                (cl-cddddr pat))
             (error "Invalid `if' pattern `%S'" pat))
         (mdw-fill-prefix-match-p (if (eval (cadr pat))
             (error "Invalid `if' pattern `%S'" pat))
         (mdw-fill-prefix-match-p (if (eval (cadr pat))
-                                     (caddr pat)
-                                   (cadddr pat))))
+                                     (cl-caddr pat)
+                                   (cl-cadddr pat))))
        ((eq (car pat) 'and)
         (let ((pats (cdr pat))
               (ok t))
        ((eq (car pat) 'and)
         (let ((pats (cdr pat))
               (ok t))
@@ -1609,7 +1609,7 @@ case."
   '(progn
 
      ;; Notice that the comment-delimiters should be in italics too.
   '(progn
 
      ;; Notice that the comment-delimiters should be in italics too.
-     (pushnew 'font-lock-comment-delimiter-face ps-italic-faces)
+     (cl-pushnew 'font-lock-comment-delimiter-face ps-italic-faces)
 
      ;; Select more suitable colours for the main kinds of tokens.  The
      ;; colours set on the Emacs faces are chosen for use against a dark
 
      ;; Select more suitable colours for the main kinds of tokens.  The
      ;; colours set on the Emacs faces are chosen for use against a dark
@@ -1631,8 +1631,8 @@ case."
                        (line-height . 10.55)
                        (space-width . 5.1)
                        (avg-char-width . 5.1)))
                        (line-height . 10.55)
                        (space-width . 5.1)
                        (avg-char-width . 5.1)))
-                    (remove* 'CourierCondensed ps-font-info-database
-                             :key #'car)))))
+                    (cl-remove 'CourierCondensed ps-font-info-database
+                               :key #'car)))))
 
 ;; Arrange to strip overlays from the buffer before we print .  This will
 ;; prevent `flyspell' from interfering with the printout.  (It would be less
 
 ;; Arrange to strip overlays from the buffer before we print .  This will
 ;; prevent `flyspell' from interfering with the printout.  (It would be less
@@ -1779,11 +1779,11 @@ doesn't match any of the regular expressions in
   (let ((frame-display (frame-parameter frame 'display)))
     (when (and frame-display
               (eq window-system 'x)
   (let ((frame-display (frame-parameter frame 'display)))
     (when (and frame-display
               (eq window-system 'x)
-              (not (some (lambda (fr)
-                           (and (not (eq fr frame))
-                                (string= (frame-parameter fr 'display)
-                                         frame-display)))
-                         (frame-list))))
+              (not (cl-some (lambda (fr)
+                              (and (not (eq fr frame))
+                                   (string= (frame-parameter fr 'display)
+                                            frame-display)))
+                            (frame-list))))
       (run-with-idle-timer 0 nil #'x-close-connection frame-display))))
 (add-hook 'delete-frame-functions 'mdw-last-one-out-turn-off-the-lights)
 
       (run-with-idle-timer 0 nil #'x-close-connection frame-display))))
 (add-hook 'delete-frame-functions 'mdw-last-one-out-turn-off-the-lights)
 
@@ -1858,6 +1858,9 @@ doesn't match any of the regular expressions in
   (((min-colors 64)) :background "grey30")
   (((class color)) :background "blue")
   (t :inverse-video t))
   (((min-colors 64)) :background "grey30")
   (((class color)) :background "blue")
   (t :inverse-video t))
+(mdw-define-face error
+  (((class color)) :background "red")
+  (t :inverse-video t))
 (mdw-define-face match
   (((class color)) :background "blue")
   (t :inverse-video t))
 (mdw-define-face match
   (((class color)) :background "blue")
   (t :inverse-video t))
@@ -1924,6 +1927,15 @@ doesn't match any of the regular expressions in
 (mdw-define-face calendar-today-face
   (t :foreground "yellow" :weight bold))
 
 (mdw-define-face calendar-today-face
   (t :foreground "yellow" :weight bold))
 
+(mdw-define-face flyspell-incorrect
+  (((type x)) :underline (:color "red" :style wave))
+  (((class color)) :foreground "red" :underline t)
+  (t :underline t))
+(mdw-define-face flyspell-duplicate
+  (((type x)) :underline (:color "orange" :style wave))
+  (((class color)) :foreground "orange" :underline t)
+  (t :underline t))
+
 (mdw-define-face comint-highlight-prompt
   (t :weight bold))
 (mdw-define-face comint-highlight-input
 (mdw-define-face comint-highlight-prompt
   (t :weight bold))
 (mdw-define-face comint-highlight-input
@@ -2313,11 +2325,11 @@ doesn't match any of the regular expressions in
   :global nil
   (let ((buffer (current-buffer)))
     (setq mdw-point-overlay-buffers
   :global nil
   (let ((buffer (current-buffer)))
     (setq mdw-point-overlay-buffers
-           (mapcan (lambda (buf)
-                     (if (and (buffer-live-p buf)
-                              (not (eq buf buffer)))
-                         (list buf)))
-                   mdw-point-overlay-buffers))
+           (cl-mapcan (lambda (buf)
+                        (if (and (buffer-live-p buf)
+                                 (not (eq buf buffer)))
+                            (list buf)))
+                      mdw-point-overlay-buffers))
     (if mdw-point-overlay-mode
        (setq mdw-point-overlay-buffers
                (cons buffer mdw-point-overlay-buffers))))
     (if mdw-point-overlay-mode
        (setq mdw-point-overlay-buffers
                (cons buffer mdw-point-overlay-buffers))))
@@ -2390,7 +2402,7 @@ indentation anyway."
        (should-indent-p t))
     (while (and context
                (eq (caar context) 'arglist-cont-nonempty))
        (should-indent-p t))
     (while (and context
                (eq (caar context) 'arglist-cont-nonempty))
-      (when (and (= (caddr (pop context)) pos)
+      (when (and (= (cl-caddr (pop context)) pos)
                 context
                 (memq (caar context) '(arglist-intro
                                        arglist-cont-nonempty)))
                 context
                 (memq (caar context) '(arglist-intro
                                        arglist-cont-nonempty)))
@@ -2407,7 +2419,7 @@ indentation anyway."
        (if (let* ((key-name (symbol-name key))
                   (key-len (length key-name)))
              (and (>= key-len 6)
        (if (let* ((key-name (symbol-name key))
                   (key-len (length key-name)))
              (and (>= key-len 6)
-                  (string= (subseq key-name (- key-len 6)) "-alist")))
+                  (string= (substring key-name (- key-len 6)) "-alist")))
            (push (cons key
                        (mdw-merge-style-alists value
                                                (cdr (assoc key second))))
            (push (cons key
                        (mdw-merge-style-alists value
                                                (cdr (assoc key second))))
@@ -2418,7 +2430,7 @@ indentation anyway."
        (push item output)))
     (nreverse output)))
 
        (push item output)))
     (nreverse output)))
 
-(defmacro* mdw-define-c-style (name (&optional parent) &rest assocs)
+(cl-defmacro mdw-define-c-style (name (&optional parent) &rest assocs)
   "Define a C style, called NAME (a symbol) based on PARENT, setting ASSOCs.
 A function, named `mdw-define-c-style/NAME', is defined to actually install
 the style using `c-add-style', and added to the hook
   "Define a C style, called NAME (a symbol) based on PARENT, setting ASSOCs.
 A function, named `mdw-define-c-style/NAME', is defined to actually install
 the style using `c-add-style', and added to the hook
@@ -2487,11 +2499,12 @@ name, as a symbol."
            (append (mapcar (lambda (mode)
                              (cons mode style))
                            modes)
            (append (mapcar (lambda (mode)
                              (cons mode style))
                            modes)
-                   (remove-if (lambda (assoc)
-                                (memq (car assoc) modes))
-                              (if (listp c-default-style)
-                                  c-default-style
-                                (list (cons 'other c-default-style))))))))
+                   (cl-remove-if (lambda (assoc)
+                                   (memq (car assoc) modes))
+                                 (if (listp c-default-style)
+                                     c-default-style
+                                   (list (cons 'other
+                                               c-default-style))))))))
 (setq c-default-style "mdw-c")
 
 (mdw-set-default-c-style '(c-mode c++-mode) 'mdw-c)
 (setq c-default-style "mdw-c")
 
 (mdw-set-default-c-style '(c-mode c++-mode) 'mdw-c)
@@ -3035,7 +3048,7 @@ name, as a symbol."
 (defun mdw-fontify-fsharp ()
 
   (let ((punct "=<>+-*/|&%!@?"))
 (defun mdw-fontify-fsharp ()
 
   (let ((punct "=<>+-*/|&%!@?"))
-    (do ((i 0 (1+ i)))
+    (cl-do ((i 0 (1+ i)))
        ((>= i (length punct)))
       (modify-syntax-entry (aref punct i) ".")))
 
        ((>= i (length punct)))
       (modify-syntax-entry (aref punct i) ".")))
 
@@ -3450,7 +3463,7 @@ strip numbers instead."
              python-indent-offset 2
              python-fill-docstring-style 'symmetric)
 
              python-indent-offset 2
              python-fill-docstring-style 'symmetric)
 
-(defun mdw-fontify-pythonic (keywords builtins)
+(defun mdw-fontify-pythonic (keywords soft-keywords builtins)
 
   ;; Miscellaneous fiddling.
   (mdw-standard-fill-prefix "\\([ \t]*#+[ \t]*\\)")
 
   ;; Miscellaneous fiddling.
   (mdw-standard-fill-prefix "\\([ \t]*#+[ \t]*\\)")
@@ -3465,6 +3478,8 @@ strip numbers instead."
           ;; Set up the keywords defined above.
           (list (concat "\\_<\\(" keywords "\\)\\_>")
                 '(0 font-lock-keyword-face))
           ;; Set up the keywords defined above.
           (list (concat "\\_<\\(" keywords "\\)\\_>")
                 '(0 font-lock-keyword-face))
+          (list (concat "\\(^\\|[^.]\\)\\_<\\(" soft-keywords "\\)\\_>")
+                '(2 font-lock-keyword-face))
           (list (concat "\\(^\\|[^.]\\)\\_<\\(" builtins "\\)\\_>")
                 '(2 font-lock-variable-name-face))
           (list (concat "\\_<\\(__\\(\\sw+\\|\\s_+\\)+__\\)\\_>")
           (list (concat "\\(^\\|[^.]\\)\\_<\\(" builtins "\\)\\_>")
                 '(2 font-lock-variable-name-face))
           (list (concat "\\_<\\(__\\(\\sw+\\|\\s_+\\)+__\\)\\_>")
@@ -3486,14 +3501,13 @@ strip numbers instead."
   (mdw-fontify-pythonic
    (mdw-regexps "and" "as" "assert" "async" "await"
                "break"
   (mdw-fontify-pythonic
    (mdw-regexps "and" "as" "assert" "async" "await"
                "break"
-               "case" "class" "continue"
+               "class" "continue"
                "def" "del"
                "elif" "else" "except" ;"exec"
                "finally" "for" "from"
                "global"
                "if" "import" "in" "is"
                "lambda"
                "def" "del"
                "elif" "else" "except" ;"exec"
                "finally" "for" "from"
                "global"
                "if" "import" "in" "is"
                "lambda"
-               "match"
                "nonlocal"
                "not"
                "or"
                "nonlocal"
                "not"
                "or"
@@ -3503,6 +3517,9 @@ strip numbers instead."
                "while" "with"
                "yield")
 
                "while" "with"
                "yield")
 
+   (mdw-regexps "case"
+               "match")
+
    (mdw-regexps "Ellipsis"
                "False"
                "None" "NotImplemented"
    (mdw-regexps "Ellipsis"
                "False"
                "None" "NotImplemented"
@@ -3615,6 +3632,7 @@ strip numbers instead."
                "import" "in" "is" "lambda" "not" "or" "pass" "print"
                "property" "raise" "return" "struct" "try" "while" "with"
                "yield")
                "import" "in" "is" "lambda" "not" "or" "pass" "print"
                "property" "raise" "return" "struct" "try" "while" "with"
                "yield")
+   ""
    ""))
 
 (define-derived-mode pyrex-mode python-mode "Pyrex"
    ""))
 
 (define-derived-mode pyrex-mode python-mode "Pyrex"
@@ -4083,11 +4101,11 @@ strip numbers instead."
 
   (let ((not-comment
         (let ((word "COMMENT"))
 
   (let ((not-comment
         (let ((word "COMMENT"))
-          (do ((regexp (concat "[^" (substring word 0 1) "]+")
-                       (concat regexp "\\|"
-                               (substring word 0 i)
-                               "[^" (substring word i (1+ i)) "]"))
-               (i 1 (1+ i)))
+          (cl-do ((regexp (concat "[^" (substring word 0 1) "]+")
+                          (concat regexp "\\|"
+                                  (substring word 0 i)
+                                  "[^" (substring word i (1+ i)) "]"))
+                  (i 1 (1+ i)))
               ((>= i (length word)) regexp)))))
     (setq font-lock-keywords
            (list (list (concat "\\<COMMENT\\>"
               ((>= i (length word)) regexp)))))
     (setq font-lock-keywords
            (list (list (concat "\\<COMMENT\\>"
@@ -4253,6 +4271,8 @@ strip numbers instead."
 ;;; Haskell configuration.
 
 (setq-default haskell-indent-offset 2)
 ;;; Haskell configuration.
 
 (setq-default haskell-indent-offset 2)
+(setq haskell-doc-prettify-types nil
+      haskell-interactive-popup-errors nil)
 
 (defun mdw-fontify-haskell ()
 
 
 (defun mdw-fontify-haskell ()
 
@@ -4263,7 +4283,7 @@ strip numbers instead."
 
   ;; Make punctuation be punctuation
   (let ((punct "=<>+-*/|&%!@?$.^:#`"))
 
   ;; Make punctuation be punctuation
   (let ((punct "=<>+-*/|&%!@?$.^:#`"))
-    (do ((i 0 (1+ i)))
+    (cl-do ((i 0 (1+ i)))
        ((>= i (length punct)))
       (modify-syntax-entry (aref punct i) ".")))
 
        ((>= i (length punct)))
       (modify-syntax-entry (aref punct i) ".")))
 
@@ -4624,8 +4644,8 @@ that character only to be normal punctuation."
 (defun mdw-conf-quote-normal-acceptable-value-p (value)
   "Is the VALUE is an acceptable value for `mdw-conf-quote-normal'?"
   (or (booleanp value)
 (defun mdw-conf-quote-normal-acceptable-value-p (value)
   "Is the VALUE is an acceptable value for `mdw-conf-quote-normal'?"
   (or (booleanp value)
-      (every (lambda (v) (memq v '(?\" ?')))
-            (if (listp value) value (list value)))))
+      (cl-every (lambda (v) (memq v '(?\" ?')))
+               (if (listp value) value (list value)))))
 
 (defun mdw-fix-up-quote ()
   "Apply the setting of `mdw-conf-quote-normal'."
 
 (defun mdw-fix-up-quote ()
   "Apply the setting of `mdw-conf-quote-normal'."
@@ -5059,11 +5079,11 @@ by `mdw-lisp-setf-value-indent' spaces."
                             (while (< (point) start)
                               (condition-case nil (forward-sexp 1)
                                 (scan-error (throw 'done nil)))
                             (while (< (point) start)
                               (condition-case nil (forward-sexp 1)
                                 (scan-error (throw 'done nil)))
-                              (incf count))
+                              (cl-incf count))
                             (1- count)))))))
         (and basic-indent offset
              (list (+ basic-indent
                             (1- count)))))))
         (and basic-indent offset
              (list (+ basic-indent
-                      (if (oddp offset) 0
+                      (if (cl-oddp offset) 0
                         mdw-lisp-setf-value-indent))
                    basic-indent)))))
 (progn
                         mdw-lisp-setf-value-indent))
                    basic-indent)))))
 (progn
@@ -5091,13 +5111,13 @@ align the other subforms beneath it.  Otherwise, indent them
               (eq lisp-indent-backquote-substitution-mode 'corrected))
       (save-excursion
        (goto-char (elt state 1))
               (eq lisp-indent-backquote-substitution-mode 'corrected))
       (save-excursion
        (goto-char (elt state 1))
-       (incf loop-indentation
-                (cond ((eq (char-before) ?,) -1)
-                      ((and (eq (char-before) ?@)
-                            (progn (backward-char)
-                                   (eq (char-before) ?,)))
-                       -2)
-                      (t 0)))))
+       (cl-incf loop-indentation
+                  (cond ((eq (char-before) ?,) -1)
+                        ((and (eq (char-before) ?@)
+                              (progn (backward-char)
+                                     (eq (char-before) ?,)))
+                         -2)
+                        (t 0)))))
 
     ;; If the first loop item is on the same line as the `loop' itself then
     ;; use that as the baseline.  Otherwise advance by the default indent.
 
     ;; If the first loop item is on the same line as the `loop' itself then
     ;; use that as the baseline.  Otherwise advance by the default indent.
@@ -5234,6 +5254,11 @@ align the other subforms beneath it.  Otherwise, indent them
 (progn
   (add-hook 'makefile-mode-hook 'mdw-misc-mode-config t))
 
 (progn
   (add-hook 'makefile-mode-hook 'mdw-misc-mode-config t))
 
+;; nroff/troff.
+
+(progn
+  (add-hook 'nroff-mode-hook 'mdw-misc-mode-config t))
+
 ;;;--------------------------------------------------------------------------
 ;;; Text mode.
 
 ;;;--------------------------------------------------------------------------
 ;;; Text mode.
 
@@ -5481,6 +5506,11 @@ rather than baking the list into the function."
   "Don't make windows dedicated.  Seriously."
   (set-window-dedicated-p (or window (selected-window)) nil))
 
   "Don't make windows dedicated.  Seriously."
   (set-window-dedicated-p (or window (selected-window)) nil))
 
+(defadvice gud-find-expr
+    (around mdw-inhibit-read-only (&rest args) compile activate)
+  "Inhibit errors caused by my setting of `comint-prompt-read-only'."
+  (let ((inhibit-read-only t)) ad-do-it))
+
 ;;;--------------------------------------------------------------------------
 ;;; SQL stuff.
 
 ;;;--------------------------------------------------------------------------
 ;;; SQL stuff.
 
@@ -5614,21 +5644,21 @@ rather than baking the list into the function."
          (funcall func)
          (forward-line)))
     (let ((n (prefix-numeric-value arg)))
          (funcall func)
          (forward-line)))
     (let ((n (prefix-numeric-value arg)))
-      (cond ((minusp n)
+      (cond ((cl-minusp n)
             (unless (bolp)
               (beginning-of-line)
               (funcall func)
             (unless (bolp)
               (beginning-of-line)
               (funcall func)
-              (incf n))
-            (while (minusp n)
+              (cl-incf n))
+            (while (cl-minusp n)
               (forward-line -1)
               (funcall func)
               (forward-line -1)
               (funcall func)
-              (incf n)))
+              (cl-incf n)))
            (t
             (beginning-of-line)
            (t
             (beginning-of-line)
-            (while (plusp n)
+            (while (cl-plusp n)
               (funcall func)
               (forward-line)
               (funcall func)
               (forward-line)
-              (decf n)))))))
+              (cl-decf n)))))))
 
 (defun mdw-mpc-select-one ()
   (when (and (get-char-property (point) 'mpc-file)
 
 (defun mdw-mpc-select-one ()
   (when (and (get-char-property (point) 'mpc-file)