Visualizar campos na tabela organizacional

11

Às vezes, é conveniente definir uma largura de coluna manual ao criar uma tabela no modo organizacional. Isso faz com que as colunas não precisem crescer até o tamanho da entrada mais longa. Quando uma entrada e uma tabela no modo organizacional é maior que a coluna em que é encontrada, a entrada fica visualmente truncada com um =>símbolo no final.

Eu sei que posso fazer o C-c `uso org-table-edit-field, mas isso requer pressionar C-c C-cpara fechar a janela de visualização e voltar ao buffer do modo organizacional. Chamar o mesmo comando com um argumento de prefixo C-u C-c `torna o campo completo visível para que ele possa ser editado no local, mas ainda é tedioso se eu quiser visualizar rapidamente 5 a 10 campos em rápida sucessão.

O LibreOffice Calc possui um campo de visualização na parte superior de uma planilha (o mesmo ocorre com o MS Excel), que mostra o valor do campo atualmente selecionado:

campo de visualização no LibreOffice Calc

É possível obter uma visualização semelhante ao editar uma tabela no modo organizacional? O minibuffer parece ser um bom lugar para ele, embora possa ter o efeito colateral de encher o *Messages*buffer rapidamente. Uma mini janela dedicada na parte superior ou inferior do buffer também funcionaria.

nispio
fonte
3
Conforme explicado aqui , você pode visualizar o conteúdo dos campos truncados passando o mouse sobre eles com o mouse (não são necessários cliques). Se você tooltip-modeativou, o conteúdo será mostrado em uma dica de ferramenta; caso contrário, eles serão exibidos na área de eco.
itsjeyd
Se eu gostava de usar o mouse, gostaria de fazer minhas tabelas no Excel ... ;-)
nispio
Só queria ter certeza de que você está ciente desta opção ...
itsjeyd

Respostas:

11

Inspirado pela resposta de Juancho , decidi usar a linha do cabeçalho para exibir o valor do campo atual. Enquanto eu estava nisso, decidi que seria bom mostrar também a localização do campo no cabeçalho:

Cabeçalho da tabela organizacional em ação

Este é o código que eu usei para alcançá-lo:

(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)

Ele resistiu a alguns dias de testes (mínimos), então decidi ir em frente e compartilhá-lo. Se mais alguém acabar usando isso, entre em contato se tiver algum problema.

nispio
fonte
9

Inspirado na resposta de seth, você sempre pode exibir o texto da dica de ferramenta na linha do cabeçalho (que é uma linha de modo pouco conhecida na parte superior da janela).

Execute o seguinte:

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

Agora, toda vez que o texto sob o ponto tiver uma propriedade de dica de ferramenta, ele será exibido na linha do cabeçalho.

Na verdade, as dicas de ferramentas da tabela organizacional contêm um prefixo irritante com instruções, mas é uma aproximação ao seu problema.

Juancho
fonte
Obrigado! Eu ampliei essa idéia para criar uma solução que mostre o valor de qualquer campo (não apenas aqueles com dicas de ferramentas).
Nispio 10/10
8

Se você colocar o cursor na célula e pressionar, C-h .ele mostrará o texto de ajuda para essa célula na área de eco. O texto de ajuda contém o valor completo e o outro texto de ajuda. Tipo de barulhento, mas mostra o valor.

Veja display-local-helpe ajude a eco .

seth
fonte
3

Esta é uma pergunta antiga, mas deixe-me adicionar isso.

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

Esta é uma maneira mais direta de implementar a solução do @nispio, eu acho.

diadochos
fonte
0

M-x org-table-follow-field-mode não só deve permitir a visualização, mas também a edição remota, enquanto estiver no modo organizacional do seu arquivo. Assim, você pode fazer várias coisas com tabelas e células facilmente, como trocar colunas, sem perder a edição de células à vista.

Com a combinação de teclas, pressiono essa tecla sempre que estou na tabela e desejo ativar esse modo. Agora apenas se eu puder encontrar uma maneira de ativá-lo automaticamente sempre que estiver dentro da tabela.

aartista
fonte