预览组织结构表中的字段


11

有时在以组织模式创建表时设置手动列宽比较方便。这样一来,列就不必增长到最长条目的大小。当组织模式表中的条目长于在其中找到的列时,该条目将在视觉上被截断,=>并在末尾带有符号。

我知道我可以C-c `使用org-table-edit-field,但这需要按C-c C-c关闭预览窗口并返回到org-mode缓冲区。调用带有前缀参数的同一命令C-u C-c `将使整个字段可见,以便可以在适当位置进行编辑,但是如果我想快速连续快速预览5-10个字段,这仍然很乏味。

LibreOffice Calc在电子表格的顶部具有一个预览字段(MS Excel也是如此),该预览字段显示当前所选字段的值:

LibreOffice Calc中的预览字段

编辑组织模式表时是否可以获得类似的预览? 小型缓冲区似乎是一个不错的地方,尽管它可能会产生*Messages*快速填充缓冲区的副作用。缓冲区顶部或底部的专用微型窗口也将起作用。


3
正如解释在这里,你可以将鼠标悬停在用鼠标(无需点击)预览截断字段内容。如果已tooltip-mode打开,内容将显示在工具提示中;否则,将显示内容。否则它们将显示在回显区域中。
itsjeyd 2014年

如果我喜欢使用鼠标,可以在Excel中创建表格... ;-)
nispio,2014年

只是想确保您知道此选项...
itsjeyd 2014年

Answers:


11

Juancho的答案启发,我决定使用标题行显示当前字段的值。在进行此操作时,我决定最好在标题中显示该字段的位置:

运作中的组织表标题

这是我用来实现它的代码:

(defun my-trim-string (arg) 
  "Simple function for trimming the whitespace from the ends of
 a string. Also removes any string properties such as font faces."
  (let ((str (substring-no-properties arg)))
    (when (string-match "^[ \t]+" str)
      (setq str (replace-match "" nil nil str)))
    (when (string-match "[ \t]+$" str)
      (setq str (replace-match "" nil nil str)))
    str))

(defun my-org-table-location (&optional arg)
  "Get the location of the current field in the table"
  (interactive "P")
  (when (eq 'org-mode major-mode)
    (org-table-get-specials)
    (let* ((row (org-table-current-dline))
           (col (org-table-current-column))
           (loc (if arg
                    (format "%c%02d" (+ 64 col) row)
                  (format "@%d$%d" row col))))
      (when (called-interactively-p 'any)
        (message "Field Location: %s" loc))
      loc)))

(defun my-org-table-field (&optional arg)
  "Get the value of the current field in the table"
  (interactive "P")
  (when (eq 'org-mode major-mode)
    (org-table-get-specials)
    (let* ((formula (org-table-current-field-formula))
           (value (my-trim-string (org-table-get-field)))
           (field (or (and arg formula) value)))
      (when (called-interactively-p 'any)
        (message "Field Value: %s" loc))
      field)))

;; Define the format for the header line in Org mode
(setq my-org-table-header
      (list '(:eval (let ((loc (my-org-table-location))
                          (field (my-org-table-field)))
                      (format " %s: %s" loc field)))))

(defun my-org-mode-setup ()
  "Apply custom setup to org-mode buffers"
  (setq-local header-line-format my-org-table-header))
(add-hook 'org-mode-hook 'my-org-mode-setup)

它经受了几天(最少)的测试,所以我决定继续进行分享。如果最终有人使用它,请在遇到任何问题时通知我。


9

受塞思答案的启发,您可以始终在标题行(窗口顶部鲜为人知的模式行)上显示工具提示文本。

执行以下命令:

(setq-default header-line-format (list '(:eval (help-at-pt-kbd-string))))

现在,每当该点下方的文本具有工具提示属性时,它将显示在标题行上。

实际上,组织表工具提示中包含带有说明的恼人前缀,但这是您的问题的近似值。


谢谢!我扩展了这个想法,提出了一个解决方案,该解决方案可以显示任何字段的值(不仅仅是带有工具提示的字段)。
nispio

8

如果将光标放在单元格中并单击C-h .它,它将在回显区域中显示该单元格的帮助文本。帮助文本包含完整的值以及其他帮助文本。有点吵,但它显示了价值。

查看display-local-help帮助Echo


3

这是一个老问题,但让我补充一下。

(add-hook 'org-mode-hook
          '(lambda ()
             (setq-local header-line-format (list '(:eval (substring-no-properties (org-table-get-field)))))
           ))

我认为,这是实现@nispio解决方案的更直接的方法。


0

M-x org-table-follow-field-mode 在文件的组织模式下,它不仅应允许查看而且还可以进行远程编辑。因此,您可以轻松地对表和单元格执行各种操作,例如交换列,而不会丢失对单元格的编辑。

使用键盘绑定时,只要我在桌子内并想激活此模式,就可以按该键。现在,如果我能找到一种方法,只要我在桌子内就可以自动激活它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.