branch: elpa/pdf-tools commit 2037c52f127f3971e8f8bcd1a8874bcaa4c8f5ba Author: Visuwesh <visuwe...@gmail.com> Commit: Vedang Manerikar <ved.maneri...@gmail.com>
Add a dedicated rotation command and keybinding We need a dedicated command for rotation since when `pdf-tools` redisplays the image, the `:rotation` image-property is lost. Pdf-tools redisplays the images when changing pages, zooming in/out, setting the slice, etc. so this is essential to have. A variable is used simply because `pdf-tools` already uses a variable to keep track of the current scaling. * lisp/pdf-view.el (pdf-view--current-rotation): Add new variable to keep track of angle. (pdf-view-create-page): Account for above. (pdf-view-mode-map): Add the new command under "R". (pdf-view-rotate): Add new command. Fixes: #152 Closes: #165 --- NEWS | 3 +++ README.org | 2 ++ lisp/pdf-view.el | 21 +++++++++++++++++++++ 3 files changed, 26 insertions(+) diff --git a/NEWS b/NEWS index a4bec6d4d8..5abb81569b 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,9 @@ + This feature enabled us to change the default ~selection-style~ used in ~pdf-tools~ from =GLYPH= to =WORD=. + The change makes highlighting / selecting text *much* snappier. If you want to go back to the old behaviour of selecting by glyph instead of word, or if you want to select a whole line instead, customize ~pdf-view-selection-style~ +- Track rotation of pages and add a command to make rotation of pages easy @vizs #165 + + The new command is bound to =R= in `pdf-view-mode-map`. + ** Functionality fixes and improvements - Fix: Saving a PDF when ~buffer-file-name~ is missing will now prompt for a filename (eg: in EWW) @akater #178 diff --git a/README.org b/README.org index c4306b9bd8..961a75a45c 100644 --- a/README.org +++ b/README.org @@ -288,6 +288,8 @@ Note that ~pdf-tools~ renders the PDF as images inside Emacs. This means that al | Trim Margins (set slice to bounding box) | ~s b~ | | Reset Margins | ~s r~ | | Reset Zoom | ~0~ | +| Rotate Page | ~R~ | +|------------------------------------------+-----------------| ** Annotations :PROPERTIES: diff --git a/lisp/pdf-view.el b/lisp/pdf-view.el index 454effa283..afca46f54e 100644 --- a/lisp/pdf-view.el +++ b/lisp/pdf-view.el @@ -226,6 +226,9 @@ regarding display of the region in the later function.") (defvar-local pdf-view--hotspot-functions nil "Alist of hotspot functions.") +(defvar-local pdf-view--current-rotation nil + "Current rotation of the page.") + (defvar-local pdf-view-register-alist nil "Local, dedicated register for PDF positions.") @@ -290,6 +293,8 @@ regarding display of the region in the later function.") (define-key map (kbd "s m") 'pdf-view-set-slice-using-mouse) (define-key map (kbd "s b") 'pdf-view-set-slice-from-bounding-box) (define-key map (kbd "s r") 'pdf-view-reset-slice) + ;; Rotation. + (define-key map (kbd "R") #'pdf-view-rotate) ;; Reconvert (define-key map (kbd "C-c C-c") 'doc-view-mode) (define-key map (kbd "g") 'revert-buffer) @@ -586,6 +591,21 @@ For example, (pdf-view-shrink 1.25) decreases size by 20%." (setq pdf-view-display-size 1.0) (pdf-view-redisplay t)) + +;; * ================================================================== * +;; * Rotation +;; * ================================================================== * +(defun pdf-view-rotate (angle) + "Rotate the current page by ANGLE degrees clockwise. +When called interactively, angle defaults to 90. Moreover, if +called interactively with a prefix argument, then rotate +anti-clockwise." + (interactive (list (if current-prefix-arg -90 90))) + (setq-local pdf-view--current-rotation + (mod (+ (or pdf-view--current-rotation 0) + angle) + 360)) + (pdf-view-redisplay t)) ;; * ================================================================== * @@ -974,6 +994,7 @@ See also `pdf-view-use-imagemagick'." window page size))) (pdf-view-create-image data :width (car size) + :rotation (or pdf-view--current-rotation 0) :map hotspots :pointer 'arrow)))