Álvaro Ramírez
Emacs: Rotate my macOS display
Every so often, I rotate my monitor (vertical vs horizontal) for either work or to watch a movie. macOS enables changing the display rotation via a dropdown menu (under Preferences > Displays > Rotation) where you can pick between Standard, 90°, 180°, and 270°. That's all fine, but what I'd really like is a quick way to toggle between my preferred two choices: Standard and 270°.
Unsurprisingly, I'd also like to invoke it as an interactive command via Emacs's M-x (see Emacs: connect my Bluetooth speaker). With narrowing frameworks like ivy, helm, and ido, invoking these commands is just a breeze.
Turns out, this was pretty simple to accomplish, thanks to Eric Nitardy's fb-rotate command line utility. All that's left to do is wrap it in a tiny elisp function hack, add the toggling logic, and voilà!
The screen capture goes a little funky when rotating the display, but you get the idea. It works better in person :)
…and here's the snippet:
(defun ar/display-toggle-rotation () (interactive) (require 'cl-lib) (cl-assert (executable-find "fb-rotate") nil "Install fb-rotate from https://github.com/CdLbB/fb-rotate") ;; # Display_ID Resolution ____Display_Bounds____ Rotation ;; 2 0x2b347692 1440x2560 0 0 1440 2560 270 [main] ;; From fb-rotate output, get the `current-rotation' from Column 7, row 1 zero-based. (let ((current-rotation (nth 7 (split-string (nth 1 (process-lines "fb-rotate" "-i")))))) (call-process-shell-command (format "fb-rotate -d 1 -r %s" (if (equal current-rotation "270") "0" "270")))))