Campi di anteprima nella tabella organizzativa


11

A volte è conveniente impostare una larghezza di colonna manuale quando si crea una tabella in modalità org. Questo fa sì che le colonne non debbano crescere fino alla dimensione della voce più lunga. Quando una voce in e la tabella modalità org è più lunga della colonna in cui si trova, la voce viene troncata visivamente con un =>simbolo alla fine.

So che posso fare C-c `per usare org-table-edit-field, ma questo richiede di premere C-c C-cper chiudere la finestra di anteprima e tornare al buffer in modalità org. Chiamare lo stesso comando con un argomento prefisso C-u C-c `rende visibile l'intero campo in modo che possa essere modificato in posizione, ma è ancora noioso se voglio visualizzare rapidamente in anteprima 5-10 campi in rapida successione.

LibreOffice Calc ha un campo di anteprima nella parte superiore di un foglio di calcolo (così come MS Excel) che mostra il valore del campo attualmente selezionato:

campo di anteprima in LibreOffice Calc

È possibile ottenere un'anteprima simile quando si modifica una tabella in modalità org? Il minibuffer sembra un buon posto per esso, anche se potrebbe avere l'effetto collaterale di riempire *Messages*rapidamente il buffer. Funzionerebbe anche una mini finestra dedicata nella parte superiore o inferiore del buffer.


3
Come spiegato qui , è possibile visualizzare in anteprima il contenuto dei campi troncati passando con il mouse su di essi (non è necessario alcun clic). Se hai tooltip-modeattivato, i contenuti verranno visualizzati in una descrizione comandi; altrimenti verranno visualizzati nell'area dell'eco.
itsjeyd

Se mi piaceva usare il mouse,
renderei i

Volevo solo per assicurarsi che siete a conoscenza di questa opzione ...
itsjeyd

Risposte:


11

Ispirato dalla risposta di Juancho , ho deciso di utilizzare la riga di intestazione per visualizzare il valore del campo corrente. Mentre ero lì, ho deciso che sarebbe stato bello mostrare anche la posizione del campo nell'intestazione:

Intestazione tabella organizzativa in azione

Questo è il codice che ho usato per raggiungerlo:

(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 resistito per alcuni giorni a test (minimi), quindi ho deciso di andare avanti e condividerlo. Se qualcun altro finisce per usarlo, per favore fatemi sapere se si riscontrano problemi con esso.


9

Ispirato dalla risposta di seth, puoi sempre visualizzare il testo della descrizione comandi nella riga di intestazione (che è una riga della modalità poco nota nella parte superiore della finestra).

Eseguire quanto segue:

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

Ora, ogni volta che il testo sotto il punto ha una proprietà tooltip, verrà visualizzato nella riga di intestazione.

In realtà, i tooltip della tabella org contengono un fastidioso prefisso con le istruzioni, ma è un'approssimazione del tuo problema.


Grazie! Ho ampliato l'idea per trovare una soluzione che mostri il valore di qualsiasi campo (non solo quelli con descrizioni comandi).
nispio,

8

Se si posiziona il cursore nella cella e si preme C-h ., verrà mostrato il testo di aiuto per quella cella nell'area dell'eco. Il testo della guida contiene l'intero valore e l'altro testo della guida. Un po 'rumoroso ma mostra il valore.

Vedi display-local-helpe aiuta Eco .


3

Questa è una vecchia domanda, ma vorrei aggiungere questo.

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

Questo è un modo più diretto per implementare la soluzione di @nispio, credo.


0

M-x org-table-follow-field-mode non dovrebbe solo consentire la visualizzazione, ma anche la modifica remota, pur essendo in modalità organizzazione nel file. Quindi puoi fare facilmente varie cose con tabelle e celle come colonne di scambio, senza perdere la modifica delle celle in vista.

Con l'associazione dei tasti, premo quel tasto ogni volta che mi trovo all'interno della tabella e voglio attivare questa modalità. Ora solo, se riesco a trovare un modo per attivarlo automaticamente ogni volta che sono all'interno del tavolo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.