* Re: Scaling stuff for high dpi screens
[not found] ` <87lhulyz7g.fsf@topper.koldfront.dk>
@ 2015-01-28 6:23 ` Lars Ingebrigtsen
2015-01-28 8:46 ` David Kastrup
0 siblings, 1 reply; 10+ messages in thread
From: Lars Ingebrigtsen @ 2015-01-28 6:23 UTC (permalink / raw)
To: Adam Sjøgren; +Cc: ding, emacs-devel
asjo@koldfront.dk (Adam Sjøgren) writes:
> (defun get-x11-dpi ()
> (let ((xrandr
> (with-output-to-string
> (call-process "xrandr" nil standard-output))))
Hm. Doesn't Emacs have a way of determining the DPI of the screen? If
not, it should have.
I've Cc'd emacs-devel in case somebody there knows.
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog http://lars.ingebrigtsen.no/
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Scaling stuff for high dpi screens
2015-01-28 6:23 ` Scaling stuff for high dpi screens Lars Ingebrigtsen
@ 2015-01-28 8:46 ` David Kastrup
2015-01-29 1:02 ` Lars Ingebrigtsen
` (2 more replies)
0 siblings, 3 replies; 10+ messages in thread
From: David Kastrup @ 2015-01-28 8:46 UTC (permalink / raw)
To: Lars Ingebrigtsen; +Cc: Adam Sjøgren, ding, emacs-devel
Lars Ingebrigtsen <larsi@gnus.org> writes:
> asjo@koldfront.dk (Adam Sjøgren) writes:
>
>> (defun get-x11-dpi ()
>> (let ((xrandr
>> (with-output-to-string
>> (call-process "xrandr" nil standard-output))))
>
> Hm. Doesn't Emacs have a way of determining the DPI of the screen? If
> not, it should have.
Sure.
(/ (display-pixel-width) (/ (display-mm-width) 25.4))
--
David Kastrup
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Scaling stuff for high dpi screens
2015-01-28 8:46 ` David Kastrup
@ 2015-01-29 1:02 ` Lars Ingebrigtsen
2015-01-29 22:26 ` Adam Sjøgren
2015-01-29 23:57 ` Adam Sjøgren
2 siblings, 0 replies; 10+ messages in thread
From: Lars Ingebrigtsen @ 2015-01-29 1:02 UTC (permalink / raw)
To: David Kastrup; +Cc: Adam Sjøgren, ding, emacs-devel
David Kastrup <dak@gnu.org> writes:
>> Hm. Doesn't Emacs have a way of determining the DPI of the screen? If
>> not, it should have.
>
> Sure.
>
> (/ (display-pixel-width) (/ (display-mm-width) 25.4))
Cool.
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog http://lars.ingebrigtsen.no/
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Scaling stuff for high dpi screens
2015-01-28 8:46 ` David Kastrup
2015-01-29 1:02 ` Lars Ingebrigtsen
@ 2015-01-29 22:26 ` Adam Sjøgren
2015-01-29 23:57 ` Adam Sjøgren
2 siblings, 0 replies; 10+ messages in thread
From: Adam Sjøgren @ 2015-01-29 22:26 UTC (permalink / raw)
To: emacs-devel; +Cc: ding
David writes:
> Lars Ingebrigtsen <larsi@gnus.org> writes:
>> Hm. Doesn't Emacs have a way of determining the DPI of the screen? If
>> not, it should have.
> Sure.
> (/ (display-pixel-width) (/ (display-mm-width) 25.4))
Perfect, thanks!
Best regards,
Adam
--
"I skal gå tre skridt væk fra mig Adam Sjøgren
For jeg har fundet en som rammer" asjo@koldfront.dk
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Scaling stuff for high dpi screens
2015-01-28 8:46 ` David Kastrup
2015-01-29 1:02 ` Lars Ingebrigtsen
2015-01-29 22:26 ` Adam Sjøgren
@ 2015-01-29 23:57 ` Adam Sjøgren
2015-01-30 6:26 ` Eli Zaretskii
2015-01-30 10:05 ` David Kastrup
2 siblings, 2 replies; 10+ messages in thread
From: Adam Sjøgren @ 2015-01-29 23:57 UTC (permalink / raw)
To: emacs-devel; +Cc: ding
David writes:
> (/ (display-pixel-width) (/ (display-mm-width) 25.4))
Here are my observations so far:
a) When starting Emacs by using "emacs" on the command line,
display-pixel-width and display-mm-width returns what I expect
(3200, 406).
b) after-make-frame-functions are not called when I start Emacs using
"emacs" on the command line and the first frame appears.
If I subsequently create a new frame with C-x 5 2, or emacsclient
--create-frame --alternate-editor="", they are called, and the
widths are as expected.
c) If I use 'emacsclient --create-frame --alternate-editor=""' to start
Emacs, then after-make-frame-functions are called, but when I call
display-pixel-width and display-mm-width in such a function, I get
(10, nil) back.
If I subsequently make a new frame with C-x 5 2, or emacsclient
--create-frame --alternate-editor="", then the expected values are
returned.
I don't understand b), but don't mind much, as it is easy to call my
function on the first frame created in my init.el.
I don't understand c) either, but it is quite annoying, because I can't
find a suitable way/hook in which to call display-pixel/mm-width at a
time where they give the results I expect.
This is what I have been playing around with in my init.el:
(defun get-x11-dpi ()
(let ((pixel-width (display-pixel-width))
(mm-width (display-mm-width)))
(message "display-pixel-width: %s" pixel-width)
(message "display-mm-width: %s" mm-width)
(if (and pixel-width mm-width)
(round (/ (display-pixel-width) (/ (display-mm-width) 25.4)))
100)))
; Activate scaling:
(defun asjo-new-frame-setup-scaling (new-frame)
(set-frame-parameter new-frame 'image-dpi-scale-magnitude (if (> (get-x11-dpi) 100) 2.0 1.0)))
; This does not work for the first emacsclient frame, but it does for
; subsequent frames, it is not run for first emacs frame either:
(add-hook 'after-make-frame-functions 'asjo-new-frame-setup-scaling)
; This is for non-emacsclient startup:
(asjo-new-frame-setup-scaling nil)
Best regards,
Adam
--
"I think I've learned by now Adam Sjøgren
There's never an easy way" asjo@koldfront.dk
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Scaling stuff for high dpi screens
2015-01-29 23:57 ` Adam Sjøgren
@ 2015-01-30 6:26 ` Eli Zaretskii
2015-01-30 10:05 ` David Kastrup
1 sibling, 0 replies; 10+ messages in thread
From: Eli Zaretskii @ 2015-01-30 6:26 UTC (permalink / raw)
To: Adam Sjøgren; +Cc: ding, emacs-devel
> From: asjo@koldfront.dk (Adam Sjøgren)
> Date: Fri, 30 Jan 2015 00:57:14 +0100
> Cc: ding@gnus.org
>
> c) If I use 'emacsclient --create-frame --alternate-editor=""' to start
> Emacs, then after-make-frame-functions are called, but when I call
> display-pixel-width and display-mm-width in such a function, I get
> (10, nil) back.
Those functions accept a 'frame' argument, so perhaps the default they
try using (see the doc string) misfires in this particular scenario.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Scaling stuff for high dpi screens
2015-01-29 23:57 ` Adam Sjøgren
2015-01-30 6:26 ` Eli Zaretskii
@ 2015-01-30 10:05 ` David Kastrup
2015-01-30 15:19 ` Vincent Bernat
1 sibling, 1 reply; 10+ messages in thread
From: David Kastrup @ 2015-01-30 10:05 UTC (permalink / raw)
To: Adam Sjøgren; +Cc: ding, emacs-devel
asjo@koldfront.dk (Adam Sjøgren) writes:
> David writes:
>
>> (/ (display-pixel-width) (/ (display-mm-width) 25.4))
>
> Here are my observations so far:
>
> a) When starting Emacs by using "emacs" on the command line,
> display-pixel-width and display-mm-width returns what I expect
> (3200, 406).
>
> b) after-make-frame-functions are not called when I start Emacs using
> "emacs" on the command line and the first frame appears.
>
> If I subsequently create a new frame with C-x 5 2, or emacsclient
> --create-frame --alternate-editor="", they are called, and the
> widths are as expected.
>
> c) If I use 'emacsclient --create-frame --alternate-editor=""' to start
> Emacs, then after-make-frame-functions are called, but when I call
> display-pixel-width and display-mm-width in such a function, I get
> (10, nil) back.
>
> If I subsequently make a new frame with C-x 5 2, or emacsclient
> --create-frame --alternate-editor="", then the expected values are
> returned.
>
> I don't understand b), but don't mind much, as it is easy to call my
> function on the first frame created in my init.el.
>
> I don't understand c) either, but it is quite annoying, because I can't
> find a suitable way/hook in which to call display-pixel/mm-width at a
> time where they give the results I expect.
You might have to provide the functions with explicit display arguments
if the "selected frame" does not correspond to a graphical display.
display-pixel-width is a compiled Lisp function in `frame.el'.
(display-pixel-width &optional DISPLAY)
Return the width of DISPLAY's screen in pixels.
DISPLAY can be a display name or a frame.
If DISPLAY is omitted or nil, it defaults to the selected frame's display.
For character terminals, each character counts as a single pixel.
For graphical terminals, note that on "multi-monitor" setups this
refers to the pixel width for all physical monitors associated
with DISPLAY. To get information for each physical monitor, use
`display-monitor-attributes-list'.
--
David Kastrup
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Scaling stuff for high dpi screens
2015-01-30 10:05 ` David Kastrup
@ 2015-01-30 15:19 ` Vincent Bernat
2015-01-30 23:38 ` Adam Sjøgren
0 siblings, 1 reply; 10+ messages in thread
From: Vincent Bernat @ 2015-01-30 15:19 UTC (permalink / raw)
To: David Kastrup; +Cc: Adam Sjøgren, emacs-devel, ding
❦ 30 janvier 2015 11:05 +0100, David Kastrup <dak@gnu.org> :
>>> (/ (display-pixel-width) (/ (display-mm-width) 25.4))
[...]
>> I don't understand c) either, but it is quite annoying, because I can't
>> find a suitable way/hook in which to call display-pixel/mm-width at a
>> time where they give the results I expect.
For some reason, I didn't get the original message and I don't have the
whole thread either. Sorry if it has already been told.
If you use GTK as a toolkit for your Emacs, DPI changes are
automatically handled. I was previously using Lucid and switched to GTK
for this reason. This works automatically in Gnome or likewise
environments.
If you have a more "basic" environment, you need something like
xsettingsd with the target DPI*1024:
Xft/DPI 98304
I generate one with this snippet:
#+BEGIN_SRC sh
sed +Xft/DPI+d ~/.xsettingsd
dpi=$(xdpyinfo | awk '$1 ~ /resolution:/ { print $2 }' | sed 's/x.*//')
echo Xft/DPI $(( $dpi * 1024 )) >> ~/.xsettingsd
pid=$(xprop -name xsettingsd _NET_WM_PID 2> /dev/null | awk '{print $NF}')
if [ x"$pid" = x ]; then
xsettingsd -c ~/.xsettingsd &
else
kill -HUP $pid
fi
# Also use xrdb for very old stuff (you know, LibreOffice)
echo Xft.dpi: $dpi | xrdb -merge
#+END_SRC sh
However, note that the GTK version of Emacs can kill itself if a display
becomes unavailable because of some limitation of GTK.
--
Use library functions.
- The Elements of Programming Style (Kernighan & Plauger)
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Scaling stuff for high dpi screens
2015-01-30 15:19 ` Vincent Bernat
@ 2015-01-30 23:38 ` Adam Sjøgren
2015-01-31 15:59 ` Vincent Bernat
0 siblings, 1 reply; 10+ messages in thread
From: Adam Sjøgren @ 2015-01-30 23:38 UTC (permalink / raw)
To: ding; +Cc: emacs-devel
Vincent writes:
> If you use GTK as a toolkit for your Emacs, DPI changes are
> automatically handled.
Images are automatically rescaled for you on high dpi screens? They
aren't for me.
> However, note that the GTK version of Emacs can kill itself if a
> display becomes unavailable because of some limitation of GTK.
Yes, it is a shame that this has not been resolved yet. I never quite
understood what exactly it is in GTK that still needs fixing, even when
I did try digging.
Unfortunately the "killing itself" was introduced because I reported my
disk filling up with error messages from Emacs+GTK once. I feel somewhat
guilty.
Best regards,
Adam
--
"Sadly, these days, if you know the difference Adam Sjøgren
between a phillips- and a flat head screwdriver, asjo@koldfront.dk
you're a renaissance man."
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Scaling stuff for high dpi screens
2015-01-30 23:38 ` Adam Sjøgren
@ 2015-01-31 15:59 ` Vincent Bernat
0 siblings, 0 replies; 10+ messages in thread
From: Vincent Bernat @ 2015-01-31 15:59 UTC (permalink / raw)
To: Adam Sjøgren; +Cc: ding, emacs-devel
❦ 31 janvier 2015 00:38 +0100, asjo@koldfront.dk (Adam Sjøgren) :
>> If you use GTK as a toolkit for your Emacs, DPI changes are
>> automatically handled.
>
> Images are automatically rescaled for you on high dpi screens? They
> aren't for me.
Not for me either. My screen is only 144 dpi so this is bearable.
--
Too much is just enough.
-- Mark Twain, on whiskey
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2015-01-31 15:59 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <87vbu5m25o.fsf@topper.koldfront.dk>
[not found] ` <b4ma9bfzbny.fsf@jpl.org>
[not found] ` <871twqefd6.fsf@topper.koldfront.dk>
[not found] ` <87lhulyz7g.fsf@topper.koldfront.dk>
2015-01-28 6:23 ` Scaling stuff for high dpi screens Lars Ingebrigtsen
2015-01-28 8:46 ` David Kastrup
2015-01-29 1:02 ` Lars Ingebrigtsen
2015-01-29 22:26 ` Adam Sjøgren
2015-01-29 23:57 ` Adam Sjøgren
2015-01-30 6:26 ` Eli Zaretskii
2015-01-30 10:05 ` David Kastrup
2015-01-30 15:19 ` Vincent Bernat
2015-01-30 23:38 ` Adam Sjøgren
2015-01-31 15:59 ` Vincent Bernat
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).