Pratinjau bidang dalam tabel org

11

Kadang-kadang nyaman untuk mengatur lebar kolom manual saat membuat tabel dalam mode-org. Ini membuatnya sehingga kolom tidak harus tumbuh dengan ukuran entri terlama mereka. Ketika sebuah entri dalam dan tabel mode-org lebih panjang dari kolom di mana ia ditemukan, entri akan terpotong secara visual dengan =>simbol di akhir.

Saya tahu bahwa saya dapat melakukannya C-c `untuk digunakan org-table-edit-field, tetapi ini membutuhkan penekanan C-c C-cuntuk menutup jendela pratinjau dan kembali ke buffer mode-org. Memanggil perintah yang sama dengan argumen awalan C-u C-c `membuat bidang penuh terlihat sehingga dapat diedit di tempat, tetapi masih membosankan jika saya ingin dengan cepat melihat 5-10 bidang dalam suksesi cepat.

LibreOffice Calc memiliki bidang pratinjau di bagian atas spreadsheet (begitu juga MS Excel) yang menunjukkan nilai bidang yang saat ini dipilih:

bidang pratinjau di LibreOffice Calc

Apakah mungkin untuk mendapatkan pratinjau yang sama saat mengedit tabel mode-org? Minibuffer tampaknya seperti satu tempat yang baik untuk itu, meskipun mungkin memiliki efek samping mengisi *Messages*buffer dengan cepat. Jendela mini khusus di bagian atas atau bawah buffer juga berfungsi.

nispio
sumber
3
Seperti dijelaskan di sini , Anda dapat melihat pratinjau konten bidang yang terpotong dengan mengarahkan mouse ke mouse (tidak perlu klik). Jika Anda telah tooltip-modemenghidupkan, konten akan ditampilkan di tooltip; jika tidak mereka akan ditampilkan di area echo.
itsjeyd
Jika saya suka menggunakan mouse, saya akan membuat tabel saya di Excel ... ;-)
nispio
Hanya ingin memastikan Anda mengetahui opsi ini ...
itsjeyd

Jawaban:

11

Terinspirasi oleh jawaban Juancho , saya memutuskan untuk menggunakan baris tajuk untuk menampilkan nilai bidang saat ini. Sementara saya berada di sana, saya memutuskan akan menyenangkan untuk menunjukkan lokasi bidang di header juga:

Header tabel org beraksi

Ini adalah kode yang saya gunakan untuk mencapainya:

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

Telah bertahan beberapa hari pengujian (minimal), jadi saya memutuskan untuk melanjutkan dan membagikannya. Jika ada orang lain yang akhirnya menggunakan ini, beri tahu saya jika Anda mengalami masalah dengannya.

nispio
sumber
9

Terinspirasi oleh jawaban seth, Anda selalu dapat menampilkan teks tooltip pada baris header (yang merupakan garis mode yang kurang dikenal di bagian atas jendela).

Jalankan yang berikut ini:

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

Sekarang, setiap kali teks di bawah titik memiliki properti tooltip, itu akan ditampilkan pada baris header.

Sebenarnya, tooltips org-table berisi awalan yang menjengkelkan dengan instruksi, tetapi ini merupakan perkiraan untuk masalah Anda.

Juancho
sumber
Terima kasih! Saya memperluas ide ini untuk menghasilkan solusi yang menunjukkan nilai bidang apa pun (bukan hanya yang dengan tooltips).
nispio
8

Jika Anda meletakkan kursor di sel dan menekannya C-h .akan menampilkan teks bantuan untuk sel itu di area gema. Teks bantuan berisi nilai penuh serta teks bantuan lainnya. Agak berisik tetapi menunjukkan nilai.

Lihat display-local-helpdan Bantu Echo .

seth
sumber
3

Ini pertanyaan lama, tetapi izinkan saya menambahkan ini.

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

Ini adalah cara yang lebih langsung untuk mengimplementasikan solusi @nispio, saya kira.

diadochos
sumber
0

M-x org-table-follow-field-mode seharusnya tidak hanya mengizinkan untuk melihat tetapi juga mengedit jarak jauh, ketika sedang dalam mode-org dalam file Anda. Jadi, Anda dapat melakukan berbagai hal dengan tabel dan sel dengan mudah seperti bertukar kolom, tanpa kehilangan pengeditan sel yang terlihat.

Dengan pengikat tombol, saya menekan tombol itu setiap kali saya berada di dalam tabel dan ingin mengaktifkan mode ini. Hanya sekarang, jika saya dapat menemukan cara untuk mengaktifkannya secara otomatis setiap kali saya berada di dalam tabel.

aartis
sumber