2014-02-14 3 views
1

Я использую org-mode в emacs вместе с ox-discovery. Последняя определяет команду org-discovery-export-to-html, которую я хотел бы привязать к ключу для буферов с файлами org, которые представляют собой презентации (так не для всех файлов org).emacs org-mode файл локальное связывание ключей

Итак, вопрос в том, как определить привязки локальных ключей файла в org-mode?

То, что я в настоящее время это:

#+BEGIN_COMMENT 
Local Variables: 
eval: (local-set-key [f5] 'org-reveal-export-to-html) 
End: 
#+END_COMMENT 

Но имхо это не очень элегантно.

+0

дубликата [Файл специфического ключа привязки в Emacs] (http://stackoverflow.com/a/21493693/324105)? – phils

ответ

2

Вы можете определить ключ только для орг-режиме с помощью орг-defkey, в основном добавить следующие строки в ваш файл инициализации

(org-defkey org-mode-map [f5] 'org-reveal-export-to-html) 

UPDATE

Вы можете использовать файл локальных переменных.

(defvar export-with-reveal nil) 

(defun export-with-reveal-or-html() 
    (interactive) 
    (if (or export-with-reveal (file-exists-p "reveal.js")) 
     (call-interactively 'org-reveal-export-to-html) 
    (call-interactively 'org-export-as-html))) 

(org-defkey org-mode-map [f5] 'export-with-reveal-or-html) 

Функция export-with-reveal-or-html, если переменная export-with-reveal имеет значение т или есть файл «reveal.js» по отношению к орг файла, если так она экспортирует с reveal или он возвращается по умолчанию HTML экспорта. Вы можете указать файл, который экспортируется как показывают, добавив следующую строку в начало вашего орг файла

# -*- export-with-reveal: t -*- 

UPDATE 2

Вы также можете определить произвольную функцию экспорта, делая используя, файловые локальные переменные

(defvar my-export-fn nil) 

(defun my-export() 
    (interactive) 
    (if my-export-fn 
     (call-interactively my-export-fn) 
    (call-interactively 'org-export-as-html))) 

(org-defkey org-mode-map [f5] 'my-export) 

Затем в верхней части файла, который вы можете установить функцию экспорта вы хотите использовать, например,

# -*- export-fn: org-reveal-export-to-html -*- 
+0

Да, но я не хочу эту привязку для всех файлов org, только для некоторых конкретных (в моем случае те, которые я хочу экспортировать в html с помощью showJS). – theldoria

+0

Если бы я мог определить локальную переменную буфера в org-mode, тогда я мог бы написать функцию, обрабатывающую экспорт, который я хочу для буфера. Но я очень новичок в org-mode, так, есть ли такая возможность (несмотря на упомянутые выше локальные переменные)? – theldoria

+0

OK Это можно сделать с помощью org-mode-hook, что вы хотите сделать для других файлов org-mode, когда вы нажмете 'f5'? –

0

я придумал следующее решение, которое эксплуатирует локальные переменные зацепить хак и определяет буфер местнообезболивающее крюк:

(add-hook 'org-mode-hook 'my-org-mode-hook) 
(defun my-org-mode-hook() 
    (add-hook 'hack-local-variables-hook 
      (lambda() 
       (local-set-key [f5] (if (boundp 'my-org-export) 
             my-org-export 
            'org-html-export-to-html))))) 

Затем в орг режиме добавить это:

#+BEGIN_COMMENT 
Local Variables: 
my-org-export: org-reveal-export-to-html 
End: 
#+END_COMMENT 

Тем не менее, я хотел бы видеть что-то вроде этого, без крючка хакерства:

#+EXPORT: org-reveal-export-to-html 
+0

Я обновил свой ответ, он позволяет указать функцию, используемую для экспорта файла –

+0

Спасибо, ваш ответ - это то, что я искал. – theldoria

+0

Я рад, что это вам помогло, просто заметьте, что имя переменной уникально, иначе это может привести к конфликтам. Я забыл позаботиться об этом, извините, обновит ответ –

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