พื้นหลังภาพอินไลน์เริ่มต้นในโหมดองค์กร


9

เมื่อภาพมีพื้นหลังโปร่งใสแน่นอนว่า Emacs เคารพสิ่งนั้น

น่าเสียดายสิ่งนี้อาจนำไปสู่ปัญหาเกี่ยวกับการแสดงผล:

ข้อความสีดำบนพื้นหลังสีเข้ม

มีวิธีแสดงสีเฉพาะ (เช่นสีขาว) ด้านหลังภาพหรือไม่? ดูเหมือนจะสนับสนุนบางส่วนสำหรับมันในภาพ ImageMagick

สิ่งที่เฉพาะเจาะจงที่ฉันทำงานด้วยในตอนนี้สามารถมีชุดสีพื้นหลังได้ แต่ฉันต้องเพิ่มสองสามบรรทัดลงในทุก ๆ รูปเพื่อที่จะทำเช่นนั้นซึ่งน้อยกว่าอุดมคติ ฉันต้องการไปยังที่ที่รูปภาพแบบอินไลน์แสดงในโหมด org มีสีพื้นหลังที่ตั้งไว้โดยค่าเริ่มต้น

(หมายเหตุ: นี่ไม่ใช่เฉพาะองค์กร orgelel มันเพิ่งเกิดขึ้นกับที่ฉันได้รับภาพเหล่านี้ตอนนี้)

คำตอบ:


9

หลังจากขุดมากมีไม่ได้ดูเหมือนจะเป็นในตัวเลือกที่จะปรับในองค์กรหรือในทั่วไป ระบบภาพไม่มีวิธีใดในการปรับแต่งพื้นหลังเริ่มต้นและองค์กรไม่มีวิธีการตั้งค่า:backgroundคุณสมบัติ อย่างไรก็ตามดูเหมือนว่าภาพส่วนใหญ่จะสนับสนุน:backgroundคุณสมบัติการแสดงผล

ฉันจะเพิ่มฟังก์ชั่นนี้เพื่อองค์กรโดยการปรับเปลี่ยน (อ่าน: การคัดลอกและวางลงใน.emacs.dที่มีการเปลี่ยนแปลงสาย org-display-inline-images1)

ฉันจะไม่ทำหน้าที่นี้ซ้ำเพราะมันค่อนข้างยาว บรรทัดที่ 51 ของฟังก์ชั่นอ่าน:

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

ฉันกำหนดตัวแปรที่ปรับแต่งได้ใหม่org-inline-image-backgroundซึ่งสามารถเก็บไว้nil(พื้นหลังโปร่งใส) หรือสี:

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

จากนั้นฉันเพิ่มลงในบรรทัด 51:

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

มันทำงานได้อย่างสวยงามและสามารถปรับแต่งได้โดยใช้เครื่องมือเลือกสีดังนั้นมันจึงเป็นไปตามข้อกำหนดทั้งหมดของฉัน

พื้นหลังตัวอักษรสีดำอ่อน


1
ดูเหมือนว่าคุณจะใช้ความพยายามอย่างมากในการคิดสิ่งนี้ คุณต้องการที่จะส่งโปรแกรมแก้ไขสำหรับสิ่งนี้หรือร้องขอให้เพิ่มไปยังโหมดองค์กรโดยส่งอีเมล emacs-orgmode@gnu.org หรือไม่
Kaushal Modi

เมื่อฉันใส่มันเข้าไปในจังหวะของมัน (ตรวจสอบให้แน่ใจว่ามันจะไม่ทำลายอะไร) ฉันก็หวังเช่นกัน
J David Smith

ดูเหมือนว่า Org-mode เวอร์ชั่น 8.0 ใหม่จะเริ่มใช้การซ้อนทับเพื่อแสดงภาพอินไลน์หรือไม่มีวิธีการแก้ไขสีพื้นหลังเริ่มต้นของการซ้อนทับหรือไม่?
stardiviner

@stardiviner นั่นเป็นสิ่งที่ทำนี่
J David Smith

ฉันตรวจสอบเวอร์ชั่น Org ของฉัน8.3.4แล้ว ฉันตรวจสอบorg-display-inline-imagesซอร์สโค้ดไม่พบคำจำกัดความรหัสของคุณ นี่คือซอร์สโค้ด: gist.github.com/649a7b36031d6adb4a96
stardiviner

4

ฉันได้คำแนะนำที่ดีกว่า

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

ทางออกที่ดี ฉันขอแนะนำให้เปลี่ยนชื่อฟังก์ชั่นคำแนะนำเพื่อลบorg-คำนำหน้าเนื่องจากวิธีการแก้ปัญหาใช้งานได้กว้างขึ้นหรือไม่ ด้วยธีมที่ไม่ใช่ค่าเริ่มต้นเป้าหมายอาจเป็นพื้นหลังสีขาว (ซึ่งไม่ใช่พื้นหลังของใบหน้าเริ่มต้น) ดังนั้น(list :background "white")อาจเป็นตัวอย่างที่มีประโยชน์
ebpa

1
นั่นคือตัวเลือกของผู้ใช้การพิจารณาของคุณถูกต้อง ฉันคิดว่าความคิดเห็นของคุณเพียงพอสำหรับผู้ใช้ที่พบรหัสนี้ :)
stardiviner
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.