all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: don@donarmstrong.com (Emacs bug Tracking System)
To: martin rudalics <rudalics@gmx.at>
Subject: bug#1488: marked as done (23.0.60; dired-pop-to-buffer: use  fit-window-to-buffer)
Date: Thu, 11 Dec 2008 02:05:06 -0800	[thread overview]
Message-ID: <handler.1488.D1488.122898957620348.ackdone@emacsbugs.donarmstrong.com> (raw)
In-Reply-To: 87fxl446mr.fsf@escher.local.home

[-- Attachment #1: Type: text/plain, Size: 877 bytes --]


Your message dated Thu, 11 Dec 2008 10:56:56 +0100
with message-id <4940E3E8.8050501@gmx.at>
and subject line Re: bug#1488: 23.0.60; dired-pop-to-buffer: use fit-window-to-buffer
has caused the Emacs bug report #1488,
regarding 23.0.60; dired-pop-to-buffer: use fit-window-to-buffer
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact don@donarmstrong.com
immediately.)


-- 
1488: http://emacsbugs.donarmstrong.com/cgi-bin/bugreport.cgi?bug=1488
Emacs Bug Tracking System
Contact don@donarmstrong.com with problems

[-- Attachment #2: Type: message/rfc822, Size: 6922 bytes --]

[-- Attachment #2.1.1: Type: text/plain, Size: 1896 bytes --]

In GNU Emacs 23.0.60.21 (i686-pc-linux-gnu, GTK+ Version 2.12.9)
 of 2008-12-03 on escher

1. emacs -Q

2. Eval this:
   (define-minor-mode my-mm ()
     "My minor mode."
     :global t
     (if my-mm
         (setq default-header-line-format
   	       '(:eval (propertize "test" 'face '(:overline t))))
       (setq default-header-line-format nil)))

3. Enable my-mm.

4. C-x d foo (where `foo' is some directory with at least three files,
   e.g. emacs/lisp).

5. Mark three files in foo.

6. Type `C'
   ==> The popped up buffer *Marked Files* shows only two of the three
   marked files.

Likewise if the value of the 'face property in my-mm has a non-nil :box
attribute.  In contrast, if the value of the 'face property is
'(:underline t) (but not '(:underline t :overline t)), then in step 6
all three marked files are shown, though with no room to spare.

I guess the basic problem here is that Emacs calculates window-height in
integral equally sized line numbers.  But less fundamentally and more
directly, this problem arises, AFAICT, because dired-pop-to-buffer's
shrink-to-fit code fails to account for header lines.  To fix this it
would suffice to add this sexp above the last sexp in
dired-pop-to-buffer: 
    (with-current-buffer buf 
      (and header-line-format
           (progn (select-window w2) (enlarge-window 1))))

However, unless I'm missing something, fit-window-to-buffer does what
dired-pop-to-buffer's shrink-to-fit code does, and moreover also handles
header lines.  From perusing the change logs, I found several instances
where fit-window-to-buffer replaces library-specific code, and this
appears to be another candidate (dired-pop-to-buffer was introduced many
years before fit-window-to-buffer), in addition to fixing the above bug.
I'm not able to fix the display code to let window-height return
fractional line numbers, so I propose the following patch:


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2.1.2: dired-pop-to-buffer patch --]
[-- Type: text/x-patch, Size: 2250 bytes --]

*** emacs/lisp/dired.el.~1.414.~	2008-12-03 10:17:51.000000000 +0100
--- emacs/lisp/dired.el			2008-12-04 10:11:05.000000000 +0100
***************
*** 2678,2721 ****
  
  (defun dired-pop-to-buffer (buf)
    ;; Pop up buffer BUF.
    ;; If dired-shrink-to-fit is t, make its window fit its contents.
!   (if (not dired-shrink-to-fit)
!       (pop-to-buffer (get-buffer-create buf))
!     ;; let window shrink to fit:
!     (let ((window (selected-window))
! 	  target-lines w2)
!       (cond ;; if split-height-threshold is enabled, use the largest window
!             ((and (> (window-height (setq w2 (get-largest-window)))
! 		     split-height-threshold)
! 		  (window-full-width-p w2))
! 	     (setq window w2))
! 	    ;; if the least-recently-used window is big enough, use it
! 	    ((and (> (window-height (setq w2 (get-lru-window)))
! 		     (* 2 window-min-height))
! 		  (window-full-width-p w2))
! 	     (setq window w2)))
!       (save-excursion
! 	(set-buffer buf)
! 	(goto-char (point-max))
! 	(skip-chars-backward "\n\r\t ")
! 	(setq target-lines (count-lines (point-min) (point)))
! 	;; Don't forget to count the last line.
! 	(if (not (bolp))
! 	    (setq target-lines (1+ target-lines))))
!       (if (<= (window-height window) (* 2 window-min-height))
! 	  ;; At this point, every window on the frame is too small to split.
! 	  (setq w2 (display-buffer buf))
! 	(setq w2 (split-window window
! 		  (max window-min-height
! 		       (- (window-height window)
! 			  (1+ (max window-min-height target-lines)))))))
!       (set-window-buffer w2 buf)
!       (if (< (1- (window-height w2)) target-lines)
! 	  (progn
! 	    (select-window w2)
! 	    (enlarge-window (- target-lines (1- (window-height w2))))))
!       (set-window-start w2 1)
!       )))
  
  (defcustom dired-no-confirm nil
    "A list of symbols for commands Dired should not confirm.
--- 2678,2687 ----
  
  (defun dired-pop-to-buffer (buf)
    ;; Pop up buffer BUF.
+   (pop-to-buffer (get-buffer-create buf))
    ;; If dired-shrink-to-fit is t, make its window fit its contents.
!   (when dired-shrink-to-fit
!     (fit-window-to-buffer (get-buffer-window buf))))
  
  (defcustom dired-no-confirm nil
    "A list of symbols for commands Dired should not confirm.

[-- Attachment #2.1.3: Type: text/plain, Size: 452 bytes --]


(Note that if the frame is shrunk so that not all marked file names fit
in the *Marked Files* window, then without an oversized header line as
is my-mm, dired-pop-to-buffer fails with the error "Attempt to delete
minibuffer or sole ordinary window"; whereas with an oversized header
line, this error is raised only if not even one file name can be shown.
But I see this difference in behavior whether or not the above patch is
applied.)

Steve Berman

[-- Attachment #3: Type: message/rfc822, Size: 1817 bytes --]

From: martin rudalics <rudalics@gmx.at>
To: 1488-done@emacsbugs.donarmstrong.com
Subject: Re: bug#1488: 23.0.60; dired-pop-to-buffer: use fit-window-to-buffer
Date: Thu, 11 Dec 2008 10:56:56 +0100
Message-ID: <4940E3E8.8050501@gmx.at>

Fixed as

2008-12-11  Stephen Berman <Stephen.Berman@rub.de>

	* dired.el (dired-pop-to-buffer): Use fit-window-to-buffer when
	dired-shrink-to-fit is non-nil.  (Bug#1488)

Thanks, martin.



      parent reply	other threads:[~2008-12-11 10:05 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <4940E3E8.8050501@gmx.at>
2008-12-04  9:44 ` bug#1488: 23.0.60; dired-pop-to-buffer: use fit-window-to-buffer Stephen Berman
2008-12-04 17:23   ` Drew Adams
2008-12-04 17:58   ` martin rudalics
2008-12-04 18:33     ` martin rudalics
2008-12-05 14:25   ` martin rudalics
2008-12-05 17:27     ` Stephen Berman
2008-12-05 17:37       ` martin rudalics
2008-12-05 18:17         ` Stephen Berman
2008-12-06 19:25           ` martin rudalics
2008-12-09 20:15             ` Stephen Berman
2008-12-11 17:29               ` martin rudalics
2008-12-11 10:05   ` Emacs bug Tracking System [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=handler.1488.D1488.122898957620348.ackdone@emacsbugs.donarmstrong.com \
    --to=don@donarmstrong.com \
    --cc=rudalics@gmx.at \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.