Mercurial > hg > xemacs-beta
comparison lisp/window.el @ 223:2c611d1463a6 r20-4b10
Import from CVS: tag r20-4b10
author | cvs |
---|---|
date | Mon, 13 Aug 2007 10:10:54 +0200 |
parents | 41ff10fd062f |
children | c5d627a313b1 |
comparison
equal
deleted
inserted
replaced
222:aae4c8b01452 | 223:2c611d1463a6 |
---|---|
276 or if the window is the only window of its frame." | 276 or if the window is the only window of its frame." |
277 (interactive) | 277 (interactive) |
278 (or window (setq window (selected-window))) | 278 (or window (setq window (selected-window))) |
279 (save-excursion | 279 (save-excursion |
280 (set-buffer (window-buffer window)) | 280 (set-buffer (window-buffer window)) |
281 (let* ((w (selected-window)) ;save-window-excursion can't win | 281 (let ((n 0) |
282 (buffer-file-name buffer-file-name) | 282 (test-pos |
283 (p (point)) | 283 (- (point-max) |
284 (n 0) | 284 ;; If buffer ends with a newline, ignore it when counting |
285 (ignore-final-newline | 285 ;; height unless point is after it. |
286 ;; If buffer ends with a newline, ignore it when counting height | 286 (if (and (not (eobp)) |
287 ;; unless point is after it. | 287 (eq ?\n (char-after (1- (point-max))))) |
288 (and (not (eobp)) | 288 1 0))) |
289 (eq ?\n (char-after (1- (point-max)))))) | 289 (mini (frame-property (window-frame window) 'minibuffer)) |
290 (buffer-read-only nil) | 290 (edges (window-pixel-edges (selected-window)))) |
291 (modified (buffer-modified-p)) | |
292 (buffer (current-buffer)) | |
293 (mini (frame-property (window-frame window) 'minibuffer)) | |
294 (edges (window-pixel-edges (selected-window)))) | |
295 (if (and (< 1 (let ((frame (selected-frame))) | 291 (if (and (< 1 (let ((frame (selected-frame))) |
296 (select-frame (window-frame window)) | 292 (select-frame (window-frame window)) |
297 (unwind-protect | 293 (unwind-protect |
298 (count-windows) | 294 (count-windows) |
299 (select-frame frame)))) | 295 (select-frame frame)))) |
305 (not (eq mini 'only)) | 301 (not (eq mini 'only)) |
306 (or (not mini) (eq mini t) | 302 (or (not mini) (eq mini t) |
307 (< (nth 3 edges) | 303 (< (nth 3 edges) |
308 (nth 1 (window-pixel-edges mini))) | 304 (nth 1 (window-pixel-edges mini))) |
309 (> (nth 1 edges) | 305 (> (nth 1 edges) |
310 ;FSFmacs (frame-property (window-frame window) | |
311 ; 'menu-bar-lines params) | |
312 0))) | 306 0))) |
313 (unwind-protect | 307 (progn |
314 (let ((shrinkee (or window w))) | 308 (save-window-excursion |
315 (set-buffer (window-buffer shrinkee)) | 309 (goto-char (point-min)) |
316 (goto-char (point-min)) | 310 (while (and (window-live-p window) |
317 (while (pos-visible-in-window-p | 311 (pos-visible-in-window-p test-pos window)) |
318 (- (point-max) | 312 (shrink-window 1 nil window) |
319 (if ignore-final-newline 1 0)) | 313 (setq n (1+ n)))) |
320 shrinkee) | 314 (if (> n 0) |
321 ;; defeat file locking... don't try this at home, kids! | 315 (shrink-window (min (1- n) |
322 (setq buffer-file-name nil) | 316 (- (window-height window) |
323 (insert ?\n) (setq n (1+ n))) | 317 (1+ window-min-height))) |
324 (if (> n 0) | 318 nil |
325 (shrink-window (min (1- n) | 319 window))))))) |
326 (- (window-height shrinkee) | |
327 window-min-height)) | |
328 nil | |
329 shrinkee))) | |
330 (delete-region (point-min) (point)) | |
331 (set-buffer-modified-p modified) | |
332 (goto-char p) | |
333 ;; (select-window w) ; Emacs | |
334 ;; Make sure we unbind buffer-read-only | |
335 ;; with the proper current buffer. | |
336 (set-buffer buffer)))))) | |
337 | 320 |
338 (defun kill-buffer-and-window () | 321 (defun kill-buffer-and-window () |
339 "Kill the current buffer and delete the selected window." | 322 "Kill the current buffer and delete the selected window." |
340 (interactive) | 323 (interactive) |
341 (if (yes-or-no-p (format "Kill buffer `%s'? " (buffer-name))) | 324 (if (yes-or-no-p (format "Kill buffer `%s'? " (buffer-name))) |