At Sun, 16 Jan 2011 05:41:06 -0500, Leo Alekseyev wrote: > > Guided by Matt's suggestion I started digging further. I see the > problem, but I don't know how to fix it other than by making crude > changes directly to source in org.el. > > Both the command path and the file link path need to be properly > formatted for Windows. In particular, in org-file-apps list, I need > something like ("\\.jnt\\'" . (format "%s %%s" (w32-short-file-name > "C:\\Program Files\\Windows Journal\\Journal.exe"))). But, this > expression doesn't work verbatim. If I evaluate (format....) and > paste the result as the cdr of the dotted pair, e.g. ("\\.jnt\\'" . > "c:/PROGRA~1/WI0FCF~1/Journal.exe %s"), the command is invoked. So, > question 1: How do I eval the (format...) expression automatically?.. If you set `org-file-apps' in your init file via setq you can use backquotes: (setq org-file-apps `(("\\.jnt\\'" . ,(format "%s %%s" (w32-short-file-name "C:\\Program Files\\Windows Journal\\Journal.exe"))))) Cf. http://www.gnu.org/s/emacs/manual/html_node/elisp/Backquote.html > > A more serious problem is that emacs is failing to correctly convert > slashes to backslashes in the file path. My emacs is launched by > cygwin, and so apparently it thinks that slashes are OK, but in fact > they are not. Here are the explicit modifications to org-find-file in > org.el that are needed to get things to work: > > Original code (doesn't work under Windows): > (setq cmd (replace-match > (save-match-data > (shell-quote-argument > (convert-standard-filename file))) > t t cmd))) > > Here's what works: > (setq cmd (replace-match > (w32-short-file-name (save-match-data > (convert-standard-filename > (replace-regexp-in-string "/" "\\" file t t)))) t t cmd)) > > Note that instead of (convert-standard-filename file) I need to > explicitly replace slashes with backslashes, and shell-quote-argument > must be replaced with w32-short-file-name. So, question 2: Is there a > way to make these modifications without patching org?.. Not sure. Maybe you could perform the translation with a translation function? C-h v org-link-translation-function RET ,----[ *Help* ] | org-link-translation-function is a variable defined in `org.el'. | Its value is nil | | This variable is potentially risky when used as a file local variable. | | Documentation: | Function to translate links with different syntax to Org syntax. | This can be used to translate links created for example by the Planner | or emacs-wiki packages to Org syntax. | The function must accept two parameters, a TYPE containing the link | protocol name like "rmail" or "gnus" as a string, and the linked path, | which is everything after the link protocol. It should return a cons | with possibly modified values of type and path. | Org contains a function for this, so if you set this variable to | `org-translate-link-from-planner', you should be able follow many | links created by planner. | | You can customize this variable. | | [back] `---- Best, -- David -- OpenPGP... 0x99ADB83B5A4478E6 Jabber.... dmjena@jabber.org Email..... dmaus@ictsoc.de