emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] trunk r114319: Add a major-mode for the *Messages* buffer


From: Glenn Morris
Subject: [Emacs-diffs] trunk r114319: Add a major-mode for the *Messages* buffer
Date: Tue, 17 Sep 2013 07:41:59 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 114319
revision-id: address@hidden
parent: address@hidden
committer: Glenn Morris <address@hidden>
branch nick: trunk
timestamp: Tue 2013-09-17 00:39:54 -0700
message:
  Add a major-mode for the *Messages* buffer
  
  Ref: http://lists.gnu.org/archive/html/emacs-devel/2010-02/msg00135.html
  
  * lisp/simple.el (messages-buffer-mode): New major mode.
  (messages-buffer): New function.
  
  * lisp/startup.el (normal-top-level): Switch mode of *Messages* buffer.
  
  * src/xdisp.c (message_dolog): If we create *Messages*,
  switch it to messages-buffer-mode.
  
  * lisp/emacs-lisp/ert.el (ert--force-message-log-buffer-truncation)
  (ert-run-test): Use `message-buffer' function.
  (ert--force-message-log-buffer-truncation): Ignore read-only.
  
  * lisp/help.el (view-echo-area-messages): Use `message-buffer' function.
  
  * lisp/mail/emacsbug.el (report-emacs-bug): Use `message-buffer' function.
  
  * lisp/gnus/gnus-util.el (gnus-message-with-timestamp-1):
  Use `message-buffer' function if available.  Ignore read-only.
  
  * etc/NEWS: Mention this.
modified:
  etc/NEWS                       news-20100311060928-aoit31wvzf25yr1z-1
  lisp/ChangeLog                 changelog-20091113204419-o5vbwnq5f7feedwu-1432
  lisp/emacs-lisp/ert.el         ert.el-20110112160650-056hnl9qhpjvjicy-2
  lisp/gnus/ChangeLog            changelog-20091113204419-o5vbwnq5f7feedwu-1433
  lisp/gnus/gnus-util.el         
gnusutil.el-20091113204419-o5vbwnq5f7feedwu-1140
  lisp/help.el                   help.el-20091113204419-o5vbwnq5f7feedwu-280
  lisp/mail/emacsbug.el          emacsbug.el-20091113204419-o5vbwnq5f7feedwu-73
  lisp/simple.el                 simple.el-20091113204419-o5vbwnq5f7feedwu-403
  lisp/startup.el                startup.el-20091113204419-o5vbwnq5f7feedwu-260
  src/ChangeLog                  changelog-20091113204419-o5vbwnq5f7feedwu-1438
  src/xdisp.c                    xdisp.c-20091113204419-o5vbwnq5f7feedwu-240
=== modified file 'etc/NEWS'
--- a/etc/NEWS  2013-09-15 17:58:46 +0000
+++ b/etc/NEWS  2013-09-17 07:39:54 +0000
@@ -93,6 +93,10 @@
 ** `initial-buffer-choice' can now specify a function to set up the
 initial buffer.
 
+** The *Messages* buffer is created in a new major mode `messages-buffer-mode',
+and read-only.  Code that might create the *Messages* buffer should
+call the function `messages-buffer' to do so and set the mode.
+
 ** `remember-notes' creates a buffer whose content is saved on kill-emacs.
 You may think of it as a *scratch* buffer whose content is preserved.
 In fact, it was designed as a replacement for *scratch* buffer and can

=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2013-09-17 07:31:09 +0000
+++ b/lisp/ChangeLog    2013-09-17 07:39:54 +0000
@@ -1,3 +1,14 @@
+2013-09-17  Glenn Morris  <address@hidden>
+
+       * simple.el (messages-buffer-mode): New major mode.
+       (messages-buffer): New function.
+       * startup.el (normal-top-level): Switch mode of *Messages* buffer.
+       * emacs-lisp/ert.el (ert--force-message-log-buffer-truncation)
+       (ert-run-test): Use `message-buffer' function.
+       (ert--force-message-log-buffer-truncation): Ignore read-only.
+       * help.el (view-echo-area-messages): Use `message-buffer' function.
+       * mail/emacsbug.el (report-emacs-bug): Use `message-buffer' function.
+
 2013-09-17  Stefan Monnier  <address@hidden>
 
        * subr.el (eval-after-load): Preserve evaluation order (bug#15389).

=== modified file 'lisp/emacs-lisp/ert.el'
--- a/lisp/emacs-lisp/ert.el    2013-08-09 21:22:44 +0000
+++ b/lisp/emacs-lisp/ert.el    2013-09-17 07:39:54 +0000
@@ -785,7 +785,7 @@
   "Immediately truncate *Messages* buffer according to `message-log-max'.
 
 This can be useful after reducing the value of `message-log-max'."
-  (with-current-buffer (get-buffer-create "*Messages*")
+  (with-current-buffer (messages-buffer)
     ;; This is a reimplementation of this part of message_dolog() in xdisp.c:
     ;; if (NATNUMP (Vmessage_log_max))
     ;;   {
@@ -798,7 +798,8 @@
             (end (save-excursion
                    (goto-char (point-max))
                    (forward-line (- message-log-max))
-                   (point))))
+                   (point)))
+            (inhibit-read-only t))
         (delete-region begin end)))))
 
 (defvar ert--running-tests nil
@@ -818,7 +819,7 @@
   (setf (ert-test-most-recent-result ert-test) nil)
   (cl-block error
     (let ((begin-marker
-           (with-current-buffer (get-buffer-create "*Messages*")
+           (with-current-buffer (messages-buffer)
              (point-max-marker))))
       (unwind-protect
           (let ((info (make-ert--test-execution-info
@@ -837,7 +838,7 @@
                   (ert--run-test-internal info))
               (let ((result (ert--test-execution-info-result info)))
                 (setf (ert-test-result-messages result)
-                      (with-current-buffer (get-buffer-create "*Messages*")
+                      (with-current-buffer (messages-buffer)
                         (buffer-substring begin-marker (point-max))))
                 (ert--force-message-log-buffer-truncation)
                 (setq should-form-accu (nreverse should-form-accu))

=== modified file 'lisp/gnus/ChangeLog'
--- a/lisp/gnus/ChangeLog       2013-09-16 23:22:02 +0000
+++ b/lisp/gnus/ChangeLog       2013-09-17 07:39:54 +0000
@@ -1,3 +1,8 @@
+2013-09-17  Glenn Morris  <address@hidden>
+
+       * gnus-util.el (gnus-message-with-timestamp-1):
+       Use `message-buffer' function if available.  Ignore read-only.
+
 2013-09-16  Katsumi Yamaoka  <address@hidden>
 
        * message.el (message-expand-group, message-completion-in-region):

=== modified file 'lisp/gnus/gnus-util.el'
--- a/lisp/gnus/gnus-util.el    2013-08-01 03:51:41 +0000
+++ b/lisp/gnus/gnus-util.el    2013-09-17 07:39:54 +0000
@@ -514,11 +514,14 @@
                             (> message-log-max 0)
                             (/= (length str) 0))
                    (setq time (current-time))
-                   (with-current-buffer (get-buffer-create "*Messages*")
+                   (with-current-buffer (if (fboundp 'messages-buffer)
+                                            (messages-buffer)
+                                          (get-buffer-create "*Messages*"))
                      (goto-char (point-max))
-                     (insert ,timestamp str "\n")
-                     (forward-line (- message-log-max))
-                     (delete-region (point-min) (point))
+                     (let ((inhibit-read-only t))
+                       (insert ,timestamp str "\n")
+                       (forward-line (- message-log-max))
+                       (delete-region (point-min) (point)))
                      (goto-char (point-max))))
                  str)
                 (gnus-add-timestamp-to-message

=== modified file 'lisp/help.el'
--- a/lisp/help.el      2013-08-08 23:59:14 +0000
+++ b/lisp/help.el      2013-09-17 07:39:54 +0000
@@ -1,7 +1,6 @@
 ;;; help.el --- help commands for Emacs
 
-;; Copyright (C) 1985-1986, 1993-1994, 1998-2013 Free Software
-;; Foundation, Inc.
+;; Copyright (C) 1985-1986, 1993-1994, 1998-2013 Free Software Foundation, Inc.
 
 ;; Maintainer: FSF
 ;; Keywords: help, internal
@@ -412,7 +411,7 @@
 The number of messages retained in that buffer
 is specified by the variable `message-log-max'."
   (interactive)
-  (with-current-buffer (get-buffer-create "*Messages*")
+  (with-current-buffer (messages-buffer)
     (goto-char (point-max))
     (display-buffer (current-buffer))))
 

=== modified file 'lisp/mail/emacsbug.el'
--- a/lisp/mail/emacsbug.el     2013-02-10 01:56:25 +0000
+++ b/lisp/mail/emacsbug.el     2013-09-17 07:39:54 +0000
@@ -1,7 +1,7 @@
 ;;; emacsbug.el --- command to report Emacs bugs to appropriate mailing list
 
-;; Copyright (C) 1985, 1994, 1997-1998, 2000-2013 Free Software
-;; Foundation, Inc.
+;; Copyright (C) 1985, 1994, 1997-1998, 2000-2013
+;;   Free Software Foundation, Inc.
 
 ;; Author: K. Shane Hartman
 ;; Maintainer: FSF
@@ -160,7 +160,7 @@
                             (report-emacs-bug-can-use-osx-open)))
         user-point message-end-point)
     (setq message-end-point
-         (with-current-buffer (get-buffer-create "*Messages*")
+         (with-current-buffer (messages-buffer)
            (point-max-marker)))
     (compose-mail report-emacs-bug-address topic)
     ;; The rest of this does not execute if the user was asked to

=== modified file 'lisp/simple.el'
--- a/lisp/simple.el    2013-09-10 17:13:48 +0000
+++ b/lisp/simple.el    2013-09-17 07:39:54 +0000
@@ -7344,6 +7344,18 @@
         buffer-invisibility-spec)
     (setq buffer-invisibility-spec nil)))
 
+(define-derived-mode messages-buffer-mode special-mode "Messages"
+  "Major mode used in the \"*Messages*\" buffer.")
+
+(defun messages-buffer ()
+  "Return the \"*Messages*\" buffer.
+If it does not exist, create and it switch it to `messages-buffer-mode'."
+  (or (get-buffer "*Messages*")
+      (with-current-buffer (get-buffer-create "*Messages*")
+        (messages-buffer-mode)
+        (current-buffer))))
+
+
 ;; Minibuffer prompt stuff.
 
 ;;(defun minibuffer-prompt-modification (start end)

=== modified file 'lisp/startup.el'
--- a/lisp/startup.el   2013-08-05 14:26:57 +0000
+++ b/lisp/startup.el   2013-09-17 07:39:54 +0000
@@ -1,7 +1,6 @@
 ;;; startup.el --- process Emacs shell arguments  -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985-1986, 1992, 1994-2013 Free Software Foundation,
-;; Inc.
+;; Copyright (C) 1985-1986, 1992, 1994-2013 Free Software Foundation, Inc.
 
 ;; Maintainer: FSF
 ;; Keywords: internal
@@ -494,6 +493,7 @@
     (setq command-line-processed t)
     (let ((dir default-directory))
       (with-current-buffer "*Messages*"
+        (messages-buffer-mode)
         ;; Make it easy to do like "tail -f".
         (set (make-local-variable 'window-point-insertion-type) t)
         ;; Give *Messages* the same default-directory as *scratch*,

=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2013-09-17 07:36:35 +0000
+++ b/src/ChangeLog     2013-09-17 07:39:54 +0000
@@ -1,3 +1,8 @@
+2013-09-17  Glenn Morris  <address@hidden>
+
+       * xdisp.c (message_dolog): If we create *Messages*,
+       switch it to messages-buffer-mode.
+
 2013-09-17  Paul Eggert  <address@hidden>
 
        Don't overuse 'const' in types of locals.

=== modified file 'src/xdisp.c'
--- a/src/xdisp.c       2013-09-13 15:03:51 +0000
+++ b/src/xdisp.c       2013-09-17 07:39:54 +0000
@@ -1,7 +1,6 @@
 /* Display generation from window structure and buffer text.
 
-Copyright (C) 1985-1988, 1993-1995, 1997-2013 Free Software Foundation,
-Inc.
+Copyright (C) 1985-1988, 1993-1995, 1997-2013 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -9538,7 +9537,20 @@
 
       old_deactivate_mark = Vdeactivate_mark;
       oldbuf = current_buffer;
-      Fset_buffer (Fget_buffer_create (Vmessages_buffer_name));
+
+      /* Ensure the Messages buffer exists, and switch to it.
+         If we created it, set the major-mode.  */
+      {
+        int newbuffer = 0;
+        if (NILP (Fget_buffer (Vmessages_buffer_name))) newbuffer = 1;
+
+        Fset_buffer (Fget_buffer_create (Vmessages_buffer_name));
+
+        if (newbuffer &&
+            !NILP (Ffboundp (intern ("messages-buffer-mode"))))
+          call0 (intern ("messages-buffer-mode"));
+      }
+
       bset_undo_list (current_buffer, Qt);
 
       oldpoint = message_dolog_marker1;


reply via email to

[Prev in Thread] Current Thread [Next in Thread]