From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Titus von der Malsburg Newsgroups: gmane.emacs.bugs Subject: bug#19395: 25.0.50; Setting left fringe to 0 messes up window-width Date: Sat, 20 Dec 2014 16:45:26 +0100 Message-ID: <1228A341-AA54-41A0-81CB-256220D73ABF@posteo.de> References: <87vblbnz2u.fsf@posteo.de> <83k31rwe55.fsf@gnu.org> <87lhm772o2.fsf@posteo.de> <83h9wvwbux.fsf@gnu.org> <87bnn39cpe.fsf@posteo.de> <83a92mwau9.fsf@gnu.org> <874msu9out.fsf@posteo.de> <83vblauoh6.fsf@gnu.org> <87wq5q864m.fsf@posteo.de> <83tx0uum88.fsf@gnu.org> <87a92lmxy3.fsf@posteo.de> <837fxpue6v.fsf@gnu.org> <87oaqyz85s.fsf@posteo.de> <5495906D.7030800@gmx.at> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 (1.0) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable X-Trace: ger.gmane.org 1419096569 11405 80.91.229.3 (20 Dec 2014 17:29:29 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sat, 20 Dec 2014 17:29:29 +0000 (UTC) Cc: "19395@debbugs.gnu.org" <19395@debbugs.gnu.org> To: martin rudalics Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sat Dec 20 18:29:19 2014 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Y2NqA-0000vb-No for geb-bug-gnu-emacs@m.gmane.org; Sat, 20 Dec 2014 18:29:18 +0100 Original-Received: from localhost ([::1]:35366 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Y2NqA-0005ft-2Y for geb-bug-gnu-emacs@m.gmane.org; Sat, 20 Dec 2014 12:29:18 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:58805) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Y2Nq0-0005fk-Du for bug-gnu-emacs@gnu.org; Sat, 20 Dec 2014 12:29:14 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Y2Npu-0002gT-GR for bug-gnu-emacs@gnu.org; Sat, 20 Dec 2014 12:29:08 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:43882) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Y2Npu-0002gN-DA for bug-gnu-emacs@gnu.org; Sat, 20 Dec 2014 12:29:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1Y2Npu-0003qi-3Z for bug-gnu-emacs@gnu.org; Sat, 20 Dec 2014 12:29:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Titus von der Malsburg Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 20 Dec 2014 17:29:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 19395 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 19395-submit@debbugs.gnu.org id=B19395.141909651714763 (code B ref 19395); Sat, 20 Dec 2014 17:29:02 +0000 Original-Received: (at 19395) by debbugs.gnu.org; 20 Dec 2014 17:28:37 +0000 Original-Received: from localhost ([127.0.0.1]:53248 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Y2NpV-0003q2-1e for submit@debbugs.gnu.org; Sat, 20 Dec 2014 12:28:37 -0500 Original-Received: from mx02.posteo.de ([89.146.194.165]:47567) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Y2NpS-0003pq-08 for 19395@debbugs.gnu.org; Sat, 20 Dec 2014 12:28:35 -0500 Original-Received: from dovecot03.posteo.de (unknown [185.67.36.28]) by mx02.posteo.de (Postfix) with ESMTPS id D4E3725ACC26; Sat, 20 Dec 2014 18:28:32 +0100 (CET) Original-Received: from mail.posteo.de (localhost [127.0.0.1]) by dovecot03.posteo.de (Postfix) with ESMTPSA id 3k4YnX4fZwz5vND; Sat, 20 Dec 2014 18:28:32 +0100 (CET) In-Reply-To: <5495906D.7030800@gmx.at> X-Mailer: iPhone Mail (11D257) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.43 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.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:97622 Archived-At: (Sent from my cell phone.) >> On 20.12.2014, at 16:06, martin rudalics wrote: >>=20 >> (defun window-char-width (&optional window face) >> "Return character width for WINDOW. >> WINDOW must be a live window and defaults to the selected one. >>=20 >> FACE is the face for which character width should be >> returned. Buffer-local face remappings are applied. If nil, the >> default face is used." >> (with-selected-window (window-normalize-window window t) >> (let* ((face (if face face 'default)) >> (info (font-info (face-font face))) >> (width (aref info 11))) >> (if (> width 0) >> width >> (aref info 10))))) >>=20 >> (defun window-max-characters-per-line (&optional window face) >> "Return the number of characters that can be displayed >> on one line. >> WINDOW must be a live window and defaults to the selected one. >>=20 >> FACE is the face whose character width should be used for the >> calculation. Buffer-local face remappings are applied. If nil, >> the default face is used. >>=20 >> This function is different from `window-body-width' in that it >> accounts for fringes (when at least one fringe has zero width, >> one column is reserved for continuation characters) and for the >> size of the default font (which may have been adjusted using, >> e.g., `text-scale-increase')." >> (with-selected-window (window-normalize-window window t) >> (let* ((window-width (window-body-width window t)) >> (font-width (window-char-width window face)) >> (ncols (/ window-width font-width))) >> (if (and (display-graphic-p) >> overflow-newline-into-fringe >> (/=3D (frame-parameter nil 'left-fringe) 0) >> (/=3D (frame-parameter nil 'right-fringe) 0)) >> ncols >> (1- ncols))))) >>=20 >> Note that the first function is a variant of Martin's version which had >> a bug: if the buffer in the specified window is displayed in two frames, >> the returned character width was always the one used in the current >> frame which is not necessarily the character width in the specified >> window (the window may be in the other frame). This is a problem >> because character width can be different, if the two frames use >> different default fonts. >=20 > So this what I've been trying to find out all the time. The faces > apparently _get_ merged dependent on the buffer _and_ the frame. Yes, my understanding is that each frame has a default face. The properties i= n the buffer-local face-remapping-alist overwrite the vales of the dafault f= ace. Windows do not influence the font. >=20 > I need a corresponding `window-char-height' as well, probably also with > a FACE argument. Yes, that makes sense. I can add it if you want. >=20 >> For completeness, it probably also makes sense to include the following >> function in simple.el, which already has a function >> `default-font-height'. >>=20 >> (defun default-font-width () >> "Return the width in pixels of the current buffer's default face font. >=20 > I profoundly dislike the "default-" prefix here. `buffer-font-height' > and `buffer-font-width' would be much better IMHO. >=20 >> I also added the bonus feature which lets you specify a specific face >> that should be used for the calculations. >=20 > So are you now sure that we don't need a specific character ("M") any > more? >=20 > martin