Two issues with opening binary files.
1) when I (accidentally?) open a binary executable file it often
kills my w98 X server. I get X errors like this just before the demise:
xemacs: X Error of failed request: BadDrawable (invalid Pixmap or Window paramete
r)
Major opcode of failed request: 64 (X_PolyPoint)
Resource id in failed request: 0x4c010005
Serial number of failed request: 36624
Current serial number in output stream: 38278
xemacs: X Error of failed request: BadLength (poly request too large or internal
Xlib length error)
Major opcode of failed request: 92 (X_LookupColor)
Serial number of failed request: 36625
Current serial number in output stream: 38278
So, opening binary files is bad, so I decided to write an
advice type thing to open the executable in hexl mode.
;; Open files that begin with 'ELF' in some other mode.
(defvar executable-pattern (concat "^" (regexp-opt (mapcar 'regexp-quote
'("\177ELF")) t)))
(defadvice set-auto-mode (around look-for-executables first activate)
(if (save-excursion
(goto-char (point-min))
(looking-at executable-pattern))
(hexl-mode)
ad-do-it))
This seemed to work fine until tar mode came along:
(defun tar-set-auto-mode ()
(interactive)
(if (and buffer-file-name
(string-match tar-regexp buffer-file-name))
(tar-mode)
(tar-real-set-auto-mode)))
(if (not (fboundp 'tar-real-normal-mode))
(fset 'tar-real-normal-mode (symbol-function 'normal-mode)))
(fset 'normal-mode 'tar-normal-mode)
(if (not (fboundp 'tar-real-set-auto-mode))
(fset 'tar-real-set-auto-mode (symbol-function 'set-auto-mode)))
(fset 'set-auto-mode 'tar-set-auto-mode)
Tar mode redefines set-auto-mode with different arguments
and was completely antisocial with my advice.
So, the questions are
1) Is there/Shouldn't there be a hook for catching binary files
and displaying them in a default 'binary' mode, like hexl.
2) shouldn't set-auto-mode have some sort of pre hook that
lets arbitrary hooks be tried until one of them returns true
eg 'run-hook-with-args-until-success'. Tar mode
would be a hook that intercepts files that end with .tar
-jeff