el/dot-emacs.el: Add a heading for `m4'.
[profile] / el / dot-emacs.el
index 0af3c56..92614ca 100644 (file)
 ;;;--------------------------------------------------------------------------
 ;;; Check command-line.
 
+(defun mdw-check-command-line-switch (switch)
+  (let ((probe nil) (next command-line-args) (found nil))
+    (while next
+      (cond ((string= (car next) switch)
+            (setq found t)
+            (if probe (rplacd probe (cdr next))
+              (setq command-line-args (cdr next))))
+           (t
+            (setq probe next)))
+      (setq next (cdr next)))
+    found))
+
 (defvar mdw-fast-startup nil
   "Whether .emacs should optimize for rapid startup.
 This may be at the expense of cool features.")
-(let ((probe nil) (next command-line-args))
-  (while next
-    (cond ((string= (car next) "--mdw-fast-startup")
-          (setq mdw-fast-startup t)
-          (if probe
-              (rplacd probe (cdr next))
-            (setq command-line-args (cdr next))))
-         (t
-          (setq probe next)))
-    (setq next (cdr next))))
+(setq mdw-fast-startup
+      (mdw-check-command-line-switch "--mdw-fast-startup"))
+
+(defvar mdw-splashy-startup nil
+  "Whether to show a splash screen and related frippery.")
+(setq mdw-splashy-startup
+      (mdw-check-command-line-switch "--mdw-splashy-startup"))
 
 ;;;--------------------------------------------------------------------------
 ;;; Some general utilities.
@@ -254,6 +263,7 @@ frame is actually mapped on the screen."
 
 (mdw-advise-to-inhibit-raise-frame select-frame-set-input-focus)
 (mdw-advise-to-inhibit-raise-frame appt-disp-window)
+(mdw-advise-to-inhibit-raise-frame mouse-select-window)
 
 ;; Bug fix for markdown-mode, which breaks point positioning during
 ;; `query-replace'.
@@ -577,7 +587,7 @@ Pretend they don't exist.  They might be on other display devices."
 
 (defadvice compile (around hack-environment compile activate)
   "Hack the environment inherited by inferiors in the compilation."
-  (let ((process-environment process-environment))
+  (let ((process-environment (copy-tree process-environment)))
     (setenv "LD_PRELOAD" nil)
     ad-do-it))
 
@@ -898,7 +908,7 @@ in REST."
                                     (erase-buffer)
                                     (shell-command "date +%Y-%m-%d" t)
                                     (goto-char (mark))
-                                    (delete-backward-char 1)
+                                    (delete-char -1)
                                     (buffer-string))
                (kill-buffer buffer))))))
 
@@ -969,6 +979,21 @@ tramp, which seems to get itself into a twist."
   (let ((auto-revert-check-vc-info t))
     (auto-revert-buffers)))
 
+(defun comint-send-and-indent ()
+  (interactive)
+  (comint-send-input)
+  (and mdw-auto-indent
+       (indent-for-tab-command)))
+
+(defadvice comint-line-beginning-position
+    (around mdw-calculate-it-properly () activate compile)
+  "Calculate the actual line start for multi-line input."
+  (if (or comint-use-prompt-regexp
+         (eq (field-at-pos (point)) 'output))
+      ad-do-it
+    (setq ad-return-value
+         (constrain-to-field (line-beginning-position) (point)))))
+
 ;;;--------------------------------------------------------------------------
 ;;; Dired hacking.
 
@@ -1034,8 +1059,7 @@ If NEW-SESSION-P, start a new session."
   '(define-key w3m-mode-map [?\e ?\r] 'w3m-view-this-url-new-session))
 
 (defvar mdw-good-url-browsers
-  '(browse-url-chromium
-    browse-url-mozilla
+  '(browse-url-mozilla
     browse-url-generic
     (w3m . mdw-w3m-browse-url)
     browse-url-w3)
@@ -2080,7 +2104,7 @@ name, as a symbol."
                      "__typeof__"       ;GCC
                      "__volatile__"     ;GCC
                      ))
-       (c-constants
+       (c-builtins
         (mdw-regexps "false"            ;C++, C99 macro
                      "this"             ;C++
                      "true"             ;C++, C99 macro
@@ -2116,7 +2140,7 @@ name, as a symbol."
           (list (concat "\\<\\(" c-keywords "\\)\\>")
                 '(0 font-lock-keyword-face))
 
-          (list (concat "\\<\\(" c-constants "\\)\\>")
+          (list (concat "\\<\\(" c-builtins "\\)\\>")
                 '(0 font-lock-variable-name-face))
 
           ;; Handle numbers too.
@@ -2229,7 +2253,7 @@ name, as a symbol."
                      "void" "volatile"
                      "while"))
 
-       (java-constants
+       (java-builtins
         (mdw-regexps "false" "null" "super" "this" "true")))
 
     (setq font-lock-keywords
@@ -2239,8 +2263,8 @@ name, as a symbol."
           (list (concat "\\<\\(" java-keywords "\\)\\>")
                 '(0 font-lock-keyword-face))
 
-          ;; Handle the magic constants defined above.
-          (list (concat "\\<\\(" java-constants "\\)\\>")
+          ;; Handle the magic builtins defined above.
+          (list (concat "\\<\\(" java-builtins "\\)\\>")
                 '(0 font-lock-variable-name-face))
 
           ;; Handle numbers too.
@@ -2282,11 +2306,8 @@ name, as a symbol."
                      "private" "protected" "public" "return" "short"
                      "static" "super" "switch" "synchronized" "throw"
                      "throws" "transient" "try" "typeof" "var" "void"
-                     "volatile" "while" "with" "yield"
-
-                     "boolean" "byte" "char" "double" "float" "int" "long"
-                     "short" "void"))
-       (javascript-constants
+                     "volatile" "while" "with" "yield"))
+       (javascript-builtins
         (mdw-regexps "false" "null" "undefined" "Infinity" "NaN" "true"
                      "arguments" "this")))
 
@@ -2297,8 +2318,8 @@ name, as a symbol."
           (list (concat "\\_<\\(" javascript-keywords "\\)\\_>")
                 '(0 font-lock-keyword-face))
 
-          ;; Handle the predefined constants defined above.
-          (list (concat "\\_<\\(" javascript-constants "\\)\\_>")
+          ;; Handle the predefined builtins defined above.
+          (list (concat "\\_<\\(" javascript-builtins "\\)\\_>")
                 '(0 font-lock-variable-name-face))
 
           ;; Handle numbers too.
@@ -2424,7 +2445,7 @@ name, as a symbol."
                      "unsafe" "ushort" "using" "virtual" "void" "volatile"
                      "while" "yield"))
 
-       (csharp-constants
+       (csharp-builtins
         (mdw-regexps "base" "false" "null" "this" "true")))
 
     (setq font-lock-keywords
@@ -2434,8 +2455,8 @@ name, as a symbol."
           (list (concat "\\<\\(" csharp-keywords "\\)\\>")
                 '(0 font-lock-keyword-face))
 
-          ;; Handle the magic constants defined above.
-          (list (concat "\\<\\(" csharp-constants "\\)\\>")
+          ;; Handle the magic builtins defined above.
+          (list (concat "\\<\\(" csharp-builtins "\\)\\>")
                 '(0 font-lock-variable-name-face))
 
           ;; Handle numbers too.
@@ -2649,15 +2670,17 @@ name, as a symbol."
 (defun mdw-fontify-rust ()
 
   ;; Hack syntax categories.
+  (modify-syntax-entry ?$ ".")
+  (modify-syntax-entry ?% ".")
   (modify-syntax-entry ?= ".")
 
   ;; Fontify keywords and things.
   (make-local-variable 'font-lock-keywords)
   (let ((rust-keywords
-        (mdw-regexps "abstract" "alignof" "as"
+        (mdw-regexps "abstract" "alignof" "as" "async" "await"
                      "become" "box" "break"
-                     "const" "continue" "create"
-                     "do"
+                     "const" "continue" "crate"
+                     "do" "dyn"
                      "else" "enum" "extern"
                      "final" "fn" "for"
                      "if" "impl" "in"
@@ -2667,8 +2690,8 @@ name, as a symbol."
                      "priv" "proc" "pub" "pure"
                      "ref" "return"
                      "sizeof" "static" "struct" "super"
-                     "trait" "type" "typeof"
-                     "unsafe" "unsized" "use"
+                     "trait" "try" "type" "typeof"
+                     "union" "unsafe" "unsized" "use"
                      "virtual"
                      "where" "while"
                      "yield"))
@@ -2701,7 +2724,7 @@ name, as a symbol."
                               "\\|" "0o[0-7_]+"
                               "\\|" "0b[01_]+"
                               "\\)"
-                              "\\([ui]\\(8\\|16\\|32\\|64\\|s\\|size\\)\\)?"
+                              "\\([ui]\\(8\\|16\\|32\\|64\\|size\\)\\)?"
                         "\\)\\_>")
                 '(0 mdw-number-face))
 
@@ -3168,6 +3191,8 @@ strip numbers instead."
   (local-set-key [?*] 'mdw-rexx-electric-*)
   (mapcar #'(lambda (ch) (modify-syntax-entry ch "w"))
          '(?! ?? ?# ?@ ?$))
+  (mapcar #'(lambda (ch) (modify-syntax-entry ch "."))
+         '(?¬))
   (mdw-standard-fill-prefix "\\([ \t]*/?\*[ \t]*\\)")
 
   ;; Set up keywords and things for fontification.
@@ -3508,6 +3533,13 @@ strip numbers instead."
 (setq LaTeX-syntactic-comments nil
       LaTeX-fill-break-at-separators '(\\\[))
 
+(add-hook 'bibtex-mode-hook (lambda () (setq fill-column 76)))
+
+;;;--------------------------------------------------------------------------
+;;; HTML, CSS, and other web foolishness.
+
+(setq css-indent-offset 2)
+
 ;;;--------------------------------------------------------------------------
 ;;; SGML hacking.
 
@@ -3847,31 +3879,7 @@ that character only to be normal punctuation.")
   (run-hooks 'nfast-debug-mode-hook))
 
 ;;;--------------------------------------------------------------------------
-;;; Other languages.
-
-;; Smalltalk.
-
-(defun mdw-setup-smalltalk ()
-  (and mdw-auto-indent
-       (local-set-key "\C-m" 'smalltalk-newline-and-indent))
-  (make-local-variable 'mdw-auto-indent)
-  (setq mdw-auto-indent nil)
-  (local-set-key "\C-i" 'smalltalk-reindent))
-
-(defun mdw-fontify-smalltalk ()
-  (make-local-variable 'font-lock-keywords)
-  (setq font-lock-keywords
-       (list
-        (list "\\<[A-Z][a-zA-Z0-9]*\\>"
-              '(0 font-lock-keyword-face))
-        (list (concat "\\<0\\([xX][0-9a-fA-F_]+\\|[0-7_]+\\)\\|"
-                      "[0-9][0-9_]*\\(\\.[0-9_]*\\|\\)"
-                      "\\([eE]\\([-+]\\|\\)[0-9_]+\\|\\)")
-              '(0 mdw-number-face))
-        (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
-              '(0 mdw-punct-face)))))
-
-;; Lispy languages.
+;;; Lispy languages.
 
 ;; Unpleasant bodge.
 (unless (boundp 'slime-repl-mode-map)
@@ -3899,6 +3907,16 @@ that character only to be normal punctuation.")
       lisp-loop-keyword-indentation 6
       lisp-loop-forms-indentation 6)
 
+(defmacro mdw-advise-hyperspec-lookup (func args)
+  `(defadvice ,func (around mdw-browse-w3m ,args activate compile)
+     (if (fboundp 'w3m)
+        (let ((browse-url-browser-function #'mdw-w3m-browse-url))
+          ad-do-it)
+       ad-do-it)))
+(mdw-advise-hyperspec-lookup common-lisp-hyperspec (symbol))
+(mdw-advise-hyperspec-lookup common-lisp-hyperspec-format (char))
+(mdw-advise-hyperspec-lookup common-lisp-hyperspec-lookup-reader-macro (char))
+
 (defun mdw-fontify-lispy ()
 
   ;; Set fill prefix.
@@ -3928,20 +3946,32 @@ that character only to be normal punctuation.")
              (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
                    '(0 mdw-punct-face)))))
 
-(defun comint-send-and-indent ()
-  (interactive)
-  (comint-send-input)
+;;;--------------------------------------------------------------------------
+;;; Other languages.
+
+;; Smalltalk.
+
+(defun mdw-setup-smalltalk ()
   (and mdw-auto-indent
-       (indent-for-tab-command)))
+       (local-set-key "\C-m" 'smalltalk-newline-and-indent))
+  (make-local-variable 'mdw-auto-indent)
+  (setq mdw-auto-indent nil)
+  (local-set-key "\C-i" 'smalltalk-reindent))
 
-(defadvice comint-line-beginning-position
-    (around mdw-calculate-it-properly () activate compile)
-  "Calculate the actual line start for multi-line input."
-  (if (or comint-use-prompt-regexp
-         (eq (field-at-pos (point)) 'output))
-      ad-do-it
-    (setq ad-return-value
-         (constrain-to-field (line-beginning-position) (point)))))
+(defun mdw-fontify-smalltalk ()
+  (make-local-variable 'font-lock-keywords)
+  (setq font-lock-keywords
+       (list
+        (list "\\<[A-Z][a-zA-Z0-9]*\\>"
+              '(0 font-lock-keyword-face))
+        (list (concat "\\<0\\([xX][0-9a-fA-F_]+\\|[0-7_]+\\)\\|"
+                      "[0-9][0-9_]*\\(\\.[0-9_]*\\|\\)"
+                      "\\([eE]\\([-+]\\|\\)[0-9_]+\\|\\)")
+              '(0 mdw-number-face))
+        (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
+              '(0 mdw-punct-face)))))
+
+;; m4.
 
 (defun mdw-setup-m4 ()
 
@@ -4027,13 +4057,13 @@ This allows you to pass a list of arguments through `ansi-term'."
 
 (defadvice term-exec-1 (around hack-environment compile activate)
   "Hack the environment inherited by inferiors in the terminal."
-  (let ((process-environment process-environment))
+  (let ((process-environment (copy-tree process-environment)))
     (setenv "LD_PRELOAD" nil)
     ad-do-it))
 
 (defadvice shell (around hack-environment compile activate)
   "Hack the environment inherited by inferiors in the shell."
-  (let ((process-environment process-environment))
+  (let ((process-environment (copy-tree process-environment)))
     (setenv "LD_PRELOAD" nil)
     ad-do-it))