Subject: 23.3; save-some-buffers ignores buffer names

From: Uday S Reddy <[email-masked]>
Date: Thu, 31 Mar 2011 22:33:19 +0100

The save-some-buffers command queries the user as to which buffers
should be saved.  However, if the buffer has a file-name, it uses the
file-name in the dialogue instead of the buffer name.  If the buffer
name happens to differ from the buffer's file-name, this is confusing to
the users.  (It happens quite frequently in VM, which uses obscure
file-names for the caches of POP/IMAP folders, but the buffer names are
recognizable.)

The attached patch (on Emacs-23 head) modifies the dialogue so that
file-names are used in the dialogue only when they coincide with the
buffer names.  Otherwise, buffer names are used preferentially.

Cheers,
Uday

In GNU Emacs 23.3.1 (i386-mingw-nt5.1.2600)
 of 2011-03-10 on 3249CTO
Windowing system distributor `Microsoft Corp.', version 5.1.2600
configured using `configure --with-gcc (4.5) --no-opt --cflags -Ic:/imagesupport/include'

Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: ENU
  value of $XMODIFIERS: nil
  locale-coding-system: cp1252
  default enable-multibyte-characters: t

Major mode: VM Presentation

Minor modes in effect:
  diff-auto-refine-mode: t
  savehist-mode: t
  which-function-mode: t
  tooltip-mode: t
  mouse-wheel-mode: t
  use-hard-newlines: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  blink-cursor-mode: t
  auto-encryption-mode: t
  line-number-mode: t
  visual-line-mode: t
  transient-mark-mode: t

Recent input:
y C-x C-f C-g C-x o C-x C-f C-g C-x o C-x C-f <backspace> 
<backspace> <backspace> <backspace> <backspace> <backspace> 
<backspace> <backspace> - d e v / b z r . l o SPC <return> 
<next> <next> <next> <next> <prior> <next> <next> <next> 
<next> <next> <next> <next> <next> C-s f i l e s . 
e l C-a C-s 2 3 . 3 C-s C-s C-r C-r C-s C-s C-s C-r 
C-r C-r C-r C-r C-r C-r C-r C-r C-a <down-mouse-1> 
<mouse-movement> <mouse-1> C-x C-f <backspace> <backspace> 
<backspace> <backspace> <backspace> N E SPC W SPC <backspace> 
<backspace> <backspace> e t c / N E SPC <return> C-l 
<next> <next> <prior> <next> <next> <next> <next> <next> 
<next> <next> <next> <next> <next> <next> <next> <next> 
<next> <next> <next> <next> <next> <next> C-x k <return> 
C-x o C-x b f i l e s . SPC C-g C-x o C-x C-r C-x , 
C-x o C-x b f i l e s . SPC <return> C-x o M-x e d 
i f f - b u f <return> <return> <return> n n n <switch-frame> 
<down-mouse-1> <mouse-1> C-n C-b C-b C-b C-b C-b C-b 
C-b C-b C-b C-b C-b C-b C-b C-b C-b C-b C-b C-b C-b 
C-b C-b C-x o C-f C-f C-f C-f C-f C-f C-f C-f C-n C-f 
C-f C-f C-b C-b C-b C-b C-b C-a C-SPC C-n C-n C-n C-n 
C-n C-n C-n M-x u n t a b i f y <return> <switch-frame> 
<down-mouse-1> <mouse-1> q <switch-frame> <switch-frame> 
y C-x o M-x e d i f f - b u f <return> <return> <return> 
n n n b q <switch-frame> <switch-frame> y C-x o C-x 
C-s <escape> C-a <switch-frame> <down-mouse-1> <mouse-movement> 
<mouse-1> M-x r e p o r t - e m a c s - b u SPC <r
eturn>

Recent messages:
Processing difference regions ... done
Refining difference region 1 ...
Refining difference region 2 ...
Refining difference region 3 ...
Saving old diff region #3 of buffer A.  To recover, type `ra' [2 times]
Only white-space differences in region 3 
Quit this Ediff session? (y or n) 
Saving file d:/gnu/emacs-23-dev/lisp/files.el...
Wrote d:/gnu/emacs-23-dev/lisp/files.el
Mark set

Load-path shadows:
d:/Home/udr/share/emacs/sml-mode hides d:/gnu/emacs-23.3/../site-lisp/sml-mode
d:/Home/udr/share/emacs/savehist-20+ hides d:/gnu/emacs-23.3/../site-lisp/savehist-20+
d:/gnu/emacs-23.3/../site-lisp/longlines hides d:/gnu/emacs-23.3/lisp/longlines
d:/gnu/vm/trunk/lisp/cus-load hides d:/gnu/emacs-23.3/lisp/cus-load
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org hides d:/gnu/emacs-23.3/lisp/org/org
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-xoxo hides d:/gnu/emacs-23.3/lisp/org/org-xoxo
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-wl hides d:/gnu/emacs-23.3/lisp/org/org-wl
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-w3m hides d:/gnu/emacs-23.3/lisp/org/org-w3m
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-vm hides d:/gnu/emacs-23.3/lisp/org/org-vm
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-timer hides d:/gnu/emacs-23.3/lisp/org/org-timer
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-table hides d:/gnu/emacs-23.3/lisp/org/org-table
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-src hides d:/gnu/emacs-23.3/lisp/org/org-src
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-rmail hides d:/gnu/emacs-23.3/lisp/org/org-rmail
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-remember hides d:/gnu/emacs-23.3/lisp/org/org-remember
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-publish hides d:/gnu/emacs-23.3/lisp/org/org-publish
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-protocol hides d:/gnu/emacs-23.3/lisp/org/org-protocol
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-plot hides d:/gnu/emacs-23.3/lisp/org/org-plot
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-mouse hides d:/gnu/emacs-23.3/lisp/org/org-mouse
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-mobile hides d:/gnu/emacs-23.3/lisp/org/org-mobile
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-mhe hides d:/gnu/emacs-23.3/lisp/org/org-mhe
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-mew hides d:/gnu/emacs-23.3/lisp/org/org-mew
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-macs hides d:/gnu/emacs-23.3/lisp/org/org-macs
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-mac-message hides d:/gnu/emacs-23.3/lisp/org/org-mac-message
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-list hides d:/gnu/emacs-23.3/lisp/org/org-list
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-latex hides d:/gnu/emacs-23.3/lisp/org/org-latex
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-jsinfo hides d:/gnu/emacs-23.3/lisp/org/org-jsinfo
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-irc hides d:/gnu/emacs-23.3/lisp/org/org-irc
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-install hides d:/gnu/emacs-23.3/lisp/org/org-install
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-inlinetask hides d:/gnu/emacs-23.3/lisp/org/org-inlinetask
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-info hides d:/gnu/emacs-23.3/lisp/org/org-info
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-indent hides d:/gnu/emacs-23.3/lisp/org/org-indent
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-id hides d:/gnu/emacs-23.3/lisp/org/org-id
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-icalendar hides d:/gnu/emacs-23.3/lisp/org/org-icalendar
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-html hides d:/gnu/emacs-23.3/lisp/org/org-html
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-habit hides d:/gnu/emacs-23.3/lisp/org/org-habit
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-gnus hides d:/gnu/emacs-23.3/lisp/org/org-gnus
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-freemind hides d:/gnu/emacs-23.3/lisp/org/org-freemind
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-footnote hides d:/gnu/emacs-23.3/lisp/org/org-footnote
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-feed hides d:/gnu/emacs-23.3/lisp/org/org-feed
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-faces hides d:/gnu/emacs-23.3/lisp/org/org-faces
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-exp hides d:/gnu/emacs-23.3/lisp/org/org-exp
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-exp-blocks hides d:/gnu/emacs-23.3/lisp/org/org-exp-blocks
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-docbook hides d:/gnu/emacs-23.3/lisp/org/org-docbook
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-datetree hides d:/gnu/emacs-23.3/lisp/org/org-datetree
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-crypt hides d:/gnu/emacs-23.3/lisp/org/org-crypt
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-compat hides d:/gnu/emacs-23.3/lisp/org/org-compat
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-colview hides d:/gnu/emacs-23.3/lisp/org/org-colview
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-clock hides d:/gnu/emacs-23.3/lisp/org/org-clock
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-bibtex hides d:/gnu/emacs-23.3/lisp/org/org-bibtex
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-bbdb hides d:/gnu/emacs-23.3/lisp/org/org-bbdb
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-attach hides d:/gnu/emacs-23.3/lisp/org/org-attach
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-ascii hides d:/gnu/emacs-23.3/lisp/org/org-ascii
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-archive hides d:/gnu/emacs-23.3/lisp/org/org-archive
d:/gnu/emacs-23.3/../packages/org-7.4/lisp/org-agenda hides d:/gnu/emacs-23.3/lisp/org/org-agenda
d:/Home/udr/share/emacs/rnews hides d:/gnu/emacs-23.3/lisp/obsolete/rnews

Features:
(shadow sort message ecomplete mml mml-sec password-cache mm-decode
mm-bodies mm-encode mailcap nnheader gmm-utils mailheader canlock
hashcash mail-utils warnings emacsbug tabify smerge-mode diff-mode
noutline outline multi-isearch ediff-merg ediff-diff ediff-wind
ediff-help ediff-util ediff-mult ediff-init ediff cl-specs edebug
find-func help-mode view vm-pop vm-mark vm-delete bbdb-hooks mail-parse
rfc2231 rfc2047 rfc2045 qp ietf-drums mm-util mail-prsvr longlines
easy-mmode w3m-form w3m browse-url doc-view dired-x dired-aux mydired
dired image-mode w3m-hist w3m-fb bookmark-w3m w3m-ems wid-edit w3m-ccl
ccl w3m-favicon w3m-image w3m-proc w3m-util vm-w3m tapestry vm-sort
vm-thread vm-crypto vm-imap easymenu u-vm-color my-vm vc-bzr sha1
hex-util etags ps-print ps-def lpr vm-save vm-ps-print vm-rfaddons
vm-menu vm-window vm-toolbar vm-folder vm-mime vm-undo vm-virtual
vm-summary-faces vm-mouse vm-page vm-minibuf vm-message vm-misc vm-macro
bbdb-vm vm-summary vm-motion vm-autoload bbdb-snarf mail-extr rfc822
bbdb-com advice help-fns advice-preload mailabbrev cl cl-19 vm server
w3m-load bbdb-autoloads bbdb timezone vm-autoloads vm-version vm-vars
org-install savehist tex-site tex-mik telnet movement natural-space
NatSpeak sendmail auth-source gnus-util netrc time-date epa-file epa epg
epg-config ange-ftp regexp-opt comint ring echistory chistory ehelp
electric derived which-func imenu edmacro kmacro jka-compr tooltip
ediff-hook vc-hooks lisp-float-type mwheel dos-w32 disp-table ls-lisp
w32-win w32-vars tool-bar dnd fontset image fringe lisp-mode register
page menu-bar rfn-eshadow timer select scroll-bar mldrag mouse jit-lock
font-lock syntax facemenu font-core frame cham georgian utf-8-lang
misc-lang vietnamese tibetan thai tai-viet lao korean japanese hebrew
greek romanian slovak czech european ethiopic indian cyrillic chinese
case-table epa-hook jka-cmpr-hook help simple abbrev loaddefs button
minibuffer faces cus-face files text-properties overlay md5 base64
format env code-pages mule custom widget hashtable-print-readable
backquote make-network-process multi-tty emacs)

-- 

=== modified file 'lisp/files.el'
--- lisp/files.el	2011-03-11 12:19:08 +0000
+++ lisp/files.el	2011-03-31 21:23:03 +0000
@@ -4511,7 +4511,10 @@
                     (if arg
                         t
                       (setq queried t)
-                      (if (buffer-file-name buffer)
+                      (if (and (buffer-file-name buffer)
+                               (equal (buffer-name buffer)
+                                      (file-name-nondirectory 
+                                       (buffer-file-name buffer))))
                           (format "Save file %s? "
                                   (buffer-file-name buffer))
                         (format "Save buffer %s? "