Lề cuộn khác nhau ở trên cùng và dưới cùng của cửa sổ?


8

Q: có cách nào để đặt các lề cuộn khác nhau ở trên cùng và dưới cùng của cửa sổ không?

Biến scroll-margin(được xác định trong mã nguồn C) đặt số lượng dòng văn bản mà Emacs hiển thị, ở mức tối thiểu, ở trên cùng và dưới cùng của cửa sổ:

Số dòng lề ở trên cùng và dưới cùng của một cửa sổ. Nhớ lại cửa sổ bất cứ khi nào điểm nằm trong nhiều dòng trên cùng hoặc dưới cùng của cửa sổ.

Tôi muốn sử dụng scroll-margincho dưới cùng của cửa sổ, nhưng không muốn nó ở trên cùng (ví dụ: giá trị dương ở dưới cùng, nhưng 0 ở trên cùng). Có cách nào để làm vậy không?


Tôi không biết câu trả lời, nhưng scroll-marginrất có thể đó không phải là công cụ phù hợp cho công việc. Bạn có thể cần một số chức năng để đưa vào post-command-hookđể xác định xem có nên cuộn cửa sổ hay không.
Harald Hanche-Olsen

Để theo dõi nhận xét trước đây của tôi, việc tìm hiểu có bao nhiêu dòng có thể nhìn thấy xung quanh điểm có vẻ rất không cần thiết, xem xét các dòng được bọc, văn bản ẩn và những thứ tương tự. Tôi nghi ngờ thông tin cần thiết chỉ dễ dàng có sẵn trong mã hiển thị. Bạn có thể thử gửi một yêu cầu tính năng cho phép (ví dụ) một nhược điểm (top . bottom)cho scroll-margin.
Harald Hanche-Olsen

Bạn có thể thích chơi với window-scroll-functionshook (cần hai đối số) và đặt recenterlệnh vào một hàm được gắn vào hook đó và sau đó sử dụng một cài đặt (setq scroll-conservatively 101)- về bản chất, bạn xác định khi xảy ra quá trình lặp lại và tắt tự động tích hợp -croll. Một cái gì đó giống như(when (and (>= (point) (window-end nil t)) (not (pos-visible-in-window-p (point) (get-buffer-window (current-buffer) (selected-frame))))) (recenter))
luật

@lawlist: cảm ơn bạn đã gợi ý, nhưng phần cuối của chuỗi doc có dòng chữ "Cảnh báo: Không sử dụng tính năng này để thay đổi cách cuộn cửa sổ. Nó không được thiết kế cho điều đó và việc sử dụng như vậy có thể sẽ không hoạt động."
Dân

Câu hỏi thú vị, tôi tự hỏi tại sao không có bình luận / bình chọn cho câu trả lời được cung cấp bởi PythonNut.
Tên

Câu trả lời:


1

Các công việc sau đây cho tôi:

(defun my-define-scroll-margins (&rest _args)
  (interactive)
  (with-demoted-errors
    (let ((computed-margin
            (if (> (cdr (nth 6 (posn-at-point)))
                  (/ (window-body-height) 2)) 5 0)))
      (setq
        scroll-margin computed-margin
        smooth-scroll-margin computed-margin))))

(add-hook 'post-command-hook #'my-define-scroll-margins)

Lưu ý rằng về mặt lý thuyết là không hiệu quả, nhưng hiệu suất trên máy tính khập khiễng của tôi dường như không bị ảnh hưởng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.