Emacs에서 PDF를 여는 기본 방법으로 외부 프로그램을 사용하는 방법은 무엇입니까?


42

언제 M-x find-filePDF 파일, 그것은 이맥스에서 열립니다. 이것이 좋지만 Emacs의 PDF 뷰어에는 필요한 많은 기능이 없으며 대신 외부 프로그램에서 PDF를 여는 것을 선호합니다. 외부 프로그램을 PDF의 기본 뷰어로 사용하도록 Emacs를 구성하려면 어떻게해야합니까?

답변:


34

시도하십시오 openwith. 다음 코드를 사용하면이 기능을 사용하여 PDF를 열 수 있습니다 evince(원하는 PDF 뷰어로 변경).

(require 'openwith)
(openwith-mode t)
(setq openwith-associations '(("\\.pdf\\'" "evince" (file))))

1
간단한 패키지에 타사 패키지가 필요하다는 것에 놀랐습니다. 그러나 작동합니다, 감사합니다!
tmalsburg

필요하지는 않지만 (Drew 's answer 참조) 훌륭하고 깔끔한 방법입니다. 음악 판독기 (mpg123)와 같은 다른 프로그램을 사용하는 경우 다른 프로그램과 충돌 할 수 있습니다.
Ehvince

이 솔루션에는 문제가 있습니다. 당신이 엉망 일 때 일부 패키지는 그것을 좋아하지 않는 것 같습니다 find-file. 예를 들어, 첨부 된 PDF가있는 이메일 (mu4e을 통해)을 보내면 첨부 된 PDF가 외부 편집기에서 열리고 송신이 실패합니다 (자세한 내용은 여기 참조).
tmalsburg 5

1
@ tmalsburg : 이메일 첨부 파일의 문제와 특정 사용 사례의 솔루션을 논의하는 이 SO 스레드를 살펴보십시오 .
Dan

방금 작동하지 않는 명령을 해제하기 위해 약간의 코드를 작성했습니다 . openwith-mode요점을 참조하십시오 .
Omar

21

많은 기능을 갖춘 PDF (강조 검색, 강조 표시 선택, 주석 달기, 컨텐츠 트리)가있는 PDF를 보려면 pdf-tools를 사용 하십시오 . 데모 에서 볼 수 있듯이 강조 표시와 함께 Isearch를 사용할 수 있습니다. Emacs는 이제 제가 가장 좋아하는 PDF 리더입니다. 책갈피 (+)를 사용하여 특정 PDF 페이지를 책갈피로 지정할 수도 있습니다.

편집 : helm외부 프로그램을 사용하고 사용하려면 helm이미 외부 파일을 여는 작업 메뉴가 Open file externally C-c C-x. C-u to choose again있습니다. 시스템에서 사용 가능한 모든 프로그램 목록을 제공하고 선택할 수있는 멋진 Helm 인터페이스를 제공합니다. 일단 선택하면 Helm은 접두어 인수 C-u로 명령을 실행하여 새 명령 을 선택할 때까지이를 기억합니다 .


3
+1 말씀해 주셔서 감사합니다 pdf-tools. 놀라운 패키지. 그것을 사랑하십시오! 귀하의 데모는 단지 무엇이 가능한지의 표면 ... :) 상처에도 불구하고,뿐만 아니라 중대하다
itsjeyd

pdf-tools는 표준 패키지 관리자를 통해 사용할 수없는 것으로 보이며 설치 절차는 emacs 24.4에서 작동하지 않는 것 같습니다 : /
Clément

그것은 나를 위해 작동합니다. 그러나 pdf-toolsEmacs Lisp 부분을 설치하고 사용하기 전에 저장소 를 복제하고 Emacs가 바이너리를 볼 수있는 곳이면 어디든지 C 부분을 컴파일하고 설치해야합니다.
Tu Do

pdf-tools를 사용하면 단어와 문구를 강조 표시 (예 : 노란색)하거나 강조 표시하지 않습니까?
백열 자

11

에 대해 물었습니다 find-file. 다른 사람들 (예 : Dan)이 그것에 대해 말한 것 외에도 option의 파일 형식 (예 : 확장명)과 관련된 응용 프로그램을 사용하여 파일을 여는 방법에 대해서도 알고 있어야합니다 dired-guess-shell-alist-user. 그리고 MS Windows에서 Emacs를 사용한다면 Windows 파일 연결을 사용하여 파일을 여는 방법을 아는 것이 좋습니다.

dired-guess-shell-alist-user표준 라이브러리를로드 한 후 옵션 을 사용할 수 있습니다 dired-x.el. PDF 파일의 기본 연결은 variable에 정의되어 dired-guess-shell-alist-default있으며 프로그램입니다 xpdf(UNIX 및 GNU / Linux에서 사용 가능). dired-guess-shell-alist-user예를 들어, 옵션 을 사용 하면이 연결을 목록에 추가하여 대신 Adobe Acrobat Reader와 연결할 수 ("\.pdf$" . "AcroRd32.exe")있습니다.

그런 다음을 사용하여 Dired에서 PDF 파일을 열 수 있습니다 !. 기본 프로그램을 "추측"으로 제공하며,이를 반복하여 액세스 할 수 있습니다 M-n. 그래서 !다음에 M-n당신에게 쉘 명령을 줄 것이다 AcroRd32.exe지점이 PDF 파일 이름 및 해당 명령 / 프로그램이 정규 표현식과 관련된 경우 경우 \.pdf$.

Dired 외에도 dired-guess-shell-alist-user, Bookmark + 라이브러리를 사용하는 경우 파일 연관을 책갈피 파일 핸들러로 사용할 수 있습니다 . 즉, PDF 파일 연관을 PDF 파일에 대한 책갈피에 적용 할 수 있습니다 . 의 현재 값이 dired-guess-shell-alist-useroption의 기본값으로 사용되어 bmkp-default-handlers-for-file-types이를 제어합니다.

당신은 옵션을 생각할 수 있습니다 dired-guess-shell-alist-userbmkp-default-handlers-for-file-types에 관해서는 다소 유사 auto-mode-alist. 그러나 파일 이름 패턴을 버퍼 모드에 맵핑하는 대신 파일 조치에 맵핑합니다. 또한 특정 명령을 사용할 때만 적용됩니다.

MS Windows를 사용 하는 경우 파일을 Dired로 열거 나 책갈피로 "점프"할 때 기존 Windows 파일 연결을 대신 사용할 수도 있습니다 . 이를 위해서는 라이브러리가 필요합니다 w32-browser.el.

Dired의 경우 Dired + 라이브러리도 필요합니다. Dired 에서 Windows 파일 연결 사용을 참조하십시오 . 북마크를 들어, 당신은 또한 필요 북마크 + 볼 - 즐겨 찾기 파일 당신 할 수 없습니다 방문 이맥스윈도우 파일 연결을 사용하여 열기 즐겨 찾기를 .


3

runner 사용하고 있습니다. 다음은 내 구성 파일의 발췌 부분입니다.

    (defun my:open-file-with-dired (file)
      "Ask dired how it would open FILE.
This code is useful if dired is well configured to open files
with external applications. I recommend using the `runner`
package to do so."
      (use-package dired-aux)
      (dired-do-async-shell-command
       (dired-guess-shell-command (format  "Open %s " file) (list file))
       0
       (list file)))

    (add-to-list 'org-file-apps '(t . (my:open-file-with-dired file)))
    (add-to-list 'org-file-apps '("\\.png\\'" . default))

0

플러그인없이 이것을 달성하는 나의 방법은 다음과 같습니다. Ubuntu 16.04 LTS에서 Emacs 25.3을 실행합니다. OS가 macOS 또는 Windows 인 xdg-open 경우 여기에 정의 된 첫 번째 기능을 변경해야합니다 . 이 링크 가 시작점으로 매우 유용 하다는 것을 알았습니다 .

(defun xdg-open (filename)
  (interactive "fFilename: ")
  (let ((process-connection-type))
    (start-process "" nil "xdg-open" (expand-file-name filename))))

(defun find-file-auto (orig-fun &rest args)
  (let ((filename (car args)))
    (if (cl-find-if
         (lambda (regexp) (string-match regexp filename))
         '("\\.pdf\\'" "\\.docx?\\'"))
        (xdg-open filename)
      (apply orig-fun args))))

(advice-add 'find-file :around 'find-file-auto)

위의 코드가로드 된 후 C-x C-fPDF 및 워드 파일 용 을 누르면 시스템 기본 앱을 사용하여 파일이 자동으로 열립니다.

난 정말 이맥스에서 제공하는 자문기구처럼, 참조 기능을 상담 (elisp) . 존재하는 기능을 호환 가능한 방식으로 조언함으로써 C-x C-f새로운 기능 과 같은 공통 키를 다시 바인딩하는 것을 피 합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.