unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* 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).