yatex

changeset 194:2af7a6ba45cd dev

Add guidance completion for `\begin{'. Display guidance for intelligent newline.
author yuuji@gentei.org
date Mon, 09 Jan 2012 20:12:56 +0900
parents e216f9f347fa
children cf7352dfa40c
files yatex.el
diffstat 1 files changed, 53 insertions(+), 19 deletions(-) [+]
line diff
     1.1 --- a/yatex.el	Mon Jan 09 14:15:09 2012 +0900
     1.2 +++ b/yatex.el	Mon Jan 09 20:12:56 2012 +0900
     1.3 @@ -2,7 +2,7 @@
     1.4  ;;; Yet Another tex-mode for emacs - //野鳥//
     1.5  ;;; yatex.el rev. 1.74.6
     1.6  ;;; (c)1991-2011 by HIROSE Yuuji.[yuuji@yatex.org]
     1.7 -;;; Last modified Mon Jan  9 14:03:07 2012 on firestorm
     1.8 +;;; Last modified Mon Jan  9 18:56:57 2012 on firestorm
     1.9  ;;; $Id$
    1.10  ;;; The latest version of this software is always available at;
    1.11  ;;; http://www.yatex.org/
    1.12 @@ -829,7 +829,15 @@
    1.13  	  (insert "\n")
    1.14  	  (or exchange (exchange-point-and-mark)))
    1.15        (goto-char beg2)
    1.16 -      (YaTeX-intelligent-newline nil)
    1.17 +      (if (intern-soft (concat "YaTeX-intelligent-newline-" env))
    1.18 +	  (progn
    1.19 +	    (YaTeX-intelligent-newline nil)
    1.20 +	    (message
    1.21 +	     (cond
    1.22 +	      (YaTeX-japan "%s で次の行の入力に進みます。")
    1.23 +	      (t "`%s' produces the next line's template."))
    1.24 +	     (key-description
    1.25 +	      (car (where-is-internal 'YaTeX-intelligent-newline))))))
    1.26        (YaTeX-indent-line))
    1.27      (YaTeX-package-auto-usepackage env 'env)
    1.28      (if YaTeX-current-position-register
    1.29 @@ -1202,9 +1210,39 @@
    1.30      (goto-char beg)
    1.31      (YaTeX-insert-inherit (or open "{"))))
    1.32  
    1.33 +(defun YaTeX-get-macro-at-point (&optional p)
    1.34 +  "Get (La)TeX macro around point P."
    1.35 +  (interactive "d")
    1.36 +  (save-excursion
    1.37 +    (goto-char (setq p (or p (point))))
    1.38 +    (cond
    1.39 +     ((and (not (bobp))
    1.40 +	   (string-match "[a-zA-Z]" (char-to-string (preceding-char))))
    1.41 +      (skip-chars-backward "a-zA-Z")
    1.42 +      (if (and (= (preceding-char) ?\\)
    1.43 +	       (looking-at "\\([a-z]+\\)"))
    1.44 +	  (YaTeX-buffer-substring  (point) p))))))
    1.45 +
    1.46  (defun YaTeX-insert-braces (arg &optional open close)
    1.47    (interactive "p")
    1.48 -  (let (env)
    1.49 +  (let ((begend-guide
    1.50 +	 (function
    1.51 +	  (lambda ()
    1.52 +	    (if (equal (get 'YaTeX-insert-braces 'begend-guide) 2)
    1.53 +		nil			;if triggered thrice, do nothing
    1.54 +	      (momentary-string-display
    1.55 +	       (format
    1.56 +		(cond
    1.57 +		 (YaTeX-japan "{begin/end入力には %s を使いましょう}")
    1.58 +		 (t "{You don't understand Zen of `%s'!}"))
    1.59 +		(key-description
    1.60 +		 (car (where-is-internal 'YaTeX-make-begin-end))))
    1.61 +	       (point))
    1.62 +	      (put 'YaTeX-insert-braces 'begend-guide
    1.63 +		   (+ 1 (string-to-int ;increment counter of beg-end guidance
    1.64 +			 (prin1-to-string
    1.65 +			  (get 'YaTeX-insert-braces 'begend-guide)))))))))
    1.66 +	env macro not-literal)
    1.67      (cond
    1.68       ((YaTeX-jmode) (YaTeX-self-insert arg))
    1.69       ((not (YaTeX-closable-p)) (YaTeX-self-insert arg))
    1.70 @@ -1232,24 +1270,20 @@
    1.71       ((= (preceding-char) ?\\ )
    1.72        (insert "{\\}")
    1.73        (forward-char -2))		;matsu's hack ends here
    1.74 -     ((and (> (point) (+ (point-min) 4))
    1.75 -	   (save-excursion (backward-char 4) (looking-at "\\\\end"))
    1.76 -	   (not (YaTeX-literal-p))
    1.77 +     ((and (setq not-literal (not (YaTeX-literal-p)))
    1.78 +	   (equal "end" (setq macro (YaTeX-get-macro-at-point)))
    1.79  	   (setq env (YaTeX-inner-environment)))
    1.80 -      (if (equal (get 'YaTeX-insert-braces 'begend-guide) 2)
    1.81 -	  nil				;if triggered thrice, do nothing
    1.82 -	(momentary-string-display
    1.83 -	 (format
    1.84 -	  (cond
    1.85 -	   (YaTeX-japan "{begin/end入力には %s を使いましょう}")
    1.86 -	   (t "{You don't understand Zen of `%s'!}"))
    1.87 -	  (key-description (car (where-is-internal 'YaTeX-make-begin-end))))
    1.88 -	 (point))
    1.89 -	(put 'YaTeX-insert-braces 'begend-guide
    1.90 -	     (+ 1 (string-to-int	;increment counter of beg-end guidance
    1.91 -		   (prin1-to-string
    1.92 -		    (get 'YaTeX-insert-braces 'begend-guide))))))
    1.93 +      (funcall begend-guide)
    1.94        (insert (or open "{") env (or close "}")))
    1.95 +     ((and not-literal (equal "begin" macro))
    1.96 +      (setq env
    1.97 +	    (YaTeX-read-environment
    1.98 +	     (format "Begin environment(default %s): " YaTeX-env-name)))
    1.99 +      (if (string= "" env) (setq env YaTeX-env-name))
   1.100 +      (setq YaTeX-env-name env)
   1.101 +      (funcall begend-guide)
   1.102 +      (delete-region (- (point) 6) (point))
   1.103 +      (YaTeX-insert-begin-end env nil))
   1.104       (t
   1.105        (insert (or open "{") (or close "}"))
   1.106        (forward-char -1)