From 5ecd83312bd0d48204f63d40ea0447fe86b7d541 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mos=C3=A8=20Giordano?= <giordano.mose@libero.it>
Date: Sat, 6 Apr 2013 20:18:07 +0200
Subject: [PATCH 2/2] improve completion in LaTeX-arg-usepackage

* latex.el (LaTeX-provided-class-options-member): Fix typo.
(LaTeX-arg-usepackage): Provide completion for more than one
package in mandatory argument.
---
 ChangeLog |    6 +++++
 latex.el  |   79 +++++++++++++++++++++++++++++++++++--------------------------
 2 files changed, 52 insertions(+), 33 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 75ea747..bb742f8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2013-04-06  Mosè Giordano  <giordano.mose@libero.it>
+
+	* latex.el (LaTeX-provided-class-options-member): Fix typo.
+	(LaTeX-arg-usepackage): Provide completion for more than one
+	package in mandatory argument.
+
 2013-04-05  Mosè Giordano  <giordano.mose@libero.it>
 
 	* latex.el (LaTeX-global-class-files): New variable.
diff --git a/latex.el b/latex.el
index 2ebddef..be1083b 100644
--- a/latex.el
+++ b/latex.el
@@ -1336,7 +1336,7 @@ See also `LaTeX-provided-package-options'.")
 (defun LaTeX-provided-class-options-member (class option)
   "Return non-nil if OPTION has been given to CLASS at load time.
 The value is actually the tail of the list of options given to CLASS."
-  (member option (cdr (assoc package LaTeX-provided-class-options))))
+  (member option (cdr (assoc class LaTeX-provided-class-options))))
 
 (defvar LaTeX-provided-package-options nil
   "Alist of options provided to LaTeX packages.
@@ -1836,38 +1836,51 @@ OPTIONAL and IGNORE are ignored."
 (defun LaTeX-arg-usepackage (optional)
   "Insert arguments to usepackage.
 OPTIONAL is ignored."
-  (let ((TeX-file-extensions '("sty"))
-	(TeX-arg-input-file-search (or TeX-arg-input-file-search 'ask)))
-    (TeX-arg-input-file nil "Package")
-    (save-excursion
-      (search-backward-regexp "{\\(.*\\)}")
-      (let* ((package (TeX-match-buffer 1))
-	     (var (intern (format "LaTeX-%s-package-options" package)))
-	     (crm-separator ",")
-	     (TeX-arg-opening-brace LaTeX-optop)
-	     (TeX-arg-closing-brace LaTeX-optcl)
-	     options)
-	(if (or (and (boundp var)
-		     (listp (symbol-value var)))
-		(fboundp var))
-	    (if (functionp var)
-		(setq options (funcall var))
-	      (when (symbol-value var)
-		(setq options
-		      (mapconcat 'identity
-				 (TeX-completing-read-multiple
-				  "Options: " (mapcar 'list (symbol-value var)))
-				 ","))))
-	  (setq options (read-string "Options: ")))
-	(unless (zerop (length options))
-	  (let ((opts (LaTeX-listify-package-options options)))
-	    (TeX-add-to-alist 'LaTeX-provided-package-options
-			      (list (cons package opts))))
-	  (TeX-argument-insert options t)
-	  ;; When `babel' package is loaded with options, load also language
-	  ;; style files.
-	  (when (string-equal package "babel")
-	    (mapc 'TeX-run-style-hooks (LaTeX-babel-active-languages))))))))
+  (let* ((TeX-file-extensions '("sty"))
+	 (crm-separator ",")
+	 packages var options)
+    (unless TeX-global-input-files
+      (if (if (eq TeX-arg-input-file-search 'ask)
+	      (not (y-or-n-p "Find packages yourself? "))
+	    TeX-arg-input-file-search)
+	  (progn
+	    (message "Searching for LaTeX packages...")
+	    (setq TeX-global-input-files
+		  (mapcar 'list (TeX-search-files-by-type
+				 'texinputs 'global t t))))))
+    (setq packages (TeX-completing-read-multiple
+		    "Packages: " TeX-global-input-files))
+    (mapc 'TeX-run-style-hooks packages)
+    (setq var (if (= 1 (length packages))
+		  (intern (format "LaTeX-%s-package-options" (car packages)))
+		;; Something like `\usepackage[options]{pkg1,pkg2,pkg3,...}' is
+		;; allowed (provided that pkg1, pkg2, pkg3, ... accept same
+		;; options).  When there is more than one package, set `var' to
+		;; a dummy value so next `if' enters else form.
+		t))
+    (if (or (and (boundp var)
+		 (listp (symbol-value var)))
+	    (fboundp var))
+	(if (functionp var)
+	    (setq options (funcall var))
+	  (when (symbol-value var)
+	    (setq options
+		  (mapconcat 'identity
+			     (TeX-completing-read-multiple
+			      "Options: " (mapcar 'list (symbol-value var)))
+			     ","))))
+      (setq options (read-string "Options: ")))
+    (unless (zerop (length options))
+      (let ((opts (LaTeX-listify-package-options options)))
+	(mapc (lambda (elt)
+		(TeX-add-to-alist 'LaTeX-provided-package-options
+				  (list (cons elt opts))))
+	      packages))
+      (insert LaTeX-optop options LaTeX-optcl)
+      ;; When `babel' is loaded with options, load also language style files.
+      (when (member "babel" packages)
+	(mapc 'TeX-run-style-hooks (LaTeX-babel-active-languages))))
+    (insert TeX-grop (mapconcat 'identity packages ",") TeX-grcl)))
 
 (defcustom LaTeX-search-files-type-alist
   '((texinputs "${TEXINPUTS.latex}" ("tex/generic/" "tex/latex/")
-- 
1.7.10.4

