X-Git-Url: https://git.distorted.org.uk/~mdw/profile/blobdiff_plain/ed7b46b929b31bc38b472caeeededbd676371afc..c4b18360a1a1f0f26ba6aca71eeb118ed60fd49e:/el/dot-emacs.el diff --git a/el/dot-emacs.el b/el/dot-emacs.el index 4d82b1a..e9390dd 100644 --- a/el/dot-emacs.el +++ b/el/dot-emacs.el @@ -164,6 +164,25 @@ library." (other-window 1)) (select-window win))) +;; Transient mark mode hacks. + +(defadvice exchange-point-and-mark + (around mdw-highlight (&optional arg) activate compile) + "Maybe don't actually exchange point and mark. +If `transient-mark-mode' is on and the mark is inactive, then +just activate it. A non-trivial prefix argument will force the +usual behaviour. A trivial prefix argument (i.e., just C-u) will +activate the mark and temporarily enable `transient-mark-mode' if +it's currently off." + (cond ((or mark-active + (and (not transient-mark-mode) (not arg)) + (and arg (or (not (consp arg)) + (not (= (car arg) 4))))) + ad-do-it) + (t + (or transient-mark-mode (setq transient-mark-mode 'only)) + (set-mark (mark t))))) + ;; Functions for sexp diary entries. (defun mdw-weekday (l) @@ -418,6 +437,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 @@ -675,12 +709,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) @@ -737,10 +773,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. @@ -803,7 +849,8 @@ doesn't match any of the regular expressions in (mdw-define-face comint-highlight-prompt (t :weight bold)) -(mdw-define-face comint-highlight-input) +(mdw-define-face comint-highlight-input + (t nil)) (mdw-define-face trailing-whitespace (((class color)) :background "red") @@ -877,7 +924,8 @@ doesn't match any of the regular expressions in (t :foreground "green")) (mdw-define-face diff-removed (t :foreground "red")) -(mdw-define-face diff-context) +(mdw-define-face diff-context + (t nil)) (mdw-define-face erc-input-face (t :foreground "red")) @@ -2012,7 +2060,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" "\"" @@ -2054,6 +2102,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 () @@ -2240,7 +2317,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)) @@ -2279,7 +2356,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