;; 2008

(defun deb-view-control-coding (arg-list)
  "Return coding system for the \"control\" file in a deb.
This function is for use from `file-coding-system-alist'.

ARG-LIST is arguments passed to `find-operation-coding-system'.
The only operation handled here is `insert-file-contents' with a
buffer filename \".deb-INFO!./control\", for which the return is
'utf-8, and for anything else the return is nil (letting
`find-operation-coding-system' try other things).

This is done as a function because the filename passed to
find-operation-coding-system by tar-mode is merely the archive
member \"./control\".  By looking at the buffer-file-name we can
tell if it's from a deb.

Note: This only works in emacs22, in emacs21 or xemacs21 tar-mode
does something a bit different and doesn't reach here (and
there's no buffer passed to coding system functions)."

  (and (eq (car arg-list) 'insert-file-contents) ;; first arg
       (consp (cadr arg-list)) ;; second arg like ("./control" . BUFFER)
       (let ((buffer (cdr (cadr arg-list))))
         (and (string-match "\\.deb-INFO!\\./control\\'"
                            (buffer-file-name buffer))
              'utf-8))))

(add-to-list 'file-coding-system-alist
             '("control" . deb-view-control-coding))

(provide 'deb-view-control-coding)
