X-Git-Url: https://git.distorted.org.uk/~mdw/profile/blobdiff_plain/a04d8f3d3b3446e9b40972950289917a6253409c..a2364c4bc3bae63d6d2382b162df337db8f7008e:/el/dot-emacs.el diff --git a/el/dot-emacs.el b/el/dot-emacs.el index f4cfadb..1704f7d 100644 --- a/el/dot-emacs.el +++ b/el/dot-emacs.el @@ -137,6 +137,33 @@ library." ((eq side 'left) 1) (t 2)))) +(defun mdw-horizontal-window-overhead () + "Computes the horizontal window overhead. +This is the number of columns used by fringes, scroll bars and other such +cruft." + (if (not window-system) + 1 + (let ((tot 0)) + (dolist (what '(scroll-bar fringe)) + (dolist (side '(left right)) + (incf tot (funcall (intern (concat (symbol-name what) "-columns")) + side)))) + tot))) + +(defun mdw-split-window-horizontally (&optional width) + "Split a window horizontally. +Without a numeric argument, split the window approximately in +half. With a numeric argument WIDTH, allocate WIDTH columns to +the left-hand window (if positive) or -WIDTH columns to the +right-hand window (if negative). Space for scroll bars and +fringes is not taken out of the allowance for WIDTH, unlike +\\[split-window-horizontally]." + (interactive "P") + (split-window-horizontally + (cond ((null width) nil) + ((>= width 0) (+ width (mdw-horizontal-window-overhead))) + ((< width 0) width)))) + (defun mdw-divvy-window (&optional width) "Split a wide window into appropriate widths." (interactive "P") @@ -146,16 +173,7 @@ library." 77) (t 78))) (let* ((win (selected-window)) - (sb-width (if (not window-system) - 1 - (let ((tot 0)) - (dolist (what '(scroll-bar fringe)) - (dolist (side '(left right)) - (incf tot - (funcall (intern (concat (symbol-name what) - "-columns")) - side)))) - tot))) + (sb-width (mdw-horizontal-window-overhead)) (c (/ (+ (window-width) sb-width) (+ width sb-width)))) (while (> c 1) @@ -164,6 +182,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) @@ -321,6 +358,9 @@ so that it can be used for convenient filtering." (setenv "REAL_MOVEMAIL" try)) (setq path (cdr path))))) +(eval-after-load "erc" + '(load "~/.ercrc.el")) + ;;;-------------------------------------------------------------------------- ;;; Utility functions. @@ -349,7 +389,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 +458,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 @@ -483,7 +537,8 @@ If NEW-SESSION-P, start a new session." (select-window window))))) (defvar mdw-good-url-browsers - '((w3m . mdw-w3m-browse-url) + '(browse-url-generic + (w3m . mdw-w3m-browse-url) browse-url-w3 browse-url-mozilla) "List of good browsers for mdw-good-url-browsers. @@ -565,7 +620,7 @@ It in turn is a list of things: (defvar mdw-hanging-indents (concat "\\(\\(" - "\\([*o]\\|-[-#]?\\|[0-9]+\\.\\|\\[[0-9]+\\]\\|([a-zA-Z])\\)" + "\\([*o+]\\|-[-#]?\\|[0-9]+\\.\\|\\[[0-9]+\\]\\|([a-zA-Z])\\)" "[ \t]+" "\\)?\\)") "*Standard regexp matching parts of a hanging indent. @@ -666,6 +721,15 @@ case." (defvar mdw-auto-indent t "Whether to indent automatically after a newline.") +(defun mdw-whitespace-mode (&optional arg) + "Turn on/off whitespace mode, but don't highlight trailing space." + (interactive "P") + (when (and (boundp 'whitespace-style) + (fboundp 'whitespace-mode)) + (let ((whitespace-style (remove 'trailing whitespace-style))) + (whitespace-mode arg)) + (setq show-trailing-whitespace whitespace-mode))) + (defun mdw-misc-mode-config () (and mdw-auto-indent (cond ((eq major-mode 'lisp-mode) @@ -676,19 +740,24 @@ 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) + (mdw-whitespace-mode 1) (and (fboundp 'gtags-mode) (gtags-mode)) - (outline-minor-mode t) - (hs-minor-mode t) + (if (fboundp 'hs-minor-mode) + (hs-minor-mode t) + (outline-minor-mode t)) (reveal-mode t) (trap (turn-on-font-lock))) +(defun mdw-post-config-mode-hack () + (mdw-whitespace-mode 1)) + (eval-after-load 'gtags '(progn (dolist (key '([mouse-2] [mouse-3])) @@ -728,13 +797,10 @@ doesn't match any of the regular expressions in (when (and frame-display (eq window-system 'x) (not (some (lambda (fr) - (message "checking frame %s" frame) (and (not (eq fr frame)) (string= (frame-parameter fr 'display) - frame-display) - (progn "frame %s still uses us" nil))) + frame-display))) (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) @@ -754,7 +820,8 @@ doesn't match any of the regular expressions in (mdw-define-face default (((type w32)) :family "courier new" :height 85) (((type x)) :family "6x13" :height 130) - (t :foreground "white" :background "black")) + (((type color)) :foreground "white" :background "black") + (t nil)) (mdw-define-face fixed-pitch (((type w32)) :family "courier new" :height 85) (((type x)) :family "6x13" :height 130) @@ -763,27 +830,34 @@ doesn't match any of the regular expressions in (mdw-define-face variable-pitch (((type x)) :family "sans" :height 100)) (mdw-define-face variable-pitch - (((type x)) :family "helvetica" :height 120))) + (((type x)) :family "helvetica" :height 90))) (mdw-define-face region - (((type tty)) :background "blue") (t :background "grey30")) + (((type tty) (class color)) :background "blue") + (((type tty) (class mono)) :inverse-video t) + (t :background "grey30")) (mdw-define-face minibuffer-prompt (t :weight bold)) (mdw-define-face mode-line - (t :foreground "blue" :background "yellow" - :box (:line-width 1 :style released-button))) + (((class color)) :foreground "blue" :background "yellow" + :box (:line-width 1 :style released-button)) + (t :inverse-video t)) (mdw-define-face mode-line-inactive - (t :foreground "yellow" :background "blue" - :box (:line-width 1 :style released-button))) + (((class color)) :foreground "yellow" :background "blue" + :box (:line-width 1 :style released-button)) + (t :inverse-video t)) (mdw-define-face scroll-bar (t :foreground "black" :background "lightgrey")) (mdw-define-face fringe (t :foreground "yellow")) (mdw-define-face show-paren-match - (t :background "darkgreen")) + (((class color)) :background "darkgreen") + (t :underline t)) (mdw-define-face show-paren-mismatch - (t :background "red")) + (((class color)) :background "red") + (t :inverse-video t)) (mdw-define-face highlight - (t :background "DarkSeaGreen4")) + (((class color)) :background "DarkSeaGreen4") + (t :inverse-video t)) (mdw-define-face holiday-face (t :background "red")) @@ -793,10 +867,18 @@ doesn't match any of the regular expressions in (mdw-define-face comint-highlight-prompt (t :weight bold)) (mdw-define-face comint-highlight-input - (t :slant italic)) + (t nil)) + +(mdw-define-face dired-directory + (t :foreground "cyan" :weight bold)) +(mdw-define-face dired-symlink + (t :foreground "cyan")) +(mdw-define-face dired-perm-write + (t nil)) (mdw-define-face trailing-whitespace - (t :background "red")) + (((class color)) :background "red") + (t :inverse-video t)) (mdw-define-face mdw-punct-face (((type tty)) :foreground "yellow") (t :foreground "burlywood2")) (mdw-define-face mdw-number-face @@ -816,14 +898,16 @@ doesn't match any of the regular expressions in (mdw-define-face font-lock-variable-name-face (t :slant italic)) (mdw-define-face font-lock-comment-delimiter-face - (default :slant italic) - (((type tty)) :foreground "green") (t :foreground "SeaGreen1")) + (((class mono)) :weight bold) + (((type tty) (class color)) :foreground "green") + (t :slant italic :foreground "SeaGreen1")) (mdw-define-face font-lock-comment-face - (default :slant italic) - (((type tty)) :foreground "green") (t :foreground "SeaGreen1")) + (((class mono)) :weight bold) + (((type tty) (class color)) :foreground "green") + (t :slant italic :foreground "SeaGreen1")) (mdw-define-face font-lock-string-face - (t :foreground "SkyBlue1")) - + (((class mono)) :weight bold) + (((class color)) :foreground "SkyBlue1")) (mdw-define-face message-separator (t :background "red" :foreground "white" :weight bold)) (mdw-define-face message-cited-text @@ -849,6 +933,8 @@ doesn't match any of the regular expressions in (((type tty)) :foreground "green") (t :foreground "SeaGreen1")) (mdw-define-face message-header-name (((type tty)) :foreground "green") (t :foreground "SeaGreen1")) +(mdw-define-face which-func + (t nil)) (mdw-define-face diff-index (t :weight bold)) @@ -864,7 +950,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")) @@ -898,6 +985,13 @@ doesn't match any of the regular expressions in (mdw-define-face whizzy-error-face (t :background "darkred")) +;; Ellipses used to indicate hidden text (and similar). +(mdw-define-face mdw-ellipsis-face + (((type tty)) :foreground "blue") (t :foreground "grey60")) +(let ((dot (make-glyph-code ?. 'mdw-ellipsis-face))) + (set-display-table-slot standard-display-table 4 + (vector dot dot dot))) + ;;;-------------------------------------------------------------------------- ;;; C programming configuration. @@ -942,13 +1036,14 @@ doesn't match any of the regular expressions in (arglist-cont-nonempty . mdw-c-lineup-arglist) (topmost-intro . mdw-c-indent-extern-mumble) (cpp-define-intro . 0) + (knr-argdecl . 0) (inextern-lang . [0]) (label . 0) (case-label . +) (access-label . -) (inclass . +) (inline-open . ++) - (statement-cont . 0) + (statement-cont . +) (statement-case-intro . +))) t)) @@ -1118,7 +1213,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. @@ -1170,7 +1267,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. @@ -1232,7 +1331,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. @@ -1299,7 +1400,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.") @@ -1335,7 +1438,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. @@ -1393,7 +1498,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. @@ -1440,7 +1547,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, @@ -1464,6 +1573,7 @@ strip numbers instead." ;; Miscellaneous fiddling. (mdw-standard-fill-prefix "\\([ \t]*#+[ \t]*\\)") + (setq indent-tabs-mode nil) ;; Now define fontification things. (make-local-variable 'font-lock-keywords) @@ -1482,7 +1592,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. @@ -1556,7 +1668,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. @@ -1637,8 +1751,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)) ;;;-------------------------------------------------------------------------- @@ -1664,7 +1779,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. @@ -1737,7 +1853,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. @@ -1787,7 +1905,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. @@ -1824,13 +1944,14 @@ 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. -(setq erlang-electric-commannds - '(erlang-electric-newline erlang-electric-semicolon)) +(setq erlang-electric-commands nil) (defun mdw-fontify-erlang () @@ -1858,7 +1979,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. @@ -1892,7 +2015,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. @@ -1958,7 +2083,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. @@ -1967,7 +2094,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" "\"" @@ -2009,6 +2136,43 @@ 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))) + " " + (let* ((pwd (eshell/pwd)) (npwd (length pwd)) + (home (expand-file-name "~")) (nhome (length home))) + (if (and (>= npwd nhome) + (or (= nhome npwd) + (= (elt pwd nhome) ?/)) + (string= (substring pwd 0 nhome) home)) + (concat "~" (substring pwd (length home))) + pwd)) + right))) +(setq eshell-prompt-function 'mdw-eshell-prompt) +(setq eshell-prompt-regexp "^\\[[^]>]+\\(\\]\\|>>?\\)") + +(defun eshell/e (file) (find-file file) nil) +(defun eshell/ee (file) (find-file-other-window file) nil) +(defun eshell/w3m (url) (w3m-goto-url url) nil) + +(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 () @@ -2063,7 +2227,6 @@ strip numbers instead." (modify-syntax-entry ?\n ">" messages-mode-syntax-table) (setq comment-start "# ") (setq comment-end "") - (turn-on-font-lock-if-enabled) (run-hooks 'messages-mode-hook)) (defun cpp-messages-mode () @@ -2090,7 +2253,6 @@ strip numbers instead." "\\)\\>\\|[0-9]+\\|$\\)\\)") '(1 font-lock-keyword-face))) messages-mode-keywords))) - (turn-on-font-lock-if-enabled) (run-hooks 'cpp-messages-mode-hook)) (add-hook 'messages-mode-hook 'mdw-misc-mode-config t) @@ -2141,7 +2303,6 @@ strip numbers instead." (modify-syntax-entry ?\n ">" mallow-driver-mode-syntax-table) (setq comment-start "%# ") (setq comment-end "") - (turn-on-font-lock-if-enabled) (run-hooks 'mallow-driver-mode-hook)) (add-hook 'mallow-driver-hook 'mdw-misc-mode-config t) @@ -2184,7 +2345,6 @@ strip numbers instead." '("\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" (0 mdw-punct-face)))) (setq font-lock-defaults '(nfast-debug-mode-keywords nil nil nil nil)) - (turn-on-font-lock-if-enabled) (run-hooks 'nfast-debug-mode-hook)) ;;;-------------------------------------------------------------------------- @@ -2195,7 +2355,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)) @@ -2210,7 +2370,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. @@ -2233,7 +2394,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 @@ -2250,7 +2411,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) @@ -2321,6 +2484,20 @@ strip numbers instead." (define-key term-raw-map [M-left] 'term-send-meta-left) (define-key term-raw-map [?\e ?\M-O ?D] 'term-send-meta-left))) +(defadvice term-exec (before program-args-list compile activate) + "If the PROGRAM argument is a list, interpret it as (PROGRAM . SWITCHES). +This allows you to pass a list of arguments through `ansi-term'." + (let ((program (ad-get-arg 2))) + (if (listp program) + (progn + (ad-set-arg 2 (car program)) + (ad-set-arg 4 (cdr program)))))) + +(defun ssh (host) + "Open a terminal containing an ssh session to the HOST." + (interactive "sHost: ") + (ansi-term (list "ssh" host) (format "ssh@%s" host))) + ;;;-------------------------------------------------------------------------- ;;; Inferior Emacs Lisp.