diff options
| author | Michal Nazarewicz | 2013-06-30 18:29:23 -0400 |
|---|---|---|
| committer | Stefan Monnier | 2013-06-30 18:29:23 -0400 |
| commit | ef099a941f7fb2d74ce1768388463f18b284f9c5 (patch) | |
| tree | 1573bfacf90fc940c297c5428c132e9e65318716 /lisp | |
| parent | 6d89e343ab402851d94e37b2ca79a67e4c6fb474 (diff) | |
| download | emacs-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/ChangeLog | 33 | ||||
| -rw-r--r-- | lisp/files.el | 13 | ||||
| -rw-r--r-- | lisp/startup.el | 3 | ||||
| -rw-r--r-- | lisp/textmodes/remember.el | 133 |
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 @@ | |||
| 1 | 2013-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 | |||
| 1 | 2013-06-30 Eli Zaretskii <eliz@gnu.org> | 21 | 2013-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 | ||
| 10 | 2013-06-30 Lars Magne Ingebrigtsen <larsi@gnus.org> | 30 | 2013-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 | ||
| 17 | 2013-06-30 Juanma Barranquero <lekktu@gmail.com> | 36 | 2013-06-30 Juanma Barranquero <lekktu@gmail.com> |
| 18 | 37 | ||
| @@ -28,8 +47,8 @@ | |||
| 28 | 47 | ||
| 29 | 2013-06-30 Dmitry Gutov <dgutov@yandex.ru> | 48 | 2013-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 | ||
| 34 | 2013-06-29 Eli Zaretskii <eliz@gnu.org> | 53 | 2013-06-29 Eli Zaretskii <eliz@gnu.org> |
| 35 | 54 | ||
| @@ -80,7 +99,7 @@ | |||
| 80 | 99 | ||
| 81 | 2013-06-27 Lars Magne Ingebrigtsen <larsi@gnus.org> | 100 | 2013-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 | ||
| 85 | 2013-06-27 Stephen Berman <stephen.berman@gmx.net> | 104 | 2013-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. |
| 386 | When set via customize, visited file of the notes buffer (if it | ||
| 387 | exists) 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. | ||
| 567 | Setting it to *scratch* will hijack the *scratch* buffer for the | ||
| 568 | purpose 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. | ||
| 574 | If 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. | ||
| 586 | Buffer 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 | |||
| 613 | If a notes buffer created by a previous invocation of this | ||
| 614 | function already exist, it will be returned. Otherwise a new | ||
| 615 | buffer will be created whose content will be read from file | ||
| 616 | pointed by `remember-data-file'. If a buffer visiting this file | ||
| 617 | already exist, that buffer will be used instead of creating a new | ||
| 618 | one (see `find-file-noselect' function for more details). | ||
| 619 | |||
| 620 | Name of the created buffer is taken from `remember-notes-buffer-name' | ||
| 621 | variable and if a buffer with that name already exist (but was not | ||
| 622 | created 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 | ||
| 625 | contains only one \\[save-and-bury-buffer] binding which saves and | ||
| 626 | buries the buffer. | ||
| 627 | |||
| 628 | Function returns notes buffer. When called interactively, | ||
| 629 | switches to it as well. | ||
| 630 | |||
| 631 | Notes buffer is meant for keeping random notes which you'd like to | ||
| 632 | preserve 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 |