diff lisp/textmodes/ispell.el @ 34579:432f2f4182cd

(ispell-overlay-window): Ensure that the new window is really the right size. Use vertical-motion rather than forward-line. (ispell-help): Don't use ispell-mode-line-window-height-fudge. (ispell-command-loop, ispell-show-choices): Use the variable ispell-choices-win-default-height, rather than the function. (ispell-choices-win-default-height): Function removed. (ispell-mode-line-window-height-fudge): Function removed.
author Miles Bader <miles@gnu.org>
date Fri, 15 Dec 2000 01:09:50 +0000
parents 243429d5e6d2
children a0dab8c91962
line wrap: on
line diff
--- a/lisp/textmodes/ispell.el	Fri Dec 15 00:59:56 2000 +0000
+++ b/lisp/textmodes/ispell.el	Fri Dec 15 01:09:50 2000 +0000
@@ -222,13 +222,6 @@
      (not (boundp 'epoch::version))
      (defalias 'ispell-check-version 'check-ispell-version))
 
-(if (fboundp 'mode-line-window-height-fudge)
-    (defalias 'ispell-mode-line-window-height-fudge
-      'mode-line-window-height-fudge)
-  (defun ispell-mode-line-window-height-fudge ()
-    "Return 1 if running on a `graphics capable' display, otherwise 0."
-    (if ispell-graphic-p 1 0)))
-
 ;;; **********************************************************************
 ;;; The following variables should be set according to personal preference
 ;;; and location of binaries:
@@ -1488,14 +1481,6 @@
   (setq ispell-pdict-modified-p nil))
 
 
-(defun ispell-choices-win-default-height ()
-  "Return the default height of the `*Choices*' window for this display.
-This is the value of of the variable `ispell-choices-win-default-height',
-plus a possible fudge factor to work around problems with mode-lines that
-obscure the last buffer line on graphics capable displays."
-  (+ ispell-choices-win-default-height (ispell-mode-line-window-height-fudge)))
-
-
 (defun ispell-command-loop (miss guess word start end)
   "Display possible corrections from list MISS.
 GUESS lists possibly valid affix construction of WORD.
@@ -1511,11 +1496,11 @@
 used.
 Global `ispell-quit' set to start location to continue spell session."
   (let ((count ?0)
-	(line (ispell-choices-win-default-height))
+	(line ispell-choices-win-default-height)
 	(max-lines (- (window-height) 4)) ; ensure 4 context lines.
 	(choices miss)
 	(window-min-height (min window-min-height
-				(ispell-choices-win-default-height)))
+				ispell-choices-win-default-height))
 	(command-characters '( ?  ?i ?a ?A ?r ?R ?? ?x ?X ?q ?l ?u ?m ))
 	(dedicated (window-dedicated-p (selected-window)))
 	(skipped 0)
@@ -1686,7 +1671,7 @@
 						      new-word)
 				    miss (lookup-words new-word)
 				    choices miss
-				    line (ispell-choices-win-default-height))
+				    line ispell-choices-win-default-height)
 			      (while (and choices ; adjust choices window.
 					  (< (if (> (+ 7 (current-column)
 						       (length (car choices))
@@ -1788,9 +1773,9 @@
 	    ;; without scrolling the spelled window when possible
 	    (let ((window-line (- line (window-height choices-window)))
 		  (visible (progn (vertical-motion -1) (point))))
-	      (if (< line (ispell-choices-win-default-height))
+	      (if (< line ispell-choices-win-default-height)
 		  (setq window-line (+ window-line
-				       (- (ispell-choices-win-default-height)
+				       (- ispell-choices-win-default-height
 					  line))))
 	      (move-to-window-line 0)
 	      (vertical-motion window-line)
@@ -1800,7 +1785,7 @@
 	      (select-window (previous-window)) ; *Choices* window
 	      (enlarge-window window-line)))
 	;; Overlay *Choices* window when it isn't showing
-	(ispell-overlay-window (max line (ispell-choices-win-default-height))))
+	(ispell-overlay-window (max line ispell-choices-win-default-height)))
       (switch-to-buffer ispell-choices-buffer)
       (goto-char (point-min)))))
 
@@ -1873,8 +1858,7 @@
       (save-window-excursion
 	(if ispell-help-in-bufferp
 	    (progn
-	      (ispell-overlay-window
-	       (+ 4 (ispell-mode-line-window-height-fudge)))
+	      (ispell-overlay-window 4)
 	      (switch-to-buffer (get-buffer-create "*Ispell Help*"))
 	      (insert (concat help-1 "\n" help-2 "\n" help-3))
 	      (sit-for 5)
@@ -2064,7 +2048,7 @@
 Ensure that the line above point is still visible but otherwise avoid
 scrolling the current window.  Leave the new window selected."
   (save-excursion
-    (let ((oldot (save-excursion (forward-line -1) (point)))
+    (let ((oldot (save-excursion (vertical-motion -1) (point)))
 	  (top (save-excursion (move-to-window-line height) (point))))
       ;; If line above old point (line starting at oldot) would be
       ;; hidden by new window, scroll it to just below new win
@@ -2077,6 +2061,22 @@
 	    (split-window nil height)
 	    (modify-frame-parameters frame '((unsplittable . t))))
 	(split-window nil height))
+      (let ((deficit
+	      ;; Number of lines the window is still too short.  We
+	      ;; ensure that there are at least (1- HEIGHT) lines
+	      ;; visible in the window.
+	      (- height
+		 (cond ((fboundp 'window-text-height)
+			(1+ (window-text-height)))
+		       (ispell-graphic-p
+			(1- (window-height)))
+		       (t
+			(window-height))))))
+	(when (> deficit 0)
+	  (enlarge-window deficit)
+	  (goto-char top)
+	  (vertical-motion deficit)
+	  (setq top (min (point) oldot))))
       (set-window-start (next-window) top))))