Prøv at checke variablen `exec-path' og se om den indeholder et
katalog der rammer xdvi.
Jeg har ikke den præcise forklaring, men jeg tror at det er noget i
stil med at når man starter en applikation som emacs ved at klikke i
finder, så starter den op med en meget minimal værdi for PATH
environment variablen hvorfra `exec-path' så initialiseres.
Nedenfor er noget kode jeg har sakset fra aquamacs som resetter
`exec-path' men du kan selvfølgelig også bare sætte den som du ønsker
det i din ".emacs".
Afhænngigt hvor hardcore en emacs bruger du er, og hvor mange
platforme du bevæger dig på, så er aquamacs en overvejelse værd. De
gør meget ud at integrere med OSX og havde som nævnt f.eks. løst
ovenstående problem og har en del udvidelser med som f.eks. auctex som
er et rigtig godt og meget avanceret TeX interface til emacs (auctex
findes dog også i Fink).
På den anden side opfører aquamacs sig til tider ikke helt som
standard emacs (det er samme kode base, men de konfigurerer ting
anderledes). Bemærk også at du skal have fat i det daglige snapshot
hvis du bruger et unicode tastatur layout og det har nogen problemer
med isearch.
URL'en for aquamacs er
http://aquamacs.org/.
Kode til håndtering ef exec-path:
;;; path fixup (stolen from aquamacs, mac-extra-functions.el)
(defvar shell-login-switch nil
"Command-line switch to be used with the shell to get a login shell.
If nil, a switch is automatically chosen depending on
`shell-file-name'.
This is relevant only for `mac-read-environment-vars-from-shell'.")
(defun mac-read-environment-vars-from-shell ()
"Import the environment from the system's default login shell
specified in `shell-file-name'."
(with-temp-buffer
;; execute 'printenv' with the default login shell,
;; running the shell with -l (to load the environment)
(setq default-directory "~/") ; ensure it can be executed
;; To Do: use call-process instead -> this here
;; will invoke two bashes
(let ((shell-login-switch
(or shell-login-switch
(if (string-match ".*/\\(ba\\|z\\)sh" shell-file-name)
"-l"
(if (string-match ".*/\\tcsh" shell-file-name)
""
(if (string-match ".*/ksh" shell-file-name)
"" ;; works for ksh
(message "Could not retrieve login shell environment with login shell: %s" shell-file-name)
;; won't work for csh, because it doesn't take -l -c ...
))))))
(call-process shell-file-name nil
t nil
shell-login-switch
shell-command-switch
"printenv"))
(goto-char (point-min))
(while (re-search-forward "^[A-Za-z_0-9]+=()\s*[^\x]*?
\s*}\s*$" nil t)
(replace-match "..." nil nil))
(goto-char (point-min))
(while (search-forward-regexp "^\\([A-Za-z_0-9]+\\)=\\(.*\\)$" nil t)
(setenv
(match-string 1)
(if (equal (match-string 1) "PATH")
(concat (getenv "PATH") ":" (match-string 2))
(match-string 2))))))
(defun mac-add-path-to-exec-path ()
"Add elements from environment variable `PATH' to `exec-path'."
(let ((l (split-string (getenv "PATH") ":")))
(mapc
(lambda (p)
(unless (member p l)
(nconc l (list p))))
exec-path)
(setq exec-path l)))
(unless (boundp 'aquamacs-version)
(mac-read-environment-vars-from-shell)
(mac-add-path-to-exec-path))
------------------------+-----------------------------------------------------
Christian Lynbech | christian #\@ defun #\. dk
------------------------+-----------------------------------------------------
Hit the philistines three times over the head with the Elisp reference manual.
- petonic@hal.com (Michael A. Petonic)