(and (library-exists-p file)
(autoload symbol file docstring interactivep type)))
+(defun mdw-kick-menu-bar (&optional frame)
+ "Regenerate FRAME's menu bar so it doesn't have empty menus."
+ (interactive)
+ (unless frame (setq frame (selected-frame)))
+ (let ((old (frame-parameter frame 'menu-bar-lines)))
+ (set-frame-parameter frame 'menu-bar-lines 0)
+ (set-frame-parameter frame 'menu-bar-lines old)))
+
;; Splitting windows.
(unless (fboundp 'scroll-bar-columns)
("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
org-export-latex-classes)))
+(setq org-export-docbook-xslt-proc-command "xsltproc --output %o %s %i"
+ org-export-docbook-xsl-fo-proc-command "fop %i.safe %o"
+ org-export-docbook-xslt-stylesheet
+ "/usr/share/xml/docbook/stylesheet/docbook-xsl/fo/docbook.xsl")
+
;;;--------------------------------------------------------------------------
;;; Mail and news hacking.
(setenv "REAL_MOVEMAIL" try))
(setq path (cdr path)))))
+(eval-after-load "erc"
+ '(load "~/.ercrc.el"))
+
;;;--------------------------------------------------------------------------
;;; Utility functions.
(mdw-define-face default
(((type w32)) :family "courier new" :height 85)
- (((type x)) :family "6x13" :height 130)
+ (((type x)) :family "6x13" :foundry "trad" :height 130)
(((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)
+ (((type x)) :family "6x13" :foundry "trad" :height 130)
(t :foreground "white" :background "black"))
(if (>= emacs-major-version 23)
(mdw-define-face variable-pitch
(((class color)) :background "red")
(t :inverse-video t))
(mdw-define-face highlight
- (((class color)) :background "DarkSeaGreen4")
+ (((type x) (class color)) :background "DarkSeaGreen4")
+ (((type tty) (class color)) :background "cyan")
(t :inverse-video t))
(mdw-define-face holiday-face
(mdw-define-face which-func
(t nil))
+(mdw-define-face diff-header
+ (t nil))
(mdw-define-face diff-index
(t :weight bold))
(mdw-define-face diff-file-header
(t :foreground "red"))
(mdw-define-face diff-context
(t nil))
+(mdw-define-face diff-refine-change
+ (((class color) (type x)) :background "RoyalBlue4")
+ (t :underline t))
(mdw-define-face erc-input-face
(t :foreground "red"))
(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 ((dollar (make-glyph-code ?$ 'mdw-ellipsis-face))
+ (backslash (make-glyph-code ?\ 'mdw-ellipsis-face))
+ (dot (make-glyph-code ?. 'mdw-ellipsis-face))
+ (bar (make-glyph-code ?| mdw-ellipsis-face)))
+ (set-display-table-slot standard-display-table 0 dollar)
+ (set-display-table-slot standard-display-table 1 backslash)
+ (set-display-table-slot standard-display-table 4
+ (vector dot dot dot))
+ (set-display-table-slot standard-display-table 5 bar))
+
;;;--------------------------------------------------------------------------
;;; C programming configuration.
(mdw-post-config-mode-hack))
;;;--------------------------------------------------------------------------
+;;; Javascript programming configuration.
+
+(defun mdw-javascript-style ()
+ (setq js-indent-level 2)
+ (setq js-expr-indent-offset 0))
+
+(defun mdw-fontify-javascript ()
+
+ ;; Other stuff.
+ (mdw-javascript-style)
+ (setq js-auto-indent-flag t)
+
+ ;; Now define things to be fontified.
+ (make-local-variable 'font-lock-keywords)
+ (let ((javascript-keywords
+ (mdw-regexps "abstract" "boolean" "break" "byte" "case" "catch"
+ "char" "class" "const" "continue" "debugger" "default"
+ "delete" "do" "double" "else" "enum" "export" "extends"
+ "final" "finally" "float" "for" "function" "goto" "if"
+ "implements" "import" "in" "instanceof" "int"
+ "interface" "let" "long" "native" "new" "package"
+ "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
+ (mdw-regexps "false" "null" "undefined" "Infinity" "NaN" "true"
+ "arguments" "this")))
+
+ (setq font-lock-keywords
+ (list
+
+ ;; Handle the keywords defined above.
+ (list (concat "\\<\\(" javascript-keywords "\\)\\>")
+ '(0 font-lock-keyword-face))
+
+ ;; Handle the predefined constants defined above.
+ (list (concat "\\<\\(" javascript-constants "\\)\\>")
+ '(0 font-lock-variable-name-face))
+
+ ;; Handle numbers too.
+ ;;
+ ;; The following isn't quite right, but it's close enough.
+ (list (concat "\\<\\("
+ "0\\([xX][0-9a-fA-F]+\\|[0-7]+\\)\\|"
+ "[0-9]+\\(\\.[0-9]*\\|\\)"
+ "\\([eE]\\([-+]\\|\\)[0-9]+\\|\\)\\)"
+ "[lLfFdD]?")
+ '(0 mdw-number-face))
+
+ ;; And anything else is punctuation.
+ (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
+ '(0 mdw-punct-face)))))
+
+ (mdw-post-config-mode-hack))
+
+;;;--------------------------------------------------------------------------
;;; C# programming configuration.
;; Make indentation nice.
;; Perl indentation style.
+(fset 'perl-mode 'cperl-mode)
(setq cperl-indent-level 2)
(setq cperl-continued-statement-offset 2)
(setq cperl-continued-brace-offset 0)
;; Now define fontification things.
(make-local-variable 'font-lock-keywords)
(let ((perl-keywords
- (mdw-regexps "and" "cmp" "continue" "do" "else" "elsif" "eq"
- "for" "foreach" "ge" "gt" "goto" "if"
+ (mdw-regexps "and" "break" "cmp" "continue" "do" "else" "elsif" "eq"
+ "for" "foreach" "ge" "given" "gt" "goto" "if"
"last" "le" "lt" "local" "my" "ne" "next" "or"
- "package" "redo" "require" "return" "sub"
- "undef" "unless" "until" "use" "while")))
+ "our" "package" "redo" "require" "return" "sub"
+ "undef" "unless" "until" "use" "when" "while")))
(setq font-lock-keywords
(list
"<" arm-assembler-mode-syntax-table)
(modify-syntax-entry ?\n ">" arm-assembler-mode-syntax-table)
(modify-syntax-entry ?_ "_" arm-assembler-mode-syntax-table)
+ (modify-syntax-entry ?' "\"'" arm-assembler-mode-syntax-table)
(make-local-variable 'comment-start)
(setq comment-start ";")
(run-hooks 'mdw-sgml-mode-hook))
;;;--------------------------------------------------------------------------
+;;; Configuration files.
+
+(defvar mdw-conf-quote-normal nil
+ "*Control syntax category of quote characters `\"' and `''.
+If this is `t', consider quote characters to be normal
+punctuation, as for `conf-quote-normal'. If this is `nil' then
+leave quote characters as quotes. If this is a list, then
+consider the quote characters in the list to be normal
+punctuation. If this is a single quote character, then consider
+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)
+ (every (lambda (v) (memq v '(?\" ?')))
+ (if (listp value) value (list value)))))
+(put 'mdw-conf-quote-normal 'safe-local-variable '
+ mdw-conf-quote-normal-acceptable-value-p)
+
+(defun mdw-fix-up-quote ()
+ "Apply the setting of `mdw-conf-quote-normal'."
+ (let ((flag mdw-conf-quote-normal))
+ (cond ((eq flag t)
+ (conf-quote-normal t))
+ ((not flag)
+ nil)
+ (t
+ (let ((table (copy-syntax-table (syntax-table))))
+ (mapc (lambda (ch) (modify-syntax-entry ch "." table))
+ (if (listp flag) flag (list flag)))
+ (set-syntax-table table)
+ (and font-lock-mode (font-lock-fontify-buffer)))))))
+(defun mdw-fix-up-quote-hack ()
+ "Unpleasant hack to call `mdw-fix-up-quote' at the right time.
+Annoyingly, `hack-local-variables' is done after `set-auto-mode'
+so we wouldn't see a local-variable setting of
+`mdw-conf-quote-normal' in `conf-mode-hook'. Instead, wire
+ourselves onto `hack-local-variables-hook' here, and check the
+setting once it's actually been made."
+ (add-hook 'hack-local-variables-hook 'mdw-fix-up-quote t t))
+(add-hook 'conf-mode-hook 'mdw-fix-up-quote-hack t)
+
+;;;--------------------------------------------------------------------------
;;; Shell scripts.
(defun mdw-setup-sh-script-mode ()
(setq sh-indentation 2)
(setq sh-basic-offset 2))
+(setq sh-shell-file "/bin/sh")
+
+;; Awful hacking to override the shell detection for particular scripts.
+(defmacro define-custom-shell-mode (name shell)
+ `(defun ,name ()
+ (interactive)
+ (set (make-local-variable 'sh-shell-file) ,shell)
+ (sh-mode)))
+(define-custom-shell-mode bash-mode "/bin/bash")
+(define-custom-shell-mode rc-mode "/usr/bin/rc")
+(put 'sh-shell-file 'permanent-local t)
+
+;; Hack the rc syntax table. Backquotes aren't paired in rc.
+(eval-after-load "sh-script"
+ '(or (assq 'rc sh-mode-syntax-table-input)
+ (let ((frag '(nil
+ ?# "<"
+ ?\n ">#"
+ ?\" "\"\""
+ ?\' "\"\'"
+ ?$ "'"
+ ?\` "."
+ ?! "_"
+ ?% "_"
+ ?. "_"
+ ?^ "_"
+ ?~ "_"
+ ?, "_"
+ ?= "."
+ ?< "."
+ ?> "."))
+ (assoc (assq 'rc sh-mode-syntax-table-input)))
+ (if assoc
+ (rplacd assoc frag)
+ (setq sh-mode-syntax-table-input
+ (cons (cons 'rc frag)
+ sh-mode-syntax-table-input))))))
+
;;;--------------------------------------------------------------------------
;;; Emacs shell mode.