0
|
1 ; If you load this in your .emacs, write-file will be redefined to do
|
|
2 ; what is described below. If you like it please tell us so
|
|
3 ; that we could provide it by default.
|
|
4 ;
|
|
5 ; The function implements semantic 1. Comment out the lines marked -2
|
|
6 ; to get semantic 2 and comment out the lines marked -3 to get semantic 3.
|
|
7 ;
|
|
8 ; semantic 1: If it is assumed that C-x C-w _should_ rename the
|
|
9 ; buffer as well as writing to the _new_ file,
|
|
10 ; Energize is concerned, this should look as if I had copied the
|
|
11 ; buffer, reverted the original to the disk image, and killed the
|
|
12 ; reverted buffer, leaving only the new buffer without
|
|
13 ; Energize dependencies or attachments.
|
|
14 ;
|
|
15 ; semantic 2: ... I would
|
|
16 ; either want it to simply create the new file, leaving the buffer
|
|
17 ; alone...
|
|
18 ;
|
|
19 ; semantic 3: ... or second best creating the file and a new buffer for it,
|
|
20 ; so that I had two buffers, one for each named version of the
|
|
21 ; file.
|
|
22
|
|
23
|
|
24 (defun energize-write-file (filename)
|
|
25 "Write the current buffer into file FILENAME.
|
|
26 Revert and kill the current buffer and replaces it by a new buffer
|
|
27 showing FILENAME."
|
|
28 (interactive
|
|
29 (list (if buffer-file-name
|
|
30 (read-file-name "Energize write file: "
|
|
31 nil nil nil nil)
|
|
32 (read-file-name "Energize write file: "
|
|
33 (cdr (assq 'default-directory
|
|
34 (buffer-local-variables)))
|
|
35 nil nil (buffer-name)))))
|
|
36 (if (and (file-exists-p filename)
|
|
37 (not
|
|
38 (yes-or-no-p (format "File %s already exists. Overwrite it? "
|
|
39 filename))))
|
|
40 (error "Aborted"))
|
|
41 (write-region (point-min) (point-max) filename nil nil)
|
|
42 (if buffer-file-name ; -2 -3
|
|
43 (revert-buffer t t)) ; -2 -3
|
|
44 (kill-buffer nil) ; -2 -3
|
|
45 (set-window-buffer ; -2
|
|
46 (selected-window) ; -2
|
|
47 (find-file-noselect filename)) ; -2
|
|
48 )
|
|
49
|
|
50
|
|
51 ; Pick just one of the following
|
|
52 ; This uses the new function for all buffers
|
|
53 (define-key ctl-x-map '(control w) 'energize-write-file)
|
|
54 ; This preserves old behavior for non-energize buffers
|
|
55 ; (energize-advise-function 'write-file)
|
|
56
|