Aperçu des champs dans la table organisationnelle

11

Parfois, il est pratique de définir une largeur de colonne manuelle lors de la création d'une table en mode organisation. Ainsi, les colonnes n'ont pas à atteindre la taille de leur entrée la plus longue. Lorsqu'une entrée dans un tableau en mode organisation est plus longue que la colonne dans laquelle elle se trouve, l'entrée est visuellement tronquée avec un =>symbole à la fin.

Je sais que je peux faire C-c `pour l'utiliser org-table-edit-field, mais cela nécessite d'appuyer sur C-c C-cpour fermer la fenêtre d'aperçu et revenir au tampon en mode org. L'appel de la même commande avec un argument préfixe C-u C-c `rend le champ complet visible afin qu'il puisse être édité sur place, mais c'est toujours fastidieux si je veux prévisualiser rapidement 5-10 champs en succession rapide.

LibreOffice Calc a un champ d'aperçu en haut d'une feuille de calcul (tout comme MS Excel) qui montre la valeur du champ actuellement sélectionné:

champ d'aperçu dans LibreOffice Calc

Est-il possible d'obtenir un aperçu similaire lors de la modification d'une table en mode organisation? Le mini-tampon semble être un bon endroit pour cela, bien qu'il puisse avoir pour effet secondaire de remplir rapidement le *Messages*tampon. Une mini fenêtre dédiée en haut ou en bas du tampon fonctionnerait également.

nispio
la source
3
Comme expliqué ici , vous pouvez prévisualiser le contenu des champs tronqués en les survolant avec la souris (aucun clic n'est nécessaire). Si vous avez tooltip-modeactivé, le contenu sera affiché dans une info-bulle; sinon, ils seront affichés dans la zone d'écho.
itsjeyd
Si j'aimais bien utiliser la souris, je ferais mes tableaux dans Excel ... ;-)
nispio
Je voulais juste m'assurer que vous êtes au courant de cette option ...
itsjeyd

Réponses:

11

Inspiré par la réponse de Juancho , j'ai décidé d'utiliser la ligne d'en-tête pour afficher la valeur du champ actuel. Pendant que j'y étais, j'ai décidé que ce serait bien de montrer l'emplacement du champ dans l'en-tête également:

En-tête de table d'organisation en action

Voici le code que j'ai utilisé pour y parvenir:

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

Il a résisté à quelques jours de tests (minimes), j'ai donc décidé d'aller de l'avant et de le partager. Si quelqu'un d'autre finit par l'utiliser, veuillez me le faire savoir si vous rencontrez des problèmes avec celui-ci.

nispio
la source
9

Inspiré par la réponse de seth, vous pouvez toujours afficher le texte de l'info-bulle sur la ligne d'en-tête (qui est une ligne de mode peu connue en haut de la fenêtre).

Exécutez ce qui suit:

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

Maintenant, chaque fois que le texte sous le point a une propriété d'info-bulle, il sera affiché sur la ligne d'en-tête.

En fait, les info-bulles org-table contiennent un préfixe ennuyeux avec des instructions, mais c'est une approximation de votre problème.

Juancho
la source
Je vous remercie! J'ai développé cette idée pour trouver une solution qui montre la valeur de n'importe quel champ (pas seulement ceux avec des info-bulles).
nispio
8

Si vous placez votre curseur dans la cellule et appuyez C-h .dessus, le texte d'aide de cette cellule s'affiche dans la zone d'écho. Le texte d'aide contient la valeur complète ainsi que l'autre texte d'aide. Un peu bruyant mais ça montre la valeur.

Voir display-local-helpet aider Echo .

seth
la source
3

C'est une vieille question, mais permettez-moi d'ajouter ceci.

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

C'est une façon plus directe de mettre en œuvre la solution de @nispio, je pense.

diadochos
la source
0

M-x org-table-follow-field-mode devrait non seulement permettre d'afficher mais également de modifier à distance, tout en étant en mode org dans votre fichier. Ainsi, vous pouvez facilement faire diverses choses avec des tableaux et des cellules, comme échanger des colonnes, sans perdre la modification de cellule en vue.

Avec la liaison de touches, j'appuie sur cette touche chaque fois que je suis à l'intérieur du tableau et que je souhaite activer ce mode. Maintenant seulement, si je peux trouver un moyen de l'activer automatiquement chaque fois que je suis dans la table.

aartiste
la source