Giter Site home page Giter Site logo

vedang / pdf-tools Goto Github PK

View Code? Open in Web Editor NEW
598.0 598.0 86.0 2.12 MB

Emacs support library for PDF files.

Home Page: https://pdftools.wiki

License: GNU General Public License v3.0

Makefile 0.62% Emacs Lisp 47.93% C 49.00% TeX 0.15% Shell 1.52% M4 0.28% Batchfile 0.14% Dockerfile 0.37%
emacs pdf pdf-viewer

pdf-tools's Introduction

PDF Tools README

https://circleci.com/gh/vedang/pdf-tools.svg?style=svg http://elpa.nongnu.org/nongnu/pdf-tools.svg http://stable.melpa.org/packages/pdf-tools-badge.svg http://melpa.org/packages/pdf-tools-badge.svg https://ci.appveyor.com/api/projects/status/yqic2san0wi7o5v8/branch/master?svg=true

The pdf-tools Wiki is maintained at https://pdftools.wiki. Head to the site if you find it easier to navigate a website for reading a manual. All the topics on the site are listed at https://pdftools.wiki/impulse.

Table of Contents

About PDF Tools

PDF Tools is, among other things, a replacement of DocView for PDF files. The key difference is that pages are not pre-rendered by, say, ghostscript and stored in the file-system, but rather created on-demand and stored in memory.

This rendering is performed by a special library named, for whatever reason, poppler, running inside a server program. This program is called epdfinfo and its job is to successively read requests from Emacs and produce the proper results, i.e. the PNG image of a PDF page.

Actually, displaying PDF files is just one part of pdf-tools. Since poppler can provide us with all kinds of information about a document and is also able to modify it, there is a lot more we can do with it. Watch this video for a detailed demo!

Installing pdf-tools

Installing this package via NonGNU ELPA or MELPA or any of the other package managers is straightforward and should just work! You should not require any manual changes. The documentation below is only if you are installing from source, or for troubleshooting / debugging purposes.

pdf-tools requires a server epdfinfo to run against, which it will try to compile and build when it is activated for the first time. The following steps need to be followed in this order, to install pdf-tools and epdfinfo correctly:

  • Installing the epdfinfo server
  • Installing pdf-tools elisp code

Installing the epdfinfo server

If you install pdf-tools via NonGNU ELPA or MELPA, you don’t need to worry about this separate server installation at all.

Note: You’ll need GNU Emacs ≥ 26.3 and some form of a GNU/Linux OS. Other operating systems are not officially supported, but pdf-tools is known to work on many of them.

The epdfinfo install script takes care of installing all the necessary pre-requisites on supported operating systems (see list below). See the section on I want to add support for pdf-tools on My Fav OS. How do I do that? to learn how to add your favorite Operating System to this list.

Similarly, package-managers are not officially supported, but pdf-tools is known to be available on some of them. See the section on Installing the epdfinfo server from package managers to avoid manual installation of server / server prerequisites.

Installation Instructions for epdfinfo:

$ git clone https://github.com/vedang/pdf-tools
$ cd /path/to/pdf-tools
$ make -s # If you don't have make installed, run ./server/autobuild and it will install make

This should give you no error and should compile the epdfinfo server. If you face a problem, please report on the issue tracker!

The following Operating Systems / package managers are supported. Note: The package manager used to install pre-requisites should be installed on your OS for the script to work:

  • Debian-based systems (debian, ubuntu): apt-get
  • Fedora: dnf
  • macOS: brew
  • Windows (MSYS2/ MingW): pacman
  • NixOS: nix-shell
  • openSUSE (Tumbleweed and Leap): zypper
  • Void Linux: xbps-install
  • Apline Linux: apk
  • FreeBSD: pkg
  • OpenBSD: pkg_add
  • NetBSD: pkgin
  • Arch Linux: pacman
  • Gentoo: emerge
  • CentOS: yum

Installing the epdfinfo server from package managers

pdf-tools can be directly installed from the package manager on some operating systems. Note that the packages available on these package managers are not maintained by the author and might be outdated.

Installing the epdfinfo server from source on Windows (+ Gotchas)

If using the GNU binaries for Windows, support for PNG and zlib must first be installed by copying the appropriate dlls into emacs’ bin/ directory. Most third-party binaries come with this already done.
  1. install MSYS2 and update the package database and core packages using the instructions provided.
  2. Open mingw64 shell (Note: You must use mingw64.exe and not msys2.exe)
  3. Compile the epdfinfo server using Installation steps described in Installing the epdfinfo server
  4. This should produce a file server/epdfinfo.exe. Copy this file into the pdf-tools/ installation directory in your Emacs.
  5. Make sure Emacs can find epdfinfo.exe. Either add the MINGW install location (e.g. C:/msys2/mingw64/bin) to the system path with setx PATH "C:\msys2\mingw64\bin;%PATH%"~ or set Emacs's path with ~(setenv "PATH" (concat "C:\\msys64\\mingw64\\bin;" (getenv "PATH"))). Note that libraries from other GNU utilities, such as Git for Windows, may interfere with those needed by pdf-tools. pdf-info-check-epdinfo will succeed, but errors occur when trying to view a PDF file. This can be fixed by ensuring that the MSYS libraries are always preferred.
  6. pdf-tools will successfully compile using Cygwin, but it will not be able to open PDFs properly due to the way binaries compiled with Cygwin handle file paths. Please use MSYS2.

Installing the epdfinfo server from source on macOS (+ Gotchas)

On macOS, autobuild adjusts PKG_CONFIG_PATH so that pdf-tools can find some of the keg-only packages installed by brew. It is recommended that you review the output logs printed by brew during the installation process to also export the relevant paths to the appropriate ENV variables.

Common installation gotchas

In case you decide to install libpoppler from source, make sure to run its configure script with the --enable-xpdf-headers option.

Installing optional features

One feature – following links of a PDF document by plain keystrokes – requires imagemagick’s convert utility. This requirement is optional, the installation process will detect if you have imagemagick installed or not.

Installing pdf-tools elisp code

pdf-tools requires tablist package (>= version 0.70) to be installed, for it to work correctly. Please make sure that the latest version of tablist is installed.

We have already run the steps necessary to install pdf-tools as part of the server installation! These are:

$ git clone https://github.com/vedang/pdf-tools
$ cd /path/to/pdf-tools
$ make -s

If the make command produced the ELP file pdf-tools-${VERSION}.tar you are fine! This package contains all the necessary files for Emacs and may be installed by either using

$ make install-package

or executing the Emacs command

M-x package-install-file RET pdf-tools-${VERSION}.tar RET

You can test if the package has been installed correctly, by running

M-x pdf-info-check-epdfinfo RET

To complete the installation process, you need to activate the package by putting the code below somewhere in your .emacs. Alternatively, and if you care about startup time, you may want to use the loader version instead.

(pdf-tools-install)  ; Standard activation command
(pdf-loader-install) ; On demand loading, leads to faster startup time

Once the Installation process is complete, check out Easy Help for PDF Tools features and Configuring PDF Tools features to get started!

Updating pdf-tools

Some day you might want to update this package via git pull and then reinstall it. Sometimes this may fail, especially if Lisp-Macros are involved and the version hasn’t changed. To avoid this kind of problems, you should delete the old package via list-packages, restart Emacs, run make distclean and then reinstall the package. Follow the steps described in Installing pdf-tools elisp code.

This also applies when updating via MELPA / NonGNU ELPA (except for running the make distclean step).

Features

View
View PDF documents in a buffer with DocView-like bindings. More information here.
Isearch
Interactively search PDF documents like any other buffer, either for a string or a PCRE.
Occur
List lines matching a string or regexp in one or more PDF documents.
Follow
Click on highlighted links, moving to some part of a different page, some external file, a website or any other URI. Links may also be followed by keyboard commands.
Annotations
Display and list text and markup annotations (like underline), edit their contents and attributes (e.g. color), move them around, delete them or create new ones and then save the modifications back to the PDF file. More information here.
Attachments
Save files attached to the PDF-file or list them in a dired buffer.
Outline
Use imenu or a special buffer (M-x pdf-outline) to examine and navigate the PDF’s outline.
SyncTeX
Jump from a position on a page directly to the TeX source and vice versa.
Virtual
Use a collection of documents as if it were one, big single PDF.
Misc
  • Display PDF’s metadata.
  • Mark a region and kill the text from the PDF.
  • Keep track of visited pages via a history.
  • Apply a color filter for reading in low light conditions.

View and Navigate PDFs

PDFView Mode is an Emacs PDF viewer. It displays PDF files as PNG images in Emacs buffers. PDFs are navigable using DocView-like bindings. Once you have installed pdf-tools, opening a PDF in Emacs will automatically trigger this mode.

Keybindings for navigating PDF documents

Navigation
Scroll Up / Down by Page-fullspace / backspace
Scroll Up / Down by LineC-n / C-p
Scroll Right / LeftC-f / C-b
First Page / Last Page<, M-< / >, M->
Next Page / Previous Pagen / p
Incremental Search Forward / BackwardC-s / C-r
Occur (list all lines containing a phrase)M-s o
Jump to Occur LineRETURN
Pick a Link and JumpF
Incremental Search in Linksf
History Back / Forwardsl / r
Display Outlineo
Jump to Section from OutlineRETURN
Jump to PageM-g g
Store position / Jump to position in registerm / ~’~

Note that pdf-tools renders the PDF as images inside Emacs. This means that all the keybindings of image-mode work on individual PDF pages as well.

Image Mode
image-scroll-rightC-x > / <remap> <scroll-right>
image-scroll-leftC-x < / <remap> <scroll-left>
image-scroll-upC-v / <remap> <scroll-up>
image-scroll-downM-v / <remap> <scroll-down>
image-forward-hscrollC-f / right / <remap> <forward-char>
image-backward-hscrollC-b / left / <remap> <backward-char>
image-bob<remap> <beginning-of-buffer>
image-eob<remap> <end-of-buffer>
image-bol<remap> <move-beginning-of-line>
image-eol<remap> <move-end-of-line>
image-scroll-down<remap> <scroll-down>
image-scroll-up<remap> <scroll-up>
image-scroll-left<remap> <scroll-left>
image-scroll-right<remap> <scroll-right>

Keybindings for manipulating display of PDF

Display
Zoom in / Zoom out+ / -
Fit Height / Fit Width / Fit PageH / W / P
Trim Margins (set slice to bounding box)s b
Reset Marginss r
Reset Zoom0
Rotate PageR

Annotations

pdf-tools supports working with PDF Annotations. You can display and list text and markup annotations (like squiggly, highlight), edit their contents and attributes (e.g. color), move them around, delete them or create new ones and then save the modifications back to the PDF file.

Keybindings for working with Annotations

Annotations
List AnnotationsC-c C-a l
Jump to Annotations from ListSPACE
Mark Annotation for Deletiond
Delete Marked Annotationsx
Unmark Annotationsu
Close Annotation Listq
Enable/Disable Following AnnotationsC-c C-f
Add and Edit AnnotationsSelect region via Mouse selection.
Then left-click context menu OR keybindings below
Add a Markup AnnotationC-c C-a m
Add a Highlight Markup AnnotationC-c C-a h
Add a Strikeout Markup AnnotationC-c C-a o
Add a Squiggly Markup AnnotationC-c C-a s
Add an Underline Markup AnnotationC-c C-a u
Add a Text AnnotationC-c C-a t
Highlight an arbitrary regionSection region with Mouse Drag (Hold down Meta and
drag). Then C-c C-a h to highlight that region.

Working with AUCTeX

Keybindings for working with AUCTeX

Syncing with AUCTeX
Refresh File (e.g., after recompiling source)g
Jump to PDF Location from SourceC-c C-g
Jump Source Location from PDFC-mouse-1

Miscellaneous features

Keybindings for miscellaneous features in PDF tools

Miscellaneous
Print FileC-c C-p

Easy Help for PDF Tools features

M-x pdf-tools-help RET

Run M-x pdf-tools-help inside Emacs, as shown above. It will list all the features provided by pdf-tools as well as the key-bindings for these features.

Configuring PDF Tools features

Once you have read through the features provided by pdf-tools, you probably want to customize the behavior of the features as per your requirements. Full customization of features is available by running the following:
M-x pdf-tools-customize RET

Known problems

linum-mode

pdf-tools does not work well together with linum-mode and activating it in a pdf-view-mode, e.g. via global-linum-mode, might make Emacs choke.

display-line-numbers-mode

This mode is an alternative to linum-mode and is available since Emacs 26. pdf-tools does not work well with it. For example, it makes horizontal navigation (such as C-f, C-b, C-x < or C-x > ) in a document impossible.

auto-revert

Autorevert works by polling the file-system every auto-revert-interval seconds, optionally combined with some event-based reverting via file notification. But this currently does not work reliably, such that Emacs may revert the PDF-buffer while the corresponding file is still being written to (e.g. by LaTeX), leading to a potential error.

With a recent AUCTeX installation, you might want to put the following somewhere in your dotemacs, which will revert the PDF-buffer after the TeX compilation has finished.

(add-hook 'TeX-after-compilation-finished-functions #'TeX-revert-document-buffer)

sublimity

L/R scrolling breaks while zoomed into a pdf, with usage of sublimity smooth scrolling features

Text selection is not transparent in PDFs OCRed with Tesseract

In such PDFs the selected text becomes hidden behind the selection; see this issue, which also describes the workaround in detail. The following function, which depends on the qpdf.el package, can be used to convert such a PDF file into one where text selection is transparent:

(defun my-fix-pdf-selection ()
  "Replace pdf with one where selection shows transparently."
  (interactive)
  (unless (equal (file-name-extension (buffer-file-name)) "pdf")
    (error "Buffer should visit a pdf file."))
  (unless (equal major-mode 'pdf-view-mode)
    (pdf-view-mode))
  ;; save file in QDF-mode
  (qpdf-run (list
             (concat "--infile="
                     (buffer-file-name))
             "--qdf --object-streams=disable"
             "--replace-input"))
  ;; do replacements
  (text-mode)
  (read-only-mode -1)
  (while (re-search-forward "3 Tr" nil t)
    (replace-match "7 Tr" nil nil))
  (save-buffer)
  (pdf-view-mode))

Note that this overwrites the PDF file visited in the buffer from which it is run! To avoid this replace the --replace-input with (concat "--outfile=" (file-truename (read-file-name "Outfile: "))).

Key-bindings in PDF Tools

  • Keybindings for navigating PDF documents
  • Keybindings for working with Annotations
  • Keybindings for manipulating display of PDF
  • Keybindings for working with AUCTeX
  • Keybindings for miscellaneous features in PDF tools

Tips and Tricks for Developers

Turn on debug mode

M-x pdf-tools-toggle-debug RET

Toggling debug mode prints information about various operations in the *Messages* buffer, and this is useful to see what is happening behind the scenes

Run Emacs lisp tests locally

You can go to the pdf-tools folder and run make test to run the ERT tests and check if the changes you have made to the code break any of the tests.

The tests are written in ERT, which is the built-in testing system in Emacs. However, they are run using Cask which you will have to install first, if you don’t have it already. You can install Cask by following the instructions on their site at https://github.com/cask/cask

Run server compilation tests locally

You can go to the pdf-tools folder and run make server-test to check if the changes you have made to the server code break compilation on any of the supported operating systems.

The tests build Podman images for all supported operating systems, so you will have to install Podman first, if you don’t have already. You can install Podman by following the instructions on their site at https://podman.io/getting-started/installation

Podman is compatible with Docker, so if you already have docker installed, you should be able to alias podman=docker on your shell and run the tests, without having to install Docker. (Note: I have not tested this)

Add a Dockerfile to automate server compilation testing

The server/test/docker folder contains Dockerfile templates used for testing that the epdfinfo server compiles correctly on various operating systems (more details here).

To see the list of operating systems where compilation testing is supported, run make server-test-supported. To see the list of operating systems where testing is unsupported, run make server-test-unsupported. To add support, look into the server/test/docker/templates folder (ubuntu files are a good example to refer to)

Issue Template for Bug Reports

Please use the ‘Bug Report’ issue template when reporting bugs. The template is as follows:

Describe the bug

A clear and concise description of what the bug is.

Steps To Reproduce the behaviour:

  1. Go to ‘…’
  2. Click on ‘….’
  3. Scroll down to ‘….’
  4. See error

What is the expected behaviour?

A clear and concise description of what you expected to happen.

Desktop

Please complete the following information:

  • OS: [eg: MacOS Catalina]
  • Emacs Version: [This should be the output of M-x emacs-version ]
  • Poppler Version: [eg: output of brew info poppler and similarly for other OSs]

Your pdf-tools install

Please complete the following information:

  • pdf-tools Version: [ M-x package-list-packages -> Search for pdf-tools -> Hit Enter and copy all the details that pop up in the Help buffer]
  • pdf-tools customization / configuration that you use:

Additional context

  • If you are reporting a crash, please try and add the Backtrace / Stacktrace of the crash.
  • If you are reporting a bug, please try and attach an example PDF file where I can reproduce the bug.
  • If you can attach screenshots or recordings, that is a great help
  • Please try reproducing the bug yourself on Vanilla Emacs before reporting the problem.

FAQs

Epdfinfo has stopped working!

Have you upgraded poppler recently? This can cause epdfinfo to stop working, since it was compiled with the previous version of poppler. Just run M-x pdf-tools-install and this should be fixed.

PDFs are not rendering well!

pdf-tools version 1.1.0 release changed the default value of pdf-view-use-scaling to t (previously, it was nil). This has been done keeping in mind that most modern monitors are HiDPI screens, so the default configuration should cater to this user. If you are not using a HiDPI screen, you might have to change this value to nil in your configuration
(setq pdf-view-use-scaling nil)

to scale the images correctly when rendering them.

What Emacs versions does pdf-tools support?

pdf-tools supports the 3 latest versions of Emacs major releases. At the moment of this writing, this means that the minimum supported Emacs version is 26.3.

I want to add support for pdf-tools on “My Fav OS”. How do I do that?

I’m working on automating pdf-tools installation as much as possible, in order to improve the installation experience. If you want to add support for a new / currently unsupported Operating System, please modify the server/autobuild script. Say you want to support a new Operating System called MyFavOS. You need to do the following work:
  1. Search for the Figure out where we are section. Here, add a call to os_myfavos right below handle_options at the end of the existing call chain. Here we try and pick up the correct Operating System and install the relevant dependencies.
  2. Add handling for the --os argument in os_argument for myfavos, so that the appropriate function can be called to install pre-requisites. --os is the argument that we pass to the script from the command-line to indicate which OS we are on.
  3. Create a os_myfavos function. This function checks if we are running on MyFavOS. If we are running on MyFavOS, it sets up PKGCMD, PKGARGS and PACKAGES variables so that the appropriate package manager can install the dependencies as part of the rest of the autobuild script.
  4. If you are adding support for your favorite operating system, consider adding automated testing support as well, to help me ensure that epdfinfo continues to compile correctly. See Add a Dockerfile to automate server compilation testing for more details.

The idea here is to make the server/autobuild file the single place from which installation can happen on any Operating System. This makes building pdf-tools dead simple via the Makefile.

This seems like a lot of work, but it is not. If you need a reference, search for os_gentoo or os_debian in the server/autobuild file and see how these are setup and used. The functions are used to install dependencies on Gentoo and Debian respectively, and are simple to copy / change.

When you make your changes, please be sure to test the elisp changes as well as the server code changes as described in the linked articles.

I am on a Macbook M1 and pdf-tools installation fails with a stack-trace

There have been a number of issues around pdf-tools installation problems on M1. M-x pdf-tools-install throws the following stack trace:
1 warning generated.
ld: warning: ignoring file /opt/homebrew/opt/gettext/lib/libintl.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
ld: warning: ignoring file /opt/homebrew/Cellar/glib/2.72.1/lib/libglib-2.0.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
ld: warning: ignoring file /opt/homebrew/Cellar/poppler/22.02.0/lib/libpoppler-glib.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
ld: warning: ignoring file /opt/homebrew/Cellar/glib/2.72.1/lib/libgobject-2.0.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
ld: warning: ignoring file /opt/homebrew/Cellar/poppler/22.02.0/lib/libpoppler.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
ld: warning: ignoring file /opt/homebrew/Cellar/cairo/1.16.0_5/lib/libcairo.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
ld: warning: ignoring file /opt/homebrew/Cellar/libpng/1.6.37/lib/libpng16.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
ld: warning: ignoring file /opt/homebrew/Cellar/zlib/1.2.11/lib/libz.dylib, building for macOS-x86_64 but attempting to link with file built for macOS-arm64
Undefined symbols for architecture x86_64:

This happens because M1 architecture is ARM64, whereas the Emacs App you are using has been compiled for the x86_64 architecture. The way to solve this problem is to install a version of Emacs which has been compiled for the M1. As of today, [2022-05-09 Mon], the latest version of Emacs available on https://emacsformacosx.com/ is natively compiled and you will not face these issues on it. Please remove your current Emacs App and install it from https://emacsformacosx.com/.

Thank you.

PS: How do I know if the Emacs I’m running has been compiled correctly?

You can see this by opening the Activity Monitor, selecting Emacs, clicking on the Info key, and then clicking on Sample. The Code Type field in the Sample output will show you how your Application has been compiled. Here is the output for EmacsForMacOSX (you can see that it’s ARM64):

Sampling process 61824 for 3 seconds with 1 millisecond of run time between samples
Sampling completed, processing symbols...
Analysis of sampling Emacs-arm64-11 (pid 61824) every 1 millisecond
Process:         Emacs-arm64-11 [61824]
Path:            /Applications/Emacs.app/Contents/MacOS/Emacs-arm64-11
Load Address:    0x1007f0000
Identifier:      org.gnu.Emacs
Version:         Version 28.1 (9.0)
Code Type:       ARM64
Platform:        macOS

If your Emacs is compiled for x86, the Code Type will be x86_64.

I am a developer, making changes to the pdf-tools source code

Thank you for taking the time to contribute back to the code. You may find some useful notes in the Tips and Tricks for Developers section. Please be sure to check it out!

pdf-tools's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pdf-tools's Issues

How to contribute to the wiki/readme?

Thanks for the nice work on the wiki, it looks good. It would be nice if it had some search functionality, but as the wiki is created from the README, we can search just in the README also (even better locally with swoop/swiper etc.).

I have read the instructions in the pdftoolswiki README, but when I open the pdf-tools README , I find that all headings have a set of properties now (I think since commit 69e06e2). So I was wondering if there is some special way for adding sections to the README, or can I just add headings without the properties? Would be nice if the answer here could get added to the instructions in the pdftoolswiki README also.

PDF annotations disappear upon saving

Hi!

I'm running into an error on macOS where the annotations disappear upon saving the pdf.

To reproduce:

  1. Create annotation C-c C-a h
  2. Save pdf (:w)
  3. Scroll back and forth in the PDF and the annotation has now disappeared.

Do you have any idea what might be the issue?

Thank you for taking this fork.

Pdf-tools failed to update the pdf document view in buffer.

On Ubuntu 20.04, I'm using git master version of Emacs, auctex, and pdf-tools with the following configuration:

(use-package pdf-tools
  :config
  (pdf-tools-install)
)

(setq-default TeX-master nil)

;; ##### Enable synctex correlation. 
;; ##### From Okular just press `Shift + Left click' to go to the good line. 
;; ##### From Evince just press `Ctrl + Left click' to go to the good line.
(setq TeX-source-correlate-mode t
      TeX-source-correlate-start-server t)

;; ### Set Okular as the default PDF viewer.
(eval-after-load "tex"
  ;'(setcar (cdr (assoc 'output-pdf TeX-view-program-selection)) "Okular")
  ;'(setcar (cdr (assoc 'output-pdf TeX-view-program-selection)) "Evince")
  '(setcar (cdr (assoc 'output-pdf TeX-view-program-selection)) "PDF Tools")
  )

;; Update PDF buffers after successful LaTeX runs
(add-hook 'TeX-after-compilation-finished-functions
           #'TeX-revert-document-buffer)

But it seems that only after I switched to or put the cursor in the pdf-tools' buffer/window, the updated content will be seen in the pdf file. I mean, when I stay in the tex source buffer/window, even the generated pdf file has been updated, I still won't see this update. See the screenshot below for more detailed info:

image

Regards,
HY

Page switching is conflicting with smooth scrolling

This might be an issue specific to emacs-mac, but having smooth scrolling through mac-mouse-wheel-smooth-scroll (which is enabled by default) prevents pdf-tools to switch to the next page with the mousepad, the page extends down and simply resets;

Drop support for emacs < 26

AFAICS emacs < 25 is not part of the continuous integration setup (the minimal emacs version tested in circleci is emacs-25; In the appveyor setup I can't find the versions of emacs that are tested: This seems to be the cmd used for installing emacs in appveyor: bash -lc "pacman -S --needed --noconfirm mingw-w64-x86_64-emacs")

Dropping support for emacs < 25 would allow us to remove compatiblity code e.g. in pdf-view.el, which currently leads to a byte-compiler-warning (see #24).

Linker error when compiling.

I'm getting the following error when trying to build pdf-tools on Artix linux, with emacs version: GNU Emacs 28.0.50 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo version 1.17.4, Xaw scroll bars) of 2021-08-16 running Spacemacs.

g++ -Wall -Wall -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include  -I/usr/include/poppler/glib -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/cairo -I/usr/include/lzo -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/harfbuzz -I/usr/include/pixman-1 -I/usr/include/poppler  -I/usr/include/poppler  -I/usr/include/libpng16  -std=c++11 -g -O2   -o epdfinfo epdfinfo-epdfinfo.o epdfinfo-poppler-hack.o -lglib-2.0  -lpoppler-glib -lgobject-2.0 -lglib-2.0 -lcairo  -lpoppler  -lpng16 -lz  libsynctex.a -lz   
/usr/bin/ld: epdfinfo-epdfinfo.o: in function `mktempfile':
/home/kjartan/.emacs.d/elpa/28.0/develop/pdf-tools-20210531.1613/build/server/epdfinfo.c:354: warning: the use of `tempnam' is dangerous, better use `mkstemp'
/usr/bin/ld: /lib/../lib64/libpoppler-glib.so: undefined reference to `std::__throw_bad_array_new_length()@GLIBCXX_3.4.29'
collect2: error: ld returned 1 exit status
make: *** [Makefile:471: epdfinfo] Error 1

I'm not sure if this is a pdf-tools issue, the error gives me the impression that it might be a problem with poppler.

Release v0.91

Hi, thank you very much for maintaining and improving this package.

Can you make a new tag, please? So downstream package managers will be more willing to update pdf-tools package.

I'll send a patch to GNU Guix.

Keep up great work!)

pdf-tools installation issue in gccemacs

Getting following error with pdf-tools-install during compilation

usr/bin/ld: epdfinfo-epdfinfo.o: undefined reference to symbol 'round@@GLIBC_2.2.5'
/usr/bin/ld: /lib/x86_64-linux-gnu/libm.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

Ubuntu 20.04 LTS
Emacs 28.0.50 with native compilation support installed using

sudo add-apt-repository ppa:ubuntu-toolchain-r/ppa
sudo apt install gcc-10 g++-10 libgccjit0 libgccjit-10-dev libjansson4 libjansson-dev
sudo apt install libxpm-dev libgif-dev libtiff-dev libgnutls28-dev libmagick++-dev
git clone git://git.sv.gnu.org/emacs.git gccemacs
git checkout master
export CC=/usr/bin/gcc-10 CXX=/usr/bin/gcc-10
./autogen.sh
./configure --with-cairo --with-modules --without-compress-install --with-x-toolkit=no --with-gnutls --without-gconf --without-xwidgets --without-toolkit-scroll-bars --without-xaw3d --without-gsettings --with-mailutils --with-native-compilation --with-json --with-harfbuzz --with-imagemagick --with-jpeg --with-png --with-rsvg --with-tiff --with-wide-int --with-xft --with-xml2 --with-xpm CFLAGS="-O3 -mtune=native -march=native -fomit-frame-pointer"
make -j2 NATIVE_FULL_AOT=1
make install

pdf-tools installed using

  (use-package pdf-tools
  :straight '(pdf-tools :host github
                        :repo "vedang/pdf-tools"
                        :branch "master"
                        :build (:not native-compile))
    :magic ("%PDF" . pdf-view-mode)
    :hook (pdf-view-mode . auto-revert-mode)
    :config
    (pdf-tools-install)
    (setq-default pdf-view-display-size 'fit-page)
    )

package description says pdf-tools won't work on windows

The melpa package description says

Note: This package requires external libraries and works currently only on GNU/Linux systems.

But the GitHub Readme says that it can work on MacOS and Windows -- and for me, on Windows, I can verify that it does work.

Toggling pdf-view-auto-slice-minor-mode

Toggling pdf-view-auto-slice-minor-mode does not reset the slice. I'd like to suggest to add (pdf-view-reset-slice) to the following part of pdf-view-auto-slice-minor-mode, i.e., replacing

pdf-tools/lisp/pdf-view.el

Lines 879 to 880 in 5f77dae

(remove-hook 'pdf-view-change-page-hook
'pdf-view-set-slice-from-bounding-box t))))

with

(progn
        (remove-hook 'pdf-view-change-page-hook
                     'pdf-view-set-slice-from-bounding-box t)
        (pdf-view-reset-slice))

Support Continous Scrolling in `pdf-tools`

a very popular request for pdf-tools is the implementation of actual continuous scrolling, with multiple PDF pages per buffer (see politza/pdf-tools#27). but alas, this is hard to implement, although a hack is available. the former pdf-tools maintainer suggested that a compromise fix might be a fixed-scroll-mode, in which a call to pdf-view-scroll-up-or-next-page always performs the same amount of scrolling whenever it does not move to next page, so that we don't lose the location of the line we were reading when the scroll hits the bottom of the page. I'd be happy enough with this fix, and I think a lot of people would too (the person who first opened the issue made a good case: they put the unpredictability of the current line after scrolling as the problem, and suggested contiguous view as a mere possible fix, even if the most common and expected one).

if I can get some pointers as to how to actually implement this I think I can manage a PR :)

History keybindings

This is a minor thing, but the usual backward/forward history in Emacs are l and r. It might be nice to follow that convention.

Rebuild of epdfinfo: First do a make clean, to remove old library dependencies

I recently had the problem that pdf-tools did not work, because epdfinfo depended on an old version of libpoppler.so, and that version was no longer available since I had upgraded the OS.
But rebuilding pdf-tools did not help: the rebuilt epdfinfo still depended on the old libpoppler.so.
After googling about this I got the answer that I had to cd into the pdf-tools build directory and there invoke 'make clean'.
I think it would be better if the pdf-tools build of epdfinfo started with doing a 'make clean'.

How do I use pdf-view-extract-region-image properly?

Here is the image of what the full page was supposed to look like
Full page

Below, on the left window, the gray region underneath the graphics was what I tried to extract. And on the right is what pdf-view-extract-region-image output.
Extracted

I've noticed that it output only to the edge of the last line, is this the problem?

Q: How do I get the gray region properly?

Add support for `follow-mode` to PDF Tools

PDF-tools doesn't seem to support follow-mode, trying to use it results in the other window displaying the buffer being empty. I don't know what would need to happen for it to be supported and if it is even possible in principle without large refactoring, but in case of some refactoring happening for #18, this might be a nice goal to keep in mind.

Bookmark error when opening a pdf with pdf-tools

If I bookmark a PDF with bookmark+, I am getting this error when I try to open it:

pdf-info--normalize-file-or-buffer: Buffer is not associated with any file *Bookmark List*

And the file does not open.

This error only occurs with pdf-tools, and not if I bookmark the file with doc-view.

Here is the backtrace error.

Debugger entered--Lisp error: (error "Buffer is not associated with any file :*Bookmark ...")
  signal(error ("Buffer is not associated with any file :*Bookmark ..."))
  error("Buffer is not associated with any file :%s" "*Bookmark List*")
  pdf-info--normalize-file-or-buffer(nil)
  pdf-info-number-of-pages()
  pdf-cache-number-of-pages()
  pdf-view-goto-page(687)
  pdf-view-bookmark-after-jump-hook()
  run-hooks(bookmark-after-jump-hook)
  (let ((orig-buff (current-buffer))) (run-hooks 'bookmark-after-jump-hook))
  (catch 'bookmark--jump-via (bookmark-handle-bookmark bookmark) (if (and bmkp-use-w32-browser-p (fboundp 'w32-browser) (bookmark-get-filename bookmark)) nil (let ((win (get-buffer-window (current-buffer) 0))) (if win (progn (set-window-point win (point))))) (if (and (bmkp-autonamed-bookmark-for-buffer-p bookmark (buffer-name)) (not bmkp-use-w32-browser-p)) (progn (setq bookmark (bmkp-update-autonamed-bookmark bookmark)))) (let* ((temp (and (boundp 'bmkp-auto-light-when-jump) bmkp-auto-light-when-jump))) (cond ((eql temp 'autonamed-bookmark) (if (bmkp-autonamed-bookmark-p bookmark) (progn (bmkp-light-bookmark bookmark nil nil nil ...)))) ((eql temp 'non-autonamed-bookmark) (if (bmkp-autonamed-bookmark-p bookmark) nil (bmkp-light-bookmark bookmark nil nil nil 'USE-POINT))) ((eql temp 'any-bookmark) (bmkp-light-bookmark bookmark nil nil nil 'USE-POINT)) ((eql temp 'autonamed-in-buffer) (bmkp-light-bookmarks (bmkp-remove-if-not #'bmkp-autonamed-bookmark-p (bmkp-this-buffer-alist-only)) nil 'MSG)) ((eql temp 'non-autonamed-in-buffer) (bmkp-light-bookmarks (bmkp-remove-if #'bmkp-autonamed-bookmark-p (bmkp-this-buffer-alist-only)) nil 'MSG)) ((eql temp 'all-in-buffer) (bmkp-light-this-buffer nil 'MSG))))) (let ((orig-buff (current-buffer))) (run-hooks 'bookmark-after-jump-hook)) (let ((jump-fn (bmkp-get-tag-value bookmark "bmkp-jump"))) (if jump-fn (progn (funcall jump-fn)))) (if bookmark-automatically-show-annotations (progn (bookmark-show-annotation bookmark))))
  bookmark--jump-via((#("common-order-1994.pdf" 0 21 (bmkp-full-record #1)) (filename . "~/resources/liturgy/common-order-1994.pdf") (buffer-name . "common-order-1994.pdf") (visits . 2) (time 24664 3208 45415 0) (created 24663 35208 782 0) (position . 1) (page . 687) (slice) (size . fit-page) (origin 0.0 . 0.0) (handler . pdf-view-bookmark-jump-handler)) bmkp--pop-to-buffer-same-window)
  (let ((bmkp-use-region (if flip-use-region-p (not bmkp-use-region) bmkp-use-region))) (bookmark--jump-via bookmark display-function))
  bmkp-jump-1(#("common-order-1994.pdf" 0 21 (bmkp-full-record (#1 (filename . "~/resources/liturgy/common-order-1994.pdf") (buffer-name . "common-order-1994.pdf") (visits . 2) (time 24664 3208 45415 0) (created 24663 35208 782 0) (position . 1) (page . 687) (slice) (size . fit-page) (origin 0.0 . 0.0) (handler . pdf-view-bookmark-jump-handler)))) bmkp--pop-to-buffer-same-window nil)
  (let ((bookmark-name (bookmark-bmenu-bookmark))) (bmkp-jump-1 bookmark-name 'bmkp--pop-to-buffer-same-window flip-use-region-p))
  bookmark-bmenu-this-window(nil)
  funcall-interactively(bookmark-bmenu-this-window nil)
  call-interactively(bookmark-bmenu-this-window nil nil)
  command-execute(bookmark-bmenu-this-window)
  read-from-minibuffer("M-x " nil (keymap (10 . minibuffer-complete-and-exit) (13 . minibuffer-complete-and-exit) keymap (C-tab . switch-to-completions) (menu-bar keymap (minibuf "Minibuf" keymap (tab menu-item "Complete" minibuffer-complete :help "Complete as far as possible") (space menu-item "Complete Word" minibuffer-complete-word :help "Complete at most one word") (63 menu-item "List Completions" minibuffer-completion-help :help "Display all possible completions") "Minibuf")) (27 keymap (118 . switch-to-completions)) (prior . switch-to-completions) (63 . minibuffer-completion-help) (32 . minibuffer-complete-word) (9 . minibuffer-complete) keymap (menu-bar keymap (minibuf "Minibuf" keymap (previous menu-item "Previous History Item" previous-history-element :help "Put previous minibuffer history element in the min...") (next menu-item "Next History Item" next-history-element :help "Put next minibuffer history element in the minibuf...") (isearch-backward menu-item "Isearch History Backward" isearch-backward :help "Incrementally search minibuffer history backward") (isearch-forward menu-item "Isearch History Forward" isearch-forward :help "Incrementally search minibuffer history forward") (return menu-item "Enter" exit-minibuffer :key-sequence "\15" :help "Terminate input and exit minibuffer") (quit menu-item "Quit" abort-recursive-edit :help "Abort input and exit minibuffer") "Minibuf")) (10 . exit-minibuffer) (13 . exit-minibuffer) (7 . minibuffer-keyboard-quit) (C-tab . file-cache-minibuffer-complete) (9 . self-insert-command) (XF86Back . previous-history-element) (up . previous-line-or-history-element) (prior . previous-history-element) (XF86Forward . next-history-element) (down . next-line-or-history-element) (next . next-history-element) (27 keymap (60 . minibuffer-beginning-of-buffer) (114 . previous-matching-history-element) (115 . next-matching-history-element) (112 . previous-history-element) (110 . next-history-element))) nil extended-command-history nil nil)
  completing-read-default("M-x " #f(compiled-function (string pred action) #<bytecode 0x84015c2b41>) commandp t nil extended-command-history nil nil)
  completing-read("M-x " #f(compiled-function (string pred action) #<bytecode 0x84015c2b41>) commandp t nil extended-command-history)
  read-extended-command()
  byte-code("\302\30\11\303 \10E)\207" [execute-extended-command--last-typed current-prefix-arg nil read-extended-command] 3)
  call-interactively(execute-extended-command nil nil)
  command-execute(execute-extended-command)

I contacted the developer of bookmark+ about this first and this was his response:

As I said, I don't use (or have) pdf-tools, thus pdf-info--normalize-file-or-buffer etc.
All of what appears to be problematic happens in pdf-tools code, starting with pdf-view-bookmark-after-jump-hook. I know nothing about that hook or pdf-view* or pdf-cache* or pdf-info*.
This is your bookmark:
("common-order-1994.pdf"
(filename . "~/resources/liturgy/common-order-1994.pdf")
(buffer-name . "common-order-1994.pdf")
(visits . 2)
(time 24664 3208 45415 0)
(created 24663 35208 782 0)
(position . 1)
(page . 687)
(slice)
(size . fit-page)
(origin 0.0 . 0.0)
(handler . pdf-view-bookmark-jump-handler))

That function is what's causing the problem. It sounds like it maybe expects some context that isn't established when it's invoked. It apparently tried to use the buffer that was current when you tried to jump to the bookmark (Bookmark List) as if it was a PDF file buffer (?).

The only fields in your bookmark that Bookmark+ knows about are filename, buffer-name, visits, time, created, position, and handler. All the other fields are no doubt defined and created by pdf-tools, pdf-view, pdf-cache, or pdf-info.

I suggest you follow up with the maintainers of those libraries. (None of those libraries are in vanilla Emacs, at least through Emacs 27.)

Change the #! directive in shell scripts from /bin/sh to /usr/bin/env sh

The /usr/bin/env sh indirection ensures that the scripts work on systems which may not have a /bin/sh hard-link. This is a straightforward change, the expectation is that it should be tested on multiple systems.

The CI systems I've set up for pdf-tools will test the change on Ubuntu and Windows, testing on other systems will be welcome.

This change was suggested in #7 by @lebensterben

Can't install on windows

(I posted this on politza's page but seeing from the other issue that things should be here, I've copied this over)

I followed the instructions on the README for installation and configuration on windows. I have mingw64 installed. I downloaded everything from https://github.com/politza/pdf-tools. Using mingw64, I cd to the path where I saved pdf-tools-master, and I run "make -s." I get the following:

$ make -s
Using Emacs 27.1
make: cask: No such file or directory
make: *** [Makefile:44: .cask/27.1] Error 127

When I try pdf-tools-install from emacs it asks whether I have msys2 installed and when I select yes it prompts me for the installation directory. I supply that info and then I get the following error:

---------------------------
 Configuring and compiling 
---------------------------
./configure -q --bindir=c:/Users/[name]/Documents/.emacs.d/elpa/pdf-tools-20200512.1524/ && make -s
configure: error: cannot find necessary  poppler-private header (see README.org)
===========================
     Build failed.  ;o(    
===========================
Note: maybe try the '-d' option.

Comint exited abnormally with code 1 at Mon Mar 15 10:16:29
Even though I have poppler installed through mingw64. This seems related to https://ask.csdn.net/questions/1704842, so I added the mingw64/bin directory to my path in hopes that that would resolve the issue, but it did not work.

Any ideas?

install pdf-tools without sudo privileges

Hello,

I tried to install pdf-tools within my doom-emacs setup. I know that i need to install some dependencies. I already asked my system admin to install these dependencies on my machine. However, when I try to install pdf-tools by M-x pdf-tools-install, then emacs still ask me for my sudo password which I obviously do not have.

Is there a way to bypass this?

Pdf occur extended mode - Context resize

Hello,

Pdf occur is a wonderful tool, but it will be even more amazing if it was possible to resize the surrounding context displayed by the occur search. I am a scholar, and I see two good reasons justifying this feature :

  1. Sometimes, it is useful to get a larger context to assess if an occurrence is relevant or not, especially if the word searched is located at the far end or at the start of the line picked by the occur search.
  2. A such feature works like a trick allowing a useful proximity search : as it is possible to search into the search results buffer, it is possible to refine the first search with another word, getting as a final result the locations where both words are close together. Right now, we can already perform this use in pdf occur, but with only one line of context, it is poorly useful. With 2-3 lines more, it becomes really valuable.

Pdf occur works very differently thand the emacs occur search, but to give an exemple of what tool I am thinking about, there is this very efficient tool for occur : https://github.com/dgtized/occur-context-resize.el.

Anyway, just an idea!
Thanks

[FEATURE REQUEST] Save position to special register before following links.

It would be handy if pdf-tools used a special register (or similar) to
hold the position prior to following a link of type 'goto-dest (refer:
`pdf-links-action-perform'). A command like this would be more
useful if it worked like {C-u C-SPC}.

Currently, I think using a register slot to store the position would
be the simplest solution. I will try to make a patch after the 24th
or so.

PS: I checked if this feature (or similar) already exists but I didn't
find any commands of interest when invoking {C-h m} in a pdf-view
buffer. If there is indeed a similar feature, I'd be grateful if you
could point me to it.

Builds always reinstall dependencies

Building always reinstalls dependencies because in have_packages_installed it tries to compile with cc (line 170), however, PDFDocEncoding.h requires C++ as it attempts to #include <string>. This should be pretty easy to fix by replacing cc with c++ on that line.

pdf-tools/server/autobuild

Lines 156 to 176 in d262cf9

have_packages_installed()
{
{
which pkg-config || return 1
if ! [ -f configure ];then
which autoreconf || return 1
which automake || return 1
fi
for lib in libpng glib-2.0 poppler poppler-glib zlib; do
pkg-config --exists $lib || return 1
done
which make || return 1
which gcc || which cc || return 1
which g++ || which c++ || return 1
cc $(pkg-config --cflags poppler) -o /dev/null -E - 2>/dev/null <<EOF
#include <PDFDocEncoding.h>
EOF
[ $? -eq 0 ] || return 1
return 0
} >/dev/null 2>&1
}

Native byte compiler warnings

When emacs-28 jit-compiles pdf-tools the following warnings are output

In pdf-util-edges-transform:
pdf-util.el:334:58: Warning: reference to free variable ‘edges-left’
uncompressing tramp-archive.el.gz...done
pdf-util.el:334:69: Warning: reference to free variable ‘region-left’
pdf-util.el:335:55: Warning: reference to free variable ‘region-width’
pdf-util.el:336:58: Warning: reference to free variable ‘edges-top’
pdf-util.el:336:68: Warning: reference to free variable ‘region-top’
pdf-util.el:337:55: Warning: reference to free variable ‘region-height’
pdf-util.el:338:58: Warning: reference to free variable ‘edges-right’
pdf-util.el:340:58: Warning: reference to free variable ‘edges-bot’

In pdf-util-with-edges:
pdf-util.el:358:11: Warning: macro ‘pdf-util-with-edges’ defined too late

In pdf-util-tooltip-arrow:
pdf-util.el:726:39: Warning: reference to free variable ‘pdf-view-midnight-colors’
Compiling /opt/emacs/share/emacs/28.0.50/lisp/net/zeroconf.el.gz...
Compiling /home/thomas.hisch/.emacs.d/elpa/pdf-tools-20210531.1813/pdf-info.el...

In end of data:
pdf-util.el:672:22: Warning: the function ‘list-colors-duplicates’ is not known to be defined.
uncompressing zeroconf.el.gz...
pdf-util.el:521:8: Warning: the function ‘image-set-window-hscroll’ is not known to be defined.
pdf-util.el:519:8: Warning: the function ‘image-set-window-vscroll’ is not known to be defined.
pdf-util.el:329:29: Warning: the function ‘edges’ is not known to be defined.
pdf-util.el:202:5: Warning: the function ‘image-mode-window-get’ is not known to be defined.
uncompressing zeroconf.el.gz...done

In end of data:
pdf-info.el:1597:15: Warning: the function ‘pdf-util-frame-scale-factor’ is not known to be defined.
pdf-info.el:1482:23: Warning: the function ‘pdf-util-hexcolor’ is not known to be defined.
pdf-info.el:721:39: Warning: the function ‘pdf-view-buffer-file-name’ is not known to be defined.
pdf-info.el:566:7: Warning: the function ‘pdf-util-munch-file’ is not known to be defined.
pdf-info.el:499:23: Warning: the function ‘pdf-util-highlight-regexp-in-string’ is not known to be defined.
Compiling /home/thomas.hisch/.emacs.d/elpa/pdf-tools-20210531.1813/pdf-cache.el...

In end of data:
pdf-cache.el:444:14: Warning: the function ‘pdf-view-desired-image-size’ is not known to be defined.
pdf-cache.el:411:38: Warning: the function ‘pdf-view-create-page’ is not known to be defined.
pdf-cache.el:356:8: Warning: the function ‘image-mode-window-get’ is not known to be defined.
Compiling /home/thomas.hisch/.emacs.d/elpa/pdf-tools-20210531.1813/pdf-view.el...
Compiling /home/thomas.hisch/.emacs.d/elpa/pdf-tools-20210531.1813/pdf-tools.el...

In pdf-view-next-page-command:
pdf-view.el:653:6: Warning: Unused lexical variable `pdf-view-inhibit-redisplay'
pdf-view.el:887:1: Warning: Variable ‘pdf-view-inhibit-redisplay’ declared after its first use

In pdf-view-registerv-make:
pdf-view.el:1614:4: Warning: ‘registerv-make’ is an obsolete function (as of 27.1); Use your own type with methods on register-val-(insert|describe|jump-to)

In end of data:
pdf-view.el:418:17: Warning: the function ‘cua-copy-region--pdf-view-advice’ is not known to be defined.
pdf-view.el:321:15: Warning: the function ‘pdf-tools-pdf-buffer-p’ is not known to be defined.

Please create wiki for extra documentation

I've been looking a little into how pdf-tools works. And it is not so straightforward because it is a nifty package and many functions lack docstrings. So to keep track of my findings, I have created a wiki in my fork of this repo here.

However, it might be handier to create the wiki over here, where we can 'log' about the reverse engineering, it could save us a lot of time.
Anyway, I will continue writing my notes on that wiki (slowly, because time is scarce), and you can do with it whatever you like (copy, link, nothing:)

Anyway, just notifying you about it.

As I wrote already here, I think/showed it should be possible to get real continuous scrolling (also without using pymupd), which is the reason why I am looking more into the package.

PDFs not rendering

Note: This issue is copied from doomemacs/doomemacs#5466, but I'm pretty sure the error is in here somewhere.

What did you expect to happen?

Opening a PDF should show the rendered version of the PDF.

What actually happened?

When opening the PDF, the text source of the PDF (not the rendered version) appears. A smaller window appears below stating:

Error (bookmark-after-jump-hook): Error running hook "pdf-view-bookmark-after-jump-hook" because: (wrong-type-argument number-or-marker-p Abort trap: 6)
Error (find-file-hook): Error running hook "save-place-find-file-hook" because: (doom-hook-error bookmark-after-jump-hook pdf-view-bookmark-after-jump-hook (wrong-type-argument number-or-marker-p Abort trap: 6))

Adding toggle-debug-on-error produces:

Debugger entered--Lisp error: (wrong-type-argument stringp number-or-marker-p)
  string-match(":Document is encrypted\\'" number-or-marker-p nil)
  pdf-info-encrypted-p()
  pdf-view-decrypt-document()
  #f(compiled-function () (interactive nil) #<bytecode 0x1ff0d889a005>)()
  apply(#f(compiled-function () (interactive nil) #<bytecode 0x1ff0d889a005>) nil)
  (if (file-executable-p pdf-info-epdfinfo-program) (apply fn args) (fundamental-mode) (message "Viewing PDFs in Emacs requires epdfinfo. Use `M-x ..."))
  +pdf--install-epdfinfo-a(#f(compiled-function () (interactive nil) #<bytecode 0x1ff0d889a005>))
  apply(+pdf--install-epdfinfo-a #f(compiled-function () (interactive nil) #<bytecode 0x1ff0d889a005>) nil)
  pdf-view-mode()
  pdf-tools-install-noverify()
  (progn (use-package-statistics-gather :config 'pdf-tools nil) (progn (defalias '+pdf--install-epdfinfo-a #'(lambda (fn &rest args) "Install epdfinfo after the first PDF file, if need..." (if (file-executable-p pdf-info-epdfinfo-program) (apply fn args) (fundamental-mode) (message "Viewing PDFs in Emacs requires epdfinfo. Use `M-x ...")))) (let ((--dolist-tail-- (list (cons :around (doom-enlist ...))))) (while --dolist-tail-- (let ((targets (car --dolist-tail--))) (let ((--dolist-tail-- ...)) (while --dolist-tail-- (let ... ... ...))) (setq --dolist-tail-- (cdr --dolist-tail--)))))) (pdf-tools-install-noverify) (progn (general-define-key :states 'normal :keymaps '(pdf-view-mode-map) "q" #'kill-current-buffer) (general-define-key :keymaps '(pdf-view-mode-map) "q" #'kill-current-buffer)) (progn (set-default 'pdf-view-display-size 'fit-page)) (setq pdf-view-use-scaling t pdf-view-use-imagemagick nil) (set-popup-rules! '(("^\\*Outline*" :side right :size 40 :select nil) ("^\\*Edit Annotation " :quit nil) ("\\(?:^\\*Contents\\|'s annots\\*$\\)" :ignore t))) (add-hook 'pdf-annot-list-mode-hook #'hide-mode-line-mode) (progn (defalias 'doom--setq-evil-normal-state-cursor-for-pdf-view-mode-h #'(lambda (&rest _) "evil-normal-state-cursor = (list nil)\n" (set (make-local-variable 'evil-normal-state-cursor) (list nil)))) (remove-hook 'pdf-view-mode-hook #'doom--setq-evil-normal-state-cursor-for-pdf-view-mode-h) (add-hook 'pdf-view-mode-hook #'doom--setq-evil-normal-state-cursor-for-pdf-view-mode-h)) (defalias '+pdf-reload-midnight-minor-mode-h #'(lambda nil (if pdf-view-midnight-minor-mode (progn (pdf-info-setoptions :render/foreground (car pdf-view-midnight-colors) :render/background (cdr pdf-view-midnight-colors) :render/usecolors t) (pdf-cache-clear-images) (pdf-view-redisplay t))))) (put 'pdf-view-midnight-colors 'custom-set #'(lambda (sym value) (set-default sym value) (let ((--dolist-tail-- (doom-buffers-in-mode ...))) (while --dolist-tail-- (let (...) (save-current-buffer ... ...) (setq --dolist-tail-- ...)))))) (progn (defalias '+pdf-suppress-large-file-prompts-a #'(lambda (fn size op-type filename &optional offer-raw) (if (string-match-p "\\.pdf\\'" filename) nil (funcall fn size op-type filename offer-raw)))) (let ((--dolist-tail-- (list (cons :around (doom-enlist ...))))) (while --dolist-tail-- (let ((targets (car --dolist-tail--))) (let ((--dolist-tail-- ...)) (while --dolist-tail-- (let ... ... ...))) (setq --dolist-tail-- (cdr --dolist-tail--)))))) t (use-package-statistics-gather :config 'pdf-tools t))
  (closure (t) nil (progn (use-package-statistics-gather :config 'pdf-tools nil) (progn (defalias '+pdf--install-epdfinfo-a #'(lambda (fn &rest args) "Install epdfinfo after the first PDF file, if need..." (if (file-executable-p pdf-info-epdfinfo-program) (apply fn args) (fundamental-mode) (message "Viewing PDFs in Emacs requires epdfinfo. Use `M-x ...")))) (let ((--dolist-tail-- (list (cons :around ...)))) (while --dolist-tail-- (let ((targets ...)) (let (...) (while --dolist-tail-- ...)) (setq --dolist-tail-- (cdr --dolist-tail--)))))) (pdf-tools-install-noverify) (progn (general-define-key :states 'normal :keymaps '(pdf-view-mode-map) "q" #'kill-current-buffer) (general-define-key :keymaps '(pdf-view-mode-map) "q" #'kill-current-buffer)) (progn (set-default 'pdf-view-display-size 'fit-page)) (setq pdf-view-use-scaling t pdf-view-use-imagemagick nil) (set-popup-rules! '(("^\\*Outline*" :side right :size 40 :select nil) ("^\\*Edit Annotation " :quit nil) ("\\(?:^\\*Contents\\|'s annots\\*$\\)" :ignore t))) (add-hook 'pdf-annot-list-mode-hook #'hide-mode-line-mode) (progn (defalias 'doom--setq-evil-normal-state-cursor-for-pdf-view-mode-h #'(lambda (&rest _) "evil-normal-state-cursor = (list nil)\n" (set (make-local-variable ...) (list nil)))) (remove-hook 'pdf-view-mode-hook #'doom--setq-evil-normal-state-cursor-for-pdf-view-mode-h) (add-hook 'pdf-view-mode-hook #'doom--setq-evil-normal-state-cursor-for-pdf-view-mode-h)) (defalias '+pdf-reload-midnight-minor-mode-h #'(lambda nil (if pdf-view-midnight-minor-mode (progn (pdf-info-setoptions :render/foreground ... :render/background ... :render/usecolors t) (pdf-cache-clear-images) (pdf-view-redisplay t))))) (put 'pdf-view-midnight-colors 'custom-set #'(lambda (sym value) (set-default sym value) (let ((--dolist-tail-- ...)) (while --dolist-tail-- (let ... ... ...))))) (progn (defalias '+pdf-suppress-large-file-prompts-a #'(lambda (fn size op-type filename &optional offer-raw) (if (string-match-p "\\.pdf\\'" filename) nil (funcall fn size op-type filename offer-raw)))) (let ((--dolist-tail-- (list (cons :around ...)))) (while --dolist-tail-- (let ((targets ...)) (let (...) (while --dolist-tail-- ...)) (setq --dolist-tail-- (cdr --dolist-tail--)))))) t (use-package-statistics-gather :config 'pdf-tools t)))()
  eval-after-load-helper("/Users/patricknorton/.emacs.d/.local/straight/buil...")
  run-hook-with-args(eval-after-load-helper "/Users/patricknorton/.emacs.d/.local/straight/buil...")
  do-after-load-evaluation("/Users/patricknorton/.emacs.d/.local/straight/buil...")
  pdf-view-mode()
  set-auto-mode-0(pdf-view-mode nil)
  #f(compiled-function (&optional keep-mode-if-same) "Select major mode appropriate for current buffer.\n\nTo find the right major mode, this function checks for a -*- mode tag\nchecks for a `mode:' entry in the Local Variables section of the file,\nchecks if it uses an interpreter listed in `interpreter-mode-alist',\nmatches the buffer beginning against `magic-mode-alist',\ncompares the filename against the entries in `auto-mode-alist',\nthen matches the buffer beginning against `magic-fallback-mode-alist'.\n\nIf `enable-local-variables' is nil, or if the file name matches\n`inhibit-local-variables-regexps', this function does not check\nfor any mode: tag anywhere in the file.  If `local-enable-local-variables'\nis nil, then the only mode: tag that can be relevant is a -*- one.\n\nIf the optional argument KEEP-MODE-IF-SAME is non-nil, then we\nset the major mode only if that would change it.  In other words\nwe don't actually set it to the same mode the buffer already has." #<bytecode 0x40c7f46f>)()
  apply(#f(compiled-function (&optional keep-mode-if-same) "Select major mode appropriate for current buffer.\n\nTo find the right major mode, this function checks for a -*- mode tag\nchecks for a `mode:' entry in the Local Variables section of the file,\nchecks if it uses an interpreter listed in `interpreter-mode-alist',\nmatches the buffer beginning against `magic-mode-alist',\ncompares the filename against the entries in `auto-mode-alist',\nthen matches the buffer beginning against `magic-fallback-mode-alist'.\n\nIf `enable-local-variables' is nil, or if the file name matches\n`inhibit-local-variables-regexps', this function does not check\nfor any mode: tag anywhere in the file.  If `local-enable-local-variables'\nis nil, then the only mode: tag that can be relevant is a -*- one.\n\nIf the optional argument KEEP-MODE-IF-SAME is non-nil, then we\nset the major mode only if that would change it.  In other words\nwe don't actually set it to the same mode the buffer already has." #<bytecode 0x40c7f46f>) nil)
  so-long--set-auto-mode(#f(compiled-function (&optional keep-mode-if-same) "Select major mode appropriate for current buffer.\n\nTo find the right major mode, this function checks for a -*- mode tag\nchecks for a `mode:' entry in the Local Variables section of the file,\nchecks if it uses an interpreter listed in `interpreter-mode-alist',\nmatches the buffer beginning against `magic-mode-alist',\ncompares the filename against the entries in `auto-mode-alist',\nthen matches the buffer beginning against `magic-fallback-mode-alist'.\n\nIf `enable-local-variables' is nil, or if the file name matches\n`inhibit-local-variables-regexps', this function does not check\nfor any mode: tag anywhere in the file.  If `local-enable-local-variables'\nis nil, then the only mode: tag that can be relevant is a -*- one.\n\nIf the optional argument KEEP-MODE-IF-SAME is non-nil, then we\nset the major mode only if that would change it.  In other words\nwe don't actually set it to the same mode the buffer already has." #<bytecode 0x40c7f46f>))
  apply(so-long--set-auto-mode #f(compiled-function (&optional keep-mode-if-same) "Select major mode appropriate for current buffer.\n\nTo find the right major mode, this function checks for a -*- mode tag\nchecks for a `mode:' entry in the Local Variables section of the file,\nchecks if it uses an interpreter listed in `interpreter-mode-alist',\nmatches the buffer beginning against `magic-mode-alist',\ncompares the filename against the entries in `auto-mode-alist',\nthen matches the buffer beginning against `magic-fallback-mode-alist'.\n\nIf `enable-local-variables' is nil, or if the file name matches\n`inhibit-local-variables-regexps', this function does not check\nfor any mode: tag anywhere in the file.  If `local-enable-local-variables'\nis nil, then the only mode: tag that can be relevant is a -*- one.\n\nIf the optional argument KEEP-MODE-IF-SAME is non-nil, then we\nset the major mode only if that would change it.  In other words\nwe don't actually set it to the same mode the buffer already has." #<bytecode 0x40c7f46f>) nil)
  #f(advice-wrapper :around #f(compiled-function (&optional keep-mode-if-same) "Select major mode appropriate for current buffer.\n\nTo find the right major mode, this function checks for a -*- mode tag\nchecks for a `mode:' entry in the Local Variables section of the file,\nchecks if it uses an interpreter listed in `interpreter-mode-alist',\nmatches the buffer beginning against `magic-mode-alist',\ncompares the filename against the entries in `auto-mode-alist',\nthen matches the buffer beginning against `magic-fallback-mode-alist'.\n\nIf `enable-local-variables' is nil, or if the file name matches\n`inhibit-local-variables-regexps', this function does not check\nfor any mode: tag anywhere in the file.  If `local-enable-local-variables'\nis nil, then the only mode: tag that can be relevant is a -*- one.\n\nIf the optional argument KEEP-MODE-IF-SAME is non-nil, then we\nset the major mode only if that would change it.  In other words\nwe don't actually set it to the same mode the buffer already has." #<bytecode 0x40c7f46f>) so-long--set-auto-mode)()
  apply(#f(advice-wrapper :around #f(compiled-function (&optional keep-mode-if-same) "Select major mode appropriate for current buffer.\n\nTo find the right major mode, this function checks for a -*- mode tag\nchecks for a `mode:' entry in the Local Variables section of the file,\nchecks if it uses an interpreter listed in `interpreter-mode-alist',\nmatches the buffer beginning against `magic-mode-alist',\ncompares the filename against the entries in `auto-mode-alist',\nthen matches the buffer beginning against `magic-fallback-mode-alist'.\n\nIf `enable-local-variables' is nil, or if the file name matches\n`inhibit-local-variables-regexps', this function does not check\nfor any mode: tag anywhere in the file.  If `local-enable-local-variables'\nis nil, then the only mode: tag that can be relevant is a -*- one.\n\nIf the optional argument KEEP-MODE-IF-SAME is non-nil, then we\nset the major mode only if that would change it.  In other words\nwe don't actually set it to the same mode the buffer already has." #<bytecode 0x40c7f46f>) so-long--set-auto-mode) nil)
  set-auto-mode()
  normal-mode(t)
  #f(compiled-function (&optional error warn noauto after-find-file-from-revert-buffer nomodes) "Called after finding a file and by the default revert function.\nSets buffer mode, parses file-local and directory-local variables.\nOptional args ERROR, WARN, and NOAUTO: ERROR non-nil means there was an\nerror in reading the file.  WARN non-nil means warn if there\nexists an auto-save file more recent than the visited file.\nNOAUTO means don't mess with auto-save mode.\nFourth arg AFTER-FIND-FILE-FROM-REVERT-BUFFER is ignored\n(see `revert-buffer-in-progress-p' for similar functionality).\nFifth arg NOMODES non-nil means don't alter the file's modes.\nFinishes by calling the functions in `find-file-hook'\nunless NOMODES is non-nil." #<bytecode 0x40c9a6eb>)(nil t)
  apply(#f(compiled-function (&optional error warn noauto after-find-file-from-revert-buffer nomodes) "Called after finding a file and by the default revert function.\nSets buffer mode, parses file-local and directory-local variables.\nOptional args ERROR, WARN, and NOAUTO: ERROR non-nil means there was an\nerror in reading the file.  WARN non-nil means warn if there\nexists an auto-save file more recent than the visited file.\nNOAUTO means don't mess with auto-save mode.\nFourth arg AFTER-FIND-FILE-FROM-REVERT-BUFFER is ignored\n(see `revert-buffer-in-progress-p' for similar functionality).\nFifth arg NOMODES non-nil means don't alter the file's modes.\nFinishes by calling the functions in `find-file-hook'\nunless NOMODES is non-nil." #<bytecode 0x40c9a6eb>) (nil t))
  (progn (fset #'sit-for #'ignore) (apply fn args))
  (unwind-protect (progn (fset #'sit-for #'ignore) (apply fn args)) (fset #'sit-for old))
  (let* ((old (symbol-function #'sit-for))) (unwind-protect (progn (fset #'sit-for #'ignore) (apply fn args)) (fset #'sit-for old)))
  doom--shut-up-autosave-a(#f(compiled-function (&optional error warn noauto after-find-file-from-revert-buffer nomodes) "Called after finding a file and by the default revert function.\nSets buffer mode, parses file-local and directory-local variables.\nOptional args ERROR, WARN, and NOAUTO: ERROR non-nil means there was an\nerror in reading the file.  WARN non-nil means warn if there\nexists an auto-save file more recent than the visited file.\nNOAUTO means don't mess with auto-save mode.\nFourth arg AFTER-FIND-FILE-FROM-REVERT-BUFFER is ignored\n(see `revert-buffer-in-progress-p' for similar functionality).\nFifth arg NOMODES non-nil means don't alter the file's modes.\nFinishes by calling the functions in `find-file-hook'\nunless NOMODES is non-nil." #<bytecode 0x40c9a6eb>) nil t)
  apply(doom--shut-up-autosave-a #f(compiled-function (&optional error warn noauto after-find-file-from-revert-buffer nomodes) "Called after finding a file and by the default revert function.\nSets buffer mode, parses file-local and directory-local variables.\nOptional args ERROR, WARN, and NOAUTO: ERROR non-nil means there was an\nerror in reading the file.  WARN non-nil means warn if there\nexists an auto-save file more recent than the visited file.\nNOAUTO means don't mess with auto-save mode.\nFourth arg AFTER-FIND-FILE-FROM-REVERT-BUFFER is ignored\n(see `revert-buffer-in-progress-p' for similar functionality).\nFifth arg NOMODES non-nil means don't alter the file's modes.\nFinishes by calling the functions in `find-file-hook'\nunless NOMODES is non-nil." #<bytecode 0x40c9a6eb>) (nil t))
  #f(advice-wrapper :around #f(compiled-function (&optional error warn noauto after-find-file-from-revert-buffer nomodes) "Called after finding a file and by the default revert function.\nSets buffer mode, parses file-local and directory-local variables.\nOptional args ERROR, WARN, and NOAUTO: ERROR non-nil means there was an\nerror in reading the file.  WARN non-nil means warn if there\nexists an auto-save file more recent than the visited file.\nNOAUTO means don't mess with auto-save mode.\nFourth arg AFTER-FIND-FILE-FROM-REVERT-BUFFER is ignored\n(see `revert-buffer-in-progress-p' for similar functionality).\nFifth arg NOMODES non-nil means don't alter the file's modes.\nFinishes by calling the functions in `find-file-hook'\nunless NOMODES is non-nil." #<bytecode 0x40c9a6eb>) doom--shut-up-autosave-a)(nil t)
  apply(#f(advice-wrapper :around #f(compiled-function (&optional error warn noauto after-find-file-from-revert-buffer nomodes) "Called after finding a file and by the default revert function.\nSets buffer mode, parses file-local and directory-local variables.\nOptional args ERROR, WARN, and NOAUTO: ERROR non-nil means there was an\nerror in reading the file.  WARN non-nil means warn if there\nexists an auto-save file more recent than the visited file.\nNOAUTO means don't mess with auto-save mode.\nFourth arg AFTER-FIND-FILE-FROM-REVERT-BUFFER is ignored\n(see `revert-buffer-in-progress-p' for similar functionality).\nFifth arg NOMODES non-nil means don't alter the file's modes.\nFinishes by calling the functions in `find-file-hook'\nunless NOMODES is non-nil." #<bytecode 0x40c9a6eb>) doom--shut-up-autosave-a) (nil t))
  #f(advice-wrapper :before #f(advice-wrapper :around #f(compiled-function (&optional error warn noauto after-find-file-from-revert-buffer nomodes) "Called after finding a file and by the default revert function.\nSets buffer mode, parses file-local and directory-local variables.\nOptional args ERROR, WARN, and NOAUTO: ERROR non-nil means there was an\nerror in reading the file.  WARN non-nil means warn if there\nexists an auto-save file more recent than the visited file.\nNOAUTO means don't mess with auto-save mode.\nFourth arg AFTER-FIND-FILE-FROM-REVERT-BUFFER is ignored\n(see `revert-buffer-in-progress-p' for similar functionality).\nFifth arg NOMODES non-nil means don't alter the file's modes.\nFinishes by calling the functions in `find-file-hook'\nunless NOMODES is non-nil." #<bytecode 0x40c9a6eb>) doom--shut-up-autosave-a) doom-first-buffer-hook-init-on-find-file-hook-h ((depth . -101)))(nil t)
  apply(#f(advice-wrapper :before #f(advice-wrapper :around #f(compiled-function (&optional error warn noauto after-find-file-from-revert-buffer nomodes) "Called after finding a file and by the default revert function.\nSets buffer mode, parses file-local and directory-local variables.\nOptional args ERROR, WARN, and NOAUTO: ERROR non-nil means there was an\nerror in reading the file.  WARN non-nil means warn if there\nexists an auto-save file more recent than the visited file.\nNOAUTO means don't mess with auto-save mode.\nFourth arg AFTER-FIND-FILE-FROM-REVERT-BUFFER is ignored\n(see `revert-buffer-in-progress-p' for similar functionality).\nFifth arg NOMODES non-nil means don't alter the file's modes.\nFinishes by calling the functions in `find-file-hook'\nunless NOMODES is non-nil." #<bytecode 0x40c9a6eb>) doom--shut-up-autosave-a) doom-first-buffer-hook-init-on-find-file-hook-h ((depth . -101))) (nil t))
  after-find-file(nil t)
  find-file-noselect-1(#<buffer hw1.pdf> "~/Documents/Math112/hw1.pdf" nil nil "~/Documents/Math112/hw1.pdf" (75321259 16777220))
  find-file-noselect("hw1.pdf")
  TeX-pdf-tools-sync-view()
  TeX-run-function("View" "TeX-pdf-tools-sync-view" "hw1")
  TeX-run-discard-or-function("View" "TeX-pdf-tools-sync-view" "hw1")
  TeX-command("View" TeX-master-file 0)
  TeX-command-sequence(t t)
  TeX-command-run-all(nil)
  funcall-interactively(TeX-command-run-all nil)
  call-interactively(TeX-command-run-all nil nil)
  command-execute(TeX-command-run-all)

Describe your attempts to resolve the issue

I tried restarting, doom/reload and running in the sandbox. None were able to produce any difference in the result.

Steps to reproduce

  1. Open Emacs
  2. Open a PDF
  3. Observe

System Information

https://pastebin.com/JDLYQ8NP

Blurry documents in MacBook retina screen

I'm reopening politza/pdf-tools#51 here because it doesn't seem to be fixed to me.

As I commented there:

I'm having a similar issue, in a MacBook Pro 2017 documents opened by pdf-view are very blurry compared to, for example, the ones opened by the stock Preview app. I'm using emacs 27.2, pdf-tools version 20210531.1613, with (setq pdf-view-use-scaling t). The commit f771c93 mentions a frame-scale-factor that is a "new function introduced in Vanilla Emacs" but it doesn't seem to be present in my emacs install (https://emacsformacosx.com/). I believe that's just a repackaging of vanilla emacs as a macOS app, but I may be wrong.

Here is a similar report: doomemacs/doomemacs#4989

Here is another one: https://www.reddit.com/r/emacs/comments/mo9ru8/emacs_build_with_mac_os_retina_support_other_than/gu5qkpf/?utm_source=reddit&utm_medium=web2x&context=3

epdfinfo server does not build

pdf tools is not compiling on my system. it seems that all dependencys have been installed by the build script but for good mesure I used the install command in the readme and all of the packages were installed. the package manager I am using is straight (as provided by doom emacs)

I get this when I both use the pdf-tools-install command and when I run make manually.

I am using fedora 34 and emacs pgtk native comp.
any more info that is required just let me know. Thank you for your work!

config.log
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.

It was created by epdfinfo configure 1.0, which was
generated by GNU Autoconf 2.69.  Invocation command line was

  $ ./configure -q --bindir=/home/jeet/.config/emacs.doom/.local/straight/build-28.0.50/pdf-tools/

## --------- ##
## Platform. ##
## --------- ##

hostname = fedora
uname -m = x86_64
uname -r = 5.12.13-300.fc34.x86_64
uname -s = Linux
uname -v = #1 SMP Wed Jun 23 16:18:11 UTC 2021

/usr/bin/uname -p = x86_64
/bin/uname -X     = unknown

/bin/arch              = x86_64
/usr/bin/arch -k       = unknown
/usr/convex/getsysinfo = unknown
/usr/bin/hostinfo      = unknown
/bin/machine           = unknown
/usr/bin/oslevel       = unknown
/bin/universe          = unknown

PATH: /home/jeet/.config/emacs.doom/bin/
PATH: /home/jeet/.poetry/bin
PATH: /nix/store/apnlbflwapnn3j2i8wwj6b3mfid48czp-zplug-2.4.2/bin
PATH: /home/jeet/.zplug/bin
PATH: /home/jeet/.nix-profile/bin
PATH: /nix/var/nix/profiles/default/bin
PATH: /home/jeet/.local/bin/
PATH: /usr/local/bin
PATH: /usr/local/sbin
PATH: /usr/bin
PATH: /usr/sbin
PATH: /home/jeet/code/go/bin
PATH: /usr/local/go/bin
PATH: /opt/shell-color-scripts
PATH: /home/jeet/.local/share/cargo/bin
PATH: /home/jeet/.config/emacs.doom/bin
PATH: /home/jeet/bin


## ----------- ##
## Core tests. ##
## ----------- ##

configure:2539: checking for a BSD-compatible install
configure:2607: result: /usr/bin/install -c
configure:2618: checking whether build environment is sane
configure:2673: result: yes
configure:2824: checking for a thread-safe mkdir -p
configure:2863: result: /usr/bin/mkdir -p
configure:2870: checking for gawk
configure:2886: found /usr/bin/gawk
configure:2897: result: gawk
configure:2908: checking whether make sets $(MAKE)
configure:2930: result: yes
configure:2959: checking whether make supports nested variables
configure:2976: result: yes
configure:3155: checking for gcc
configure:3171: found /usr/bin/gcc
configure:3182: result: gcc
configure:3411: checking for C compiler version
configure:3420: gcc --version >&5
gcc (GCC) 11.1.1 20210531 (Red Hat 11.1.1-3)
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

configure:3431: $? = 0
configure:3420: gcc -v >&5
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/11/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-11.1.1-20210531/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 11.1.1 20210531 (Red Hat 11.1.1-3) (GCC) 
... rest of stderr output deleted ...
configure:3431: $? = 0
configure:3420: gcc -V >&5
gcc: error: unrecognized command-line option '-V'
gcc: fatal error: no input files
compilation terminated.
configure:3431: $? = 1
configure:3420: gcc -qversion >&5
gcc: error: unrecognized command-line option '-qversion'; did you mean '--version'?
gcc: fatal error: no input files
compilation terminated.
configure:3431: $? = 1
configure:3451: checking whether the C compiler works
configure:3473: gcc    conftest.c  >&5
/nix/store/aigvlxh2aqjqd1wcnk1dr8cjml6dq846-binutils-2.35.1/bin/ld: /usr/libexec/gcc/x86_64-redhat-linux/11/liblto_plugin.so: error loading plugin: /nix/store/adxc893j47gxx3xjw403zdf0liiddvw2-glibc-2.32-48/lib/libc.so.6: version `GLIBC_2.33' not found (required by /usr/libexec/gcc/x86_64-redhat-linux/11/liblto_plugin.so)
collect2: error: ld returned 1 exit status
configure:3477: $? = 1
configure:3515: result: no
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "epdfinfo"
| #define PACKAGE_TARNAME "epdfinfo"
| #define PACKAGE_VERSION "1.0"
| #define PACKAGE_STRING "epdfinfo 1.0"
| #define PACKAGE_BUGREPORT "[email protected]"
| #define PACKAGE_URL ""
| #define PACKAGE "epdfinfo"
| #define VERSION "1.0"
| /* end confdefs.h.  */
| 
| int
| main ()
| {
| 
|   ;
|   return 0;
| }
configure:3520: error: in `/home/jeet/.config/emacs.doom/.local/straight/build-28.0.50/pdf-tools/build/server':
configure:3522: error: C compiler cannot create executables
See `config.log' for more details

## ---------------- ##
## Cache variables. ##
## ---------------- ##

ac_cv_env_CCC_set=
ac_cv_env_CCC_value=
ac_cv_env_CC_set=
ac_cv_env_CC_value=
ac_cv_env_CFLAGS_set=
ac_cv_env_CFLAGS_value=
ac_cv_env_CPPFLAGS_set=
ac_cv_env_CPPFLAGS_value=
ac_cv_env_CPP_set=
ac_cv_env_CPP_value=
ac_cv_env_CXXCPP_set=
ac_cv_env_CXXCPP_value=
ac_cv_env_CXXFLAGS_set=
ac_cv_env_CXXFLAGS_value=
ac_cv_env_CXX_set=
ac_cv_env_CXX_value=
ac_cv_env_LDFLAGS_set=
ac_cv_env_LDFLAGS_value=
ac_cv_env_LIBS_set=
ac_cv_env_LIBS_value=
ac_cv_env_PKG_CONFIG_LIBDIR_set=
ac_cv_env_PKG_CONFIG_LIBDIR_value=
ac_cv_env_PKG_CONFIG_PATH_set=
ac_cv_env_PKG_CONFIG_PATH_value=
ac_cv_env_PKG_CONFIG_set=
ac_cv_env_PKG_CONFIG_value=
ac_cv_env_build_alias_set=
ac_cv_env_build_alias_value=
ac_cv_env_glib_CFLAGS_set=
ac_cv_env_glib_CFLAGS_value=
ac_cv_env_glib_LIBS_set=
ac_cv_env_glib_LIBS_value=
ac_cv_env_host_alias_set=
ac_cv_env_host_alias_value=
ac_cv_env_png_CFLAGS_set=
ac_cv_env_png_CFLAGS_value=
ac_cv_env_png_LIBS_set=
ac_cv_env_png_LIBS_value=
ac_cv_env_poppler_CFLAGS_set=
ac_cv_env_poppler_CFLAGS_value=
ac_cv_env_poppler_LIBS_set=
ac_cv_env_poppler_LIBS_value=
ac_cv_env_poppler_glib_CFLAGS_set=
ac_cv_env_poppler_glib_CFLAGS_value=
ac_cv_env_poppler_glib_LIBS_set=
ac_cv_env_poppler_glib_LIBS_value=
ac_cv_env_target_alias_set=
ac_cv_env_target_alias_value=
ac_cv_env_zlib_CFLAGS_set=
ac_cv_env_zlib_CFLAGS_value=
ac_cv_env_zlib_LIBS_set=
ac_cv_env_zlib_LIBS_value=
ac_cv_path_install='/usr/bin/install -c'
ac_cv_path_mkdir=/usr/bin/mkdir
ac_cv_prog_AWK=gawk
ac_cv_prog_ac_ct_CC=gcc
ac_cv_prog_make_make_set=yes
am_cv_make_support_nested_variables=yes

## ----------------- ##
## Output variables. ##
## ----------------- ##

ACLOCAL='${SHELL} /home/jeet/.config/emacs.doom/.local/straight/build-28.0.50/pdf-tools/build/server/missing aclocal-1.16'
AMDEPBACKSLASH=''
AMDEP_FALSE=''
AMDEP_TRUE=''
AMTAR='$${TAR-tar}'
AM_BACKSLASH='\'
AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
AM_DEFAULT_VERBOSITY='1'
AM_V='$(V)'
AR=''
AUTOCONF='${SHELL} /home/jeet/.config/emacs.doom/.local/straight/build-28.0.50/pdf-tools/build/server/missing autoconf'
AUTOHEADER='${SHELL} /home/jeet/.config/emacs.doom/.local/straight/build-28.0.50/pdf-tools/build/server/missing autoheader'
AUTOMAKE='${SHELL} /home/jeet/.config/emacs.doom/.local/straight/build-28.0.50/pdf-tools/build/server/missing automake-1.16'
AWK='gawk'
CC='gcc'
CCDEPMODE=''
CFLAGS=''
CPP=''
CPPFLAGS=''
CXX=''
CXXCPP=''
CXXDEPMODE=''
CXXFLAGS=''
CYGPATH_W='echo'
DEFS=''
DEPDIR=''
ECHO_C=''
ECHO_N='-n'
ECHO_T=''
EGREP=''
EXEEXT=''
GREP=''
HAVE_W32_FALSE=''
HAVE_W32_TRUE=''
INSTALL_DATA='${INSTALL} -m 644'
INSTALL_PROGRAM='${INSTALL}'
INSTALL_SCRIPT='${INSTALL}'
INSTALL_STRIP_PROGRAM='$(install_sh) -c -s'
LDFLAGS=''
LIBOBJS=''
LIBS=''
LTLIBOBJS=''
MAKEINFO='${SHELL} /home/jeet/.config/emacs.doom/.local/straight/build-28.0.50/pdf-tools/build/server/missing makeinfo'
MKDIR_P='/usr/bin/mkdir -p'
OBJEXT=''
PACKAGE='epdfinfo'
PACKAGE_BUGREPORT='[email protected]'
PACKAGE_NAME='epdfinfo'
PACKAGE_STRING='epdfinfo 1.0'
PACKAGE_TARNAME='epdfinfo'
PACKAGE_URL=''
PACKAGE_VERSION='1.0'
PATH_SEPARATOR=':'
PKG_CONFIG=''
PKG_CONFIG_LIBDIR=''
PKG_CONFIG_PATH=''
POW_LIB=''
RANLIB=''
SET_MAKE=''
SHELL='/bin/sh'
STRIP=''
VERSION='1.0'
ac_ct_AR=''
ac_ct_CC='gcc'
ac_ct_CXX=''
am__EXEEXT_FALSE=''
am__EXEEXT_TRUE=''
am__fastdepCC_FALSE=''
am__fastdepCC_TRUE=''
am__fastdepCXX_FALSE=''
am__fastdepCXX_TRUE=''
am__include=''
am__isrc=''
am__leading_dot='.'
am__nodep=''
am__quote=''
am__tar='$${TAR-tar} chof - "$$tardir"'
am__untar='$${TAR-tar} xf -'
bindir='/home/jeet/.config/emacs.doom/.local/straight/build-28.0.50/pdf-tools'
build=''
build_alias=''
build_cpu=''
build_os=''
build_vendor=''
datadir='${datarootdir}'
datarootdir='${prefix}/share'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
dvidir='${docdir}'
exec_prefix='NONE'
glib_CFLAGS=''
glib_LIBS=''
host=''
host_alias=''
host_cpu=''
host_os=''
host_vendor=''
htmldir='${docdir}'
includedir='${prefix}/include'
infodir='${datarootdir}/info'
install_sh='${SHELL} /home/jeet/.config/emacs.doom/.local/straight/build-28.0.50/pdf-tools/build/server/install-sh'
libdir='${exec_prefix}/lib'
libexecdir='${exec_prefix}/libexec'
localedir='${datarootdir}/locale'
localstatedir='${prefix}/var'
mandir='${datarootdir}/man'
mkdir_p='$(MKDIR_P)'
oldincludedir='/usr/include'
pdfdir='${docdir}'
png_CFLAGS=''
png_LIBS=''
poppler_CFLAGS=''
poppler_LIBS=''
poppler_glib_CFLAGS=''
poppler_glib_LIBS=''
prefix='NONE'
program_transform_name='s,x,x,'
psdir='${docdir}'
runstatedir='${localstatedir}/run'
sbindir='${exec_prefix}/sbin'
sharedstatedir='${prefix}/com'
sysconfdir='${prefix}/etc'
target_alias=''
zlib_CFLAGS=''
zlib_LIBS=''

## ----------- ##
## confdefs.h. ##
## ----------- ##

/* confdefs.h */
#define PACKAGE_NAME "epdfinfo"
#define PACKAGE_TARNAME "epdfinfo"
#define PACKAGE_VERSION "1.0"
#define PACKAGE_STRING "epdfinfo 1.0"
#define PACKAGE_BUGREPORT "[email protected]"
#define PACKAGE_URL ""
#define PACKAGE "epdfinfo"
#define VERSION "1.0"

configure: exit 77
make -sd in the build directory
Updating makefiles....
Considering target file 'Makefile'.
Looking for an implicit rule for 'Makefile'.
Trying pattern rule with stem 'Makefile'.
Trying implicit prerequisite 'Makefile.o'.
Trying pattern rule with stem 'Makefile'.
Trying implicit prerequisite 'Makefile.c'.
Trying pattern rule with stem 'Makefile'.
Trying implicit prerequisite 'Makefile.cc'.
Trying pattern rule with stem 'Makefile'.
Trying implicit prerequisite 'Makefile.C'.
Trying pattern rule with stem 'Makefile'.
Trying implicit prerequisite 'Makefile.cpp'.
Trying pattern rule with stem 'Makefile'.
Trying implicit prerequisite 'Makefile.p'.
Trying pattern rule with stem 'Makefile'.
Trying implicit prerequisite 'Makefile.f'.
Trying pattern rule with stem 'Makefile'.
Trying implicit prerequisite 'Makefile.F'.
Trying pattern rule with stem 'Makefile'.
Trying implicit prerequisite 'Makefile.m'.
Trying pattern rule with stem 'Makefile'.
Trying implicit prerequisite 'Makefile.r'.
Trying pattern rule with stem 'Makefile'.
Trying implicit prerequisite 'Makefile.s'.
Trying pattern rule with stem 'Makefile'.
Trying implicit prerequisite 'Makefile.S'.
Trying pattern rule with stem 'Makefile'.
Trying implicit prerequisite 'Makefile.mod'.
Trying pattern rule with stem 'Makefile'.
Trying implicit prerequisite 'Makefile.sh'.
Trying pattern rule with stem 'Makefile'.
Trying implicit prerequisite 'Makefile,v'.
Trying pattern rule with stem 'Makefile'.
Trying implicit prerequisite 'RCS/Makefile,v'.
Trying pattern rule with stem 'Makefile'.
Trying implicit prerequisite 'RCS/Makefile'.
Trying pattern rule with stem 'Makefile'.
Trying implicit prerequisite 's.Makefile'.
Trying pattern rule with stem 'Makefile'.
Trying implicit prerequisite 'SCCS/s.Makefile'.
Trying pattern rule with stem 'Makefile'.
Trying implicit prerequisite 'Makefile.o'.
Looking for a rule with intermediate file 'Makefile.o'.
 Avoiding implicit rule recursion.
 Trying pattern rule with stem 'Makefile'.
 Trying implicit prerequisite 'Makefile.c'.
 Trying pattern rule with stem 'Makefile'.
 Trying implicit prerequisite 'Makefile.cc'.
 Trying pattern rule with stem 'Makefile'.
 Trying implicit prerequisite 'Makefile.C'.
 Trying pattern rule with stem 'Makefile'.
 Trying implicit prerequisite 'Makefile.cpp'.
 Trying pattern rule with stem 'Makefile'.
 Trying implicit prerequisite 'Makefile.p'.
 Trying pattern rule with stem 'Makefile'.
 Trying implicit prerequisite 'Makefile.f'.
 Trying pattern rule with stem 'Makefile'.
 Trying implicit prerequisite 'Makefile.F'.
 Trying pattern rule with stem 'Makefile'.
 Trying implicit prerequisite 'Makefile.m'.
 Trying pattern rule with stem 'Makefile'.
 Trying implicit prerequisite 'Makefile.r'.
 Trying pattern rule with stem 'Makefile'.
 Trying implicit prerequisite 'Makefile.s'.
 Trying pattern rule with stem 'Makefile'.
 Trying implicit prerequisite 'Makefile.S'.
 Trying pattern rule with stem 'Makefile'.
 Trying implicit prerequisite 'Makefile.mod'.
 Trying pattern rule with stem 'Makefile.o'.
 Trying implicit prerequisite 'Makefile.o,v'.
 Trying pattern rule with stem 'Makefile.o'.
 Trying implicit prerequisite 'RCS/Makefile.o,v'.
 Trying pattern rule with stem 'Makefile.o'.
 Trying implicit prerequisite 'RCS/Makefile.o'.
 Trying pattern rule with stem 'Makefile.o'.
 Trying implicit prerequisite 's.Makefile.o'.
 Trying pattern rule with stem 'Makefile.o'.
 Trying implicit prerequisite 'SCCS/s.Makefile.o'.
 Trying pattern rule with stem 'Makefile'.
 Trying implicit prerequisite 'Makefile.c'.
 Looking for a rule with intermediate file 'Makefile.c'.
  Avoiding implicit rule recursion.
  Avoiding implicit rule recursion.
  Trying pattern rule with stem 'Makefile'.
  Trying implicit prerequisite 'Makefile.y'.
  Trying pattern rule with stem 'Makefile'.
  Trying implicit prerequisite 'Makefile.l'.
  Trying pattern rule with stem 'Makefile'.
  Trying implicit prerequisite 'Makefile.w'.
  Trying pattern rule with stem 'Makefile'.
  Trying implicit prerequisite 'Makefile.w'.
  Trying pattern rule with stem 'Makefile.c'.
  Trying implicit prerequisite 'Makefile.c,v'.
  Trying pattern rule with stem 'Makefile.c'.
  Trying implicit prerequisite 'RCS/Makefile.c,v'.
  Trying pattern rule with stem 'Makefile.c'.
  Trying implicit prerequisite 'RCS/Makefile.c'.
  Trying pattern rule with stem 'Makefile.c'.
  Trying implicit prerequisite 's.Makefile.c'.
  Trying pattern rule with stem 'Makefile.c'.
  Trying implicit prerequisite 'SCCS/s.Makefile.c'.
  Trying pattern rule with stem 'Makefile'.
  Trying implicit prerequisite 'Makefile.y'.
  Looking for a rule with intermediate file 'Makefile.y'.
   Avoiding implicit rule recursion.
   Avoiding implicit rule recursion.
   Avoiding implicit rule recursion.
   Trying pattern rule with stem 'Makefile.y'.
   Trying implicit prerequisite 'Makefile.y,v'.
   Trying pattern rule with stem 'Makefile.y'.
   Trying implicit prerequisite 'RCS/Makefile.y,v'.
   Trying pattern rule with stem 'Makefile.y'.
   Trying implicit prerequisite 'RCS/Makefile.y'.
   Trying pattern rule with stem 'Makefile.y'.
   Trying implicit prerequisite 's.Makefile.y'.
   Trying pattern rule with stem 'Makefile.y'.
   Trying implicit prerequisite 'SCCS/s.Makefile.y'.
  Trying pattern rule with stem 'Makefile'.
  Trying implicit prerequisite 'Makefile.l'.
  Looking for a rule with intermediate file 'Makefile.l'.
   Avoiding implicit rule recursion.
   Avoiding implicit rule recursion.
   Avoiding implicit rule recursion.
   Trying pattern rule with stem 'Makefile.l'.
   Trying implicit prerequisite 'Makefile.l,v'.
   Trying pattern rule with stem 'Makefile.l'.
   Trying implicit prerequisite 'RCS/Makefile.l,v'.
   Trying pattern rule with stem 'Makefile.l'.
   Trying implicit prerequisite 'RCS/Makefile.l'.
   Trying pattern rule with stem 'Makefile.l'.
   Trying implicit prerequisite 's.Makefile.l'.
   Trying pattern rule with stem 'Makefile.l'.
   Trying implicit prerequisite 'SCCS/s.Makefile.l'.
  Trying pattern rule with stem 'Makefile'.
  Trying implicit prerequisite 'Makefile.w'.
  Looking for a rule with intermediate file 'Makefile.w'.
   Avoiding implicit rule recursion.
   Avoiding implicit rule recursion.
   Avoiding implicit rule recursion.
   Trying pattern rule with stem 'Makefile.w'.
   Trying implicit prerequisite 'Makefile.w,v'.
   Trying pattern rule with stem 'Makefile.w'.
   Trying implicit prerequisite 'RCS/Makefile.w,v'.
   Trying pattern rule with stem 'Makefile.w'.
   Trying implicit prerequisite 'RCS/Makefile.w'.
   Trying pattern rule with stem 'Makefile.w'.
   Trying implicit prerequisite 's.Makefile.w'.
   Trying pattern rule with stem 'Makefile.w'.
   Trying implicit prerequisite 'SCCS/s.Makefile.w'.
  Trying pattern rule with stem 'Makefile'.
  Rejecting impossible implicit prerequisite 'Makefile.w'.
 Trying pattern rule with stem 'Makefile'.
 Trying implicit prerequisite 'Makefile.cc'.
 Looking for a rule with intermediate file 'Makefile.cc'.
  Avoiding implicit rule recursion.
  Avoiding implicit rule recursion.
  Trying pattern rule with stem 'Makefile.cc'.
  Trying implicit prerequisite 'Makefile.cc,v'.
  Trying pattern rule with stem 'Makefile.cc'.
  Trying implicit prerequisite 'RCS/Makefile.cc,v'.
  Trying pattern rule with stem 'Makefile.cc'.
  Trying implicit prerequisite 'RCS/Makefile.cc'.
  Trying pattern rule with stem 'Makefile.cc'.
  Trying implicit prerequisite 's.Makefile.cc'.
  Trying pattern rule with stem 'Makefile.cc'.
  Trying implicit prerequisite 'SCCS/s.Makefile.cc'.
 Trying pattern rule with stem 'Makefile'.
 Trying implicit prerequisite 'Makefile.C'.
 Looking for a rule with intermediate file 'Makefile.C'.
  Avoiding implicit rule recursion.
  Avoiding implicit rule recursion.
  Trying pattern rule with stem 'Makefile.C'.
  Trying implicit prerequisite 'Makefile.C,v'.
  Trying pattern rule with stem 'Makefile.C'.
  Trying implicit prerequisite 'RCS/Makefile.C,v'.
  Trying pattern rule with stem 'Makefile.C'.
  Trying implicit prerequisite 'RCS/Makefile.C'.
  Trying pattern rule with stem 'Makefile.C'.
  Trying implicit prerequisite 's.Makefile.C'.
  Trying pattern rule with stem 'Makefile.C'.
  Trying implicit prerequisite 'SCCS/s.Makefile.C'.
 Trying pattern rule with stem 'Makefile'.
 Trying implicit prerequisite 'Makefile.cpp'.
 Looking for a rule with intermediate file 'Makefile.cpp'.
  Avoiding implicit rule recursion.
  Avoiding implicit rule recursion.
  Trying pattern rule with stem 'Makefile.cpp'.
  Trying implicit prerequisite 'Makefile.cpp,v'.
  Trying pattern rule with stem 'Makefile.cpp'.
  Trying implicit prerequisite 'RCS/Makefile.cpp,v'.
  Trying pattern rule with stem 'Makefile.cpp'.
  Trying implicit prerequisite 'RCS/Makefile.cpp'.
  Trying pattern rule with stem 'Makefile.cpp'.
  Trying implicit prerequisite 's.Makefile.cpp'.
  Trying pattern rule with stem 'Makefile.cpp'.
  Trying implicit prerequisite 'SCCS/s.Makefile.cpp'.
 Trying pattern rule with stem 'Makefile'.
 Trying implicit prerequisite 'Makefile.p'.
 Looking for a rule with intermediate file 'Makefile.p'.
  Avoiding implicit rule recursion.
  Avoiding implicit rule recursion.
  Trying pattern rule with stem 'Makefile'.
  Trying implicit prerequisite 'Makefile.web'.
  Trying pattern rule with stem 'Makefile.p'.
  Trying implicit prerequisite 'Makefile.p,v'.
  Trying pattern rule with stem 'Makefile.p'.
  Trying implicit prerequisite 'RCS/Makefile.p,v'.
  Trying pattern rule with stem 'Makefile.p'.
  Trying implicit prerequisite 'RCS/Makefile.p'.
  Trying pattern rule with stem 'Makefile.p'.
  Trying implicit prerequisite 's.Makefile.p'.
  Trying pattern rule with stem 'Makefile.p'.
  Trying implicit prerequisite 'SCCS/s.Makefile.p'.
  Trying pattern rule with stem 'Makefile'.
  Trying implicit prerequisite 'Makefile.web'.
  Looking for a rule with intermediate file 'Makefile.web'.
   Avoiding implicit rule recursion.
   Avoiding implicit rule recursion.
   Avoiding implicit rule recursion.
   Trying pattern rule with stem 'Makefile.web'.
   Trying implicit prerequisite 'Makefile.web,v'.
   Trying pattern rule with stem 'Makefile.web'.
   Trying implicit prerequisite 'RCS/Makefile.web,v'.
   Trying pattern rule with stem 'Makefile.web'.
   Trying implicit prerequisite 'RCS/Makefile.web'.
   Trying pattern rule with stem 'Makefile.web'.
   Trying implicit prerequisite 's.Makefile.web'.
   Trying pattern rule with stem 'Makefile.web'.
   Trying implicit prerequisite 'SCCS/s.Makefile.web'.
 Trying pattern rule with stem 'Makefile'.
 Trying implicit prerequisite 'Makefile.f'.
 Looking for a rule with intermediate file 'Makefile.f'.
  Avoiding implicit rule recursion.
  Avoiding implicit rule recursion.
  Trying pattern rule with stem 'Makefile'.
  Trying implicit prerequisite 'Makefile.F'.
  Trying pattern rule with stem 'Makefile'.
  Trying implicit prerequisite 'Makefile.r'.
  Trying pattern rule with stem 'Makefile.f'.
  Trying implicit prerequisite 'Makefile.f,v'.
  Trying pattern rule with stem 'Makefile.f'.
  Trying implicit prerequisite 'RCS/Makefile.f,v'.
  Trying pattern rule with stem 'Makefile.f'.
  Trying implicit prerequisite 'RCS/Makefile.f'.
  Trying pattern rule with stem 'Makefile.f'.
  Trying implicit prerequisite 's.Makefile.f'.
  Trying pattern rule with stem 'Makefile.f'.
  Trying implicit prerequisite 'SCCS/s.Makefile.f'.
  Trying pattern rule with stem 'Makefile'.
  Trying implicit prerequisite 'Makefile.F'.
  Looking for a rule with intermediate file 'Makefile.F'.
   Avoiding implicit rule recursion.
   Avoiding implicit rule recursion.
   Avoiding implicit rule recursion.
   Trying pattern rule with stem 'Makefile.F'.
   Trying implicit prerequisite 'Makefile.F,v'.
   Trying pattern rule with stem 'Makefile.F'.
   Trying implicit prerequisite 'RCS/Makefile.F,v'.
   Trying pattern rule with stem 'Makefile.F'.
   Trying implicit prerequisite 'RCS/Makefile.F'.
   Trying pattern rule with stem 'Makefile.F'.
   Trying implicit prerequisite 's.Makefile.F'.
   Trying pattern rule with stem 'Makefile.F'.
   Trying implicit prerequisite 'SCCS/s.Makefile.F'.
  Trying pattern rule with stem 'Makefile'.
  Trying implicit prerequisite 'Makefile.r'.
  Looking for a rule with intermediate file 'Makefile.r'.
   Avoiding implicit rule recursion.
   Avoiding implicit rule recursion.
   Avoiding implicit rule recursion.
   Trying pattern rule with stem 'Makefile'.
   Rejecting impossible implicit prerequisite 'Makefile.l'.
   Trying pattern rule with stem 'Makefile.r'.
   Trying implicit prerequisite 'Makefile.r,v'.
   Trying pattern rule with stem 'Makefile.r'.
   Trying implicit prerequisite 'RCS/Makefile.r,v'.
   Trying pattern rule with stem 'Makefile.r'.
   Trying implicit prerequisite 'RCS/Makefile.r'.
   Trying pattern rule with stem 'Makefile.r'.
   Trying implicit prerequisite 's.Makefile.r'.
   Trying pattern rule with stem 'Makefile.r'.
   Trying implicit prerequisite 'SCCS/s.Makefile.r'.
 Trying pattern rule with stem 'Makefile'.
 Rejecting impossible implicit prerequisite 'Makefile.F'.
 Trying pattern rule with stem 'Makefile'.
 Trying implicit prerequisite 'Makefile.m'.
 Looking for a rule with intermediate file 'Makefile.m'.
  Avoiding implicit rule recursion.
  Avoiding implicit rule recursion.
  Trying pattern rule with stem 'Makefile'.
  Trying implicit prerequisite 'Makefile.ym'.
  Trying pattern rule with stem 'Makefile.m'.
  Trying implicit prerequisite 'Makefile.m,v'.
  Trying pattern rule with stem 'Makefile.m'.
  Trying implicit prerequisite 'RCS/Makefile.m,v'.
  Trying pattern rule with stem 'Makefile.m'.
  Trying implicit prerequisite 'RCS/Makefile.m'.
  Trying pattern rule with stem 'Makefile.m'.
  Trying implicit prerequisite 's.Makefile.m'.
  Trying pattern rule with stem 'Makefile.m'.
  Trying implicit prerequisite 'SCCS/s.Makefile.m'.
  Trying pattern rule with stem 'Makefile'.
  Trying implicit prerequisite 'Makefile.ym'.
  Looking for a rule with intermediate file 'Makefile.ym'.
   Avoiding implicit rule recursion.
   Avoiding implicit rule recursion.
   Avoiding implicit rule recursion.
   Trying pattern rule with stem 'Makefile.ym'.
   Trying implicit prerequisite 'Makefile.ym,v'.
   Trying pattern rule with stem 'Makefile.ym'.
   Trying implicit prerequisite 'RCS/Makefile.ym,v'.
   Trying pattern rule with stem 'Makefile.ym'.
   Trying implicit prerequisite 'RCS/Makefile.ym'.
   Trying pattern rule with stem 'Makefile.ym'.
   Trying implicit prerequisite 's.Makefile.ym'.
   Trying pattern rule with stem 'Makefile.ym'.
   Trying implicit prerequisite 'SCCS/s.Makefile.ym'.
 Trying pattern rule with stem 'Makefile'.
 Rejecting impossible implicit prerequisite 'Makefile.r'.
 Trying pattern rule with stem 'Makefile'.
 Trying implicit prerequisite 'Makefile.s'.
 Looking for a rule with intermediate file 'Makefile.s'.
  Avoiding implicit rule recursion.
  Avoiding implicit rule recursion.
  Trying pattern rule with stem 'Makefile'.
  Trying implicit prerequisite 'Makefile.S'.
  Trying pattern rule with stem 'Makefile.s'.
  Trying implicit prerequisite 'Makefile.s,v'.
  Trying pattern rule with stem 'Makefile.s'.
  Trying implicit prerequisite 'RCS/Makefile.s,v'.
  Trying pattern rule with stem 'Makefile.s'.
  Trying implicit prerequisite 'RCS/Makefile.s'.
  Trying pattern rule with stem 'Makefile.s'.
  Trying implicit prerequisite 's.Makefile.s'.
  Trying pattern rule with stem 'Makefile.s'.
  Trying implicit prerequisite 'SCCS/s.Makefile.s'.
  Trying pattern rule with stem 'Makefile'.
  Trying implicit prerequisite 'Makefile.S'.
  Looking for a rule with intermediate file 'Makefile.S'.
   Avoiding implicit rule recursion.
   Avoiding implicit rule recursion.
   Avoiding implicit rule recursion.
   Trying pattern rule with stem 'Makefile.S'.
   Trying implicit prerequisite 'Makefile.S,v'.
   Trying pattern rule with stem 'Makefile.S'.
   Trying implicit prerequisite 'RCS/Makefile.S,v'.
   Trying pattern rule with stem 'Makefile.S'.
   Trying implicit prerequisite 'RCS/Makefile.S'.
   Trying pattern rule with stem 'Makefile.S'.
   Trying implicit prerequisite 's.Makefile.S'.
   Trying pattern rule with stem 'Makefile.S'.
   Trying implicit prerequisite 'SCCS/s.Makefile.S'.
 Trying pattern rule with stem 'Makefile'.
 Rejecting impossible implicit prerequisite 'Makefile.S'.
 Trying pattern rule with stem 'Makefile'.
 Trying implicit prerequisite 'Makefile.mod'.
 Looking for a rule with intermediate file 'Makefile.mod'.
  Avoiding implicit rule recursion.
  Avoiding implicit rule recursion.
  Trying pattern rule with stem 'Makefile.mod'.
  Trying implicit prerequisite 'Makefile.mod,v'.
  Trying pattern rule with stem 'Makefile.mod'.
  Trying implicit prerequisite 'RCS/Makefile.mod,v'.
  Trying pattern rule with stem 'Makefile.mod'.
  Trying implicit prerequisite 'RCS/Makefile.mod'.
  Trying pattern rule with stem 'Makefile.mod'.
  Trying implicit prerequisite 's.Makefile.mod'.
  Trying pattern rule with stem 'Makefile.mod'.
  Trying implicit prerequisite 'SCCS/s.Makefile.mod'.
Trying pattern rule with stem 'Makefile'.
Rejecting impossible implicit prerequisite 'Makefile.c'.
Trying pattern rule with stem 'Makefile'.
Rejecting impossible implicit prerequisite 'Makefile.cc'.
Trying pattern rule with stem 'Makefile'.
Rejecting impossible implicit prerequisite 'Makefile.C'.
Trying pattern rule with stem 'Makefile'.
Rejecting impossible implicit prerequisite 'Makefile.cpp'.
Trying pattern rule with stem 'Makefile'.
Rejecting impossible implicit prerequisite 'Makefile.p'.
Trying pattern rule with stem 'Makefile'.
Rejecting impossible implicit prerequisite 'Makefile.f'.
Trying pattern rule with stem 'Makefile'.
Rejecting impossible implicit prerequisite 'Makefile.F'.
Trying pattern rule with stem 'Makefile'.
Rejecting impossible implicit prerequisite 'Makefile.m'.
Trying pattern rule with stem 'Makefile'.
Rejecting impossible implicit prerequisite 'Makefile.r'.
Trying pattern rule with stem 'Makefile'.
Rejecting impossible implicit prerequisite 'Makefile.s'.
Trying pattern rule with stem 'Makefile'.
Rejecting impossible implicit prerequisite 'Makefile.S'.
Trying pattern rule with stem 'Makefile'.
Rejecting impossible implicit prerequisite 'Makefile.mod'.
Trying pattern rule with stem 'Makefile'.
Trying implicit prerequisite 'Makefile.sh'.
Looking for a rule with intermediate file 'Makefile.sh'.
 Avoiding implicit rule recursion.
 Trying pattern rule with stem 'Makefile.sh'.
 Trying implicit prerequisite 'Makefile.sh,v'.
 Trying pattern rule with stem 'Makefile.sh'.
 Trying implicit prerequisite 'RCS/Makefile.sh,v'.
 Trying pattern rule with stem 'Makefile.sh'.
 Trying implicit prerequisite 'RCS/Makefile.sh'.
 Trying pattern rule with stem 'Makefile.sh'.
 Trying implicit prerequisite 's.Makefile.sh'.
 Trying pattern rule with stem 'Makefile.sh'.
 Trying implicit prerequisite 'SCCS/s.Makefile.sh'.
No implicit rule found for 'Makefile'.
Finished prerequisites of target file 'Makefile'.
No need to remake target 'Makefile'.
Updating goal targets....
Considering target file 'all'.
File 'all' does not exist.
Considering target file 'pdf-tools-.tar'.
 File 'pdf-tools-.tar' does not exist.
  Considering target file '.cask/28.0'.
   File '.cask/28.0' does not exist.
   Finished prerequisites of target file '.cask/28.0'.
  Must remake target '.cask/28.0'.
Putting child 0x556bd7247eb0 (.cask/28.0) PID 9885 on the chain.
Live child 0x556bd7247eb0 (.cask/28.0) PID 9885 

Debugger entered--Lisp error: (cask-no-cask-file "/home/jeet/.config/emacs.doom/.local/straight/buil...")
signal(cask-no-cask-file ("/home/jeet/.config/emacs.doom/.local/straight/buil..."))
cask-install(#s(cask-bundle :name nil :version nil :description nil :runtime-dependencies nil :development-dependencies nil :path "/home/jeet/.config/emacs.doom/.local/straight/buil..." :patterns nil :sources nil))
(progn (cask-install (cask-cli--bundle)))
(condition-case err (progn (cask-install (cask-cli--bundle))) (cask-missing-dependencies (let ((missing-dependencies (cdr err))) (error "Some dependencies were not available: %s" (s-join ", " (mapcar #'symbol-name (mapcar #'cask-dependency-name missing-dependencies)))))) (cask-failed-initialization (let* ((data (cdr err)) (message (error-message-string (nth 0 data))) (output (nth 1 data))) (error "Package initialization failed: %s\nOutput:\n%s" message output))) (cask-failed-installation (let* ((data (cdr err)) (dependency (progn (or (progn ...) (signal ... ...)) (aref (nth 0 data) 1))) (message (error-message-string (nth 1 data))) (output (nth 2 data))) (if dependency (error "Dependency %s failed to install: %s\nOutput:\n%s" dependency message output) (error "Package installation failed: %s\nOutput:\n%s" message output)))))
cask-cli/install()
commander--handle-command(("install"))
commander-parse(("install"))
(if commander-parsing-done nil (commander-parse (or commander-args (cdr command-line-args-left))))
load-with-code-conversion("/nix/store/34dfrmci1c8qixrspz1gxa4wvmpn95ak-cask-0..." "/nix/store/34dfrmci1c8qixrspz1gxa4wvmpn95ak-cask-0..." nil t)
command-line-1(("-scriptload" "/nix/store/34dfrmci1c8qixrspz1gxa4wvmpn95ak-cask-0..." "--" "install"))
command-line()
normal-top-level()

�[32mLoading package information... �[0mReaping losing child 0x556bd7247eb0 PID 9885 
make: *** [Makefile:44: .cask/28.0] Error 255
Removing child 0x556bd7247eb0 PID 9885 from chain.

syntax error when compiling on macOS

I installed the latest pdf-tools from melpa. However, when running (pdf-tools-install), it keeps reporting the following error

./configure: line 1: syntax error near unexpected token ('
./configure: line 1: m4trace:configure.ac:5: -1- AC_INIT([epdfinfo], [1.0], [[email protected]])'

Screen Shot 2021-10-17 at 4 16 48 AM

I have all the needed packages installed

  • poppler 21.10.0
  • automake 1.16.5
  • pkg-config 0.29.2_3

I've even tried reinstall emacs-plus and brew completely, but it still does not work. I really enjoy using pdf-tools. Any help would be much appreciated

Improve mouse-based selection of text (double click to select word, triple click to select sentence)

Not a bug, but an enhancement request, and I'm not sure how easy it would be to implement. Something I miss in pdf-tools is the ability to double click on a word to get the word highlighted for an annotation. In general, I find textselection in pdf-tools clumsierhtan some other PDF viewers, and of course it is much less smooth than when editing text buffers i nEmacs.

In my view,pdf-tools is superior in almost every way to other viewers, with small usability cases like this or #18 being the main remaining exceptions.

i should say I have no idea at all how one would implement this; I'm just identifying "better text selection (esp with mouse)" as a possible goal for the project.

Keymap bug with dark-themes

After selecting a region with the mouse single keys stop working. Any keys with bucky bits (C-x C-c C-h) get detected but single keys don't. So combinations like C-h f, C-x s, C-x f aren't detected. Funnily enough, this doesn't happen if you run the command pdf-view-mark-whole-page (C-x h) before doing the selection with the mouse. I'm guessing this has something to do with the way pdf-view handles highlighting the region. Regardless of whether a theme changes the color of the letters within an active region, pdf-tools keeps the letter color with light-themes and alters it with dark-themes, even if the theme doesn't e.g. modus-vivendi with option (setq modus-themes-region 'bg-only).

Steps to reproduce:

  1. Load a dark theme before or after opening the pdf
    • deeper-blue
    • manoj-dark
    • misterioso
    • modus-vivendi
  2. select pdf region with mouse

Ambigious behaviour in embedded image

Hi Vedang,

Currently I am facing a really strange bug related to pdf-tools
underlying rendering engine. Steps to reproduce the bug:

  1. Open sample.pdf
  2. Press <f11> to maximize Emacs. Currently you will notice a diamond
    in Figure 5.2 which represents a conditional.
  3. Again press <f11> to un-maximize Emacs. Diamond disappears!

System information:

  1. Emacs version: 28.0.50
  2. OS: GNU/Linux
  3. Linux version: 5.14.7-arch1-1
  4. Poppler version: 21.09.0-1
  5. pdf-tools version: 20210531.1613

sample.pdf

Provide a {top,bottom}-of-page functions / Readme misleading

Navigating larger-than-display PDFs is cumbersome: If in the middle of a page pdf-view-next-page-command takes you to the same position on the next page, commands for going to top-left, top-right, bottom-left, bottom-right corner of (next) page would be helpful.

The Readme.org says:
"Top of Page / Bottom of Page | < / >"
while actually these keys are bound to first page, last page respectively, there is no top-of-page command etc.

Thanks for all, who work(ed) on pdf-tools, Gregor

Is melpa repo updated?

Hi! Thanks for all the work the mantainers have made! It is a relevant package...

I have a Guix SD linux distro. And I'm learning to configure it.
When I import the package from melpa, the only available one is politza/pdf-tools, am I correct? Or I am lost?

I use Emacs to read and edit a lot of legal content, and it is a little in org, laws in eww, or in nyxt, and a lot of PDF, mainly with pdf-tools.
I want to give this fork a try, because it is updated, and mantained (am I correct?)
Now I've installed Emacs 28.0.50 from the flatwhatson channel in Guix, and it gives me a lot of compilation warnings and that kind of stuff. I am not a professional coder.

Is there a canonical way to import this repository code to Guix with all the working dependencies? Will be in Melpa? If it is, what is the link? Thanks!

Feature request: reorder/remove pages

Reposting here. Originally posted here, but I was told this repo is the canonical one at the moment. See previous issue for some brief comments.


I would find it very useful to be able to reorder and remove pages from a pdf. Ideally, it would also be good to merge more than one file into a single pdf, and have all three operations available at once in a single interface. I'm thinking of the sort of functionality the navigation sidebars provide in some viewers: not just navigation between thumbnailed pages, but some editting ability of those pages.

I was thinking that the editting experience of magit's interactive rebase might be a good model for this. We could construct a tabulated-list-mode buffer with thumbnails of each page, and any relevant information about them (maybe their original page number for example), and provide a s set of commands for reordering, removing, (perhaps inserting from other files) etc. Once you've got your list reordered how you want, press C-cC-c and the file is editted to reflect the list.

Cannot install pdf-tools on macOS

Hi,

I am trying to get pdf-tools working with my Doom Emacs installation on macOS. However,
when I run M-x pdf-tools-install I get the error below. Does anyone have any suggestions on how to fix this?

Thank you.

/Users/username/.emacs.d/.local/straight/build-27.2/pdf-tools/build/server/autobuild -i /Users/username/.emacs.d/.local/straight/build-27.2/pdf-tools/ 
---------------------------
    Installing packages    
---------------------------

Skipping package installation (already installed)

---------------------------
 Configuring and compiling 
---------------------------
autoreconf -i
configure.ac:15: installing './ar-lib'
configure.ac:11: installing './compile'
configure.ac:78: installing './config.guess'
configure.ac:78: installing './config.sub'
configure.ac:6: installing './install-sh'
configure.ac:6: installing './missing'
Makefile.am: installing './depcomp'
./configure -q --bindir=/Users/username/.emacs.d/.local/straight/build-27.2/pdf-tools/ && make clean && make -s
configure: error: cannot find necessary  poppler-private header (see README.org)
===========================
     Build failed.  ;o(    
===========================
Note: maybe try the '-d' option.

Possible bug and documentation issue; Install failed and enable minor modes failed

Hello,
first a big thanks, that you further active develop this package. I have used the original it for some years, but because the "old" maintainer does not clear some bugs (for me annoying), i'm very happy now.
Regarding the old bugs: pdf-tools was unable to print (and some other commands), because there are typing issues inside the relevant code. Perhaps simple to clear, but the developer was not willing to do that...

Now your version:
First thing is, that you do set the loadpath to .../pdf-tools/lisp. otherwise an error is thrown.
Building here was successful: fedora 34 with emacs 28.
then the created epdinfo should be copied in this directory, not .../pdf-tools.

unfortunately after M-x pdf-tools-install an error is thrown.
progn: Symbol’s function definition is void: pdf-occur-global-minor-mode

Perhaps it helps.

Regards
Poul

Error building the server: `\r\n` line endings and bad interpreter

As reported in this PR which will hopefully bring this fork to Spacemacs, I noticed while building the server the following errors:

  • Emacs reports
    /home/phundrak/.emacs.d/elpa/28.0/develop/pdf-tools-20210411.1603/build/server/autobuild -i /home/phundrak/.emacs.d/elpa/28.0/develop/pdf-tools-20210411.1603/
    /usr/bin/sh: /home/phundrak/.emacs.d/elpa/28.0/develop/pdf-tools-20210411.1603/build/server/autobuild: /bin/sh^M: bad interpreter: No such file or directory
    
  • While running directly autobuild from the shell gives the following error:
    Failed to execute process './autobuild'. Reason:
    The file uses windows line endings (\r\n). Run dos2unix or similar to fix it.
    

I see two issues here:

  1. The incorrect line endings
  2. The use of /bin/sh.

Regarding the second issue, I think it would be safer to directly refer the shell to bash and not sh, since the latter can be symlinked to various shells depending on the OS, and not necessarily POSIX-compliant ones. bash on the other hand is present on most UNIX and POSIX systems, including macOS.

I will try to submit a PR soon to fix at least the first issue.

extend selection with shift-click

One thing I really miss in pdf-tools is the ability to modify the marked/selected region with shift-click. So for instance,

  • I initially select some text to annotate (usually highlighting).
  • mouse selection in emacs is imprecise, and after releasing the mouse button, I realize I want to adjust the selection size.
  • in other programs, I could then press shift, depress the mouse button again, and adjust the size of the selection before releasing the button.

I can see there is something called "pdf-view-mouse-extend-region" which ought to be bound to C- but I'm not sure it's exactly the same thing, and in any case in pgtk-emacs I can't seem t access that event (instead, on mouse release I get "C- is not bound").

Are you able to clarify as to whether the kind of selection extension/adjustment I'm looking for is possible? Thanks!

Replace MELPA version with this one?

I notice the MELPA version of pdf-tools is still pointing to the repo "politza/pdf-tools".

Have you guys worked out transferring maintenance from there to here? I keep getting bit by the

'Symbol’s function definition is void: pdf-misc-print-program' error.

Your README suggests that this can be installed via MELPA. Could you at least clarify that?

Thanks for taking this important package up.

Fix breakage on Appveyor for `autoreconf` not found

Since 6th Jan, 2022, builds on Appveyor are failing because they cannot find autoreconf [1][2].

This should be implemented from base-devel, but even with base-devel available the builds are failing. Adding an explicit require on autoconf should fix this, but then it throws the following error[3]:

autoreconf -i
Can't exec "aclocal": No such file or directory at /usr/share/autoconf/Autom4te/FileUtils.pm line 274.
autoreconf: error: aclocal failed with exit status: 

I don't use Windows and cannot investigate this further. Someone will need to track down why the CI setup for Appveyor is broken.
[4] and [5] are how the Appveyor setup is configured.

1: https://ci.appveyor.com/project/vedang/pdf-tools/builds/42114287
2: https://ci.appveyor.com/project/vedang/pdf-tools/builds/42101965
3: https://ci.appveyor.com/project/vedang/pdf-tools/builds/42114778
4: https://github.com/vedang/pdf-tools/blob/master/appveyor.yml
5: https://github.com/vedang/pdf-tools/blob/master/ci/appveyor/install.bat

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.