Nền hình ảnh nội tuyến mặc định ở chế độ Org


9

Khi một hình ảnh có nền trong suốt, tất nhiên Emacs tôn trọng điều đó.

Thật không may, điều này có thể dẫn đến các vấn đề với màn hình:

văn bản màu đen trên nền tối

Có cách nào để hiển thị một màu cụ thể (ví dụ: màu trắng) đằng sau hình ảnh không? Dường như có một số hỗ trợ cho nó trong hình ảnh ImageMagick .

Các công cụ cụ thể mà tôi đang làm việc ngay bây giờ có thể có bộ màu nền, tuy nhiên tôi phải thêm một vài dòng cho mỗi hình để thực hiện điều đó, ít hơn lý tưởng. Tôi muốn đưa nó đến nơi hình ảnh nội tuyến được hiển thị ở chế độ org có màu nền được đặt theo mặc định.

(Lưu ý: đây không phải là org-babel cụ thể, nó chỉ là cách tôi có được những hình ảnh này ngay bây giờ)

Câu trả lời:


8

Sau khi đào nhiều, dường như không có tùy chọn tích hợp để điều chỉnh điều này trong Org hoặc nói chung. Hệ thống hình ảnh không có cách nào để tùy chỉnh nền mặc định và org không có cách nào để đặt thuộc :backgroundtính. Tuy nhiên, có vẻ như hầu hết các hình ảnh hỗ trợ thuộc tính :backgroundhiển thị.

Tôi đã thêm chức năng này vào Org bằng cách sửa đổi (đọc: sao chép và dán vào .emacs.dvới thay đổi 1 dòng) org-display-inline-images.

Tôi sẽ không tái tạo chức năng ở đây, vì nó khá dài. Dòng 51 của hàm đọc:

(setq img (save-match-data (create-image file type nil :width width)))

Tôi đã xác định một biến tùy chỉnh mới org-inline-image-background, có thể giữ nil(nền trong suốt) hoặc màu:

(defcustom org-inline-image-background nil
  "The color used as the default background for inline images.
  When nil, use the default face background."
  :group 'org
  :type '(choice color (const nil)))

Sau đó, tôi đã thêm nó vào dòng 51:

(setq img (save-match-data (create-image file type nil :width width 
                                                       :background org-inline-image-background)))

Điều này hoạt động rất đẹp và nó có thể được tùy chỉnh bằng cách sử dụng bộ chọn màu, vì vậy nó đáp ứng tất cả các yêu cầu của tôi.

nền văn bản màu đen


Có vẻ như bạn đã bỏ ra rất nhiều công việc để tìm ra điều này. Bạn có muốn gửi một bản vá cho điều này hoặc yêu cầu thêm nó vào chế độ org bằng cách gửi email cho emacs-orgmode@gnu.org?
Kaushal Modi

Khi tôi đặt nó qua các bước đi của nó (đảm bảo nó không phá vỡ bất cứ thứ gì) tôi cũng hy vọng.
J David Smith

Phiên bản 8.0 của chế độ Org mới dường như bắt đầu sử dụng lớp phủ để hiển thị hình ảnh nội tuyến, Có cách nào để sửa đổi màu nền mặc định của lớp phủ không?
stardiviner 17/03/2016

@stardiviner chính xác là những gì nó làm
J David Smith

Tôi đã kiểm tra phiên bản Org của tôi, nó là 8.3.4. Tôi đã kiểm tra org-display-inline-imagesmã nguồn, không tìm thấy định nghĩa mã của bạn. Đây là mã nguồn: gist.github.com/649a7b36031d6adb4a96
stardiviner 18/03/2016

3

Tôi có một giải pháp tốt hơn với lời khuyên.

(defun create-image-with-background-color (args)
  "Specify background color of Org-mode inline image through modify `ARGS'."
  (let* ((file (car args))
         (type (cadr args))
         (data-p (caddr args))
         (props (cdddr args)))
    ;; get this return result style from `create-image'
    (append (list file type data-p)
            (list :background (face-background 'default))
            props)))

(advice-add 'create-image :filter-args
            #'create-image-with-background-color)

Giải pháp tốt đẹp. Tôi có thể đề nghị đổi tên chức năng tư vấn để loại bỏ org-tiền tố vì giải pháp áp dụng rộng rãi hơn nhiều không? Với các chủ đề không mặc định, mục tiêu có thể là nền trắng (thường không phải là nền mặt mặc định), vì vậy (list :background "white")có thể là một ví dụ hữu ích.
ebpa

1
Đó là lựa chọn của người dùng, xem xét của bạn là đúng. Tôi nghĩ rằng nhận xét của bạn là đủ cho người dùng đã tìm thấy mã này. :)
stardiviner
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.