Subject: 25.1.50; Emacs should have a convenient command for saving unchanged buffers

From: Lars Magne Ingebrigtsen <[email-masked]>
Date: Tue, 29 Mar 2016 17:36:23 +0200

During an unrelated discussion on emacs-devel, it turns out that
virtually everybody is in the habit of making a change, then deleting
the change, just to make `C-x C-s' work.  This means that there is a
need for Emacs to offer a command to save buffers, even if they aren't
changed.

(All the electricity in the Emacs modes means that even if you find
typing `SPC DEL C-x C-s' convenient, sometimes it makes Stuff Happens,
and that DEL doesn't really undo what you've done.)

Several options exist:

1) Have the interactive `C-x C-s' command always save the buffer, no
matter whether it's unchanged or not.  I think many people would object
to this, as they're used to just `C-x C-s'-ing idly while thinking of
other things.

2) Have the prefix to that command save the unchanged buffer.  This
would be the obvious choice, but:

--------------
(save-buffer &optional ARG)

Save current buffer in visited file if modified.
Variations are described below.

By default, makes the previous version into a backup file
 if previously requested or if this is the first save.
Prefixed with one C-u, marks this version
 to become a backup when the next save is done.
Prefixed with two C-u’s,
 unconditionally makes the previous version into a backup file.
Prefixed with three C-u’s, marks this version
 to become a backup when the next save is done,
 and unconditionally makes the previous version into a backup file.
--------------

Eh.  Four `C-u's?  I don't think so.  We could bind `C-x C-s' to a new
`save-buffer-command' that has different prefix rules.  Does anybody use
the backup stuff?

3) Add a new keystroke.

4) Something else.

In GNU Emacs 25.1.50.20 (x86_64-unknown-linux-gnu, GTK+ Version 3.4.2)
 of 2016-03-28 built on stories
Repository revision: a30e7e12ed8465e2565dd318d921bc87f52ce18e
Windowing system distributor 'The X.Org Foundation', version 11.0.11604000
System Description:	Debian GNU/Linux 7.9 (wheezy)

Configured features:
XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND GSETTINGS NOTIFY GNUTLS
LIBXML2 FREETYPE LIBOTF XFT ZLIB TOOLKIT_SCROLL_BARS GTK3 X11

Important settings:
  value of $LANG: en_US
  locale-coding-system: iso-latin-1-unix

Major mode: Group

Minor modes in effect:
  gnus-topic-mode: t
  gnus-undo-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  buffer-read-only: t
  line-number-mode: t

Recent messages:
Auto-saving...done
Mark set
Sending...
Mark set [2 times]
Sending news via news.gmane.org using nntp...
Mark set
Saving file /home/larsi/Mail/archive/sent/2016w13...
Wrote /home/larsi/Mail/archive/sent/2016w13
Sending...done
Making completion list...

Load-path shadows:
/home/larsi/src/clock.el/clock hides /home/larsi/lisp/clock
/home/larsi/src/cddb.el/expect hides /home/larsi/lisp/expect
/home/larsi/src/pvr.el/pvr hides /home/larsi/lisp/pvr
~/pgnus/contrib/vcard hides /home/larsi/lisp/vcard
/home/larsi/src/cddb.el/captitle hides /home/larsi/lisp/captitle
~/lisp/zenirc-2.112/src/zenirc-example hides /home/larsi/lisp/zenirc-example
/home/larsi/lisp/dom hides /home/larsi/src/emacs/trunk/lisp/dom
~/pgnus/contrib/compface hides /home/larsi/src/emacs/trunk/lisp/image/compface

Features:
(shadow emacsbug canlock ecomplete mailalias smtpmail sendmail pp eww
flow-fill shr-color color mm-archive vc vc-dispatcher copyright vc-cvs
gnus-html url-queue help-fns url-cache gnus-picon sort smiley ansi-color
gnus-cite gnus-async gnus-dup qp gnus-ml gmane spam-gmane dns mm-url
disp-table gnus-fun gnus-mdrtn pop3 nndoc nnmbox nndraft utf-7
gnus-topic nnmh nnml nnfolder network-stream nsm starttls nnir
spam-report spam spam-stat gnus-uu yenc gnus-agent gnus-srvr gnus-score
score-mode nnvirtual gnus-msg gnus-art mm-uu mml2015 mm-view mml-smime
smime dig nntp gnus-cache gnus-sum gnus-group gnus-undo gnus-start
gnus-cloud nnimap nnmail mail-source utf7 netrc nnoo parse-time
gnus-spec gnus-int gnus-range message format-spec rfc822 mml mml-sec epa
epg mailabbrev gmm-utils mailheader gnus-win gnus nnheader gnus-util
rmail rmail-loaddefs mail-utils movie mkv shr svg imdb dom pvr debug
debbugs-gnu easy-mmode derived debbugs soap-client mm-decode mm-bodies
mm-encode url-http tls gnutls url-auth mail-parse rfc2231 rfc2047
rfc2045 ietf-drums url-gw puny url url-proxy url-privacy url-expand
url-methods url-history url-cookie url-domsuf url-util mailcap warnings
rng-xsd rng-dt rng-util xsd-regexp xml ido seq flyspell ispell benchmark
w3m browse-url doc-view subr-x dired dired-loaddefs image-mode timezone
w3m-hist w3m-fb w3m-ems wid-edit w3m-ccl ccl w3m-favicon w3m-image
w3m-proc w3m-util add-log mail-extr mm-util mail-prsvr jka-compr cl
finder-inf package epg-config url-handlers url-parse auth-source cl-seq
eieio byte-opt bytecomp byte-compile cl-extra help-mode easymenu cconv
eieio-core cl-macs gv eieio-loaddefs cl-loaddefs pcase cl-lib
password-cache url-vars time-date mule-util tooltip eldoc electric
uniquify ediff-hook vc-hooks lisp-float-type mwheel term/x-win x-win
term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe
tabulated-list newcomment elisp-mode lisp-mode prog-mode register page
menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock font-lock
syntax facemenu font-core term/tty-colors frame cl-generic cham georgian
utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean
japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european
ethiopic indian cyrillic chinese charscript case-table epa-hook
jka-cmpr-hook help simple abbrev obarray minibuffer cl-preloaded nadvice
loaddefs button faces cus-face macroexp files text-properties overlay
sha1 md5 base64 format env code-pages mule custom widget
hashtable-print-readable backquote inotify dynamic-setting
system-font-setting font-render-setting move-toolbar gtk x-toolkit x
multi-tty make-network-process emacs)

Memory information:
((conses 16 1005682 78299)
 (symbols 48 170020 42)
 (miscs 40 459 1268)
 (strings 32 242952 10814)
 (string-bytes 1 17792152)
 (vectors 16 42307)
 (vector-slots 8 1751093 224622)
 (floats 8 6934 679)
 (intervals 56 58542 6650)
 (buffers 976 52)
 (heap 1024 124930 33067))

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no