From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Rasmus Newsgroups: gmane.emacs.devel Subject: Re: [mentoring] a darkroom/writeroom mode for Emacs Date: Thu, 11 Dec 2014 19:33:56 +0100 Message-ID: <87bnna11ez.fsf@pank.eu> References: <20141203142859.24393.98673@vcs.savannah.gnu.org> <20141203215426.GA15791@thyrsus.com> <87ppbzplcw.fsf@newcastle.ac.uk> <83iohr48kr.fsf@gnu.org> <83388u4bps.fsf@gnu.org> <83y4qm2uz9.fsf@gnu.org> <83vblq2los.fsf@gnu.org> <87vblpjq24.fsf@uwakimon.sk.tsukuba.ac.jp> <83mw7119yz.fsf@gnu.org> <87sigqiaaz.fsf@gmx.us> <878uihhv5q.fsf@gmx.us> <87bnnczcjg.fsf@gmx.us> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: ger.gmane.org 1418322876 6873 80.91.229.3 (11 Dec 2014 18:34:36 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 11 Dec 2014 18:34:36 +0000 (UTC) Cc: emacs-devel@gnu.org To: joaotavora@gmail.com Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Dec 11 19:34:26 2014 Return-path: Envelope-to: ged-emacs-devel@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 1Xz8ZD-0002VM-NF for ged-emacs-devel@m.gmane.org; Thu, 11 Dec 2014 19:34:24 +0100 Original-Received: from localhost ([::1]:53094 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xz8ZD-0002WA-AL for ged-emacs-devel@m.gmane.org; Thu, 11 Dec 2014 13:34:23 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:58556) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xz8Z2-0002LL-7n for emacs-devel@gnu.org; Thu, 11 Dec 2014 13:34:19 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Xz8Yu-0000wM-GW for emacs-devel@gnu.org; Thu, 11 Dec 2014 13:34:12 -0500 Original-Received: from mout.gmx.net ([212.227.17.21]:61174) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xz8Yt-0000vr-Vu for emacs-devel@gnu.org; Thu, 11 Dec 2014 13:34:04 -0500 Original-Received: from x200s ([193.145.48.46]) by mail.gmx.com (mrgmx103) with ESMTPSA (Nemesis) id 0MPUFR-1Y3HI11Na5-004l70; Thu, 11 Dec 2014 19:34:00 +0100 Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAAAAAByaaZbAAAAAmJLR0QA/4ePzL8AAAAJcEhZ cwAAAEgAAABIAEbJaz4AAAEySURBVEjH7ZXRbcMwDETNhW4T7sJJuAtH4Tj31w8jEanIkAoU7U+F AGYUvfDuLMuXfHNcvwwA7w8EmOoZgGUyk0wmM+8LRx3ogHE3vAKI7XpaBQ7WN0lBMtxUVTV4X3up zbSRqfJuhleZo2yx6qufiAhGXcoGIO8A7qHji9b5AjijzMSdhoiIrwEwS2NkFgu2ApxaJmy0A9sv o0Ob9Wohsd2tyPGvfgIoR/TB3D8PJTFkS28NgNXCAWAlGDsBovj0A6CpiAPAiwXkHkAWCyeAsVgA ub1xTfUBoCwWRMmHzVctlxX6PiiegEmDsjVcAM4WyxZAdgng0vV0VKLflIXrASTZ9v8N+CNgH6HE UlM/jKene6XpqgJi3rrdVZcU9XgdLezRA8w+EjHXP3+L/gM/BHwBRqZ1peGC4k8AAAAASUVORK5C YII= User-Agent: Gnus/5.130012 (Ma Gnus v0.12) Emacs/24.4.51 (gnu/linux) X-Provags-ID: V03:K0:wyARtzEbGzcvHnIKwpQBiMeRbualY8no3AttUAwRegOhTm2yA5e csaeohkzUk4FIFooO4FMS5ER6fOCIZp2EC9rP+qcBQBHCnwt3YDVMMNhVmH5PcSk2vHngPx Y83gwKniCstl8IBypk041AcYeJbBnB2T1PjuCgoI4jDPVI/jFXpqIOGF+jWN+RDBxMTWlAy C096mF5uOTB4ETjGnZ2eg== X-UI-Out-Filterresults: notjunk:1; X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 212.227.17.21 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:179814 Archived-At: --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable joaotavora@gmail.com (Jo=C3=A3o T=C3=A1vora) writes: >> This paragraph is not clear and potentially tautologous. > > The opening tautology is necessary to diffentiate it from > `darkroom-tentative-mode'. I wonder what else is not clear, but I have > rewritten it. It's better now. This is how I use it BTW: (autoload 'darkroom-mode "darkroom" nil t) (when (fboundp 'darkroom-mode) (global-set-key [f6] 'darkroom-mode)) (with-eval-after-load 'darkroom (setq darkroom-text-scale-increase 3) (add-hook 'darkroom-mode-hook 'variable-pitch-mode)) This also shows the problem with the hook that I spoke of earlier. If I for some reason have variable-pitch-mode enabled I will get disabled. Of course, I could just make a more sophisticated =CE=BB testing the value of darkroom-mode. So probably just stick with the default hook. Changing theme could be another possibility, though I'm not sure one can load a theme for single buffer... >>> ;;; FIXME: broken when darkroom-text-scale-increase is anything but >>> ;;; 0, since window-width ignores text scaling. Otherwise, a >>> ;;; suitable default to put in `darkroom-margins', I guess. >> >> You can estimate the realized width rolling over some lines and measure. >> Probably there's a more appropriate way of doing it.=20=20 >> >> (save-excursion (- (progn (end-of-visual-line) (point)) >> (progn (beginning-of-visual-line) (point)))) >> >> Note, for understanding this you might get some insights from studying >> `line-move' and `line-move-visual' (I don't know). > > It helped. I dealt with the FIXME with the ultra-horrible > `darkroom--real-window-width'. It fixes `window-width' basically. Seems > to work. The above won't work because I need to know about window > geometry, not line geometry. Unless there's a very big line. And that's > how `darkroom--real-window-width' hacks it. OK. I must have mixed up the intention of this logic. I will recheck this at the moment. Dogfooding you code, I find that the margin adjustment (still?) does not work well on small screens when font-size is increased. And font-size increase is pretty central, IMO. --=-=-= Content-Type: image/png Content-Disposition: attachment; filename="Screenshot from 2014-12-11 18:58:51.png" Content-Transfer-Encoding: base64 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 jBl45JFHanQdIiKi86W0tJTBMxERERFRpMEz+zwTEREREYWIwTMREREREYNnIiIiIiIGz0RERERE DJ6JiIiIiBg8ExERERExeKaL2X9ansF/Wp5hQRARERExeCYiIiIiYvBMRERERMTgmYiIiIiIwTMR EREREYNnIiIiIiIGz0RERERExOCZiIiIiIjBMxERERERg2ciIiIiIgbPREREREQMnomIiIiIGDwT ERERETF4JiIiIiIiBs9ERERERAyeiYiIiIgYPBMRERERMXgmIiIiImLwTERERETE4JmIiIiIiBg8 ExERERExeCYiIiIiYvBMRERERMTgmYiIiIiIwTMREREREYNnIiIiIiIGz0RERERExOCZiIiIiIjB MxERERERg2ciIiIiIgbPREREREQMnomIiIiIGDwTEREREV3i9CyCS9e9eSksBCIiIqIwsOWZiIiI iIjBMxERERERg2ciIiIiIgbPREREREQXMj4wSNVy9OhR7NixA7m5udi4cSO2b9+OvXv3smCoVu3e vRv79u3D77//jp9//hktW7bEvHnzWDA8z3wf/ptbv349pk+fjo0bN0Kn06FDhw6YNm0ahgwZwguG GDzThfNG9dJLL+HXX38FADRt2pSFQrXus88+w5IlS7B//34AwH333cdC4Xnm+/Df3CeffIJJkyZh 4cKFWLx4MebMmYPp06fjjjvuwPr169GrVy9eNBQV7LZxCfvpp5+g0Wgi/rnqqqswbNgwbN26Ffff fz8AICYmJqK0FBUVISsrC61bt0ZeXh5PDlXLjBkzkJOTgzZt2kRUL1kfL43z/HcRrffhi9mePXsw ceJEjBkzBkOHDkWdOnXw7LPPolu3bnA4HDh8+DAvGGLwTNWXn58PAGjVqhWWLFmCI0eOwGQy4ciR I+jSpYtrvbvuugtFRUU4fvw4vv32W1x77bUAgNLSUtc6rVq1AgDo9ZHdzFizZg02btyIP//8E0uW LOHJoWrT6XSuFrhw6+XfvT6aTCYsXLjwkj/PfzfVfR++mM2aNQtmsxm33nqrO8DRavHNN99g5cqV GDp0KN8UKWrYbeMS9ueff6J+/frYsGED0tPTXa83atQIY8eOxeOPPw4AmDBhAlJTUwEA/fv3R79+ /TBw4ECvPnU6nc71ZhWJQYMGISsrC2VlZRgxYgRPDkUtsGJ99JadnY0JEybA4XBg9OjRl/R5/rvW 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 YII= --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable In the screenshot I have Emacs take up half of my screen (1440x900). As you can see, for this setting the margin is way to big. This is using the standard setting. So the heuristic is not very good. You write "If the buffer's paragraphs are mostly filled to `fill-column', margins should center it on the window, otherwise, margins of 0.15 per= cent are used." When you have at least auto-fill, the objective should be something like this I guess (I didn't think carefully about it): (*) Margin* =3D argmin abs{real-line-with - shown-line-width(margin; font= -size)} where ";" reads "given" or "for fixed". Maybe with some weight on margin itself as well for aesthetic reasons (so + =CE=BB f(margin)). In the screenshot the margins are definitely too wide as it hinders a good writing environment contrary to the objective. I guess this is why I talk about the width of virtual lines (which are functions of font-size and actual width). Of course, the easiest way to solve (*) is recursively. I don't know if that works well with the display engine, though. I will go through `darkroom-guess-margins' again later. I havne't got the time right now. >>> top-quartile-avg window-width)) >>> (visual-line-mode 1)) >>> 0.15) >>> ((> top-quartile-avg (* 0.9 fill-column)) >>> (let ((margin (round (/ (- window-width top-quartile-avg) 2)))) >>> (cons margin margin))) >>> (t >>> 0.15))))) >> >> I think you can simplify this and you should not hardcode .15. > > Ideas welcome, I didn't think much about the heuristic, this one worked > ok. I fixed the hardcoding. See discussion above. IMO, this is not working well (but probably *also* *not worse* than other packages with the same objective!). >>> (defun darkroom-compute-margins () >> docstring, please. What's the *idea* of this function. > > It's an internal function (what version of code were you looking > at). It, well, computes margins. This is a big discusison, but while I > very much sympathise with your thoroughness in documentation, docstrings > should explain the "what" carefully avoiding the "how", so you can > change that later. For internal functions, it might be a good idea to > leave them out, rather than risk them getting out of date, or hindering > others from redesigning your code. I know this from experience. Anyway, What is what I call *idea*. It's easier for me to read the current *implementation* when I know what the *purpose/expected outcome* of the function is. We are arguing for the same thing, I think.=20 >>> (defun darkroom-float-to-columns (f) >>> (ceiling (* (let ((edges (window-edges))) >>> (- (nth 2 edges) (nth 0 edges))) >>> f))) >> >> (- (line-end-position) (line-beginning-position)) > > No. Here I'm concerned with the window geometry, not the current line's > geometry. OK, I have to go back and understand why you care about window geometry. I'm clearly missing part of the idea. >>> (let ((map (make-sparse-keymap))) >>> (define-key map (kbd "C-M-+") 'darkroom-increase-margins) >>> (define-key map (kbd "C-M--") 'darkroom-decrease-margins) >>> map)) >> >> Ideally this should be unnecessary. Maybe it should be called after >> changing the font size or whatnot. > > Well, the user might want to tweak it for some reason. But yes, > `darkroom--set-margins' should be called from more hooks. >>> (t >>> (setq mode-line-format darkroom-saved-mode-line-format >>> header-line-format darkroom-saved-header-line-format) >>> (text-scale-decrease darkroom-text-scale-increase) >> >> You need to actually record the size used before the mode is entered. I >> could increase the width after I enter darkroom. > > I started to implement this, then realized, maybe it needn't be so, > because it works by increments. Did you try it? It's a taste question then. Enter darkroom increase font size n times. Leave darkroom. Now the font size is increased by n compared to when I entered darkroom. It could be a feature. Another feature could "be what happens in the dark room stays in the dark room". I will comment more later. =E2=80=94Rasmus PS:=20 >> Some comments follow. I did it quickly (as you may notice), but it still >> took 1=C2=BD South Park episodes. > > Which ones are you watching? The two latest episodes. >> Why the need for hardcoding? > > To make time for southpark. Also it's cold, typing hurts and naming > variables is hard. I've fixed it. It's getting colder, yes, and it's flabbergasting how Iberian[or at least Catalonian(?)] houses do not have heating! > to please my mentor, I added a docstring :-) I find the title uncomfortable as it suggests I'd have greater insights, which is probably (as in =E2=86=92=E2=82=90=E2=82=9B) not the case; rather = it's peer reviewing. =E2=80=94Rasmus --=20 Bang bang --=-=-=--