3

我将 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
4

2 回答 2

5

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

因此,如果您以交互方式执行此操作,则只需调用即可M-x org-table-convert完成。这假设表格已经对齐。您可以通过从一个单元格切换到下一个单元格来手动执行此操作,这会触发表格对齐。或者你可以用一个小函数来做到这一点:

(defun my-convert-tables ()
"No questions asked, just convert the table"
  (interactive)
  (org-table-align)
  (org-table-convert))
于 2012-10-27T20:41:19.663 回答
3

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

使用 defadvice 在函数之前和之后运行一些代码,我们可以将绑定到符号 y-or-np 的函数保存到全局变量中,并将其重新绑定到只返回 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")))
于 2012-10-27T19:33:43.663 回答