Thêm hộp xung quanh văn bản mà không thay đổi chiều rộng văn bản


9

Các tài liệu hướng dẫn của Mặt Thuộc tính gợi ý rằng việc thêm một line-widthsố -nvào thuộc tính hộp chí

vẽ một dòng có chiều rộng n có phần trên và phần dưới chiếm không gian của văn bản bên dưới, do đó tránh mọi sự tăng chiều cao của ký tự.

Vì vậy, tôi đã thêm dòng sau vào tệp chủ đề cá nhân của mình cho các ứng cử viên isearch ( lazy-highlight):

`(lazy-highlight ((,class (:box (:line-width -1 :color ,search) :background ,bg1 :foreground ,fg1))))

Điều này hoạt động tốt khi xem xét chiều cao, tuy nhiên, chiều rộng văn bản thay đổi như được thấy trong gif bên dưới:

nhập mô tả hình ảnh ở đây

Có cách nào để làm cho bên trái và phần bên phải của hộp cũng chiếm văn bản bên dưới để không có thay đổi về chiều rộng văn bản không?


Các cột có thẳng hàng nếu bạn làm nổi bật mọi thứ?
Melioratus

@Melioratus, vâng chiều rộng thêm vào là đồng nhất và không đổi.
Pouya

Câu trả lời:


3

Trường hợp sử dụng của tôi cho SE này là có một hộp quanh regionmặt, do đó, vùng được tô sáng transient-mark-modesẽ hiển thị ngay cả khi vùng này chồng lấp với một số lớp phủ khác:

(set-face-attribute 'region nil
                    :box '(:line-width -1
                           :color "gtk_selection_bg_color"
                           :style nil))

Ví dụ iedit-mode: với :

lớp phủ vùng đóng hộp chồng chéo với lớp phủ iedit

Mỗi khi văn bản được tô sáng bằng "vùng được đóng hộp" tôi có thể thấy độ rộng văn bản được mô tả nhấp nháy.

Cách hack bẩn mà tôi có thể tìm thấy để loại bỏ hiện tượng nhấp nháy này là thêm một hộp có màu nền vào defaultmặt. Thật không may, việc hack như vậy sẽ gây ra một số vấn đề ở những nơi khác, chẳng hạn như khoảng cách bổ sung giữa các dòng hoặc hiển thị không chính xác các tiện ích nút (ví dụ: trong bộ đệm tùy chỉnh).

Giải pháp cuối cùng được đưa ra trong báo cáo lỗi sau (xem bản vá đính kèm ở cuối chuỗi):

Con trỏ di chuyển nhấp nháy văn bản với hộp xung quanh văn bản được bật

Giải pháp này ảnh hưởng đến nội bộ Emacs và yêu cầu xây dựng tùy chỉnh Emacs sau khi áp dụng bản vá.

Tôi sẽ thử giải pháp sau. Tuy nhiên, vấn đề là init.elsau đó tôi sẽ không tương thích với các bản dựng Emacs stock và sẽ phải sử dụng một số logic bổ sung để tìm xem bản vá trên có được áp dụng hay không.

Hy vọng, sau một số thử nghiệm, bản vá này sẽ được chấp nhận vào nguồn Emacs ...

Theo dõi 2019-01-21 :

Có vẻ như bản vá được tham chiếu ở trên không tương thích với mã nguồn Emacs mới nhất. Tôi đã phải thực hiện một số thay đổi để làm cho nó hoạt động với nhánh chủ git Emacs hiện tại. Thay vì tạo một bản vá khác, tôi đã tạo một ngã ba tại github và tạo một nhánh từ thượng nguồn với bản vá hộp mặt:

miếng dán mặt

Xây dựng Emacs từ chi nhánh này cũng giống như xây dựng Emacs chứng khoán.

Sau đây là init.elmã phải tương thích với cả phiên bản Emacs đã vá và vanilla:

(unwind-protect
    (condition-case ex
        (set-face-attribute
         'region nil
         :box '(:line-width (-1 . -1)
                            :color "gtk_selection_bg_color"
                            :style nil))
      ('error
       (set-face-attribute
        'region nil
        :box '(:line-width -1
                           :color "gtk_selection_bg_color"
                           :style nil)))))

Nó chỉ được thử nghiệm trên Linux với GTK +


Đẹp tìm thấy! Có vẻ như bản vá đã được một năm trước vì vậy tôi không hy vọng rằng nó sẽ được chấp nhận.
amitp

Tôi đã áp dụng bản vá và hiện đang vui vẻ sử dụng chiều rộng hộp âm :-) Cảm ơn bạn!
amitp

@amitp Cảm ơn bạn đã xác nhận rằng bản vá của Alexandre đã làm việc cho bạn! Phiên bản Emacs, HĐH và GUI nào bạn đang sử dụng?
Victor Rybynok

Tôi đang sử dụng phiên bản GUI của "Cổng Mac" . Emacs 26.1.91. Sau khi áp dụng bản vá, tôi phải thay đổi tệp dành riêng cho máy Mac (macterm.c) để thực hiện các thay đổi tương tự như trong phần còn lại của mã. Tôi nghĩ rằng các bản vá làm nhiều hơn tôi thực sự muốn. Tôi nghĩ (nhưng chưa được kiểm tra) mà tôi sẽ có thể thay đổi eabs (s->face->box_line_width)để max (s->face->box_line_width, 0)và không có thay đổi khác.
amitp

Sau khi sử dụng nó được một ngày, tôi thấy có chút trục trặc. Tôi không biết liệu đây là do bản vá hay do những thay đổi của tôi đối với macterm.c. Trong mọi trường hợp, tôi đã hoàn nguyên.
amitp
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.