조직 모드-붙여 넣을 때 리치 HTML을 직접 구문 분석합니까?


12

현재 Evernoteand와 같은 도구를 사용하지 않기 위해 Quiver즐겨 사용하는 브라우저에서 HTML 콘텐츠를 직접 복사 한 다음 모든 서식 + 링크를 유지하면서 앱에 붙여 넣을 수 있습니다. 그러나 orgmode에서는 모든 서식 정보가 손실되는 것 같습니다.

누군가 웹을 탐색하고를 통해 콘텐츠를 복사하는 데 사용 eww하는 것이 좋습니다eww-org . 그러나 그게 내가 사용하여 웹 브라우징 많은 사람들이있을 것입니다 생각하지 않습니다 (정말 지루한 eww요즘 대신 현대적인 브라우저를. 내가 다시 그 링크를 열해야합니다 eww, 복사 및 수행 가끔 언급하지 eww않을 수 없습니다 내용을 멋지게 렌더링하십시오).

Emacs붙여 넣을 때 복사 한 HTML을 직접 구문 분석 할 수 있습니까? 아직 기존 도구가 없더라도 도구를 만드는 것이 가능합니까?

이것은 거의 orgmode다른 notetaking 도구 에서 전환하는 것을 막는 유일한 것입니다 .


"직접 복사 한 HTML 구문 분석"당신이 뜻 명확히하십시오
mankoff

@mankoff OK 내 설명에 충분하지 않은 것 같습니다. 원래 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
@mankoff 원더풀! 효과가 있었다! 당신은 남자입니다! 나는 Emacs 패키지 등으로 제출하는 것을 고려할 수도 있다고 생각합니다. haha. 이것은 org mode훨씬 더 사용자 친화적 이 될 수 있습니다. 실제로 더 많은 정보를 유지하기 때문에 중간 RTF 변환이없는 형식으로 더 좋아합니다. 예를 들어 #+BEGIN_QUOTE#+BEGIN_EXAMPLE답변에는 추가 변환과 보존되지 않습니다.
xji

1
@incandescentman 웹 페이지 내의 일부 CSS와 같은 일부 서식 정보를 제거하려고 시도합니다. 직접 시도해보고 어떤 차이가 있는지 확인할 수 있습니다.
xji

답변:


12

하나 만드는 것이 가능합니까?

이맥이기 때문에 그렇습니다 .

내 접근 방식은 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 텍스트를 가져옵니다. 16 진수로 인코딩되었으므로
  2. 펄은 16 진수를 문자열로 변환한다
  3. pandoc을 사용하여 HTML을 Org로 직접 변환 할 수 있지만 HTML은 복잡한 태그로 가득 차 있으므로 많은 조직 코드가 생성됩니다. 서식을 캡처하는 데 필요한 최소한의 태그 집합으로 HTML을 간단히 변환하기 위해
  4. HTML을 json으로 변환 한 다음
  5. json을 Org로 변환하십시오 (이 두 단계는 HTML을 단순화합니다).

참고 osascript맥 OS입니다. Linux의 1-2 단계를 수정하려면 shell-command-to-string의 인수를

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

어쨌든 pandoc명령 의 출력은 emacs로 리턴되어 버퍼에 삽입됩니다.

새 Emacs 명령을 "붙여 넣기"와 비슷한 키에 바인딩하지만 "붙여 넣기 및 HTML에서 변환"을 의미하며 작동해야합니다.

또는 어떤 붙여 넣기 명령을 사용하지 않으려는 경우 클립 보드에서 HTML을 사용할 수있을 때 HTML을 변환하고 일반 텍스트로 대체되는 Linux 버전이 있습니다.

"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자동으로 많이 사용 하는 것으로 보입니다 . 해당 텍스트의 형식이 올바르게 지정 되려면 을 추가해야 합니다 . orgmodeorg-emphasis-regexp-componentsorgmode
xji

특히 "릴리스 된"xclip 버전은 옵션 -t를 지원하지 않습니다. 따라서 xclip은 github에서 빌드해야합니다. 또한, pandoc 입력 및 출력을 통해 파이프로 연결해야 할 수도 있습니다.iconv utf-8
malcook

xclipOS X에도 있습니다 (아마도 X11 및 / 또는 개발자 도구 만 설치되어 있습니까?). 향상된 답변은 OS X에서도 작동 할 수 있습니다.
mankoff

@JIXiang 깨지지 않는 공백을 일반 공백으로 변환하도록 허용 된 답변을 어떻게 수정합니까?
incandescentman

1
@incandescentman 원래 org-mode의 패키지 파일을 수정하여 구분되지 않는 공간을 구분 기호로 인식합니다. 그러나 버전 변경으로 인해 지루한 것으로 나타났습니다. 그런 다음 pandoc의 저장소에 대한 문제를 제기했습니다. 기본적으로 pandoc에서 "필터"를 사용하여 자동 대체를 수행 할 수 있습니다. 그러나 때로는 실패하기도합니다. 이제 붙여 넣은 내용을 수동으로 선택하고 대체를 수행합니다. 나의 마지막 대체는 거의 항상 이것이므로 대체 기록을 스크롤하여 적용하십시오.
xji
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.