From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Arthur Miller Newsgroups: gmane.emacs.bugs Subject: bug#51975: 29.0.50; fit-frame-to-buffer calculates frame width incorrectly on X11 with Gtk 3 Date: Fri, 19 Nov 2021 16:20:22 +0100 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="35285"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) To: 51975@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Fri Nov 19 16:40:53 2021 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mo60R-0008ti-Pp for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 19 Nov 2021 16:40:53 +0100 Original-Received: from localhost ([::1]:60462 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mo60P-0007BA-UU for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 19 Nov 2021 10:40:49 -0500 Original-Received: from eggs.gnu.org ([209.51.188.92]:34608) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mo5zf-0007AE-6b for bug-gnu-emacs@gnu.org; Fri, 19 Nov 2021 10:40:03 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]:57051) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mo5ze-0002KS-UK for bug-gnu-emacs@gnu.org; Fri, 19 Nov 2021 10:40:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mo5ze-0006Bc-Qc for bug-gnu-emacs@gnu.org; Fri, 19 Nov 2021 10:40:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Arthur Miller Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 19 Nov 2021 15:40:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 51975 X-GNU-PR-Package: emacs X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.163733640123767 (code B ref -1); Fri, 19 Nov 2021 15:40:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 19 Nov 2021 15:40:01 +0000 Original-Received: from localhost ([127.0.0.1]:40364 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mo5zd-0006BG-3G for submit@debbugs.gnu.org; Fri, 19 Nov 2021 10:40:01 -0500 Original-Received: from lists.gnu.org ([209.51.188.17]:33690) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mo5za-0006B6-Fb for submit@debbugs.gnu.org; Fri, 19 Nov 2021 10:39:59 -0500 Original-Received: from eggs.gnu.org ([209.51.188.92]:34600) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mo5zY-000712-Sj for bug-gnu-emacs@gnu.org; Fri, 19 Nov 2021 10:39:57 -0500 Original-Received: from mail-oln040092065076.outbound.protection.outlook.com ([40.92.65.76]:42192 helo=EUR01-HE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mo5zT-0002JN-Gt for bug-gnu-emacs@gnu.org; Fri, 19 Nov 2021 10:39:54 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Xr0auxGn0LqYpvrcbDyleEVsF+2ucMfIdelpYBk1gG5L11SmoYAK8Ws8eY0M6zRBSzbE04PlyYW7//6wt25rZ7Jl8+cO4rSEv1pwbcT0Zyf7/X/CEFKctUi4vi2QqPMWHdAf6Q1TTax6MFnTbTIgbtTw9Bm81V5ItJaS4WZyhl4gf1eZZjHnmA4mZ7EEOgZ1wkfQ/t4GHhFiEovgJDYoRlEHHjHksDZNlXlqiZ9f/m62er0jc4E3L9NqC5FBhilgnmVj2utBj9UJ1SfvPKXWqufJqhYYr1CnGwVpNQZ/AkTAz6PGJbi4ZbtsOtrLslFSb+pZ+SHiLmDuGBg0O0i8yQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=EbatGqu50KEFFE86EN5QgfMwKph1Y0m/4cDyCDMXWrQ=; b=F8KNBMWRR9AncRoLCh7m32Wq+By2WwDWj4VPcm3fB7EbjTg04hQAaVt0DoOl2pYvcQabRcPHtRZCScbj9draxsUPQ7c2b6J7oqvuf2RXV3uZi5TDjGzj5kguwHEOAaaxKn1K7jLeKwxxFngwtJJlXT4XhlWW8G66yAuAmAvoRzSMpHigSczF6hnTjnfYOCji3PKM059CpLMbl63R5YuyGmyCvthG2L5pf7WT2whap/MvTxIfxjXJDTjt7LpikdpCk4q9HkNmKMPhK1DsUrC6BehCFwOFP3SgtZk11ZMUxqxrrP/dmCBXgIX4gLE2YfQVAlqrShPlffANW2xVDGkzBQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=live.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=EbatGqu50KEFFE86EN5QgfMwKph1Y0m/4cDyCDMXWrQ=; b=NIfp+KaZDwl90qk8wkSV4LgMrzLIU+zlgHBffNt/Ps4Us1+K9QElakMjO0TAd1ql3H5OErpp4+SgU1aPkgX1Xd3CENZDfSSysPdpH6FLDnrmXLjF0IBBKvDoYxRy5o3XXsY78fPlslT6B0FU1DC48mLaUNIfGZjQHnIfduw7zdgkKcttRcvTQwLBs90EHA4fujSsPPeKucOSHIzc/98TxN/yyBRxotoHU5EBlhHC2MgehJLc6ixXnBU0Ir7F4Mwa7D3vajDvvhaD0TfKaqHj9fwzU8Ijt3ow0ntqXU8rPmp53E7anYPyBpzJvdS88qc4XcrCCr3/6ly0cM6VY/Au7g== Original-Received: from AM9PR09MB4977.eurprd09.prod.outlook.com (2603:10a6:20b:304::20) by AM0PR09MB3345.eurprd09.prod.outlook.com (2603:10a6:208:16f::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4713.19; Fri, 19 Nov 2021 15:20:24 +0000 Original-Received: from AM9PR09MB4977.eurprd09.prod.outlook.com ([fe80::c05b:e2ca:5b8a:56d2]) by AM9PR09MB4977.eurprd09.prod.outlook.com ([fe80::c05b:e2ca:5b8a:56d2%8]) with mapi id 15.20.4713.022; Fri, 19 Nov 2021 15:20:24 +0000 X-TMN: [dyiVfxFGv53O+bb/kgXUwnRsUxAPbr13] X-ClientProxiedBy: AS9PR06CA0235.eurprd06.prod.outlook.com (2603:10a6:20b:45e::34) To AM9PR09MB4977.eurprd09.prod.outlook.com (2603:10a6:20b:304::20) X-Microsoft-Original-Message-ID: <87mtm0npe1.fsf@live.com> X-MS-Exchange-MessageSentRepresentingType: 1 Original-Received: from pascal.homepc (81.232.177.30) by AS9PR06CA0235.eurprd06.prod.outlook.com (2603:10a6:20b:45e::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4713.20 via Frontend Transport; Fri, 19 Nov 2021 15:20:23 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7db93849-8c45-4c64-ca5e-08d9ab701b50 X-MS-TrafficTypeDiagnostic: AM0PR09MB3345: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: GtBRTao1SmwDaCHOvD+AXBuw49yeUkpwn94c3/S6hDfzUAN5ZjnDEfiVIStapFYvNgztyKN8x3HJZeblDuLZ7BfXdoF06wo2QfJAyQ6Gjp3oYap3QpSsmWdJ2DfgRK0KG1r6w/HB1zm6wyiUayn9brt3cVOAY2MGPIVtnPJxQpsPI5R03FmS8oY6kxLdYWLNqEXVs9kp9rjk/NIfLECphfzlZ9wl3b2Hmix+kiw4UbfL/0XB9FjHqbsUZLLgwumWfjHC7um15rSwQy83qtMP+hHU4Z6kPw+aAbplXgcszUztuKK8UzmN2vSGiXBiybgCGMC6E15uRZYuRGnacXqWYZ7D7X+kQDXggJL+pn64tw5hDS8AAjA0KgvYf7owYozmfKXrfGfaQwl7eam2qThdFZvx0i+qFV8W9KuKM/XHEFOQIeh6MGUdncDiNTK+CGLpR/SiOehV5fkTB+tItsHpzmzL7L6clwx4AalxZfyrRs5wTKj9uj7vv9zx5fhXgWau2xlHKXsd8CM8QOeAG1zzClcFcPMKuN5CuUFbt4o9bAB37qxF8v488uc/3HCENXQ/Cp7lrpaGUKjUOMteZMRm9Q== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: /dWvkpu0uZr5Bqj4Ew7sKjNFOJgzZ0wpTPM0N8QhxPYUBYUx/myI5d/eAQEcgQ319hntbVbLXu+EnczTIRSEUTQTnavq4PkXJ35+2Vi46IIOo2hBwGcvalXi31Ot+BSBYusDks08/tWa/q7N32MAagY2TTpH4wzT/kzrFMOdp+NpMmblaJXovqPVdja1EkgI/LBOhgtoCqhB4pU3mD0KiOfiEGDDXRjVTFPmpo9Q4DbCqfWFTUDCBdESMkK60YyDx3Y3qae19b8yrP8zAHI89JGRhxHC7nKbPfmDwBTSTuDLaAhJB5Bx23VU5R4hJHqfMk9h0jn6hE7IkAf7Co0sbPVBTZl4UA215X7tSgTchuoI1h0IMOQUhSgfR3nfWHqMZA16Iy3MlY0weOezOM2v0mTRIrxHdV94fwsLCfkFObeRhYkJL20J1jgPjQl+DbV30lqTspthcO284+bDzJdh+VRLvrneTqqPRtLfr9fEOa2rKBmtcyAXL5eOP6olQTOiDYXcqndSRkzsHZm1aNhObZlKrSEL+Q3ZVighMuXiWtqJiO5z2nTfK9d9k6TWrppDrgWZFcMeWQ+MbYF5hFLHb5/RzhzFxEVecwI14ze8GZ0CaWqshAAaCblX8MOqzjjxVcR8uw3o2JZ+1EAw7vHT6PCvehsQme3mlbI7OkkF6OJNzUgeFI0nusn5DVYt8JRoqEFOXQgPaAUtDVvRRCS8eA== X-OriginatorOrg: sct-15-20-3174-20-msonline-outlook-72e6e.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: 7db93849-8c45-4c64-ca5e-08d9ab701b50 X-MS-Exchange-CrossTenant-AuthSource: AM9PR09MB4977.eurprd09.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Nov 2021 15:20:24.0855 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR09MB3345 Received-SPF: pass client-ip=40.92.65.76; envelope-from=arthur.miller@live.com; helo=EUR01-HE1-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:220428 Archived-At: --=-=-= Content-Type: text/plain 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)) --=-=-= Content-Type: image/png Content-Disposition: attachment; filename=fit-frame-to-buffer-bug.png Content-Transfer-Encoding: base64 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 --=-=-= Content-Type: text/plain Content-Disposition: attachment; filename=emacs-vision-clock.el ;;; emacs-vision-clock.el --- -*- lexical-binding: t; -*- ;; Copyright (C) 2021 Arthur Miller ;; Author: Arthur Miller ;; 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 . ;;; Commentary: ;; https://github.com/BobbyBakes/conky-Vision ;;; 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) ;;; 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) ;;; 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)))) ;;; 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 --=-=-=--