Buat persentase tampilan baris mode dan bukan "Atas / Bawah / Semua"

9

Modus baris 's %pmenampilkan persentase tampilan saat buffer:

% p Persentase teks buffer di atas bagian atas jendela, atau 'Atas', 'Bawah' atau 'Semua'. Perhatikan bahwa konstruksi garis mode default memotong ini menjadi tiga karakter.

Saya tidak suka Atas / Bawah / Semua dan saya ingin selalu menampilkan persentase. Apakah ada cara untuk mencapai ini?

ClojureMostly
sumber
2
Saya penasaran kenapa. Topberarti 0%. Bottomberarti 100%. Allberarti 100% dan bagian atas juga terlihat. Anda dapat melakukan hampir semua hal yang Anda suka ke baris mode, tetapi dalam kasus ini akan sangat menyebalkan dengan ini. Perhatikan bahwa Anda dapat dengan mudah membalik arah persentase - lihat %P(bukan %p).
Drew
3
Otak saya akan mencari nomor ketika saya ingin tahu di mana saya berada. Ketika saya harus sesekali mengingat bahwa itu juga bisa menjadi Atas / Bawah, maka saya harus mengingatnya.
ClojureMostly
Satu ide adalah untuk menghitung ukuran buffer - yaitu, jumlah titik - antara point-mindan window-start, dan window-enddan point-max, dan jika diinginkan, ukuran buffer terlihat dapat diperhitungkan dalam - yaitu, poin antara window-startke window-end- mereka perhitungan dapat dilakukan dalam sekejap mata dan tidak akan mempengaruhi kinerja karena titik tidak bergerak. Perhitungan ukuran buffer itu bisa diubah menjadi persentase. Saya percaya bahwa ini adalah jawaban, tetapi saya akan membiarkan orang lain menuliskannya karena saya punya proyek lain di piring saya hari ini.
lawlist
Tidak pernah benar-benar bermanfaat untuk mengetahui persentase buffer di atas: \ IMHO mengetahui current_line / total_lines, dan akhirnya, mengetahui bahwa SEMUA buffer konten ditampilkan (ketika saya berada di baris pertama) lebih bermanfaat. Hanya pendapat saya, mungkin itu pengalaman saya yang tidak cukup luas.
Nsukami _

Jawaban:

5

Berikut ini contoh bagaimana Anda dapat melakukan hal seperti ini. Namun, perhatikan bahwa ia menampilkan apa yang Anda minta (persentase teks di atas jendela), yang mungkin bukan yang sebenarnya Anda inginkan. Misalnya, tidak pernah ditampilkan 100%, karena akan selalu ada teks di dalam jendela.

(setcar mode-line-position
        '(:eval (format "%3d%%" (/ (window-start) 0.01 (point-max)))))

Anda juga dapat menggunakan window-end, yang memiliki kelemahan sebaliknya (hampir tidak pernah menampilkan 0).

(setcar mode-line-position
        '(:eval (format "%3d%%" (/ (window-end) 0.01 (point-max)))))

Anda mungkin ingin menyelaraskan string ini dengan spasi atau bantalan lainnya.

Malabarba
sumber
0

Built-in kode untuk %phanya terlihat di window-startdan point-maxdan menghitung persentase seperti itu. Anda dapat menemukan ini menggunakan C-h f format-mode-linedan kemudian mengikuti tautan ke sumber Emacs C (dengan asumsi Anda memilikinya di suatu tempat).

Jadi, Anda bisa melakukan hal yang sama menggunakan :evalformulir di mode-line-format.

Tom Tromey
sumber
7
Bisakah Anda memperluas jawaban Anda untuk memberikan solusi lengkap?
Kaushal Modi