โหมดองค์กร - การแยกวิเคราะห์ HTML ที่หลากหลายโดยตรงเมื่อวาง?


12

ขณะนี้สำหรับเครื่องมือการจดบันทึกเช่นEvernoteและQuiverฉันสามารถคัดลอกเนื้อหา HTML โดยตรงจากเบราว์เซอร์ที่ชื่นชอบแล้ววางลงในแอพโดยมีการจัดรูปแบบ + ลิงก์ทั้งหมดที่เก็บรักษาไว้ อย่างไรก็ตามในโหมดรหัสดูเหมือนว่าข้อมูลการจัดรูปแบบทั้งหมดจะหายไป

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

เป็นไปได้ไหมที่จะให้Emacsแยกวิเคราะห์ HTML ที่คัดลอกโดยตรงเมื่อวาง? แม้ว่าจะไม่มีเครื่องมือที่มีอยู่สำหรับสิ่งนั้นมันเป็นไปได้ไหมที่จะสร้างมันขึ้นมา?

นี่เป็นสิ่งเดียวที่ทำให้ฉันเปลี่ยนorgmodeจากเครื่องมือจดบันทึกอื่น ๆ ไม่ได้


โปรดอธิบายสิ่งที่คุณหมายถึงโดย "แยกวิเคราะห์ HTML ที่คัดลอกโดยตรง"
mankoff

@ankoff ตกลงฉันเดาว่าฉันไม่ชัดเจนพอในคำอธิบายของฉัน สิ่งที่ฉันต้องการตัวอย่างเช่นถ้า HTML เดิมมี<b>text</b>แล้วหลังจากที่ฉันCmd + Cที่มันสามารถแปลง*text*ในorg modeโดยวิธีการบางอย่างเมื่อวาง หรือถ้าไม่อย่างน้อยก็รักษารหัส HTML ดั้งเดิมไว้เพื่อที่ฉันจะสามารถดูได้ในรูปแบบที่เหมาะสมในภายหลัง สถานการณ์ปัจจุบันเป็นเพียงข้อความธรรมดาเท่านั้นที่จะแสดงผล
xji

<p>I've seen somebody <a href="http://emacs.stackexchange.com/q/7171/115">suggest using <code>eww</code> to browse the web and copy the content via <code>eww-org</code></a>. However that is really tedious(I don't think there would be a lot of people browsing the web using <code>eww</code> instead of modern browsers nowadays. I'll have to open that link again in <code>eww</code> and do the copying, not to mention sometimes <code>eww</code> doesn't render the contents nicely). </p>ตัวอย่างเช่นเราได้ที่นี่ orgmodeถ้าผมคัดลอกวรรคนี้ผมต้องการที่จะสามารถที่จะทำให้เกิดการจัดรูปแบบใน
xji

1
@ankoff วิเศษมาก! มันได้ผล! คุณคือผู้ชาย! ฉันคิดว่าคุณสามารถพิจารณาส่งเป็นแพ็คเกจ Emacs และอื่น ๆ ฮ่าฮ่า สิ่งนี้สามารถทำให้org modeใช้งานง่ายขึ้นมาก ที่จริงฉันชอบมากขึ้นด้วยการจัดรูปแบบโดยไม่ต้องแปลง RTF ระดับกลางเพราะมันรักษาข้อมูลได้มากขึ้น ตัวอย่างเช่น#+BEGIN_QUOTEและ#+BEGIN_EXAMPLEในคำตอบของคุณจะไม่ถูกเก็บไว้กับการแปลงเพิ่มเติม
xji

1
@incandescentman นั่นเป็นเพียงความพยายามที่จะดึงข้อมูลการจัดรูปแบบบางอย่างเช่น CSS บางอย่างในหน้าเว็บ คุณอาจลองด้วยตัวคุณเองและดูว่ามันสร้างความแตกต่างอะไร
xji

คำตอบ:


12

เป็นไปได้ไหมที่จะทำอย่างนั้น?

ตั้งแต่นี้เป็น emacs, ใช่

แนวทางของฉันคือการใช้เครื่องมือของบุคคลที่สามที่สามารถใช้ HTML และแปลงเป็นข้อความธรรมดาหรือแม้แต่โดยตรงกับรูปแบบองค์กร ฉันคิดว่านี่เป็นแฮ็คที่น่าเกลียดและอาจมีวิธีที่ดีกว่าในการทำเช่นนี้ แต่ดูเหมือนว่าจะเหมาะกับกรณีทดสอบของฉัน

(defun kdm/html2org-clipboard ()
  "Convert clipboard contents from HTML to Org and then paste (yank)."
  (interactive)
  (kill-new (shell-command-to-string "osascript -e 'the clipboard as \"HTML\"' | perl -ne 'print chr foreach unpack(\"C*\",pack(\"H*\",substr($_,11,-3)))' | pandoc -f html -t json | pandoc -f json -t org"))
  (yank))

น่าเสียดายที่ HTML มีความซับซ้อนอย่างมากในขณะนี้ - ไม่มีแท็กที่เขียนด้วยมือง่าย ๆ อีกต่อไป การแท็ก HTML ที่ซับซ้อนนี้ต้องการคำสั่งเชลล์ที่ซับซ้อนด้านบน มันทำต่อไปนี้:

  1. osascriptรับข้อความ HTML จากคลิปบอร์ด มันคือ hex ที่เข้ารหัสดังนั้น
  2. perl แปลงเลขฐานสิบหกเป็นสตริง
  3. เราสามารถแปลง HTML นั้นเป็น Org โดยตรงด้วย pandoc แต่ HTML นั้นเต็มไปด้วยแท็กที่ซับซ้อนและดังนั้นจึงสร้างรหัส Org ได้มากมาย เพื่อให้ HTML กับแท็กชุดขั้นต่ำที่จำเป็นสำหรับการจับภาพการจัดรูปแบบฉัน
  4. แปลง HTML เป็น json แล้ว
  5. แปลง json เป็น Org (สองขั้นตอนเหล่านี้ทำให้ HTML ง่ายขึ้น)

โปรดทราบว่าosascriptสำหรับ MacOS ในการแก้ไขขั้นตอนที่ 1-2 สำหรับ Linux ให้แทนที่อาร์กิวเมนต์ของ shell-command-to-string ด้วย

"xclip -o -t text/html | pandoc -f html -t json | pandoc -f json -t org"

ไม่ว่าในกรณีใดผลลัพธ์ของpandocคำสั่งจะถูกส่งกลับไปยัง emacs และแทรกลงในบัฟเฟอร์

ผูกคำสั่ง Emacs ใหม่กับคีย์ที่คล้ายกับ "paste" แต่นั่นหมายถึง "paste-and-convert-from-html" ให้กับคุณและควรใช้งานได้

อีกทางเลือกหนึ่งถ้าคุณไม่ต้องการคิดว่าจะใช้คำสั่ง paste นี่คือรุ่นของ Linux ที่จะแปลง HTML เมื่อมีอยู่ในคลิปบอร์ดและจะกลับไปใช้ข้อความธรรมดา:

"xclip -o -t TARGETS | grep -q text/html && (xclip -o -t text/html | pandoc -f html -t json | pandoc -f json -t org) || xclip -o"

สิ่งที่เพิ่มเติม: ดูเหมือนว่าpandocจะใช้พื้นที่ที่ไม่ทำลายโดยอัตโนมัติค่อนข้างมากแทนที่จะเป็นพื้นที่ปกติเมื่อทำการแปลงข้อความอินไลน์ที่จัดรูปแบบ (ตัวหนาตัวเอียงตัวเอียงโค้ด ฯลฯ ) ซึ่งไม่ได้รับการยอมรับorgmodeโดยค่าเริ่มต้น คุณจะต้องเพิ่ม () เพื่อในการสั่งซื้อสำหรับข้อความเหล่านั้นจะได้รับการจัดรูปแบบได้อย่างถูกต้องในorg-emphasis-regexp-components orgmode
xji

โดยเฉพาะอย่างยิ่งรุ่น "วางจำหน่าย" ของ xclip ไม่สนับสนุนตัวเลือก -t; ดังนั้น xclip ต้องถูกสร้างขึ้นจาก github นอกจากนี้คุณอาจต้องใช้ท่อส่งออกแพนโดและอินพุตผ่านiconv utf-8
malcook

xclipอยู่ใน OS X ด้วย (อาจจะติดตั้งแค่ w / X11 และ / หรือเครื่องมือสำหรับผู้พัฒนาเท่านั้น) ดังนั้นคำตอบที่ได้รับการปรับปรุงอาจทำงานบน OS X ได้เช่นกัน
mankoff

@JIXiang ฉันจะแก้ไขคำตอบที่ยอมรับได้อย่างไรเพื่อที่จะแปลงช่องว่างแบบไม่แตกหักเป็นช่องว่างปกติ
คุมหลอด

1
@incandescentman ฉันแก้ไขไฟล์แพคเกจของโหมดองค์กรเดิมเพื่อให้รู้จักพื้นที่ไม่แบ่งเป็นตัวคั่น อย่างไรก็ตามมันกลับกลายเป็นว่าเบื่อกับการเปลี่ยนเวอร์ชั่น ฉันแจ้งปัญหาให้กับ repo ของ pandoc ซึ่งคุณสามารถค้นหาได้ โดยพื้นฐานแล้วคุณสามารถใช้ "ตัวกรอง" ใน pandoc เพื่อทำการทดแทนอัตโนมัติ แต่บางครั้งก็ล้มเหลว ดังนั้นตอนนี้ฉันส่วนใหญ่เลือกเนื้อหาที่วางด้วยตนเองและทำการทดแทน การทดแทนครั้งล่าสุดของฉันมักจะเป็นสิ่งนี้เสมอดังนั้นฉันแค่เลื่อนขึ้นประวัติศาสตร์การทดแทนของฉันและใช้
xji
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.