組織テーブルのフィールドをプレビュー


11

org-modeでテーブルを作成するときに、手動で列幅を設定すると便利な場合があります。これにより、列が最も長いエントリのサイズまで大きくなる必要がなくなります。とorg-modeテーブルのエントリが、それが見つかる列よりも長い場合、エントリは=>最後に記号が付いて視覚的に切り捨てられます。

C-c `使用できることはわかっていますorg-table-edit-fieldが、これを押すC-c C-cと、プレビューウィンドウを閉じて組織モードバッファに戻る必要があります。同じコマンドを前置引数で呼び出すと、C-u C-c `フィールド全体が表示されるので、その場で編集できますが、5〜10個のフィールドをすばやく連続してすばやくプレビューするのは面倒です。

LibreOffice Calcには、スプレッドシートの上部にプレビューフィールドがあり(MS Excelも同様)、現在選択されているフィールドの値が表示されます。

LibreOffice Calcのプレビューフィールド

組織モードのテーブルを編集するときに同様のプレビューを取得することは可能ですか? ミニ*Messages*バッファーは、バッファーがすぐにいっぱいになるという副作用があるかもしれませんが、そのための良い場所のように見えます。バッファーの上部または下部にある専用のミニウィンドウも機能します。


3
ここで説明するように、切り捨てられたフィールドの内容をマウスでホバーすることでプレビューできます(クリックする必要はありません)。あなたがいる場合はtooltip-modeオンになって、内容がツールチップで表示されます。それ以外の場合は、エコー領域に表示されます。
itsjeyd 2014年

マウスを使用したい場合は、Excelでテーブルを作成します... ;-)
nispio

あなたがこのオプションを知っていることを確認したかっただけ...
itsjeyd

回答:


11

フアンチョの答えに触発されて、私はヘッダー行を使用して現在のフィールドの値を表示することにしました。私がそれにいる間、ヘッダーのフィールドの場所も表示するとよいと思いました。

動作中の組織テーブルヘッダー

これは私がそれを達成するために使用したコードです:

(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

sethの回答に触発されて、常にツールチップテキストをヘッダー行(ウィンドウの上部にあるあまり知られていないモード行)に表示することができます。

以下を実行します。

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

これで、ポイントの下のテキストにツールチッププロパティがあるたびに、それがヘッダー行に表示されます。

実際、org-tableのツールチップには、煩わしい接頭辞と指示が含まれていますが、これは問題の近似値です。


ありがとうございました!このアイデアを拡張して、(ツールチップのあるフィールドだけでなく)任意のフィールドの値を表示するソリューションを考え出しました。
nispio 2014年

8

カーソルをセルに置いてヒットC-h .すると、エコー領域にそのセルのヘルプテキストが表示されます。ヘルプテキストには、完全な値と他のヘルプテキストが含まれています。ちょっとうるさいですが、値が表示されます。

参照してくださいdisplay-local-helpヘルプエコー


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 ファイルでorg-modeになっている間、表示だけでなくリモート編集も許可する必要があります。したがって、セルの編集を失うことなく、列の入れ替えなど、テーブルやセルでさまざまなことが簡単に行えます。

キーバインドを使用して、テーブル内にいるときにこのキーを押して、このモードをアクティブ化します。さて、テーブルの中でいつでも自動アクティブ化する方法を見つけることができれば。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.