Updated patch, honor the field order defined in
`debian-control-*-fields'

-- 
Kanru
---
 elisp/dpkg-dev-el/debian-control-mode.el |   38 +++++++++++++++++--------------
 1 file changed, 21 insertions(+), 17 deletions(-)

--- a/elisp/dpkg-dev-el/debian-control-mode.el
+++ b/elisp/dpkg-dev-el/debian-control-mode.el
@@ -376,12 +376,12 @@
 		      (error "Couldn't find Package or Source field")))
 	  (fields (if binary-p
 		      debian-control-binary-fields
-		    debian-control-source-fields)))
+		    debian-control-source-fields))
+          (completion-ignore-case t))
      (list
       binary-p
-      (capitalize
-       (completing-read (format "Add %s package field: " (if binary-p "binary" "source"))
-			(mapcar #'(lambda (x) (cons x nil)) fields))))))
+      (completing-read (format "Add %s package field: " (if binary-p "binary" "source"))
+                       (mapcar #'(lambda (x) (cons x nil)) fields)))))
   (require 'cl)
   (let ((fields (if binary
 		    debian-control-binary-fields
@@ -421,26 +421,30 @@
 	;; If the field is already present, just jump to it
 	(if (setq x (assoc field curfields))
 	    (goto-char (cdr x))
-	  (let* ((pos (position field fields :test #'string-equal))
-		 (prevfields (subseq fields 0 pos))
-		 (nextfields (subseq fields (1+ pos)))
-		 (cur nil))
-	    (while (or prevfields
-		       nextfields)
+	  (let* ((pos (or (position field fields :test #'string-equal)
+                          -1))
+		 (prevfields (reverse (subseq fields 0 pos)))
+		 (nextfields (subseq fields (1+ pos))))
+	    (if (not (wholenump pos))
+                (goto-char (cdar curfields))
 	      (when prevfields
-		(when (setq x (assoc (pop prevfields) curfields))
-		  (setq prevfields nil nextfields nil)
-		  (goto-char (cdr x))))
+                (while (and (car prevfields)
+                            (not (assoc (car prevfields) curfields)))
+                  (pop prevfields))
+                (goto-char (cdr (assoc (car prevfields) curfields)))
+                (setq prevfields nil nextfields nil))
 	      (when nextfields
-		(when (setq x (assoc (pop nextfields) curfields))
-		  (setq prevfields nil nextfields nil)
-		  (goto-char (cdr x)))))
+                (while (and (car nextfields)
+                            (not (assoc (car nextfields) curfields)))
+                  (pop nextfields))
+                (goto-char (cdr (assoc (car nextfields) curfields)))
+                (setq prevfields nil nextfields nil)))
 	    ;; Hack: we don't want to add fields after Description
 	    (beginning-of-line)
 	    (when (looking-at "^Description")
 	      (forward-line -1))
 	    (end-of-line)
-	    (insert "\n" field ": ")))))))
+	    (insert "\n" (upcase-initials field) ": ")))))))
 
 (defun debian-control-visit-policy (format)
   "Visit the Debian Policy manual in format FORMAT.

Reply via email to