Subject: 23.0.60; [PATCH] auto-insert: use expand-file-name rather than "concat".

From: "Eric Hanchrow" <[email-masked]>
Date: Sun, 7 Dec 2008 16:20:40 -0800

Please write in English if possible, because the Emacs maintainers
usually do not have translators to read other languages for them.

Your bug report will be posted to the [email-masked] mailing list.

Please describe exactly what actions triggered the bug
and the precise symptoms of the bug:

I put this in my .emacs, and evaluated it:

(add-to-list 'auto-insert-alist `(scheme-mode
                                    .  ,(expand-file-name
"~/doodles/plt-scheme/v4-script-template.ss")))

I then visited a non-existent file whose name ended wit ".ss", and noted
that it was properly put into scheme-mode -- but it remained empty,
whereas I'd wanted to see the contents of v4-script-template.ss.

I determined that the auto-insert function was doing nothing when the
file name was absolute (but it appeared to do the right thing for
relative paths).

Anyway, here's the patch that works for me:

  From 39bd280f55edd84d025b166a799c5a62bd2a6f9a Mon Sep 17 00:00:00 2001
  From: Eric Hanchrow <[email-masked]>
  Date: Sun, 7 Dec 2008 08:09:24 -0800
  Subject: [PATCH] auto-insert: use expand-file-name rather than "concat".

  ---
   lisp/autoinsert.el |   52
+++++++++++++++++++++++++++-------------------------
   1 files changed, 27 insertions(+), 25 deletions(-)

  diff --git a/lisp/autoinsert.el b/lisp/autoinsert.el
  index 92a5f9f..3f555f8 100644
  --- a/lisp/autoinsert.el
  +++ b/lisp/autoinsert.el
  @@ -343,31 +343,33 @@ Matches the visited file name against the
elements of `auto-insert-alist'."

           ;; Now, if we found something, do it
           (and action
  -	      (if (stringp action)
  -		  (file-readable-p (concat auto-insert-directory action))
  -		t)
  -	      (if auto-insert-query
  -		  (or (if (eq auto-insert-query 'function)
  -			  (eq this-command 'auto-insert))
  -		      (y-or-n-p (format auto-insert-prompt desc)))
  -		t)
  -	      (mapc
  -	       (lambda (action)
  -		 (if (stringp action)
  -		     (if (file-readable-p
  -			  (setq action (concat auto-insert-directory action)))
  -			 (insert-file-contents action))
  -		   (save-window-excursion
  -		     ;; make buffer visible before skeleton or function
  -		     ;; which might ask the user for something
  -		     (switch-to-buffer (current-buffer))
  -		     (if (and (consp action)
  -			      (not (eq (car action) 'lambda)))
  -			 (skeleton-insert action)
  -		       (funcall action)))))
  -	       (if (vectorp action)
  -		   action
  -		 (vector action))))
  +	      (let ((abs-file-name
  +                     (and (stringp action)
  +                          (expand-file-name action  auto-insert-directory))))
  +                (and
  +                 (stringp abs-file-name)
  +                 (if auto-insert-query
  +                     (or (if (eq auto-insert-query 'function)
  +                             (eq this-command 'auto-insert))
  +                         (y-or-n-p (format auto-insert-prompt desc)))
  +                   t)
  +                 (mapc
  +                  (lambda (action)
  +                    (if (stringp action)
  +                        (if (file-readable-p
  +                             (setq action (expand-file-name action
auto-insert-directory)))
  +                            (insert-file-contents action))
  +                      (save-window-excursion
  +                        ;; make buffer visible before skeleton or function
  +                        ;; which might ask the user for something
  +                        (switch-to-buffer (current-buffer))
  +                        (if (and (consp action)
  +                                 (not (eq (car action) 'lambda)))
  +                            (skeleton-insert action)
  +                          (funcall action)))))
  +                  (if (vectorp action)
  +                      action
  +                    (vector abs-file-name))))))
           (and (buffer-modified-p)
                (not (eq this-command 'auto-insert))
                (set-buffer-modified-p (eq auto-insert t)))))
  --
  1.6.1.rc1.35.gae26e

If Emacs crashed, and you have the Emacs process in the gdb debugger,
please include the output from the following gdb commands:
    `bt full' and `xbacktrace'.
If you would like to further debug the crash, please read the file
/usr/local/src/emacs-with-my-tweaks.git/etc/DEBUG for instructions.

In GNU Emacs 23.0.60.1 (i686-pc-linux-gnu, GTK+ Version 2.14.4)
 of 2008-12-06 on enver-laptop
Windowing system distributor `The X.Org Foundation', version 11.0.10502000
Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: nil
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: nil
  value of $LANG: nil
  value of $XMODIFIERS: nil
  locale-coding-system: utf-8-unix
  default-enable-multibyte-characters: t

Major mode: Diff

Minor modes in effect:
  erc-ring-mode: t
  erc-pcomplete-mode: t
  erc-netsplit-mode: t
  erc-button-mode: t
  erc-fill-mode: t
  erc-stamp-mode: t
  erc-autojoin-mode: t
  erc-track-mode: t
  erc-match-mode: t
  erc-services-mode: t
  erc-networks-mode: t
  erc-irccontrols-mode: t
  erc-noncommands-mode: t
  erc-readonly-mode: t
  desktop-save-mode: t
  display-time-mode: t
  global-auto-revert-mode: t
  diff-auto-refine-mode: t
  shell-dirtrack-mode: t
  tooltip-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  global-auto-composition-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent input:
SPC " y o w " M-> <return> M-p C-p C-p C-p C-p M-b
M-d M e SPC < n o b o d y @ n o q <backspace> w h e
r e . c o m > M-> <return> M-p C-p C-p C-p C-p M-f
M-f C-b \ n M-> <return> M-p C-M-p C-n M-m C-M-k C-M-u
C-y C-M-k C-M-p M-1 M-( e x t r a c e <backspace> t
- a l l - f i e l d s C-M-o C-M-u C-M-q M-> <return>
M-p C-u C-p M-f M-f C-d C-d C-n M-b M-b M-b C-b C-M-k
M-SPC C-f M-d s n r u <backspace> <backspace> u r k
@ z o t z . o r g M-> <return> C-x b . s s C-g C-x
b i d o <return> M-1 C-x $ C-x b s h e <return> c d
SPC / u s r l o c <tab> <backspace> <backspace> <backspace>
/ l o c <tab> r <tab> <backspace> <backspace> s r <tab>
e m <tab> - <tab> w <tab> <return> g i t SPC s h o
w <return> C-x 1 C-c C-p M-0 C-l M-> M-p SPC - - i
g n o r e - a l l - s p a c e <return> C-c C-p M-0
C-l C-v M-> M-p C-a C-e C-c C-u f o r SPC <M-backspace>
g i t SPC f o r m a t - p a t h <backspace> c h SPC
H E A D ^ <return> C-p M-x f f a p <return> <return>
C-x b i n i <return> C-a C-p M-m C-M-SPC M-w M-x r
e p o r t - e m <tab> <return> C-x o C-x b C-x b <return>
M-x M-p <return>

Recent messages:
Completed
Partially completed
Type space to flush; repeat completion command to scroll
Completed
/usr/local/src/emacs-with-my-tweaks.git
Mark set
History item: 1
Mark set
History item: 1
Mark set
byte-code: Command attempted to use minibuffer while in minibuffer