FUEL: Better handling of popup windows (q goes back to original).
parent
2434463736
commit
4a3be107ae
|
@ -14,9 +14,10 @@
|
|||
|
||||
;;; Code:
|
||||
|
||||
(require 'fuel-base)
|
||||
(require 'fuel-eval)
|
||||
(require 'fuel-popup)
|
||||
(require 'fuel-font-lock)
|
||||
(require 'fuel-base)
|
||||
|
||||
|
||||
;;; Customization:
|
||||
|
@ -82,7 +83,8 @@
|
|||
|
||||
;;; Debug buffer:
|
||||
|
||||
(defvar fuel-debug--buffer nil)
|
||||
(fuel-popup--define fuel-debug--buffer
|
||||
"*fuel debug*" 'fuel-debug-mode)
|
||||
|
||||
(make-variable-buffer-local
|
||||
(defvar fuel-debug--last-ret nil))
|
||||
|
@ -90,13 +92,6 @@
|
|||
(make-variable-buffer-local
|
||||
(defvar fuel-debug--file nil))
|
||||
|
||||
(defun fuel-debug--buffer ()
|
||||
(or (and (buffer-live-p fuel-debug--buffer) fuel-debug--buffer)
|
||||
(with-current-buffer
|
||||
(setq fuel-debug--buffer (get-buffer-create "*fuel dbg*"))
|
||||
(fuel-debug-mode)
|
||||
(current-buffer))))
|
||||
|
||||
(defun fuel-debug--display-retort (ret &optional success-msg no-pop file)
|
||||
(let ((err (fuel-eval--retort-error ret))
|
||||
(inhibit-read-only t))
|
||||
|
@ -120,7 +115,7 @@
|
|||
(setq fuel-debug--file file)
|
||||
(goto-char (point-max))
|
||||
(font-lock-fontify-buffer)
|
||||
(when (and err (not no-pop)) (pop-to-buffer fuel-debug--buffer))
|
||||
(when (and err (not no-pop)) (fuel-popup--display))
|
||||
(not err))))
|
||||
|
||||
(defun fuel-debug--display-output (ret)
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
(require 'fuel-autodoc)
|
||||
(require 'fuel-completion)
|
||||
(require 'fuel-font-lock)
|
||||
(require 'fuel-popup)
|
||||
(require 'fuel-base)
|
||||
|
||||
|
||||
|
@ -81,10 +82,9 @@
|
|||
|
||||
;;; Fuel help buffer and internals:
|
||||
|
||||
(defun fuel-help--help-buffer ()
|
||||
(with-current-buffer (get-buffer-create "*fuel help*")
|
||||
(fuel-help-mode)
|
||||
(current-buffer)))
|
||||
(fuel-popup--define fuel-help--buffer
|
||||
"*fuel help*" 'fuel-help-mode)
|
||||
|
||||
|
||||
(defvar fuel-help--prompt-history nil)
|
||||
|
||||
|
@ -111,7 +111,7 @@
|
|||
(fuel-help--insert-contents def out))))
|
||||
|
||||
(defun fuel-help--insert-contents (def str &optional nopush)
|
||||
(let ((hb (fuel-help--help-buffer))
|
||||
(let ((hb (fuel-help--buffer))
|
||||
(inhibit-read-only t)
|
||||
(font-lock-verbose nil))
|
||||
(set-buffer hb)
|
||||
|
@ -124,7 +124,7 @@
|
|||
(kill-region (point-min) (point))
|
||||
(fuel-help--history-push (cons def (buffer-string)))))
|
||||
(set-buffer-modified-p nil)
|
||||
(pop-to-buffer hb)
|
||||
(fuel-popup--display)
|
||||
(goto-char (point-min))
|
||||
(message "%s" def)))
|
||||
|
||||
|
@ -211,7 +211,6 @@ buffer."
|
|||
(let ((map (make-sparse-keymap)))
|
||||
(suppress-keymap map)
|
||||
(define-key map "\C-m" 'fuel-help)
|
||||
(define-key map "q" 'bury-buffer)
|
||||
(define-key map "b" 'fuel-help-previous)
|
||||
(define-key map "f" 'fuel-help-next)
|
||||
(define-key map "l" 'fuel-help-previous)
|
||||
|
@ -245,6 +244,7 @@ buffer."
|
|||
(fuel-autodoc-mode)
|
||||
|
||||
(run-mode-hooks 'fuel-help-mode-hook)
|
||||
|
||||
(setq buffer-read-only t))
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
;;; fuel-popup.el -- popup windows
|
||||
|
||||
;; Copyright (C) 2008 Jose Antonio Ortega Ruiz
|
||||
;; See http://factorcode.org/license.txt for BSD license.
|
||||
|
||||
;; Author: Jose Antonio Ortega Ruiz <jao@gnu.org>
|
||||
;; Keywords: languages, fuel, factor
|
||||
;; Start date: Sun Dec 21, 2008 14:37
|
||||
|
||||
;;; Comentary:
|
||||
|
||||
;; A minor mode to pop up windows and restore configurations
|
||||
;; afterwards.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(make-variable-buffer-local
|
||||
(defvar fuel-popup--created-window nil))
|
||||
|
||||
(make-variable-buffer-local
|
||||
(defvar fuel-popup--selected-window nil))
|
||||
|
||||
(defun fuel-popup--display ()
|
||||
(let ((selected-window (selected-window))
|
||||
(buffer (current-buffer)))
|
||||
(unless (eq selected-window (get-buffer-window buffer))
|
||||
(let ((windows))
|
||||
(walk-windows (lambda (w) (push w windows)) nil t)
|
||||
(prog1 (pop-to-buffer buffer)
|
||||
(set (make-local-variable 'fuel-popup--created-window)
|
||||
(unless (memq (selected-window) windows) (selected-window)))
|
||||
(set (make-local-variable 'fuel-popup--selected-window)
|
||||
selected-window))))))
|
||||
|
||||
(defun fuel-popup--quit ()
|
||||
(interactive)
|
||||
(let ((selected fuel-popup--selected-window)
|
||||
(created fuel-popup--created-window))
|
||||
(bury-buffer)
|
||||
(when (eq created (selected-window)) (delete-window created))
|
||||
(when (window-live-p selected) (select-window selected))))
|
||||
|
||||
(define-minor-mode fuel-popup-mode
|
||||
"Mode for displaying read only stuff"
|
||||
nil nil
|
||||
'(("q" . fuel-popup--quit)))
|
||||
|
||||
(defmacro fuel-popup--define (fun name mode)
|
||||
`(defun ,fun ()
|
||||
(or (get-buffer ,name)
|
||||
(with-current-buffer (get-buffer-create ,name)
|
||||
(funcall ,mode)
|
||||
(fuel-popup-mode)
|
||||
(current-buffer)))))
|
||||
|
||||
(put 'fuel-popup--define 'lisp-indent-function 1)
|
||||
|
||||
(provide 'fuel-popup)
|
||||
;;; fuel-popup.el ends here
|
|
@ -45,20 +45,14 @@
|
|||
|
||||
;;; The xref buffer:
|
||||
|
||||
(defvar fuel-xref--buffer-name "*fuel xref*")
|
||||
|
||||
(defun fuel-xref--get-buffer ()
|
||||
(let ((buffer (get-buffer fuel-xref--buffer-name)))
|
||||
(or (and (buffer-live-p buffer) buffer)
|
||||
(prog1
|
||||
(set-buffer (get-buffer-create fuel-xref--buffer-name))
|
||||
(fuel-xref-mode)))))
|
||||
(fuel-popup--define fuel-xref--buffer
|
||||
"*fuel xref*" 'fuel-xref-mode)
|
||||
|
||||
(defvar fuel-xref--help-string "(Press RET or click to follow crossrefs)")
|
||||
|
||||
(defun fuel-xref--fill-buffer (title refs)
|
||||
(let ((inhibit-read-only t))
|
||||
(with-current-buffer (fuel-xref--get-buffer)
|
||||
(with-current-buffer (fuel-xref--buffer)
|
||||
(erase-buffer)
|
||||
(insert title "\n\n")
|
||||
(dolist (ref refs)
|
||||
|
@ -74,7 +68,8 @@
|
|||
(newline)))
|
||||
(when refs
|
||||
(insert "\n\n" fuel-xref--help-string "\n"))
|
||||
(goto-char (point-min)))))
|
||||
(goto-char (point-min))
|
||||
(current-buffer))))
|
||||
|
||||
(defun fuel-xref--show-callers (word)
|
||||
(let* ((cmd `(:fuel* (((:quote ,word) fuel-callers-xref))))
|
||||
|
@ -82,8 +77,8 @@
|
|||
(title (format (if res "Callers of '%s':"
|
||||
"No callers found for '%s'")
|
||||
word)))
|
||||
(fuel-xref--fill-buffer title res)
|
||||
(pop-to-buffer (fuel-xref--get-buffer))))
|
||||
(set-buffer (fuel-xref--fill-buffer title res))
|
||||
(fuel-popup--display)))
|
||||
|
||||
(defun fuel-xref--show-callees (word)
|
||||
(let* ((cmd `(:fuel* (((:quote ,word) fuel-callees-xref))))
|
||||
|
@ -91,8 +86,8 @@
|
|||
(title (format (if res "Words called by '%s':"
|
||||
"No callees found for '%s'")
|
||||
word)))
|
||||
(fuel-xref--fill-buffer title res)
|
||||
(pop-to-buffer (fuel-xref--get-buffer))))
|
||||
(set-buffer (fuel-xref--fill-buffer title res))
|
||||
(fuel-popup--display)))
|
||||
|
||||
|
||||
;;; Xref mode:
|
||||
|
|
Loading…
Reference in New Issue