From d31052d9db911302cd84d234e80a95d8bbf6f057 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Sun, 17 Jun 2018 02:07:14 +0200 Subject: [PATCH] Reformat popup library: move polyfills down --- modules/ui/popup/autoload/popup.el | 190 ++++++++++++++--------------- 1 file changed, 95 insertions(+), 95 deletions(-) diff --git a/modules/ui/popup/autoload/popup.el b/modules/ui/popup/autoload/popup.el index 1da49a664..ab988a67a 100644 --- a/modules/ui/popup/autoload/popup.el +++ b/modules/ui/popup/autoload/popup.el @@ -478,101 +478,6 @@ prevent the popup(s) from messing up the UI (or vice versa)." prevent the popup(s) from messing up the UI (or vice versa)." (save-popups! (apply orig-fn args))) - -;; -;; Popup actions -;; - -(unless EMACS26+ - (defvar window-sides-reversed nil) - - (defun window--sides-reverse-on-frame-p (frame) - "Return non-nil when side windows should appear reversed on FRAME. -This uses some heuristics to guess the user's intentions when the -selected window of FRAME is a side window ." - (cond - ;; Reverse when `window-sides-reversed' is t. Do not reverse when - ;; `window-sides-reversed' is nil. - ((memq window-sides-reversed '(nil t)) - window-sides-reversed) - ;; Reverse when FRAME's selected window shows a right-to-left buffer. - ((let ((window (frame-selected-window frame))) - (when (and (not (window-parameter window 'window-side)) - (or (not (window-minibuffer-p window)) - (setq window (minibuffer-selected-window)))) - (with-current-buffer (window-buffer window) - (eq bidi-paragraph-direction 'right-to-left))))) - ;; Reverse when FRAME's `window-sides-main-selected-window' parameter - ;; specifies a live window showing a right-to-left buffer. - ((let ((window (frame-parameter - frame 'window-sides-main-selected-window))) - (when (window-live-p window) - (with-current-buffer (window-buffer window) - (eq bidi-paragraph-direction 'right-to-left))))) - ;; Reverse when all windows in FRAME's main window show right-to-left - ;; buffers. - (t - (catch 'found - (walk-window-subtree - (lambda (window) - (with-current-buffer (window-buffer window) - (when (eq bidi-paragraph-direction 'left-to-right) - (throw 'found nil)))) - (window-main-window frame)) - t)))) - - (defun window--make-major-side-window (buffer side slot &optional alist) - "Display BUFFER in a new major side window on the selected frame. -SIDE must be one of `left', `top', `right' or `bottom'. SLOT -specifies the slot to use. ALIST is an association list of -symbols and values as passed to `display-buffer-in-side-window'. -Return the new window, nil if its creation failed. - -This is an auxiliary function of `display-buffer-in-side-window' -and may be called only if no window on SIDE exists yet." - (let* ((left-or-right (memq side '(left right))) - (next-to (window--make-major-side-window-next-to side)) - (on-side (cond - ((eq side 'top) 'above) - ((eq side 'bottom) 'below) - (t side))) - (window--sides-inhibit-check t) - ;; The following two bindings will tell `split-window' to take - ;; the space for the new window from the selected frame's main - ;; window and not make a new parent window unless needed. - (window-combination-resize 'side) - (window-combination-limit nil) - (window (ignore-errors (split-window next-to nil on-side)))) - (when window - ;; Initialize `window-side' parameter of new window to SIDE and - ;; make that parameter persistent. - (set-window-parameter window 'window-side side) - (map-put window-persistent-parameters 'window-side 'writable) - ;; Install `window-slot' parameter of new window and make that - ;; parameter persistent. - (set-window-parameter window 'window-slot slot) - (map-put window-persistent-parameters 'window-slot 'writable) - ;; Auto-adjust height/width of new window unless a size has been - ;; explicitly requested. - (unless (if left-or-right - (cdr (assq 'window-width alist)) - (cdr (assq 'window-height alist))) - (setq alist - (cons - (cons - (if left-or-right 'window-width 'window-height) - (/ (window-total-size (frame-root-window) left-or-right) - ;; By default use a fourth of the size of the frame's - ;; root window. - 4)) - alist))) - (with-current-buffer buffer - (setq window--sides-shown t)) - ;; Install BUFFER in new window and return WINDOW. - (window--display-buffer buffer window 'window alist 'side)))) - - (advice-add #'window--sides-check :override #'ignore)) - ;;;###autoload (defun +popup-display-buffer-stacked-side-window (buffer alist) "A `display-buffer' action that serves as an alternative to @@ -701,3 +606,98 @@ Accepts the same arguments as `display-buffer-in-side-window'. You must set (setq window--sides-shown t)) (window--display-buffer buffer best-window 'reuse alist dedicated))))))))) + + +;; +;; Emacs backwards compatibility +;; + +(unless EMACS26+ + (defvar window-sides-reversed nil) + + (defun window--sides-reverse-on-frame-p (frame) + "Return non-nil when side windows should appear reversed on FRAME. +This uses some heuristics to guess the user's intentions when the +selected window of FRAME is a side window ." + (cond + ;; Reverse when `window-sides-reversed' is t. Do not reverse when + ;; `window-sides-reversed' is nil. + ((memq window-sides-reversed '(nil t)) + window-sides-reversed) + ;; Reverse when FRAME's selected window shows a right-to-left buffer. + ((let ((window (frame-selected-window frame))) + (when (and (not (window-parameter window 'window-side)) + (or (not (window-minibuffer-p window)) + (setq window (minibuffer-selected-window)))) + (with-current-buffer (window-buffer window) + (eq bidi-paragraph-direction 'right-to-left))))) + ;; Reverse when FRAME's `window-sides-main-selected-window' parameter + ;; specifies a live window showing a right-to-left buffer. + ((let ((window (frame-parameter + frame 'window-sides-main-selected-window))) + (when (window-live-p window) + (with-current-buffer (window-buffer window) + (eq bidi-paragraph-direction 'right-to-left))))) + ;; Reverse when all windows in FRAME's main window show right-to-left + ;; buffers. + (t + (catch 'found + (walk-window-subtree + (lambda (window) + (with-current-buffer (window-buffer window) + (when (eq bidi-paragraph-direction 'left-to-right) + (throw 'found nil)))) + (window-main-window frame)) + t)))) + + (defun window--make-major-side-window (buffer side slot &optional alist) + "Display BUFFER in a new major side window on the selected frame. +SIDE must be one of `left', `top', `right' or `bottom'. SLOT +specifies the slot to use. ALIST is an association list of +symbols and values as passed to `display-buffer-in-side-window'. +Return the new window, nil if its creation failed. + +This is an auxiliary function of `display-buffer-in-side-window' +and may be called only if no window on SIDE exists yet." + (let* ((left-or-right (memq side '(left right))) + (next-to (window--make-major-side-window-next-to side)) + (on-side (cond + ((eq side 'top) 'above) + ((eq side 'bottom) 'below) + (t side))) + (window--sides-inhibit-check t) + ;; The following two bindings will tell `split-window' to take + ;; the space for the new window from the selected frame's main + ;; window and not make a new parent window unless needed. + (window-combination-resize 'side) + (window-combination-limit nil) + (window (ignore-errors (split-window next-to nil on-side)))) + (when window + ;; Initialize `window-side' parameter of new window to SIDE and + ;; make that parameter persistent. + (set-window-parameter window 'window-side side) + (map-put window-persistent-parameters 'window-side 'writable) + ;; Install `window-slot' parameter of new window and make that + ;; parameter persistent. + (set-window-parameter window 'window-slot slot) + (map-put window-persistent-parameters 'window-slot 'writable) + ;; Auto-adjust height/width of new window unless a size has been + ;; explicitly requested. + (unless (if left-or-right + (cdr (assq 'window-width alist)) + (cdr (assq 'window-height alist))) + (setq alist + (cons + (cons + (if left-or-right 'window-width 'window-height) + (/ (window-total-size (frame-root-window) left-or-right) + ;; By default use a fourth of the size of the frame's + ;; root window. + 4)) + alist))) + (with-current-buffer buffer + (setq window--sides-shown t)) + ;; Install BUFFER in new window and return WINDOW. + (window--display-buffer buffer window 'window alist 'side)))) + + (advice-add #'window--sides-check :override #'ignore))