X-Git-Url: https://git.distorted.org.uk/~mdw/profile/blobdiff_plain/5fd055c2f1512d1e57ce88d3784a578a49a7e59f..8a425bd7802fb5bcda35025495d7e70b561769ff:/el/dot-emacs.el diff --git a/el/dot-emacs.el b/el/dot-emacs.el index 1d2ddec..e08b6fc 100644 --- a/el/dot-emacs.el +++ b/el/dot-emacs.el @@ -349,7 +349,6 @@ probably become garbage." (car alists) (cdr alists))))) - (defun mdw-do-uniquify (done end l rest) "A helper function for mdw-uniquify-alist. The DONE argument is a list whose first element is `nil'. It @@ -419,6 +418,21 @@ in REST." (insert "\nNP: ") (insert-file-contents np-file))))) +(defun mdw-version-< (ver-a ver-b) + "Answer whether VER-A is strictly earlier than VER-B. +VER-A and VER-B are version numbers, which are strings containing digit +sequences separated by `.'." + (let* ((la (mapcar (lambda (x) (car (read-from-string x))) + (split-string ver-a "\\."))) + (lb (mapcar (lambda (x) (car (read-from-string x))) + (split-string ver-b "\\.")))) + (catch 'done + (while t + (cond ((null la) (throw 'done lb)) + ((null lb) (throw 'done nil)) + ((< (car la) (car lb)) (throw 'done t)) + ((= (car la) (car lb)) (setq la (cdr la) lb (cdr lb)))))))) + (defun mdw-check-autorevert () "Sets global-auto-revert-ignore-buffer appropriately for this buffer. This takes into consideration whether it's been found using @@ -676,12 +690,14 @@ case." (t (local-set-key "\C-m" 'newline-and-indent)))) (local-set-key [C-return] 'newline) - (make-variable-buffer-local 'page-delimiter) + (make-local-variable 'page-delimiter) (setq page-delimiter "\f\\|^.*-\\{6\\}.*$") (setq comment-column 40) (auto-fill-mode 1) (setq fill-column 77) (setq show-trailing-whitespace t) + (let ((whitespace-style (remove 'trailing whitespace-style))) + (trap (whitespace-mode t))) (and (fboundp 'gtags-mode) (gtags-mode)) (outline-minor-mode t) @@ -689,6 +705,10 @@ case." (reveal-mode t) (trap (turn-on-font-lock))) +(defun mdw-post-config-mode-hack () + (let ((whitespace-style (remove 'trailing whitespace-style))) + (trap (whitespace-mode t)))) + (eval-after-load 'gtags '(progn (dolist (key '([mouse-2] [mouse-3])) @@ -734,10 +754,20 @@ doesn't match any of the regular expressions in frame-display) (progn "frame %s still uses us" nil))) (frame-list)))) - (message "turn out 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) +(defvar mdw-frame-parameters-alist + '((nil (menu-bar-lines . 0)))) +(defun mdw-set-frame-parameters (frame) + (let ((params (assq (if (fboundp 'window-system) + (window-system frame) + window-system) + mdw-frame-parameters-alist))) + (when params + (modify-frame-parameters frame (cdr params))))) +(add-hook 'after-make-frame-functions 'mdw-set-frame-parameters) + ;;;-------------------------------------------------------------------------- ;;; General fontification. @@ -1130,7 +1160,9 @@ doesn't match any of the regular expressions in ;; And anything else is punctuation. (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" - '(0 mdw-punct-face)))))) + '(0 mdw-punct-face)))) + + (mdw-post-config-mode-hack))) ;;;-------------------------------------------------------------------------- ;;; AP calc mode. @@ -1182,7 +1214,9 @@ doesn't match any of the regular expressions in ;; And anything else is punctuation. (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" - '(0 mdw-punct-face)))))) + '(0 mdw-punct-face))))) + + (mdw-post-config-mode-hack)) ;;;-------------------------------------------------------------------------- ;;; Java programming configuration. @@ -1244,7 +1278,9 @@ doesn't match any of the regular expressions in ;; And anything else is punctuation. (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" - '(0 mdw-punct-face)))))) + '(0 mdw-punct-face))))) + + (mdw-post-config-mode-hack)) ;;;-------------------------------------------------------------------------- ;;; C# programming configuration. @@ -1311,7 +1347,9 @@ doesn't match any of the regular expressions in ;; And anything else is punctuation. (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" - '(0 mdw-punct-face)))))) + '(0 mdw-punct-face))))) + + (mdw-post-config-mode-hack)) (define-derived-mode csharp-mode java-mode "C#" "Major mode for editing C# code.") @@ -1347,7 +1385,9 @@ doesn't match any of the regular expressions in ;; And anything else is punctuation. (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" - '(0 mdw-punct-face)))))) + '(0 mdw-punct-face))))) + + (mdw-post-config-mode-hack)) ;;;-------------------------------------------------------------------------- ;;; Awk programming configuration. @@ -1405,7 +1445,9 @@ doesn't match any of the regular expressions in ;; And anything else is punctuation. (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" - '(0 mdw-punct-face)))))) + '(0 mdw-punct-face))))) + + (mdw-post-config-mode-hack)) ;;;-------------------------------------------------------------------------- ;;; Perl programming style. @@ -1452,7 +1494,9 @@ doesn't match any of the regular expressions in ;; And anything else is punctuation. (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" - '(0 mdw-punct-face)))))) + '(0 mdw-punct-face))))) + + (mdw-post-config-mode-hack)) (defun perl-number-tests (&optional arg) "Assign consecutive numbers to lines containing `#t'. With ARG, @@ -1494,7 +1538,9 @@ strip numbers instead." ;; And anything else is punctuation. (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" - '(0 mdw-punct-face))))) + '(0 mdw-punct-face)))) + + (mdw-post-config-mode-hack)) ;; Define Python fontification styles. @@ -1568,7 +1614,9 @@ strip numbers instead." ;; And anything else is punctuation. (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" - '(0 mdw-punct-face)))))) + '(0 mdw-punct-face))))) + + (mdw-post-config-mode-hack)) ;;;-------------------------------------------------------------------------- ;;; ARM assembler programming configuration. @@ -1649,8 +1697,9 @@ strip numbers instead." ;; And anything else is punctuation. (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" - '(0 mdw-punct-face)))) + '(0 mdw-punct-face))) + (mdw-post-config-mode-hack)) (run-hooks 'arm-assembler-mode-hook)) ;;;-------------------------------------------------------------------------- @@ -1676,7 +1725,8 @@ strip numbers instead." "\\([eE]\\([-+]\\|\\)[0-9_]+\\|\\)") '(0 mdw-number-face)) (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" - '(0 mdw-punct-face))))) + '(0 mdw-punct-face)))) + (mdw-post-config-mode-hack)) ;;;-------------------------------------------------------------------------- ;;; REXX configuration. @@ -1749,7 +1799,9 @@ strip numbers instead." ;; And everything else is punctuation. (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" - '(0 mdw-punct-face)))))) + '(0 mdw-punct-face))))) + + (mdw-post-config-mode-hack)) ;;;-------------------------------------------------------------------------- ;;; Standard ML programming style. @@ -1799,7 +1851,9 @@ strip numbers instead." ;; And anything else is punctuation. (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" - '(0 mdw-punct-face)))))) + '(0 mdw-punct-face))))) + + (mdw-post-config-mode-hack)) ;;;-------------------------------------------------------------------------- ;;; Haskell configuration. @@ -1836,7 +1890,9 @@ strip numbers instead." "\\([eE]\\([-+]\\|\\)[0-9]+\\|\\)") '(0 mdw-number-face)) (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" - '(0 mdw-punct-face)))))) + '(0 mdw-punct-face))))) + + (mdw-post-config-mode-hack)) ;;;-------------------------------------------------------------------------- ;;; Erlang configuration. @@ -1870,7 +1926,9 @@ strip numbers instead." (list "\\<[0-9]+\\(\\|#[0-9a-zA-Z]+\\|[eE][+-]?[0-9]+\\)\\>" '(0 mdw-number-face)) (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" - '(0 mdw-punct-face)))))) + '(0 mdw-punct-face))))) + + (mdw-post-config-mode-hack)) ;;;-------------------------------------------------------------------------- ;;; Texinfo configuration. @@ -1904,7 +1962,9 @@ strip numbers instead." ;; Fontify TeX special characters as punctuation. (list "[{}]+" - '(0 mdw-punct-face))))) + '(0 mdw-punct-face)))) + + (mdw-post-config-mode-hack)) ;;;-------------------------------------------------------------------------- ;;; TeX and LaTeX configuration. @@ -1970,7 +2030,9 @@ strip numbers instead." ;; Fontify TeX special characters as punctuation. (list "[$^_{}#&]" - '(0 mdw-punct-face))))) + '(0 mdw-punct-face)))) + + (mdw-post-config-mode-hack)) ;;;-------------------------------------------------------------------------- ;;; SGML hacking. @@ -1979,7 +2041,7 @@ strip numbers instead." (interactive) (sgml-mode) (mdw-standard-fill-prefix "") - (make-variable-buffer-local 'sgml-delimiters) + (make-local-variable 'sgml-delimiters) (setq sgml-delimiters '("AND" "&" "COM" "--" "CRO" "&#" "DSC" "]" "DSO" "[" "DTGC" "]" "DTGO" "[" "ERO" "&" "ETAGO" ":e" "GRPC" ")" "GRPO" "(" "LIT" "\"" @@ -2021,6 +2083,35 @@ strip numbers instead." (setq sh-basic-offset 2)) ;;;-------------------------------------------------------------------------- +;;; Emacs shell mode. + +(defun mdw-eshell-prompt () + (let ((left "[") (right "]")) + (when (= (user-uid) 0) + (setq left "«" right "»")) + (concat left + (save-match-data + (replace-regexp-in-string "\\..*$" "" (system-name))) + " " + (eshell/pwd) + right))) +(setq eshell-prompt-function 'mdw-eshell-prompt) +(setq eshell-prompt-regexp "^\\[[^]>]+\\(\\]\\|>>?\\)") + +(defalias 'eshell/e 'find-file) +(defalias 'eshell/w3m 'w3m-goto-url) + +(mdw-define-face eshell-prompt (t :weight bold)) +(mdw-define-face eshell-ls-archive (t :weight bold :foreground "red")) +(mdw-define-face eshell-ls-backup (t :foreground "lightgrey" :slant italic)) +(mdw-define-face eshell-ls-product (t :foreground "lightgrey" :slant italic)) +(mdw-define-face eshell-ls-clutter (t :foreground "lightgrey" :slant italic)) +(mdw-define-face eshell-ls-executable (t :weight bold)) +(mdw-define-face eshell-ls-directory (t :foreground "cyan" :weight bold)) +(mdw-define-face eshell-ls-readonly (t nil)) +(mdw-define-face eshell-ls-symlink (t :foreground "cyan")) + +;;;-------------------------------------------------------------------------- ;;; Messages-file mode. (defun messages-mode-guts () @@ -2207,7 +2298,7 @@ strip numbers instead." (defun mdw-setup-smalltalk () (and mdw-auto-indent (local-set-key "\C-m" 'smalltalk-newline-and-indent)) - (make-variable-buffer-local 'mdw-auto-indent) + (make-local-variable 'mdw-auto-indent) (setq mdw-auto-indent nil) (local-set-key "\C-i" 'smalltalk-reindent)) @@ -2222,7 +2313,8 @@ strip numbers instead." "\\([eE]\\([-+]\\|\\)[0-9_]+\\|\\)") '(0 mdw-number-face)) (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" - '(0 mdw-punct-face))))) + '(0 mdw-punct-face)))) + (mdw-post-config-mode-hack)) ;; Lispy languages. @@ -2245,7 +2337,7 @@ strip numbers instead." (multiple-value-bind . ((&whole 4 &rest 1) 4 &body)))))) (defun mdw-common-lisp-indent () - (make-variable-buffer-local 'lisp-indent-function) + (make-local-variable 'lisp-indent-function) (setq lisp-indent-function 'common-lisp-indent-function)) (setq lisp-simple-loop-indentation 2 @@ -2262,7 +2354,9 @@ strip numbers instead." (setq font-lock-keywords (list (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" - '(0 mdw-punct-face))))) + '(0 mdw-punct-face)))) + + (mdw-post-config-mode-hack)) (defun comint-send-and-indent () (interactive)