X-Git-Url: https://git.distorted.org.uk/~mdw/profile/blobdiff_plain/b6f657376564f477ad08e0a3f4f063872ebd8b44..0f81a1314ae8d217805a705a74e425f63b513f9b:/el/dot-emacs.el diff --git a/el/dot-emacs.el b/el/dot-emacs.el index 3b4ec21..6ed0e04 100644 --- a/el/dot-emacs.el +++ b/el/dot-emacs.el @@ -721,7 +721,8 @@ sequences separated by `.'." (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)))))))) + ((= (car la) (car lb)) (setq la (cdr la) lb (cdr lb))) + (t (throw 'done nil))))))) (defun mdw-check-autorevert () "Sets global-auto-revert-ignore-buffer appropriately for this buffer. @@ -1374,34 +1375,78 @@ doesn't match any of the regular expressions in (((class color) (type x)) :background "#050") (t :underline t)) +(setq ediff-force-faces t) +(mdw-define-face ediff-current-diff-A + (((class color) (type x)) :background "darkred") + (((class color) (type tty)) :background "red") + (t :inverse-video t)) +(mdw-define-face ediff-fine-diff-A + (((class color) (type x)) :background "red3") + (((class color) (type tty)) :inverse-video t) + (t :inverse-video nil)) +(mdw-define-face ediff-even-diff-A + (((class color) (type x)) :background "#300")) +(mdw-define-face ediff-odd-diff-A + (((class color) (type x)) :background "#300")) +(mdw-define-face ediff-current-diff-B + (((class color) (type x)) :background "darkgreen") + (((class color) (type tty)) :background "magenta") + (t :inverse-video t)) +(mdw-define-face ediff-fine-diff-B + (((class color) (type x)) :background "green4") + (((class color) (type tty)) :inverse-video t) + (t :inverse-video nil)) +(mdw-define-face ediff-even-diff-B + (((class color) (type x)) :background "#020")) +(mdw-define-face ediff-odd-diff-B + (((class color) (type x)) :background "#020")) +(mdw-define-face ediff-current-diff-C + (((class color) (type x)) :background "darkblue") + (((class color) (type tty)) :background "blue") + (t :inverse-video t)) +(mdw-define-face ediff-fine-diff-C + (((class color) (type x)) :background "blue1") + (((class color) (type tty)) :inverse-video t) + (t :inverse-video nil)) +(mdw-define-face ediff-even-diff-C + (((class color) (type x)) :background "#004")) +(mdw-define-face ediff-odd-diff-C + (((class color) (type x)) :background "#004")) +(mdw-define-face ediff-current-diff-Ancestor + (((class color) (type x)) :background "#630") + (((class color) (type tty)) :background "blue") + (t :inverse-video t)) +(mdw-define-face ediff-even-diff-Ancestor + (((class color) (type x)) :background "#320")) +(mdw-define-face ediff-odd-diff-Ancestor + (((class color) (type x)) :background "#320")) + +(mdw-define-face magit-hash + (((class color) (type x)) :foreground "grey40") + (((class color) (type tty)) :foreground "blue")) +(mdw-define-face magit-diff-hunk-heading + (((class color) (type x)) :foreground "grey70" :background "grey25") + (((class color) (type tty)) :foreground "yellow")) +(mdw-define-face magit-diff-hunk-heading-highlight + (((class color) (type x)) :foreground "grey70" :background "grey35") + (((class color) (type tty)) :foreground "yellow" :background "blue")) +(mdw-define-face magit-diff-added + (((class color) (type x)) :foreground "#ddffdd" :background "#335533") + (((class color) (type tty)) :foreground "green")) +(mdw-define-face magit-diff-added-highlight + (((class color) (type x)) :foreground "#cceecc" :background "#336633") + (((class color) (type tty)) :foreground "green" :background "blue")) +(mdw-define-face magit-diff-removed + (((class color) (type x)) :foreground "#ffdddd" :background "#553333") + (((class color) (type tty)) :foreground "red")) +(mdw-define-face magit-diff-removed-highlight + (((class color) (type x)) :foreground "#eecccc" :background "#663333") + (((class color) (type tty)) :foreground "red" :background "blue")) + (mdw-define-face dylan-header-background (((class color) (type x)) :background "NavyBlue") (t :background "blue")) -(mdw-define-face magit-diff-add - (t :foreground "green")) -(mdw-define-face magit-diff-del - (t :foreground "red")) -(mdw-define-face magit-diff-file-header - (t :weight bold)) -(mdw-define-face magit-diff-hunk-header - (t :foreground "SkyBlue1")) -(mdw-define-face magit-item-highlight - (((type tty)) :background "blue") - (t :background "grey11")) -(mdw-define-face magit-log-head-label-remote - (((type tty)) :background "cyan" :foreground "green") - (t :background "grey11" :foreground "DarkSeaGreen2" :box t)) -(mdw-define-face magit-log-head-label-local - (((type tty)) :background "cyan" :foreground "yellow") - (t :background "grey11" :foreground "LightSkyBlue1" :box t)) -(mdw-define-face magit-log-head-label-tags - (((type tty)) :background "red" :foreground "yellow") - (t :background "LemonChiffon1" :foreground "goldenrod4" :box t)) -(mdw-define-face magit-log-graph - (((type tty)) :foreground "magenta") - (t :foreground "grey80")) - (mdw-define-face erc-input-face (t :foreground "red")) @@ -2528,6 +2573,49 @@ strip numbers instead." "yield"))) ;;;-------------------------------------------------------------------------- +;;; Lua programming style. + +(setq lua-indent-level 2) + +(defun mdw-fontify-lua () + + ;; Miscellaneous fiddling. + (mdw-standard-fill-prefix "\\([ \t]*#+[ \t]*\\)") + + ;; Now define fontification things. + (make-local-variable 'font-lock-keywords) + (let ((lua-keywords + (mdw-regexps "and" "break" "do" "else" "elseif" "end" + "false" "for" "function" "goto" "if" "in" "local" + "nil" "not" "or" "repeat" "return" "then" "true" + "until" "while"))) + (setq font-lock-keywords + (list + + ;; Set up the keywords defined above. + (list (concat "\\_<\\(" lua-keywords "\\)\\_>") + '(0 font-lock-keyword-face)) + + ;; At least numbers are simpler than C. + (list (concat "\\_<\\(" "0[xX]" + "\\(" "[0-9a-fA-F]+" + "\\(\\.[0-9a-fA-F]*\\)?" + "\\|" "\\.[0-9a-fA-F]+" + "\\)" + "\\([pP][-+]?[0-9]+\\)?" + "\\|" "\\(" "[0-9]+" + "\\(\\.[0-9]*\\)?" + "\\|" "\\.[0-9]+" + "\\)" + "\\([eE][-+]?[0-9]+\\)?" + "\\)") + '(0 mdw-number-face)) + + ;; And anything else is punctuation. + (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" + '(0 mdw-punct-face)))))) + +;;;-------------------------------------------------------------------------- ;;; Icon programming style. ;; Icon indentation style. @@ -3063,6 +3151,25 @@ strip numbers instead." (list "[$^_{}#&]" '(0 mdw-punct-face))))) +(eval-after-load 'font-latex + '(defun font-latex-jit-lock-force-redisplay (buf start end) + "Compatibility for Emacsen not offering `jit-lock-force-redisplay'." + ;; The following block is an expansion of `jit-lock-force-redisplay' + ;; and involved macros taken from CVS Emacs on 2007-04-28. + (with-current-buffer buf + (let ((modified (buffer-modified-p))) + (unwind-protect + (let ((buffer-undo-list t) + (inhibit-read-only t) + (inhibit-point-motion-hooks t) + (inhibit-modification-hooks t) + deactivate-mark + buffer-file-name + buffer-file-truename) + (put-text-property start end 'fontified t)) + (unless modified + (restore-buffer-modified-p nil))))))) + ;;;-------------------------------------------------------------------------- ;;; SGML hacking. @@ -3584,6 +3691,126 @@ This allows you to pass a list of arguments through `ansi-term'." (grep command-args)) ;;;-------------------------------------------------------------------------- +;;; Magit configuration. + +(setq magit-diff-refine-hunk 'all + magit-view-git-manual-method 'man + magit-log-margin '(nil age magit-log-margin-width t 18) + magit-wip-after-save-local-mode-lighter "" + magit-wip-after-apply-mode-lighter "" + magit-wip-before-change-mode-lighter "") +(eval-after-load "magit" + '(progn (global-magit-file-mode 1) + (magit-wip-after-save-mode 1) + (magit-wip-after-apply-mode 1) + (magit-wip-before-change-mode 1) + (add-to-list 'magit-no-confirm 'safe-with-wip) + (push '(:eval (if (or magit-wip-after-save-local-mode + magit-wip-after-apply-mode + magit-wip-before-change-mode) + (format " wip:%s%s%s" + (if magit-wip-after-apply-mode "A" "") + (if magit-wip-before-change-mode "C" "") + (if magit-wip-after-save-local-mode "S" "")))) + minor-mode-alist) + (dolist (popup '(magit-diff-popup + magit-diff-refresh-popup + magit-diff-mode-refresh-popup + magit-revision-mode-refresh-popup)) + (magit-define-popup-switch popup ?R "Reverse diff" "-R")))) + +(setq magit-repolist-columns + '(("Name" 16 magit-repolist-column-ident nil) + ("Version" 18 magit-repolist-column-version nil) + ("St" 2 magit-repolist-column-dirty nil) + ("LU" 3 mdw-repolist-column-unpushed-to-upstream nil) + ("Path" 32 magit-repolist-column-path nil))) + +(setq magit-repository-directories '(("~/etc/profile" . 0) + ("~/src/" . 1))) + +(defadvice magit-list-repos (around mdw-dirname () activate compile) + "Make sure the returned names are directory names. +Otherwise child processes get started in the wrong directory and +there is sadness." + (setq ad-return-value (mapcar #'file-name-as-directory ad-do-it))) + +(defun mdw-repolist-column-unpulled-from-upstream (_id) + "Insert number of upstream commits not in the current branch." + (let ((upstream (magit-get-upstream-branch (magit-get-current-branch) t))) + (and upstream + (let ((n (cadr (magit-rev-diff-count "HEAD" upstream)))) + (propertize (number-to-string n) 'face + (if (> n 0) 'bold 'shadow)))))) + +(defun mdw-repolist-column-unpushed-to-upstream (_id) + "Insert number of commits in the current branch but not its upstream." + (let ((upstream (magit-get-upstream-branch (magit-get-current-branch) t))) + (and upstream + (let ((n (car (magit-rev-diff-count "HEAD" upstream)))) + (propertize (number-to-string n) 'face + (if (> n 0) 'bold 'shadow)))))) + +;;;-------------------------------------------------------------------------- +;;; MPC configuration. + +(defun mdw-mpc-play-or-pause () + (interactive) + (require 'mpc) + (if (member (cdr (assq 'state (mpc-cmd-status))) '("play")) + (mpc-pause) + (mpc-play))) + +(setq mpc-browser-tags '(Artist|Composer|Performer Album|Playlist)) + +(defun mdw-mpc-now-playing () + (interactive) + (require 'mpc) + (save-excursion + (set-buffer (mpc-proc-cmd (mpc-proc-cmd-list '("status" "currentsong")))) + (mpc--status-callback)) + (let ((state (cdr (assq 'state mpc-status)))) + (cond ((member state '("stop")) + (message "mpd stopped.")) + ((member state '("play" "pause")) + (let* ((artist (cdr (assq 'Artist mpc-status))) + (album (cdr (assq 'Album mpc-status))) + (title (cdr (assq 'Title mpc-status))) + (file (cdr (assq 'file mpc-status))) + (duration-string (cdr (assq 'Time mpc-status))) + (time-string (cdr (assq 'time mpc-status))) + (time (and time-string + (parse-integer + (if (string-match ":" time-string) + (substring time-string + 0 (match-beginning 0)) + (time-string))))) + (duration (and duration-string + (parse-integer duration-string))) + (pos (and time duration + (format " [%d:%02d/%d:%02d]" + (/ time 60) (mod time 60) + (/ duration 60) (mod duration 60)))) + (fmt (cond ((and artist title) + (format "`%s' by %s%s" title artist + (if album (format ", from `%s'" album) + ""))) + (file + (format "`%s' (no tags)" file)) + (t + "(no idea what's playing!)")))) + (if (string= state "play") + (message "mpd playing %s%s" fmt (or pos "")) + (message "mpd paused in %s%s" fmt (or pos ""))))) + (t + (message "mpd in unknown state `%s'" state))))) + +(autoload 'mpc-pause "mpc") +(autoload 'mpc-next "mpc") +(autoload 'mpc-prev "mpc") + +;;;-------------------------------------------------------------------------- ;;; Inferior Emacs Lisp. (setq comint-prompt-read-only t)