Поля попереднього перегляду в таблиці org


11

Іноді зручно встановлювати ручну ширину стовпців під час створення таблиці в org-режимі. Це робить так, що стовпці не повинні збільшуватися до розміру найдовшого їх запису. Коли таблиця вхідного режиму та org-режиму довша, ніж стовпець, у якій вона знаходиться, візуально обрізається =>символом у кінці.

Я знаю, що можу C-c `користуватися org-table-edit-field, але для цього потрібне натискання, C-c C-cщоб закрити вікно попереднього перегляду та повернутися до буфера в режимі org. Виклик тієї самої команди з аргументом префікса C-u C-c `робить повне поле видимим, щоб воно могло бути відредаговано на місці, але воно все ще стомлює, якщо я хочу швидко переглянути 5-10 полів швидко поспіль.

У верхній частині електронної таблиці LibreOffice Calc є поле попереднього перегляду (так це і MS Excel), яке показує значення поточно вибраного поля:

поле попереднього перегляду в LibreOffice Calc

Чи можливо отримати подібний попередній перегляд під час редагування таблиці в режимі org? Мінібуфер здається хорошим місцем для нього, хоча це може мати побічний ефект, як *Messages*швидко заповнити буфер. Виділене міні-вікно у верхній чи нижній частині буфера також працює.


3
Як пояснено тут , ви можете переглянути вміст усічених полів, наведення курсору на них мишею (кліки не потрібні). Якщо ви tooltip-modeввімкнули, вміст відображатиметься в підказці; в іншому випадку вони будуть відображатися в області відлуння.
itsjeyd

Якщо мені сподобалося використовувати мишу, я б робив свої таблиці в Excel ... ;-)
nispio

Просто хотів переконатися, що ви знаєте про цей варіант ...
itsjeyd

Відповіді:


11

Надихнувшись відповіддю Хуанчо , я вирішив використовувати рядок заголовка для відображення значення поточного поля. Поки я був на ньому, я вирішив, що було б непогано показати також розташування поля в заголовку:

Дія заголовка таблиці Org

Це код, який я використовував для його досягнення:

(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

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 має не лише дозволяти переглядати, але й віддалено редагувати, перебуваючи в org-режимі у вашому файлі. Таким чином, ви можете легко робити різні речі з таблицями та клітинками, наприклад, заміняти стовпці, не втрачаючи редагування комірок на виду.

За допомогою клавіатури я натискаю цю клавішу щоразу, коли я перебуваю всередині таблиці та хочу активувати цей режим. Тепер лише, якщо я можу знайти спосіб її автоматичного активації, коли я знаходжусь у таблиці.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.