unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#51975: 29.0.50; fit-frame-to-buffer calculates frame width incorrectly on X11 with Gtk 3
@ 2021-11-19 15:20 Arthur Miller
  2021-11-19 18:12 ` martin rudalics
  0 siblings, 1 reply; 5+ messages in thread
From: Arthur Miller @ 2021-11-19 15:20 UTC (permalink / raw)
  To: 51975

[-- Attachment #1: Type: text/plain, Size: 4063 bytes --]


The function calculates frame width one column too small in regard to
displayed buffer which results in text being wrapped around and extra line added
to the frame.

If you look at attached png image you will see backward slash and extra line
added below. Or you can run the attached .el file.

Simple fix I used was to add an extra column to the width of the frame
after I called fit-frame-to-buffer (commented away in the attached file).

The frame created is without any decorations, fringes, borders etc. I wanted as
"bare" X11 window as possible, so the misscalculation might be due to some
missing border or something, I haven't investigated myself.

This probably affects earlier Emacs versions too. I haven't tested other targets,
non-gtk or on other OS.

To reproduce save attached emacs-vision-clock.el somewhere and eval with
Emacs -Q. Example:

emacs -Q -l ./emacs-vision-clock.el --eval "(emacs-vision-clock-run)"&


In GNU Emacs 29.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.30, cairo version 1.17.4)
 of 2021-11-17 built on pascal
Repository revision: 1ddebefc9fe178e9e8b4275a45e0eda1bcf7848e
Repository branch: alpha-patch
Windowing system distributor 'The X.Org Foundation', version 11.0.12101001
System Description: Arch Linux

Configured using:
 'configure --with-native-compilation 'CFLAGS=-O2 -march=native
 -mtune=native''

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
JSON LCMS2 LIBOTF LIBSYSTEMD LIBXML2 M17N_FLT MODULES NATIVE_COMP NOTIFY
INOTIFY PDUMPER PNG RSVG SECCOMP SOUND THREADS TIFF TOOLKIT_SCROLL_BARS
WEBP X11 XDBE XIM XPM GTK3 ZLIB

Important settings:
  value of $LANG: sv_SE.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message mailcap yank-media rmc puny
dired dired-loaddefs rfc822 mml mml-sec epa derived epg rfc6068
epg-config gnus-util rmail rmail-loaddefs auth-source cl-seq eieio
eieio-core cl-macs eieio-loaddefs password-cache json map
text-property-search time-date seq gv subr-x byte-opt bytecomp
byte-compile cconv mm-decode mm-bodies mm-encode mail-parse rfc2231
mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums
mm-util mail-prsvr mail-utils emacs-vision-clock time-stamp help-mode
cl-loaddefs cl-lib iso-transl tooltip eldoc paren electric uniquify
ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win
term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe
tabulated-list replace newcomment text-mode lisp-mode prog-mode register
page tab-bar menu-bar rfn-eshadow isearch easymenu timer select
scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors
frame minibuffer cl-generic cham georgian utf-8-lang misc-lang
vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932
hebrew greek romanian slovak czech european ethiopic indian cyrillic
chinese composite emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help simple abbrev obarray cl-preloaded nadvice button
loaddefs faces cus-face macroexp files window text-properties overlay
sha1 md5 base64 format env code-pages mule custom widget
hashtable-print-readable backquote threads dbusbind inotify lcms2
dynamic-setting system-font-setting font-render-setting cairo
move-toolbar gtk x-toolkit x multi-tty make-network-process
native-compile emacs)

Memory information:
((conses 16 71626 11134)
 (symbols 48 6834 0)
 (strings 32 20798 1615)
 (string-bytes 1 700953)
 (vectors 16 14697)
 (vector-slots 8 313076 18657)
 (floats 8 27 32)
 (intervals 56 216 0)
 (buffers 992 11))


[-- Attachment #2: fit-frame-to-buffer-bug.png --]
[-- Type: image/png, Size: 10594 bytes --]

[-- Attachment #3: emacs-vision-clock.el --]
[-- Type: text/plain, Size: 4841 bytes --]

;;; emacs-vision-clock.el ---  -*- lexical-binding: t; -*-

;; Copyright (C) 2021  Arthur Miller

;; Author: Arthur Miller <arthur.miller@live.com>
;; Keywords: 

;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.

;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with this program.  If not, see <https://www.gnu.org/licenses/>.

;;; Commentary:

;; https://github.com/BobbyBakes/conky-Vision
\f
;;; Code:
(require 'time-stamp)

(defgroup emacs-vision-clock nil
  "Conky like clock application written in Emacs Lisp."
  :prefix "evc--"
  :prefix "emacs-vision-clock-"
  :tag "Conky-Vision style clock as Emacs application."
  :group 'applications)
\f
;;; Customize
(defcustom emacs-vision-clock-x -100
  "Frame width"
  :type 'fixnum
  :group 'emacs-vision-clock)

(defcustom emacs-vision-clock-y 100
  "Frame width"
  :type 'fixnum
  :group 'emacs-vision-clock)

(defface emacs-vision-clock-day-face
  '((t :weight light :family "Open Sans" :default nil
       :foreground "blue" :height 340))
  "Default face for emacs-vision-clock frame."
  :group 'emacs-vision-clock)

(defface emacs-vision-clock-month-face
  '((t :weight light :family "Open Sans" :default nil
       :foreground "blue" :height 340))
  "Default face for emacs-vision-clock frame."
  :group 'emacs-vision-clock)

(defface emacs-vision-clock-time-face
  '((t :weight bold :family "Open Sans" :default nil
       :foreground "blue" :height 900))
  "Default face for emacs-vision-clock frame."
  :group 'emacs-vision-clock)
\f
;;; Implementation
(defvar evc--frame nil)
(defvar evc--timer nil)
(defvar evc--buffer nil)
(defvar evc--day-face 'emacs-vision-clock-day-face)
(defvar evc--time-face 'emacs-vision-clock-time-face)
(defvar evc--month-face 'emacs-vision-clock-month-face)

(defun evc--time ()
  (propertize (time-stamp-string "%H:%M") 'face evc--time-face))

(defun evc--day ()
  (propertize (capitalize (time-stamp-string "%A")) 'face evc--day-face))

(defun evc--month ()
  (propertize (capitalize (time-stamp-string "%B %d")) 'face evc--month-face))

(defun evc--make-frame ()
  (make-frame `((name . "*emacs-vision-clock*")
                (left . ,emacs-vision-clock-x)
                (top . ,emacs-vision-clock-y)
                ;; (alpha-background . 0)
                (background-color . "white")
                (tool-bar-lines . 0)
                (menu-bar-lines . 0)
                (minibuffer . nil)
                (right-fringe . 0)
                (left-fringe . 0)
                (horizontal-scroll-bars . nil)
                (vertical-scroll-bars . nil)
                (border-width . 0)
                (internal-border-width . 0)
                (visibility . nil)
                (z-group . below)
                (auto-raise . nil)
                (skip-taskbar . t)
                (no-focus-on-map . t)
                (no-accept-focus . t)
                (unsplittable . t)
                (undecorated . t))))

(defun evc--update ()
  (select-frame evc--frame)
  (with-current-buffer evc--buffer
    (goto-char (point-min))
    (re-search-forward "[0-9][0-9]:[0-9][0-9]" nil t)
    (replace-match (evc--time))))

(defun evc--make-buffer ()
  (with-current-buffer (get-buffer-create "  *emacs-vision-clock*")
    (setq cursor-in-non-selected-windows nil mode-line-format nil)
    (erase-buffer)
    (insert (evc--time) "\n " (evc--day) ". " (evc--month))
    (let ((fill-column (- (line-end-position) (line-beginning-position))))
      (goto-char (point-min))
      (center-line))
    (setq evc--buffer (current-buffer))))

(defun evc--make-widget ()
  (let ((frame (evc--make-frame)))
    (evc--make-buffer)
    (select-frame frame)
    (switch-to-buffer evc--buffer)
    (delete-other-windows)
    (fit-frame-to-buffer)
    ;; (set-frame-width evc--frame (1+ (frame-width)))
    (make-frame-visible frame)
    (set-window-dedicated-p (selected-window) t)
    (setq evc--frame frame evc--timer (run-at-time nil 60 #'evc--update))))
\f
;;; Public commands
(defun emacs-vision-clock-run ()
  (interactive)
  (unless evc--frame
    (evc--make-widget)))

(defun emacs-vision-clock-stop ()
  (interactive)
  (if evc--timer (cancel-timer evc--timer))
  (if evc--frame (delete-frame evc--frame))
  (if evc--buffer (kill-buffer evc--buffer))
  (setq evc--buffer nil evc--frame nil evc--timer nil))

(provide 'emacs-vision-clock)
;;; emacs-vision-clock.el ends here

^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#51975: 29.0.50; fit-frame-to-buffer calculates frame width incorrectly on X11 with Gtk 3
  2021-11-19 15:20 bug#51975: 29.0.50; fit-frame-to-buffer calculates frame width incorrectly on X11 with Gtk 3 Arthur Miller
@ 2021-11-19 18:12 ` martin rudalics
  2021-11-19 19:22   ` Arthur Miller
  2021-11-19 19:39   ` Arthur Miller
  0 siblings, 2 replies; 5+ messages in thread
From: martin rudalics @ 2021-11-19 18:12 UTC (permalink / raw)
  To: Arthur Miller, 51975

 > The function calculates frame width one column too small in regard to
 > displayed buffer which results in text being wrapped around and extra line added
 > to the frame.

See

‘no-special-glyphs’
      If this is non-‘nil’, it suppresses the display of any truncation
      and continuation glyphs (*note Truncation::) for all buffers
      displayed by this frame.  This is useful to eliminate such glyphs
      when fitting a frame to its buffer via ‘fit-frame-to-buffer’ (*note
      Resizing Windows::).

in section 30.4.3.4 Layout Parameters of the Elisp manual.

martin






^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#51975: 29.0.50; fit-frame-to-buffer calculates frame width incorrectly on X11 with Gtk 3
  2021-11-19 18:12 ` martin rudalics
@ 2021-11-19 19:22   ` Arthur Miller
  2021-11-19 19:39   ` Arthur Miller
  1 sibling, 0 replies; 5+ messages in thread
From: Arthur Miller @ 2021-11-19 19:22 UTC (permalink / raw)
  To: martin rudalics; +Cc: 51975

martin rudalics <rudalics@gmx.at> writes:

>> The function calculates frame width one column too small in regard to
>> displayed buffer which results in text being wrapped around and extra line added
>> to the frame.
>
> See
>
> ‘no-special-glyphs’
>      If this is non-‘nil’, it suppresses the display of any truncation
>      and continuation glyphs (*note Truncation::) for all buffers
>      displayed by this frame.  This is useful to eliminate such glyphs
>      when fitting a frame to its buffer via ‘fit-frame-to-buffer’ (*note
>      Resizing Windows::).
>
> in section 30.4.3.4 Layout Parameters of the Elisp manual.
>
> martin
Ah, allright; didn't know about that option :-).

I'll check and repport how it works in a bit.

Thanks!





^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#51975: 29.0.50; fit-frame-to-buffer calculates frame width incorrectly on X11 with Gtk 3
  2021-11-19 18:12 ` martin rudalics
  2021-11-19 19:22   ` Arthur Miller
@ 2021-11-19 19:39   ` Arthur Miller
  2021-11-19 19:51     ` Eli Zaretskii
  1 sibling, 1 reply; 5+ messages in thread
From: Arthur Miller @ 2021-11-19 19:39 UTC (permalink / raw)
  To: martin rudalics; +Cc: 51975

martin rudalics <rudalics@gmx.at> writes:

>> The function calculates frame width one column too small in regard to
>> displayed buffer which results in text being wrapped around and extra line added
>> to the frame.
>
> See
>
> ‘no-special-glyphs’
>      If this is non-‘nil’, it suppresses the display of any truncation
>      and continuation glyphs (*note Truncation::) for all buffers
>      displayed by this frame.  This is useful to eliminate such glyphs
>      when fitting a frame to its buffer via ‘fit-frame-to-buffer’ (*note
>      Resizing Windows::).
>
> in section 30.4.3.4 Layout Parameters of the Elisp manual.
>
> martin

Indeed, it was it. With this parameter set to 't fit-frame-to-buffer works
correctly, so I guess it is not a bug. Sorry for the noise.





^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#51975: 29.0.50; fit-frame-to-buffer calculates frame width incorrectly on X11 with Gtk 3
  2021-11-19 19:39   ` Arthur Miller
@ 2021-11-19 19:51     ` Eli Zaretskii
  0 siblings, 0 replies; 5+ messages in thread
From: Eli Zaretskii @ 2021-11-19 19:51 UTC (permalink / raw)
  To: Arthur Miller; +Cc: 51975-done

> From: Arthur Miller <arthur.miller@live.com>
> Date: Fri, 19 Nov 2021 20:39:54 +0100
> Cc: 51975@debbugs.gnu.org
> 
> martin rudalics <rudalics@gmx.at> writes:
> 
> > See
> >
> > ‘no-special-glyphs’
> >      If this is non-‘nil’, it suppresses the display of any truncation
> >      and continuation glyphs (*note Truncation::) for all buffers
> >      displayed by this frame.  This is useful to eliminate such glyphs
> >      when fitting a frame to its buffer via ‘fit-frame-to-buffer’ (*note
> >      Resizing Windows::).
> >
> > in section 30.4.3.4 Layout Parameters of the Elisp manual.
> >
> > martin
> 
> Indeed, it was it. With this parameter set to 't fit-frame-to-buffer works
> correctly, so I guess it is not a bug. Sorry for the noise.

Thanks, closing.





^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-11-19 19:51 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-19 15:20 bug#51975: 29.0.50; fit-frame-to-buffer calculates frame width incorrectly on X11 with Gtk 3 Arthur Miller
2021-11-19 18:12 ` martin rudalics
2021-11-19 19:22   ` Arthur Miller
2021-11-19 19:39   ` Arthur Miller
2021-11-19 19:51     ` Eli Zaretskii

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).