X-Git-Url: https://git.distorted.org.uk/~mdw/profile/blobdiff_plain/c996768f3e4bced81b26981a5813a516774cdb70..cf9e198f813b60cf274a8de717fba08cfc462867:/el/dot-emacs.el diff --git a/el/dot-emacs.el b/el/dot-emacs.el index a574f71..542a6cb 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. @@ -5255,6 +5304,11 @@ align the other subforms beneath it. Otherwise, indent them (progn (add-hook 'makefile-mode-hook 'mdw-misc-mode-config t)) +;; nroff/troff. + +(progn + (add-hook 'nroff-mode-hook 'mdw-misc-mode-config t)) + ;;;-------------------------------------------------------------------------- ;;; Text mode. @@ -5502,6 +5556,11 @@ rather than baking the list into the function." "Don't make windows dedicated. Seriously." (set-window-dedicated-p (or window (selected-window)) nil)) +(defadvice gud-find-expr + (around mdw-inhibit-read-only (&rest args) compile activate) + "Inhibit errors caused by my setting of `comint-prompt-read-only'." + (let ((inhibit-read-only t)) ad-do-it)) + ;;;-------------------------------------------------------------------------- ;;; SQL stuff.