Vista previa de campos en la tabla de organización

11

A veces es conveniente establecer un ancho de columna manual al crear una tabla en modo org. Esto hace que las columnas no tengan que crecer hasta el tamaño de su entrada más larga. Cuando una entrada en una tabla de modo org es más larga que la columna en la que se encuentra, la entrada se trunca visualmente con un =>símbolo al final.

Sé que puedo hacer C-c `uso org-table-edit-field, pero esto requiere presionar C-c C-cpara cerrar la ventana de vista previa y volver al búfer de modo org. Llamar al mismo comando con un argumento de prefijo C-u C-c `hace que el campo completo sea visible para que pueda editarse en su lugar, pero sigue siendo tedioso si quiero obtener una vista previa rápida de 5-10 campos en una sucesión rápida.

LibreOffice Calc tiene un campo de vista previa en la parte superior de una hoja de cálculo (también MS Excel) que muestra el valor del campo seleccionado actualmente:

campo de vista previa en LibreOffice Calc

¿Es posible obtener una vista previa similar al editar una tabla de modo org? El minibúfer parece un buen lugar para él, aunque podría tener el efecto secundario de llenar el *Messages*búfer rápidamente. También funcionaría una mini ventana dedicada en la parte superior o inferior del búfer.

nispio
fuente
3
Como se explica aquí , puede obtener una vista previa del contenido de los campos truncados al pasar el mouse sobre ellos con el mouse (no es necesario hacer clic). Si ha tooltip-modeactivado, el contenido se mostrará en una información sobre herramientas; de lo contrario, se mostrarán en el área de eco.
itsjeyd
Si me gustara usar el mouse, haría mis tablas en Excel ... ;-)
nispio
Solo quería asegurarme de que conozca esta opción ...
itsjeyd

Respuestas:

11

Inspirado por la respuesta de Juancho , decidí usar la línea de encabezado para mostrar el valor del campo actual. Mientras lo hacía, decidí que también sería bueno mostrar la ubicación del campo en el encabezado:

Encabezado de tabla de organización en acción

Este es el código que usé para lograrlo:

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

Ha resistido unos días de pruebas (mínimas), así que decidí seguir adelante y compartirlo. Si alguien más termina usando esto, avíseme si encuentra algún problema con él.

nispio
fuente
9

Inspirado por la respuesta de seth, siempre puede mostrar el texto de información sobre herramientas en la línea del encabezado (que es una línea de modo poco conocida en la parte superior de la ventana).

Ejecute lo siguiente:

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

Ahora, cada vez que el texto debajo del punto tiene una propiedad de información sobre herramientas, se mostrará en la línea del encabezado.

En realidad, la información sobre herramientas de la tabla de organización contiene un prefijo molesto con instrucciones, pero es una aproximación a su problema.

Juancho
fuente
¡Gracias! Amplié esta idea para encontrar una solución que muestre el valor de cualquier campo (no solo los que tienen información sobre herramientas).
nispio
8

Si coloca el cursor en la celda y presiona C-h ., mostrará el texto de ayuda para esa celda en el área de eco. El texto de ayuda contiene el valor completo, así como el otro texto de ayuda. Algo ruidoso pero muestra el valor.

Ver display-local-helpy ayudar a Echo .

seth
fuente
3

Esta es una vieja pregunta, pero déjame agregar esto.

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

Creo que esta es una forma más directa de implementar la solución de @nispio.

diadochos
fuente
0

M-x org-table-follow-field-mode no solo debería permitir la visualización, sino también la edición remota, mientras está en el modo org en su archivo. Por lo tanto, puede hacer varias cosas con tablas y celdas fácilmente, como columnas de intercambio, sin perder la edición de celdas a la vista.

Con la combinación de teclas, presiono esa tecla cada vez que estoy dentro de la mesa y quiero activar este modo. Ahora solo, si puedo encontrar una manera de activarlo automáticamente cada vez que esté dentro de la mesa.

un artista
fuente