2012-01-16 2 views
7

В режиме Org возможно иметь ссылки и верхние открытые ссылки. Как указано http://orgmode.org/orgcard.txt в Org-режиме C-u C-c C-o или mouse-3 заставляет ссылки открывать в другом окне. Как я могу сделать соответствующее для фреймов, то есть как я могу заставить ссылку открываться в другом фрейме?Как заставить Org-режим открыть ссылку в другом кадре?

То, что я хочу для C-C C-о работать по умолчанию, но C-у С-С С-о, чтобы заставить ссылку открываться в другом фрейме.

(Для различения окон и рам см http://www.gnu.org/software/emacs/manual/html_node/emacs/Frames.html.)

Я бегу Org-режим 7.6 в 23.3.1.

ответ

4

Я просто проверял, и вы можете получить его на работу, окружив org-open-at-point в a (let) как пользовательская функция.

В этом случае я просто префикс текущего org-link-frame-setup с вашим желаемым find-file-other-frame, чтобы убедиться, что если вы используете команду на другом типе ссылки, это не сработает.

(defun zin/org-open-other-frame() 
    "Jump to bookmark in another frame. See `bookmark-jump' for more." 
    (interactive) 
    (let ((org-link-frame-setup (acons 'file 'find-file-other-frame org-link-frame-setup))) 
    (org-open-at-point))) 

Я подозреваю, что вам нужно будет привязать его к последовательности клавиш, кроме C-u C-c C-o, если Emacs не позволит вам привязать его к этой последовательности конкретно.

+0

Это работает нормально. Да, это заставило ошибку, когда я попытался связать эту последовательность. Я использовал 'C-c 5 C-o'. Как вы будете продолжать, если вы все еще хотите исходную последовательность? Убить функцию 'C-c C-o' связан и сказать, что когда она вызывается с универсальным аргументом, она должна делать' zin/org-open-other-frame'? –

+0

Ну, если вы привяжете его к 'C-c 5 C-o', он предоставит вам вашу функцию open-other-frame без какого-либо влияния на обычную последовательность C-c C-o. Возможно, вы сможете использовать 'defadvice' для отображения универсального аргумента в' zin/org-open-other-frame', но я знаю, что универсальный аргумент уже используется в функции. Может быть проще хранить 'C-c C-o' для' open-other-window', 'C-c 5 C-o' для' open-other-frame' и 'C-u C-c C-o' для' open-with-emacs'. –

+0

Jonathan, Ваш код не работает в моих emacs (24.2.1), . Он говорит: определение функции символа недействительно: acons Есть ли у вас какие-либо идеи, где я могу получить эту аков? – yashaka

1

Посмотрите на переменную org-link-frame-setup (M-x customize-variable RET org-link-frame-setup). Докстрин должен объяснить подход.

+0

Если я установил бит 'file'' org-link-frame-setup' в 'find-file-other-frame', он всегда * (например, как если бы я использовал' Cc Co' и 'Cu Cc Co ') открывает файлы в новых кадрах. Это не то, что я хочу. Я хочу, чтобы он открывал ссылки в новом фрейме только тогда, когда я его принудительно (используйте 'C-u C-c C-o'), иначе мне нужно поведение по умолчанию. –

+0

Хммм, я не думаю, что это возможно из коробки. То, что вы могли бы сделать в качестве своего быстрого решения, - это настроить «org-file-apps» для рассматриваемых типов файлов и ввести что-то вроде «emacsclient -c% s» в качестве приложения. Таким образом, 'C-c C-o' откроет файл в новом фрейме, в то время как' C-u C-c C-o' откроет его, как определено в 'org-link-frame-setup' (например,в другом окне). Не совсем то, что вы ищете, но, может быть, достаточно близко? –

+0

Можно ли сделать это наоборот, чтобы 'C-c C-o' открывается, как определено в' org-link-frame-setup', но 'C-u C-c C-o' открывается в новом фрейме? Другое дело было бы интересно, если все остальное не получится. –

0

Я только проверил это в не настроенная Emacs:

emacs -q 
GNU Emacs 24.0.92.1 (i386-mingw-nt5.1.2600) of 2011-11-30 on MARVIN 
Org-mode version 7.7 

При запуске C-c C-o и C-u C-c C-o на ссылку, подобную следующей:

file:~/Dropbox/org/test.org::*Test 

Я в конечном итоге с нового кадра открыт в обоих случаях. C-u C-u C-c C-o открывает файл test.org в моей активной сессии emacsclient. При изменении ссылки на .../org/test.txt он по-прежнему открывается в новом фрейме, однако он не может создать новый файл (я предполагаю, что у меня нет соответствующего .txt на моем конце, что возможно).

Тестирование с помощью [mailto:[email protected]][test-mail]] также приводит к появлению новых кадров по умолчанию.


Edit: Значение org-link-frame-setup выглядит следующим образом (также по умолчанию, так как именно от emacs -q):

Its value is ((vm . vm-visit-folder-other-frame) 
(gnus . org-gnus-no-new-news) 
(file . find-file-other-window) 
(wl . wl-other-frame)) 
+0

В вашей настройке , каково значение переменной 'org-link-frame-setup'? Я запускаю Org-mode 7.6 в 23.3.1. –

+0

Странно, что вы получаете результат открытия ссылки в новом фрейме, когда переменная устанавливается 'find-file-other-window', а не' find-file-other-frame', для 'file'. Мне кажется, что либо это ошибка, либо вы ошиблись в разметке оконного кадра. В моей настройке переменная имеет то же значение. –

+0

@NN Я редактировал значение. Возможно, он был изменен между 7.6 и 7.7. У меня нет какой-либо установки emacs23, чтобы иметь возможность протестировать ее таким образом, но возможно, это изменение произошло в emacs, а не в режиме org. –

Смежные вопросы