在没有用户交互的情况下在组织模式表和table.el表之间进行转换

时间:2012-10-27 17:03:48

标签: emacs elisp

我将org-mode表转换为table.el表。为此我选择了表格:

| Option      | Type | Value | Descr        |
| -[no]h      | bool | yes   | Print        |
| -[no]versio | bool | no    | Print        |
| -nice       | int  | 0     | Set t        |
| -[no]v      | bool | no    | Be lo        |
| -time       | real | -1    | Take         |
| -[no]rmvsbd | bool | yes   | Removvirtual |
| sites       |      |       |              |
| -maxwarn    | int  | 0     | Numbe        |
| procenerate |      |       |              |
| unsta       |      |       |              |
| -[no]zero   | bool | no    | Set pthout   |
| defau error |      |       |              |
| -[no]renum  | bool | yes   | Renum        |
| atomty      |      |       |              |

然后按C-c ~org-mode然后问我

Convert table to table.el table? (y or n)

如何以程序方式回答y?我阅读了defun的文档 - 没有办法用前缀arg来做。

bash中的类似功能:

echo y | script-which-asks-y-or-n

2 个答案:

答案 0 :(得分:4)

C-c ~调用命令org-table-create-with-table.el,它提供了一堆围绕调用org-table-convert的包装器。如果您想知道自己已经在组织模式表中时使用此函数,则不需要包装器,只需要两个(可能只有一个)命令:org-table-align和{{1 }}。

因此,如果您以交互方式进行此操作,则只需致电org-table-convert即可。这假定表已经对齐。您可以通过从一个单元格到下一个单元格的选项卡来手动执行此操作,从而触发表格对齐。或者你可以通过一个小功能来实现:

M-x org-table-convert

答案 1 :(得分:3)

您可以通过以下方式以编程方式执行此操作。您将在defadvice函数中用org-table-create-with-table.el替换函数名test1,否则将与下面的函数名称相同。

使用defadvice在函数之前和之后运行一些代码,我们可以将绑定到符号y-or-n-p的函数保存到全局变量,并将其重新绑定到只返回true的函数。在函数之后,我们恢复原始功能。

(setq save-y-or-n-p nil)

(defadvice test1 (around always-yes) 
  (fset 'save-y-or-n-p (symbol-function 'y-or-n-p)) 
  (fset 'y-or-n-p (lambda (s) t)) 
  ad-do-it 
  (fset 'y-or-n-p (symbol-function 'save-y-or-n-p)))

 (defun test1 ()
  (interactive)
  (if (y-or-n-p "Happy? ")
      (insert "Happy day")
    (insert "Unhappy day")))