(pop-to-buffer buffer t norecord)
(raise-frame (window-frame (selected-window)))))
-(defun find-file (filename)
+(defun find-file (filename &optional coding-system)
"Edit file FILENAME.
Switch to a buffer visiting file FILENAME,
-creating one if none already exists."
- (interactive "FFind file: ")
- (switch-to-buffer (find-file-noselect filename)))
-
-(defun find-file-other-window (filename)
+creating one if none already exists.
+A prefix argument enables user to specify the coding-system interactively."
+ (interactive "FFind file: \nZCoding-system: ")
+ (if coding-system
+ (let ((coding-system-for-read coding-system))
+ (switch-to-buffer (find-file-noselect filename)))
+ (switch-to-buffer (find-file-noselect filename))))
+
+(defun find-file-other-window (filename &optional coding-system)
"Edit file FILENAME, in another window.
May create a new window, or reuse an existing one.
+A prefix argument enables user to specify the coding-system interactively.
See the function `display-buffer'."
- (interactive "FFind file in other window: ")
- (switch-to-buffer-other-window (find-file-noselect filename)))
+ (interactive "FFind file in other window: \nZCoding-system: ")
+ (if coding-system
+ (let ((coding-system-for-read coding-system))
+ (switch-to-buffer-other-window (find-file-noselect filename)))
+ (switch-to-buffer-other-window (find-file-noselect filename))))
-(defun find-file-other-frame (filename)
+(defun find-file-other-frame (filename &optional coding-system)
"Edit file FILENAME, in another frame.
May create a new frame, or reuse an existing one.
+A prefix argument enables user to specify the coding-system interactively.
See the function `display-buffer'."
- (interactive "FFind file in other frame: ")
- (switch-to-buffer-other-frame (find-file-noselect filename)))
+ (interactive "FFind file in other frame: \nZCoding-system: ")
+ (if coding-system
+ (let ((coding-system-for-read coding-system))
+ (switch-to-buffer-other-frame (find-file-noselect filename)))
+ (switch-to-buffer-other-frame (find-file-noselect filename))))
-(defun find-file-read-only (filename)
+(defun find-file-read-only (filename &optional coding-system)
"Edit file FILENAME but don't allow changes.
Like \\[find-file] but marks buffer as read-only.
+A prefix argument enables user to specify the coding-system interactively.
Use \\[toggle-read-only] to permit editing."
- (interactive "fFind file read-only: ")
- (find-file filename)
+ (interactive "fFind file read-only: \nZCoding-system: ")
+ (find-file filename coding-system)
(setq buffer-read-only t)
(current-buffer))
-(defun find-file-read-only-other-window (filename)
+(defun find-file-read-only-other-window (filename &optional coding-system)
"Edit file FILENAME in another window but don't allow changes.
Like \\[find-file-other-window] but marks buffer as read-only.
+A prefix argument enables user to specify the coding-system interactively.
Use \\[toggle-read-only] to permit editing."
- (interactive "fFind file read-only other window: ")
- (find-file-other-window filename)
+ (interactive "fFind file read-only other window: \nZCoding-system: ")
+ (find-file-other-window filename coding-system)
(setq buffer-read-only t)
(current-buffer))
-(defun find-file-read-only-other-frame (filename)
+(defun find-file-read-only-other-frame (filename &optional coding-system)
"Edit file FILENAME in another frame but don't allow changes.
Like \\[find-file-other-frame] but marks buffer as read-only.
+A prefix argument enables user to specify the coding-system interactively.
Use \\[toggle-read-only] to permit editing."
- (interactive "fFind file read-only other frame: ")
- (find-file-other-frame filename)
+ (interactive "fFind file read-only other frame: \nZCoding-system: ")
+ (find-file-other-frame filename coding-system)
(setq buffer-read-only t)
(current-buffer))
-(defun find-alternate-file-other-window (filename)
+(defun find-alternate-file-other-window (filename &optional coding-system)
"Find file FILENAME as a replacement for the file in the next window.
-This command does not select that window."
+This command does not select that window.
+A prefix argument enables user to specify the coding-system interactively."
(interactive
(save-selected-window
(other-window 1)
(setq file-name (file-name-nondirectory file)
file-dir (file-name-directory file)))
(list (read-file-name
- "Find alternate file: " file-dir nil nil file-name)))))
+ "Find alternate file: " file-dir nil nil file-name)
+ (if current-prefix-arg
+ (read-coding-system "Coding-system: "))))))
(if (one-window-p)
- (find-file-other-window filename)
+ (find-file-other-window filename coding-system)
(save-selected-window
(other-window 1)
- (find-alternate-file filename))))
+ (find-alternate-file filename coding-system))))
-(defun find-alternate-file (filename)
+(defun find-alternate-file (filename &optional coding-system)
"Find file FILENAME, select its buffer, kill previous buffer.
If the current buffer now contains an empty file that you just visited
-\(presumably by mistake), use this command to visit the file you really want."
+\(presumably by mistake), use this command to visit the file you really want.
+A prefix argument enables user to specify the coding-system interactively."
(interactive
(let ((file buffer-file-name)
(file-name nil)
(setq file-name (file-name-nondirectory file)
file-dir (file-name-directory file)))
(list (read-file-name
- "Find alternate file: " file-dir nil nil file-name))))
+ "Find alternate file: " file-dir nil nil file-name)
+ (if current-prefix-arg
+ (read-coding-system "Coding-system: ")))))
(and (buffer-modified-p) (buffer-file-name)
;; (not buffer-read-only)
(not (yes-or-no-p (format "Buffer %s is modified; kill anyway? "
(setq buffer-file-name nil)
(setq buffer-file-number nil)
(setq buffer-file-truename nil)
- (find-file filename))
+ (find-file filename coding-system))
(cond ((eq obuf (current-buffer))
(setq buffer-file-name ofile)
(setq buffer-file-number onum)
"Read file FILENAME into a buffer and return the buffer.
If a buffer exists visiting FILENAME, return that one, but
verify that the file has not changed since visited or saved.
-The buffer is not selected, just returned to the caller."
+The buffer is not selected, just returned to the caller.
+Optional first arg NOWARN non-nil means suppress any warning messages.
+Optional second arg RAWFILE non-nil means the file is read literally"
(setq filename
(abbreviate-file-name
(expand-file-name filename)))
(not along-with-file)
(set-buffer-modified-p t)))
-(defun write-file (filename &optional confirm)
+(defun write-file (filename &optional confirm coding-system)
"Write current buffer into file FILENAME.
Makes buffer visit that file, and marks it not modified.
If the buffer is already visiting a file, you can specify
If optional second arg CONFIRM is non-nil,
ask for confirmation for overwriting an existing file.
-Interactively, confirmation is required unless you supply a prefix argument."
+Interactively, confirmation is required unless you supply a prefix argument.
+
+A prefix argument also enables user to interactively specify a
+coding-system for encoding the file."
;; (interactive "FWrite file: ")
(interactive
(list (if buffer-file-name
(cdr (assq 'default-directory
(buffer-local-variables)))
nil nil (buffer-name)))
- (not current-prefix-arg)))
+ (not current-prefix-arg)
+ (if current-prefix-arg
+ (read-coding-system "Coding-system: "))
+ ))
(or (null filename) (string-equal filename "")
(progn
;; If arg is just a directory,
(error "Canceled")))
(set-visited-file-name filename (not confirm))))
(set-buffer-modified-p t)
- (save-buffer))
+ (if coding-system
+ (let ((coding-system-for-write coding-system))
+ ;; It is convenient to change buffer-file-coding-system to the
+ ;; specified one.
+ (set-buffer-file-coding-system coding-system)
+ (save-buffer))
+ (save-buffer)))
\f
(defun backup-buffer ()
"Make a backup of the disk file visited by the current buffer, if appropriate.
(> (prefix-numeric-value arg) 0)))
(force-mode-line-update))
-(defun insert-file (filename)
+(defun insert-file (filename &optional coding-system)
"Insert contents of file FILENAME into buffer after point.
Set mark after the inserted text.
+A prefix argument enables user to specify the coding-system interactively.
This function is meant for the user to run interactively.
Don't call it from programs! Use `insert-file-contents' instead.
\(Its calling sequence is different; see its documentation)."
- (interactive "*fInsert file: ")
+ (interactive "*fInsert file: \nZCoding-system: ")
(if (file-directory-p filename)
(signal 'file-error (list "Opening input file" "file is a directory"
filename)))
- (let ((tem (insert-file-contents filename)))
+ (let ((tem
+ (if coding-system
+ (let ((coding-system-for-read coding-system))
+ (insert-file-contents filename))
+ (insert-file-contents filename))))
(push-mark (+ (point) (car (cdr tem))))))
-(defun append-to-file (start end filename)
+(defun append-to-file (start end filename &optional coding-system)
"Append the contents of the region to the end of file FILENAME.
When called from a function, expects three arguments,
START, END and FILENAME. START and END are buffer positions
-saying what text to write."
- (interactive "r\nFAppend to file: ")
- (write-region start end filename t))
+saying what text to write.
+A prefix argument enables user to specify the coding-system interactively."
+ (interactive "r\nFAppend to file: \nZCoding-system: ")
+ (if coding-system
+ (let ((coding-system-for-write coding-system))
+ (write-region start end filename t))
+ (write-region start end filename t)))
(defun file-newest-backup (filename)
"Return most recent backup file for FILENAME or nil if no backups exist."
file file-name)))
(yes-or-no-p (format "Recover auto save file %s? " file-name)))
(switch-to-buffer (find-file-noselect file t))
- (let ((buffer-read-only nil))
+ (let ((buffer-read-only nil)
+ ;; Auto-saved file shoule be read without any code conversion.
+ (coding-system-for-read 'no-conversion))
(erase-buffer)
(insert-file-contents file-name nil))
(after-find-file nil nil t))