aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorMichal Nazarewicz2013-06-30 18:29:23 -0400
committerStefan Monnier2013-06-30 18:29:23 -0400
commitef099a941f7fb2d74ce1768388463f18b284f9c5 (patch)
tree1573bfacf90fc940c297c5428c132e9e65318716 /lisp
parent6d89e343ab402851d94e37b2ca79a67e4c6fb474 (diff)
downloademacs-ef099a941f7fb2d74ce1768388463f18b284f9c5.tar.gz
emacs-ef099a941f7fb2d74ce1768388463f18b284f9c5.zip
Add `remember-notes' function to store random notes across Emacs
restarts. * remember.el (remember-data-file): Add :set callback to affect notes buffer (if any). (remember-notes): New command. (remember-notes-buffer-name, bury-remember-notes-on-kill): New defcustoms for the `remember-notes' function. (remember-notes-save-and-bury-buffer): New command. (remember-notes-mode-map): New variable. (remember-mode): New minor mode. (remember-notes--kill-buffer-query): New function. * lisp/startup.el (initial-buffer-choice): Add notes to custom type. * src/buffer.c (FKill_buffer): Run `kill-buffer-query-functions' before checking whether buffer is modified. This lets `kill-buffer-query-functions' cancel killing of the buffer or save its content before `kill-buffer' asks user the "Buffer %s modified; kill anyway?" question. * remember.el (remember-append-to-file): Don't mix `find-buffer-visiting' and `get-file-buffer'. * lisp/files.el (find-file-noselect): Simplify conditional expression.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ChangeLog33
-rw-r--r--lisp/files.el13
-rw-r--r--lisp/startup.el3
-rw-r--r--lisp/textmodes/remember.el133
4 files changed, 151 insertions, 31 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index c9582b1c81b..1234e513a96 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,18 +1,37 @@
12013-06-30 Michal Nazarewicz <mina86@mina86.com>
2
3 * files.el (find-file-noselect): Simplify conditional expression.
4
5 * remember.el (remember-append-to-file):
6 Don't mix `find-buffer-visiting' and `get-file-buffer'.
7
8 Add `remember-notes' function to store random notes across Emacs
9 restarts.
10 * remember.el (remember-data-file): Add :set callback to affect
11 notes buffer (if any).
12 (remember-notes): New command.
13 (remember-notes-buffer-name, bury-remember-notes-on-kill):
14 New defcustoms for the `remember-notes' function.
15 (remember-notes-save-and-bury-buffer): New command.
16 (remember-notes-mode-map): New variable.
17 (remember-mode): New minor mode.
18 (remember-notes--kill-buffer-query): New function.
19 * startup.el (initial-buffer-choice): Add notes to custom type.
20
12013-06-30 Eli Zaretskii <eliz@gnu.org> 212013-06-30 Eli Zaretskii <eliz@gnu.org>
2 22
3 * bindings.el (right-char, left-char): Don't call sit-for, this is 23 * bindings.el (right-char, left-char): Don't call sit-for, this is
4 no longer needed. Use arithmetic comparison only for numerical 24 no longer needed. Use arithmetic comparison only for numerical
5 arguments. 25 arguments.
6 26
7 * international/mule-cmds.el (select-safe-coding-system): Handle 27 * international/mule-cmds.el (select-safe-coding-system):
8 the case of FROM being a string correctly. (Bug#14755) 28 Handle the case of FROM being a string correctly. (Bug#14755)
9 29
102013-06-30 Lars Magne Ingebrigtsen <larsi@gnus.org> 302013-06-30 Lars Magne Ingebrigtsen <larsi@gnus.org>
11 31
12 * net/shr.el (shr-make-table-1): Add a sanity check that allows 32 * net/shr.el (shr-make-table-1): Add a sanity check that allows
13 progression on degenerate tables. 33 progression on degenerate tables.
14 (shr-rescale-image): ImageMagick animated images currently doesn't 34 (shr-rescale-image): ImageMagick animated images currently don't work.
15 work.
16 35
172013-06-30 Juanma Barranquero <lekktu@gmail.com> 362013-06-30 Juanma Barranquero <lekktu@gmail.com>
18 37
@@ -28,8 +47,8 @@
28 47
292013-06-30 Dmitry Gutov <dgutov@yandex.ru> 482013-06-30 Dmitry Gutov <dgutov@yandex.ru>
30 49
31 * progmodes/ruby-mode.el (ruby-syntax-propertize-function): Don't 50 * progmodes/ruby-mode.el (ruby-syntax-propertize-function):
32 start heredoc inside a string or comment. 51 Don't start heredoc inside a string or comment.
33 52
342013-06-29 Eli Zaretskii <eliz@gnu.org> 532013-06-29 Eli Zaretskii <eliz@gnu.org>
35 54
@@ -80,7 +99,7 @@
80 99
812013-06-27 Lars Magne Ingebrigtsen <larsi@gnus.org> 1002013-06-27 Lars Magne Ingebrigtsen <larsi@gnus.org>
82 101
83 * net/shr.el (add-face-text-property): Removed compat definition. 102 * net/shr.el (add-face-text-property): Remove compat definition.
84 103
852013-06-27 Stephen Berman <stephen.berman@gmx.net> 1042013-06-27 Stephen Berman <stephen.berman@gmx.net>
86 105
diff --git a/lisp/files.el b/lisp/files.el
index 871a4b0548b..e59a9acb7b9 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -1859,13 +1859,12 @@ the various files."
1859 (setq buffer-read-only read-only))) 1859 (setq buffer-read-only read-only)))
1860 (setq buffer-file-read-only read-only)) 1860 (setq buffer-file-read-only read-only))
1861 1861
1862 (when (and (not (eq (not (null rawfile)) 1862 (unless (or (eq (null rawfile) (null find-file-literally))
1863 (not (null find-file-literally)))) 1863 nonexistent
1864 (not nonexistent) 1864 ;; It is confusing to ask whether to visit
1865 ;; It is confusing to ask whether to visit 1865 ;; non-literally if they have the file in
1866 ;; non-literally if they have the file in 1866 ;; hexl-mode or image-mode.
1867 ;; hexl-mode or image-mode. 1867 (memq major-mode '(hexl-mode image-mode)))
1868 (not (memq major-mode '(hexl-mode image-mode))))
1869 (if (buffer-modified-p) 1868 (if (buffer-modified-p)
1870 (if (y-or-n-p 1869 (if (y-or-n-p
1871 (format 1870 (format
diff --git a/lisp/startup.el b/lisp/startup.el
index 77b2bcec5b7..44eea7745f7 100644
--- a/lisp/startup.el
+++ b/lisp/startup.el
@@ -53,7 +53,8 @@ or directory when no target file is specified."
53 (const :tag "Startup screen" nil) 53 (const :tag "Startup screen" nil)
54 (directory :tag "Directory" :value "~/") 54 (directory :tag "Directory" :value "~/")
55 (file :tag "File" :value "~/.emacs") 55 (file :tag "File" :value "~/.emacs")
56 (function :tag "Function") 56 (const :tag "Notes buffer" remember-notes)
57 (function :tag "Function")
57 (const :tag "Lisp scratch buffer" t)) 58 (const :tag "Lisp scratch buffer" t))
58 :version "24.4" 59 :version "24.4"
59 :group 'initialization) 60 :group 'initialization)
diff --git a/lisp/textmodes/remember.el b/lisp/textmodes/remember.el
index 5782f25e48d..39f3acd2c4c 100644
--- a/lisp/textmodes/remember.el
+++ b/lisp/textmodes/remember.el
@@ -382,8 +382,18 @@ Subject: %s\n\n"
382;; Remembering to plain files 382;; Remembering to plain files
383 383
384(defcustom remember-data-file (locate-user-emacs-file "notes" ".notes") 384(defcustom remember-data-file (locate-user-emacs-file "notes" ".notes")
385 "The file in which to store unprocessed data." 385 "The file in which to store unprocessed data.
386When set via customize, visited file of the notes buffer (if it
387exists) might be changed."
386 :type 'file 388 :type 'file
389 :set (lambda (symbol value)
390 (let ((buf (find-buffer-visiting (default-value symbol))))
391 (set-default symbol value)
392 (when (buffer-live-p buf)
393 (with-current-buffer buf
394 (set-visited-file-name
395 (expand-file-name remember-data-file))))))
396 :initialize 'custom-initialize-default
387 :group 'remember) 397 :group 'remember)
388 398
389(defcustom remember-leader-text "** " 399(defcustom remember-leader-text "** "
@@ -393,21 +403,20 @@ Subject: %s\n\n"
393 403
394(defun remember-append-to-file () 404(defun remember-append-to-file ()
395 "Remember, with description DESC, the given TEXT." 405 "Remember, with description DESC, the given TEXT."
396 (let ((text (buffer-string)) 406 (let* ((text (buffer-string))
397 (desc (remember-buffer-desc))) 407 (desc (remember-buffer-desc))
398 (with-temp-buffer 408 (remember-text (concat "\n" remember-leader-text (current-time-string)
399 (insert "\n" remember-leader-text (current-time-string) 409 " (" desc ")\n\n" text
400 " (" desc ")\n\n" text) 410 (save-excursion (goto-char (point-max))
401 (if (not (bolp)) 411 (if (bolp) nil "\n"))))
402 (insert "\n")) 412 (buf (find-buffer-visiting remember-data-file)))
403 (if (find-buffer-visiting remember-data-file) 413 (if buf
404 (let ((remember-text (buffer-string))) 414 (with-current-buffer buf
405 (set-buffer (get-file-buffer remember-data-file)) 415 (save-excursion
406 (save-excursion 416 (goto-char (point-max))
407 (goto-char (point-max)) 417 (insert remember-text))
408 (insert remember-text) 418 (if remember-save-after-remembering (save-buffer)))
409 (when remember-save-after-remembering (save-buffer)))) 419 (append-to-file remember-text nil remember-data-file))))
410 (append-to-file (point-min) (point-max) remember-data-file)))))
411 420
412(defun remember-region (&optional beg end) 421(defun remember-region (&optional beg end)
413 "Remember the data from BEG to END. 422 "Remember the data from BEG to END.
@@ -551,4 +560,96 @@ the data away for latter retrieval, and possible indexing.
551\\{remember-mode-map}" 560\\{remember-mode-map}"
552 (set-keymap-parent remember-mode-map nil)) 561 (set-keymap-parent remember-mode-map nil))
553 562
563;; Notes buffer showing the notes:
564
565(defcustom remember-notes-buffer-name "*notes*"
566 "Name of the notes buffer.
567Setting it to *scratch* will hijack the *scratch* buffer for the
568purpose of storing notes."
569 :type 'string
570 :version "24.4")
571
572(defcustom remember-notes-initial-major-mode nil
573 "Major mode to set to notes buffer when it's created.
574If set to nil will use the same mode as `initial-major-mode'."
575 :type '(choice (const :tag "Same as `initial-major-mode'" nil)
576 (function :tag "Major mode" text-mode))
577 :version "24.4")
578
579(defcustom remember-notes-bury-on-kill t
580 "Whether to bury notes buffer instead of killing."
581 :type 'boolean
582 :version "24.4")
583
584(defun remember-notes-save-and-bury-buffer ()
585 "Saves and buries current buffer.
586Buffer is saved only if `buffer-modified-p' returns non-nil."
587 (interactive)
588 (when (buffer-modified-p)
589 (save-buffer))
590 (bury-buffer))
591
592
593
594(defvar remember-notes-mode-map
595 (let ((map (make-sparse-keymap)))
596 (define-key map "\C-c\C-c" 'remember-notes-save-and-bury-buffer)
597 map)
598 "Keymap used in remember-notes mode.")
599
600(define-minor-mode remember-notes-mode
601 "Minor mode for the `remember-notes' buffer."
602 nil nil nil
603 (cond
604 (remember-notes-mode
605 (add-hook 'kill-buffer-query-functions
606 #'remember-notes--kill-buffer-query nil t)
607 (setq buffer-save-without-query t))))
608
609;;;###autoload
610(defun remember-notes (&optional switch-to)
611 "Creates notes buffer and switches to it if called interactively.
612
613If a notes buffer created by a previous invocation of this
614function already exist, it will be returned. Otherwise a new
615buffer will be created whose content will be read from file
616pointed by `remember-data-file'. If a buffer visiting this file
617already exist, that buffer will be used instead of creating a new
618one (see `find-file-noselect' function for more details).
619
620Name of the created buffer is taken from `remember-notes-buffer-name'
621variable and if a buffer with that name already exist (but was not
622created by this function), it will be first killed.
623\\<remember-notes-mode-map>
624`remember-notes-mode' is active in the notes buffer which by default
625contains only one \\[save-and-bury-buffer] binding which saves and
626buries the buffer.
627
628Function returns notes buffer. When called interactively,
629switches to it as well.
630
631Notes buffer is meant for keeping random notes which you'd like to
632preserve across Emacs restarts. The notes will be stored in the
633`remember-data-file'."
634 (interactive "p")
635 (let ((buf (or (find-buffer-visiting remember-data-file)
636 (with-current-buffer (find-file-noselect remember-data-file)
637 (and remember-notes-buffer-name
638 (not (get-buffer remember-notes-buffer-name))
639 (rename-buffer remember-notes-buffer-name))
640 (funcall (or remember-notes-initial-major-mode
641 initial-major-mode))
642 (remember-notes-mode 1)
643 (current-buffer)))))
644 (when switch-to
645 (switch-to-buffer buf))
646 buf))
647
648(defun remember-notes--kill-buffer-query ()
649 (when (buffer-modified-p)
650 (save-buffer))
651 (if remember-notes-bury-on-kill
652 (bury-buffer)
653 t))
654
554;;; remember.el ends here 655;;; remember.el ends here