diff options
author | Eli Zaretskii <eliz@gnu.org> | 2017-01-07 14:33:41 +0200 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2017-01-07 14:33:41 +0200 |
commit | e272032769178768cf970839a9c22aba1f5b572e (patch) | |
tree | cc7e24310c5a874cef5e6acb910fb46ae9272d9a /lisp/bookmark.el | |
parent | 50fd04cd4b831a166db30292c4dc0c24be8e6e9d (diff) | |
download | emacs-e272032769178768cf970839a9c22aba1f5b572e.tar.gz |
Specify encoding of the bookmark file
* lisp/bookmark.el (bookmark-insert-file-format-version-stamp):
Accept an argument CODING and include a 'coding:' cookie in the
bookmark file preamble.
(bookmark-upgrade-file-format-from-0): Call
'bookmark-insert-file-format-version-stamp' with the file buffer's
encoding, as detected when it was read.
(bookmark-file-coding-system): New variable.
(bookmark-load): Set bookmark-file-coding-system to the encoding
of the loaded file.
(bookmark-write-file): Bind coding-system-for-write to either the
user setting via "C-x RET c" or to the existing file encoding,
defaulting to 'utf-8-emacs'. Update the value of
bookmark-file-coding-system. (Bug#25365)
Diffstat (limited to 'lisp/bookmark.el')
-rw-r--r-- | lisp/bookmark.el | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/lisp/bookmark.el b/lisp/bookmark.el index 3440a52ad4d..e18362bca95 100644 --- a/lisp/bookmark.el +++ b/lisp/bookmark.el @@ -267,6 +267,8 @@ or the deprecated form (BOOKMARK-NAME PARAM-ALIST). (defvar bookmarks-already-loaded nil "Non-nil if and only if bookmarks have been loaded from `bookmark-default-file'.") +(defvar bookmark-file-coding-system nil + "The coding-system of the last loaded or saved bookmark file.") ;; more stuff added by db. @@ -689,7 +691,7 @@ This expects to be called from `point-min' in a bookmark file." (let* ((old-list (bookmark-alist-from-buffer)) (new-list (bookmark-upgrade-version-0-alist old-list))) (delete-region (point-min) (point-max)) - (bookmark-insert-file-format-version-stamp) + (bookmark-insert-file-format-version-stamp buffer-file-coding-system) (pp new-list (current-buffer)) (save-buffer)) (goto-char (point-min)) @@ -726,11 +728,14 @@ This expects to be called from `point-min' in a bookmark file." (error "Bookmark file format version strangeness"))))) -(defun bookmark-insert-file-format-version-stamp () - "Insert text indicating current version of bookmark file format." +(defun bookmark-insert-file-format-version-stamp (coding) + "Insert text indicating current version of bookmark file format. +CODING is the symbol of the coding-system in which the file is encoded." + (if (memq (coding-system-base coding) '(undecided prefer-utf-8)) + (setq coding 'utf-8-emacs)) (insert - (format ";;;; Emacs Bookmark Format Version %d ;;;;\n" - bookmark-file-format-version)) + (format ";;;; Emacs Bookmark Format Version %d ;;;; -*- coding: %S -*- \n" + bookmark-file-format-version (coding-system-base coding))) (insert ";;; This format is meant to be slightly human-readable;\n" ";;; nevertheless, you probably don't want to edit it.\n" ";;; " @@ -1417,14 +1422,17 @@ for a file, defaulting to the file defined by variable (with-current-buffer (get-buffer-create " *Bookmarks*") (goto-char (point-min)) (delete-region (point-min) (point-max)) - (let ((print-length nil) + (let ((coding-system-for-write + (or coding-system-for-write + bookmark-file-coding-system 'utf-8-emacs)) + (print-length nil) (print-level nil) ;; See bug #12503 for why we bind `print-circle'. Users ;; can define their own bookmark types, which can result in ;; arbitrary Lisp objects being stored in bookmark records, ;; and some users create objects containing circularities. (print-circle t)) - (bookmark-insert-file-format-version-stamp) + (bookmark-insert-file-format-version-stamp coding-system-for-write) (insert "(") ;; Rather than a single call to `pp' we make one per bookmark. ;; Apparently `pp' has a poor algorithmic complexity, so this @@ -1440,6 +1448,7 @@ for a file, defaulting to the file defined by variable (condition-case nil (write-region (point-min) (point-max) file) (file-error (message "Can't write %s" file))) + (setq bookmark-file-coding-system coding-system-for-write) (kill-buffer (current-buffer)) (bookmark-maybe-message "Saving bookmarks to file %s...done" file))))) @@ -1521,7 +1530,8 @@ unique numeric suffixes \"<2>\", \"<3>\", etc." (expand-file-name bookmark-default-file)) file) (setq bookmarks-already-loaded t)) - (bookmark-bmenu-surreptitiously-rebuild-list)) + (bookmark-bmenu-surreptitiously-rebuild-list) + (setq bookmark-file-coding-system buffer-file-coding-system)) (error "Invalid bookmark list in %s" file))) (kill-buffer (current-buffer))) (if (null no-msg) |