2012-05-29 1 views
6

Я хотел бы смешать org-mode и c-mode в Emacs. Все внутри комментария должно быть орг-режимом, остатки должны быть по умолчанию основнымов режим с режимом:Смешивание org-mode и c-mode в emacs

/* 
Org-mode here 
** Section 1 
    text 
** Section 2 
    text 
Org-mode should end here 
*/ 

func1() 
{ 
} 

Я попытался с помощью nXhtml мульти-мажорного-режима, я предполагаю, это другие режимы , которые также поддерживают мультимоды. Моя проблема заключается в том, что если я напечатаю TAB на «разделе 2», то все ниже «Раздел 2» будет свернуто, а сделано невидимым. Но я хотел бы содержать область, в которой org-mode складывается/разворачивается в раздел комментариев. TAB должен только складывать/разворачивать до «* /».

Интересно, как я могу это достичь?

+1

Вы можете использовать [babel] (http://orgmode.org/worg/org-contrib/babel/intro.html) – jfs

+1

Не совсем то, что я ищу: весь файл должен оставаться обычным c-файлом. Я хочу функции org-mode в c-комментариях. –

ответ

2

Я нашел решение: http://lists.gnu.org/archive/html/emacs-orgmode/2011-01/msg00036.html списки патч для орг-режиме:

--- emacs-23.2/lisp/org/org.el 2010-04-04 00:26:08.000000000 +0200 
+++ src/c51/mk/org.el 2011-01-02 20:26:10.266860827 +0100 
@@ -5245,6 +5245,8 @@ 
(defun org-cycle-internal-local() 
    "Do the local cycling action." 
    (org-back-to-heading) 
+ (cond 
+ ((not (looking-at (concat outline-regexp "\s*#"))) 
    (let ((goal-column 0) eoh eol eos level has-children children-skipped) 
    ;; First, some boundaries 
    (save-excursion 
@@ -5318,7 +5320,7 @@ 
     (hide-subtree) 
     (message "FOLDED") 
     (setq org-cycle-subtree-status 'folded) 
-  (run-hook-with-args 'org-cycle-hook 'folded))))) 
+  (run-hook-with-args 'org-cycle-hook 'folded))))))) 

;;;###autoload 
(defun org-global-cycle (&optional arg) 
--- emacs-23.2/lisp/outline.el 2010-04-04 00:26:04.000000000 +0200 
+++ src/c51/mk/outline.el 2011-01-02 20:35:17.303609833 +0100 
@@ -913,8 +913,15 @@ 
     ;; Then unhide the top level headers. 
     (outline-map-region 
     (lambda() 
- (if (<= (funcall outline-level) levels) 
-  (outline-show-heading))) 
+ (if (<= (funcall outline-level) level) 
+   (if (looking-at (concat outline-regexp "\s*#")) 
+   (progn 
+   (outline-show-heading) 
+   (show-entry)) 
+  (outline-show-heading)))) 
+;;  (lambda() 
+;; (if (<= (funcall outline-level) levels) 
+;;  (outline-show-heading))) 
     beg end))) 
    (run-hooks 'outline-view-change-hook)) 

@@ -994,7 +1001,11 @@ 
     (outline-map-region 
     (lambda() 
    (if (<= (funcall outline-level) level) 
-  (outline-show-heading))) 
+   (if (looking-at (concat outline-regexp "\s*#")) 
+   (progn 
+   (outline-show-heading) 
+   (show-entry)) 
+   (outline-show-heading)))) 
     (point) 
     (progn (outline-end-of-subtree) 
      (if (eobp) (point-max) (1+ (point))))))) 

Этот патч должен быть применен вручную, его не так уж сложно. Он добавляет маркер *#, который сломает отступ. @bzg указал режим M-x orgstruct-mode RET, кредит ему. Теперь я могу написать в c.mode с orgstruct-режиме в фоновом режиме (без нескольких основных режима не требуется больше):

/* 
Org-mode here 
** Section 1 
    text 
** Section 2 
    text 
*# 
Org-mode should end here 
*/ 

И я буду иметь орг-режим в комментариях, Секция 1 и Раздел 2 будет складываться до отметки *#.

3

Вы можете попробовать M-x orgstruct-mode RET.

+0

Спасибо за подсказку. Я получил решение, исправляя org-mode и используя ваш orgstruct-mode вместо многовалютного режима, он работает достаточно хорошо. Я отправил ответ. –