From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tim Cross Subject: Re: Disable typo-mode in org source code blocks Date: Tue, 03 Sep 2019 10:13:31 +1000 Message-ID: <87blw2i6dw.fsf@gmail.com> References: <87mufni3li.fsf@pc-117-162.i-did-not-set--mail-host-address--so-tickle-me> <87r24z6s7z.fsf@ucl.ac.uk> <87d0gjhz9l.fsf@gmail.com> <87tv9uhosu.fsf@pc-117-162.i-did-not-set--mail-host-address--so-tickle-me> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Return-path: Received: from eggs.gnu.org ([2001:470:142:3::10]:60041) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i4wS5-0006QT-Uk for emacs-orgmode@gnu.org; Mon, 02 Sep 2019 20:13:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i4wS4-0000Ah-A7 for emacs-orgmode@gnu.org; Mon, 02 Sep 2019 20:13:41 -0400 Received: from mail-pg1-x543.google.com ([2607:f8b0:4864:20::543]:45285) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1i4wS4-0000A5-4D for emacs-orgmode@gnu.org; Mon, 02 Sep 2019 20:13:40 -0400 Received: by mail-pg1-x543.google.com with SMTP id 4so4556908pgm.12 for ; Mon, 02 Sep 2019 17:13:39 -0700 (PDT) In-reply-to: List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" To: John Kitchin Cc: garjola@garjola.net, org-mode-email Hi John, this is a greet bit of info. My first thought when the question was asked was "Hmm, what you need is some sort of facility that could run a function when the cursor moves in and out of a region". I then discounted the idea because of the amount of supporting functionality which would need to be developed. The pointer to cursor-sensor sounds like exactly the supporting functionality I was thinking of. Should have guessed Emacs would have something already! Using org's font-lock mechanism as the 'trigger' is a great idea too. I can see some great uses for this package as I have some pretty ugly hacks which could be simplified if cursor-sensor works reliably. thanks for the pointer. Tim John Kitchin writes: > You can use cursor-sensor mode for this if you have emacs 26ish. The idea > is you set cursor-sensor functions on a region that do something depending > on whether you enter or leave the region. Below, I tie into the org font > lock mechanisms to add these properties so that when you enter, typo mode > gets turned off, and when you leave it gets turned back on. I use a simil= ar > approach to put src-block specific key maps on src blocks. There are two > examples of functions that are "lightly tested". I can see why you would > want this disabled in src blocks, it never puts the right quote in! > > (defvar scimax-src-block-cursor-sensor-functions '() > "List of functions to run in cursor-sensor mode. .") > > > (defun scimax-add-cursor-sensor-functions-to-src-blocks (limit) > "Function used in font-lock to add cursor-sensor functions." > (let ((case-fold-search t)) > (while (re-search-forward org-babel-src-block-regexp limit t) > (let* ((beg (match-beginning 0)) > (end (match-end 0)) > (cursor-functions (or > (get-text-property beg 'cursor-sensor-functions) > `()))) > (cl-loop for func in scimax-src-block-cursor-sensor-functions do > (when (not (memq func cursor-functions)) > (pushnew func cursor-functions))) > (add-text-properties > beg end `(cursor-sensor-functions ,cursor-functions)))))) > > > (define-minor-mode scimax-cursor-sensor-mode > "Minor mode to turn on cursor-sensor-mode for org src-blocks." > :init-value nil > (if scimax-cursor-sensor-mode > (progn > (add-hook 'org-font-lock-hook > #'scimax-add-cursor-sensor-functions-to-src-blocks t) > (add-to-list 'font-lock-extra-managed-props 'cursor-sensor-functions) > (cursor-sensor-mode +1)) > (remove-hook 'org-font-lock-hook > #'scimax-add-cursor-sensor-functions-to-src-blocks) > > (cursor-sensor-mode -1)) > (font-lock-fontify-buffer)) > > (defun scimax-cs-message-1 (win prev-pos sym) > (message "%s %s %s" > win > prev-pos > sym)) > > (defun scimax-src-toggle-typo-mode (win prev-pos sym) > (if (eq sym 'entered) > (typo-mode -1) > (typo-mode +1))) > > > (add-to-list 'scimax-src-block-cursor-sensor-functions > 'scimax-cs-message-1) > > (add-to-list 'scimax-src-block-cursor-sensor-functions > 'scimax-src-toggle-typo-mode) > > > > > John > > ----------------------------------- > Professor John Kitchin > Doherty Hall A207F > Department of Chemical Engineering > Carnegie Mellon University > Pittsburgh, PA 15213 > 412-268-7803 > @johnkitchin > http://kitchingroup.cheme.cmu.edu > > > > On Mon, Sep 2, 2019 at 8:21 AM wrote: > >> On Mon 02-Sep-2019 at 10:35:02 +02, Tim Cross >> wrote: >> > I think Eric is correct. There is also another reason. If you edit the >> > source blocks with C-', then any escaping needed (such as putting a ',' >> > before '*') will also be automatically handled, plus of course you get >> > all the programing mode goodness. >> > >> > Fraga, Eric writes: >> > >> >> On Monday, 2 Sep 2019 at 09:01, garjola@garjola.net wrote: >> >>> I am using typo-mode (https://github.com/jorgenschaefer/typoel) in my >> >>> org buffers (actually with a hook for text-mode), but I would like to >> >>> disable it in source code blocks. >> >>> >> >>> I have been unable to find a hook to do so (I understand that >> >>> org-src-mode-hook is used when editing with =E2=80=98C-c '=E2=80=99 = but not in the org >> >>> buffer). >> >> >> >> I am not entirely sure what you want here. If it is that you want to >> >> turn off typo-mode when point moves into a src block but while still = in >> >> the whole org buffer, then you cannot do this AFAIK. The best approa= ch >> >> is to always edit src blocks using C-c ' (org-edit-special) and then = you >> >> can use org-src-mode-hook to do what you want. >> >> Thanks to both of you. I usually edit in the separate buffer, but I >> don=E2=80=99t for one liners. It=E2=80=99s a pity that this is not possi= ble, but I can >> live with that! >> >> Thanks again! >> -- >> >> -- Tim Cross