; My my, but we've not traveled here in while (as of 18feb10). Anyway, I don't know wtf I had in mind with the "until we can get" business, but now we're here for something new. Namely, make a non-null prefix are mean "don't save places", which entails (defun my-kill-emacs () "Old-style prompting version of kill-emacs, in use until we can get kill-emacs-query-functions to work as advertised. Non-null prefix arg means dont't save places, which can be used, for example, when running on some emacs remotely while a version is currently running on the remote host." (interactive) (if current-prefix-arg (setq kill-emacs-hook nil)) (if (string= major-mode "mh-letter-mode") (message "Use ^C-^C to send the message.") (if (kq) (kill-emacs 0)) ;Arg here means no prompting in v18, benign in v19. ) ) (defun kq () (interactive) (let ( (n (n-buffers-modified)) ) (if (= n 0) (kq1 "Are you sure you want to exit (yes or no)? ") (if (= n 1) (kq1 "1 buffer is modified, do you really want to exit (yes or no)? ") (if (> n 1) (kq1 (concat (int-to-string n) " buffers are modified, do you really want to exit (yes or no)? " )) t ) ) ) ) ) (defun kq1 (message) (let () (setq r (read-from-minibuffer message)) (if (string= r "yes") t (if (string= r "no") nil (kq1 "Please answer yes or no. ") ) ) ) ) (defun n-buffers-modified () (interactive) (let ( (rtn (n-buffers-modified1 (buffer-list))) ) (if (interactive-p) (message (int-to-string rtn))) rtn ) ) (defun n-buffers-modified1 (l) (if (null l) 0 (if (and (buffer-modified-p (car l)) (buffer-file-name (car l))) (+ 1 (n-buffers-modified1 (cdr l))) (n-buffers-modified1 (cdr l)) ) ) )