Предварительный просмотр полей в организационной таблице

11

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

nispio
источник
3
Как объясняется здесь , вы можете предварительно просмотреть содержимое усеченных полей, наведя на них курсор мыши (щелчки не требуются). Если вы tooltip-modeвключили, содержимое будет отображаться во всплывающей подсказке; в противном случае они будут отображаться в эхо-области.
itsjeyd
Если бы мне нравилось использовать мышь, я бы
создавал
Просто хотел убедиться, что вы знаете об этой опции ...
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)

Он выдержал несколько дней (минимального) тестирования, поэтому я решил пойти дальше и поделиться им. Если кто-то еще использует это, пожалуйста, дайте мне знать, если у вас возникнут какие-либо проблемы с ним.

nispio
источник
9

Вдохновленный ответом Сета, вы всегда можете отобразить текст всплывающей подсказки в строке заголовка (которая является малоизвестной строкой режима в верхней части окна).

Выполните следующее:

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

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

На самом деле всплывающие подсказки org-table содержат раздражающий префикс с инструкциями, но это приблизительное решение вашей проблемы.

Juancho
источник
Спасибо! Я расширил эту идею, чтобы найти решение, которое показывает ценность любого поля (а не только всплывающих подсказок).
Ниспио
8

Если вы поместите курсор в ячейку и нажмете на C-h .нее, в эхо-области появится текст справки для этой ячейки. Текст справки содержит полное значение, а также другой текст справки. Вид шумно, но это показывает ценность.

Смотрите display-local-helpи помогите Эхо .

Seth
источник
3

Это старый вопрос, но позвольте мне добавить это.

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

Я думаю, что это более прямой способ реализации решения @nispio.

diadochos
источник
0

M-x org-table-follow-field-mode должен позволять не только просматривать, но и редактировать удаленно, находясь в режиме org в вашем файле. Таким образом, вы можете легко выполнять различные действия с таблицами и ячейками, например, менять столбцы, не теряя редактирования ячеек в поле зрения.

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

aartist
источник