X-Git-Url: https://git.distorted.org.uk/~mdw/profile/blobdiff_plain/e8bcfd6a55b4b5edfac39069eaf26139817673c1..5223adaa187d2231f03f59a44473b93192bc6968:/el/dot-emacs.el diff --git a/el/dot-emacs.el b/el/dot-emacs.el index 1fc5263..f0d41c3 100644 --- a/el/dot-emacs.el +++ b/el/dot-emacs.el @@ -706,10 +706,13 @@ With a prefix argument, clear the designated window." (interactive "P") (let ((window (selected-window))) (cond (cancel - (setq mdw-designated-window nil) - (unless (mdw-emacs-version-p 24) - (setq display-buffer-function nil)) - (message "Window designation cleared.")) + (cond (mdw-designated-window + (setq mdw-designated-window nil) + (unless (mdw-emacs-version-p 24) + (setq display-buffer-function nil)) + (message "Window designation cleared.")) + (t + (message "No designated window active.")))) ((window-dedicated-p window) (error "Window is dedicated to its buffer.")) (t @@ -766,9 +769,47 @@ Pretend they don't exist. They might be on other display devices." (ad-set-arg 2 nil)) (setq even-window-sizes nil - even-window-heights nil) - -(setq display-buffer-reuse-frames nil) + even-window-heights nil + display-buffer-reuse-frames nil) + +(defvar mdw-fallback-window-alist nil + "Alist mapping frames to fallback windows.") + +(defun mdw-cleanup-fallback-window-alist () + "Remove entries for dead frames and windows from the fallback alist." + (let ((prev nil) + (cursor mdw-fallback-window-alist)) + (while cursor + (let* ((assoc (car cursor)) + (tail (cdr cursor))) + (cond ((and (frame-live-p (car assoc)) + (window-live-p (cdr assoc))) + (setq prev cursor)) + ((null prev) + (setq mdw-fallback-window-alist tail)) + (t + (setcdr prev tail))) + (setq cursor tail))))) + +(defun mdw-set-fallback-window (cancel) + "Prefer the selected window for pop-up buffers in this frame. +With a prefix argument, clear the fallback window." + (interactive "P") + (let* ((frame (selected-frame)) (window (selected-window)) + (assoc (assq (selected-frame) mdw-fallback-window-alist))) + (cond (cancel + (cond (assoc + (setcdr assoc nil) + (message "Fallback window cleared.")) + (t + (message "No fallback window active in this frame.")))) + ((window-dedicated-p window) + (error "Window is dedicated to its buffer.")) + (t + (if assoc (setcdr assoc window) + (push (cons frame window) mdw-fallback-window-alist)) + (message "Fallback window set."))) + (mdw-cleanup-fallback-window-alist))) (defun mdw-last-window-in-frame-p (window) "Return whether WINDOW is the last in its frame." @@ -788,10 +829,18 @@ Begone, foul DWIMmerlaik! This is all totally subject to arbitrary change in the future, but the emphasis is on predictability rather than crazy DWIMmery." (let* ((selected (selected-window)) chosen + (fallback (assq (selected-frame) mdw-fallback-window-alist)) (full-height-p (window-full-height-p selected)) (full-width-p (window-full-width-p selected))) (cond + ((and fallback (window-live-p (cdr fallback))) + ;; There's a fallback window set for this frame. Use it. + + (setq chosen (cdr fallback) + selected nil) + (display-buffer-record-window 'window chosen buffer)) + ((and full-height-p full-width-p) ;; We're basically the only window in the frame. If we want to get ;; anywhere, we'll have to split the window. @@ -1360,7 +1409,8 @@ If NEW-SESSION-P, start a new session." '(define-key w3m-mode-map [?\e ?\r] 'w3m-view-this-url-new-session)) (defcustom mdw-good-url-browsers - '(browse-url-mozilla + '(browse-url-firefox + browse-url-mozilla browse-url-generic (w3m . mdw-w3m-browse-url) browse-url-w3) @@ -2166,6 +2216,10 @@ doesn't match any of the regular expressions in (mdw-define-face magit-hash (((min-colors 64)) :foreground "grey40") (((class color)) :foreground "blue")) +(mdw-define-face magit-popup-argument + (((min-colors 64)) :foreground "SeaGreen1") + (((class color)) :foreground "green") + (t :weight bold)) (mdw-define-face magit-diff-hunk-heading (((min-colors 64)) :foreground "grey70" :background "grey25") (((class color)) :foreground "yellow")) @@ -2201,8 +2255,16 @@ doesn't match any of the regular expressions in (((min-colors 64)) :background "NavyBlue") (((class color)) :background "blue")) +(mdw-define-face erc-my-nick-face + (t :foreground "yellow" :weight bold)) +(mdw-define-face erc-current-nick-face + (t :foreground "yellow" :weight bold)) (mdw-define-face erc-input-face - (t :foreground "red")) + (t :foreground "yellow")) +(mdw-define-face erc-action-face + ()) +(mdw-define-face erc-button + (t :foreground "cyan" :underline t :weight semi-bold)) (mdw-define-face woman-bold (t :weight bold)) @@ -2462,6 +2524,10 @@ set." (c-class-key . "class") (c-backslash-column . 72) (c-label-minimum-indentation . 0) + (c-indent-comments-syntactically-p t) + (c-indent-comment-alist (end-block . (column . nil)) + (cpp-end-block . (column . nil)) + (other . (column . nil))) (c-offsets-alist (substatement-open . (add 0 c-indent-one-line-block)) (defun-open . (add 0 c-indent-one-line-block)) (arglist-cont-nonempty . mdw-c-lineup-arglist) @@ -3398,6 +3464,7 @@ name, as a symbol." (modify-syntax-entry ?$ "\\" font-lock-syntax-table) (modify-syntax-entry ?: "." font-lock-syntax-table) (mdw-standard-fill-prefix "\\([ \t]*#+[ \t]*\\)") + (setq auto-fill-function #'do-auto-fill) ;; Now define fontification things. (make-local-variable 'font-lock-keywords)