From bda5d9e984bbb3dfdb68ae48bf133a80d3d2e532 Mon Sep 17 00:00:00 2001 From: psg <> Date: Mon, 23 Feb 2009 18:55:30 +0000 Subject: debian-el.el: Add code from Kevin Ryde to set deb-view control file coding system (Closes: #484027) --- debian-el.el | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) (limited to 'debian-el.el') diff --git a/debian-el.el b/debian-el.el index 81ad523..f791a1d 100644 --- a/debian-el.el +++ b/debian-el.el @@ -1,4 +1,4 @@ -;;; debian-el.el --- startup file for the debian-el package +`;;; debian-el.el --- startup file for the debian-el package ;;; Commentary: ;; @@ -66,6 +66,38 @@ (function (lambda () (define-key dired-mode-map "\C-d" 'deb-view-dired-view)))) +(when (member 'utf-8 (coding-system-list)) + ;; The following from Kevin Ryde + ;; Closes: #484027 + (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 'debian-el) ;;; debian-el.el ends here -- cgit v1.2.3