all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* bug#19650: 25.0.50; python-shell-font-lock-post-command-hook breaks hippie-expand
@ 2015-01-21 22:47 Carlos Pita
  2015-01-22 16:42 ` bug#19650: Carlos Pita
                   ` (4 more replies)
  0 siblings, 5 replies; 7+ messages in thread
From: Carlos Pita @ 2015-01-21 22:47 UTC (permalink / raw)
  To: 19650; +Cc: Fabian Ezequiel Gallina

hippie-expand sucessive completions depends on the marker
he-string-end having the same value the previous hippie-expand
invocation left it. But the delete-region call in
python-shell-font-lock-post-command-hook changes the value of that
marker after each hippie-expand invocation, so hippie-expand gets
stucked at the first candidate for ever.





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

* bug#19650:
  2015-01-21 22:47 bug#19650: 25.0.50; python-shell-font-lock-post-command-hook breaks hippie-expand Carlos Pita
@ 2015-01-22 16:42 ` Carlos Pita
       [not found]   ` <jwvpp8eujc3.fsf-monnier+emacsbugs@gnu.org>
  2015-02-02 19:29 ` bug#19650: Carlos Pita
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 7+ messages in thread
From: Carlos Pita @ 2015-01-22 16:42 UTC (permalink / raw)
  To: 19650; +Cc: Fabian Ezequiel Gallina

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

I've been doing my homework:

1) Changing insert for insert-before-markers is problematic because it
somehow wreaks havoc with font locking. I guess some other markers are
being moved around besides he-string-end, maybe the one pointing to
the end of the prompt or something like that (since everything gets
colored the same the prompt is). Moreover, the he-string-beg marker
would still point to the wrong place no matter what its type were.

2) This will work for the end marker: (set-marker-insertion-type
he-string-end t), but it's too invasive regarding hippie-expand. Also,
it assumes the user is indeed using hippie-expand. But maybe changing
the insertion type of he-string-end just around the
delete-region/insert and just in case hippie-expand is currently
provided will do the dirty job. Again, this doesn't fix the
he-string-beg marker at all.

3) Same as (2) above, but saving/restoring the *positions*  of both
he-string-beg and he-string-end. This is the best solution I could
figure out till now. Take a look at the attached patch, please.

What do you think?

[-- Attachment #2: py.diff --]
[-- Type: text/plain, Size: 2459 bytes --]

--- py1.el	2015-01-22 13:34:02.863974265 -0300
+++ py2.el	2015-01-22 13:34:18.143826873 -0300
@@ -16,21 +16,28 @@
             (buffer-undo-list t))
         ;; When input hasn't changed, do nothing.
         (when (not (string= input old-input))
-          (delete-region (cdr (python-util-comint-last-prompt)) (point-max))
-          (insert
-           (python-shell-font-lock-with-font-lock-buffer
-             (delete-region (line-beginning-position)
-                            (line-end-position))
-             (insert input)
-             ;; Ensure buffer is fontified, keeping it
-             ;; compatible with Emacs < 24.4.
-             (if (fboundp 'font-lock-ensure)
-                 (funcall 'font-lock-ensure)
-               (font-lock-default-fontify-buffer))
-             ;; Replace FACE text properties with FONT-LOCK-FACE so
-             ;; they are not overwritten by comint buffer's font lock.
-             (python-util-text-properties-replace-name
-              'face 'font-lock-face)
-             (buffer-substring (line-beginning-position)
-                               (line-end-position))))
-          (goto-char current-point))))))
+          (let ((beg) (end))
+            (when (featurep 'hippie-exp)
+              (setq beg (marker-position he-string-beg)
+                    end (marker-position he-string-end)))
+            (delete-region (cdr (python-util-comint-last-prompt)) (point-max))
+            (insert
+             (python-shell-font-lock-with-font-lock-buffer
+               (delete-region (line-beginning-position)
+                              (line-end-position))
+               (insert input)
+               ;; Ensure buffer is fontified, keeping it
+               ;; compatible with Emacs < 24.4.
+               (if (fboundp 'font-lock-ensure)
+                   (funcall 'font-lock-ensure)
+                 (font-lock-default-fontify-buffer))
+               ;; Replace FACE text properties with FONT-LOCK-FACE so
+               ;; they are not overwritten by comint buffer's font lock.
+               (python-util-text-properties-replace-name
+                'face 'font-lock-face)
+               (buffer-substring (line-beginning-position)
+                                 (line-end-position))))
+            (when (featurep 'hippie-exp)
+              (set-marker he-string-beg beg)
+              (set-marker he-string-end end))
+            (goto-char current-point)))))))

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

* bug#19650:
  2015-01-21 22:47 bug#19650: 25.0.50; python-shell-font-lock-post-command-hook breaks hippie-expand Carlos Pita
  2015-01-22 16:42 ` bug#19650: Carlos Pita
@ 2015-02-02 19:29 ` Carlos Pita
  2015-02-08  3:28 ` bug#19650: 25.0.50; python-shell-font-lock-post-command-hook breaks hippie-expand Fabián Ezequiel Gallina
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: Carlos Pita @ 2015-02-02 19:29 UTC (permalink / raw)
  To: 19650; +Cc: Fabian Ezequiel Gallina

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

Patch updated against current master (954ca0f017f62f52ee679f2aa68effb20c917278).

[-- Attachment #2: hippie.patch --]
[-- Type: text/x-patch, Size: 3050 bytes --]

From ff40570650c060b91c3939c80b5172ac4b01be82 Mon Sep 17 00:00:00 2001
From: memeplex <carlosjosepita@gmail.com>
Date: Thu, 22 Jan 2015 17:18:34 -0300
Subject: [PATCH] python.el: fix
 http://debbugs.gnu.org/cgi/bugreport.cgi?bug=19650

---
 .emacs.d/lisp/python.el | 43 +++++++++++++++++++++++++------------------
 1 file changed, 25 insertions(+), 18 deletions(-)

diff --git a/.emacs.d/lisp/python.el b/.emacs.d/lisp/python.el
index d340550..2963706 100644
--- a/.emacs.d/lisp/python.el
+++ b/.emacs.d/lisp/python.el
@@ -2364,24 +2364,31 @@ goes wrong and syntax highlighting in the shell gets messed up."
             (buffer-undo-list t))
         ;; When input hasn't changed, do nothing.
         (when (not (string= input old-input))
-          (delete-region (cdr (python-util-comint-last-prompt)) (point-max))
-          (insert
-           (python-shell-font-lock-with-font-lock-buffer
-             (delete-region (line-beginning-position)
-                            (line-end-position))
-             (insert input)
-             ;; Ensure buffer is fontified, keeping it
-             ;; compatible with Emacs < 24.4.
-             (if (fboundp 'font-lock-ensure)
-                 (funcall 'font-lock-ensure)
-               (font-lock-default-fontify-buffer))
-             ;; Replace FACE text properties with FONT-LOCK-FACE so
-             ;; they are not overwritten by comint buffer's font lock.
-             (python-util-text-properties-replace-name
-              'face 'font-lock-face)
-             (buffer-substring (line-beginning-position)
-                               (line-end-position))))
-          (goto-char current-point))))))
+          (let ((beg) (end))
+            (when (featurep 'hippie-exp)
+              (setq beg (marker-position he-string-beg)
+                    end (marker-position he-string-end)))
+            (delete-region (cdr (python-util-comint-last-prompt)) (point-max))
+            (insert
+             (python-shell-font-lock-with-font-lock-buffer
+               (delete-region (line-beginning-position)
+                              (line-end-position))
+               (insert input)
+               ;; Ensure buffer is fontified, keeping it
+               ;; compatible with Emacs < 24.4.
+               (if (fboundp 'font-lock-ensure)
+                   (funcall 'font-lock-ensure)
+                 (font-lock-default-fontify-buffer))
+               ;; Replace FACE text properties with FONT-LOCK-FACE so
+               ;; they are not overwritten by comint buffer's font lock.
+               (python-util-text-properties-replace-name
+                'face 'font-lock-face)
+               (buffer-substring (line-beginning-position)
+                                 (line-end-position))))
+            (when (featurep 'hippie-exp)
+              (set-marker he-string-beg beg)
+              (set-marker he-string-end end))
+            (goto-char current-point)))))))
 
 (defun python-shell-font-lock-turn-on (&optional msg)
   "Turn on shell font-lock.
-- 
2.2.1


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

* bug#19650: 25.0.50; python-shell-font-lock-post-command-hook breaks hippie-expand
  2015-01-21 22:47 bug#19650: 25.0.50; python-shell-font-lock-post-command-hook breaks hippie-expand Carlos Pita
  2015-01-22 16:42 ` bug#19650: Carlos Pita
  2015-02-02 19:29 ` bug#19650: Carlos Pita
@ 2015-02-08  3:28 ` Fabián Ezequiel Gallina
       [not found] ` <handler.19650.D19650.142336612525392.notifdone@debbugs.gnu.org>
  2015-02-10  2:45 ` bug#19650: 25.0.50; python-shell-font-lock-post-command-hook breaks hippie-expand Fabián Ezequiel Gallina
  4 siblings, 0 replies; 7+ messages in thread
From: Fabián Ezequiel Gallina @ 2015-02-08  3:28 UTC (permalink / raw)
  To: 19650-done


Fixed at revno 52df70a in the master branch.

The approach used here is different than the patch provided as
`insert-before-markers` did the trick.  Thanks for such detailed
explanation of the problem.


Cheers,
Fabián.





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

* bug#19650: closed (25.0.50; python-shell-font-lock-post-command-hook breaks hippie-expand)
       [not found] ` <handler.19650.D19650.142336612525392.notifdone@debbugs.gnu.org>
@ 2015-02-09 14:12   ` Carlos Pita
  0 siblings, 0 replies; 7+ messages in thread
From: Carlos Pita @ 2015-02-09 14:12 UTC (permalink / raw)
  To: 19650

> The approach used here is different than the patch provided as
> `insert-before-markers` did the trick.  Thanks for such detailed
> explanation of the problem.

Fabián, this approach shares a problem with my first
set-marker-insertion-type attempt in that it won't preserve
he-string-beg.

The problem manifests itself when you try something like:

> blah blah blah p<hippie-expand here>

It results in:

> p<hippie-expand completion here>

So the previous part of the line gets lost.

I don't think it's possible to fix that by just setting the marker or
insert operation types.





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

* bug#19650: 25.0.50; python-shell-font-lock-post-command-hook breaks hippie-expand
  2015-01-21 22:47 bug#19650: 25.0.50; python-shell-font-lock-post-command-hook breaks hippie-expand Carlos Pita
                   ` (3 preceding siblings ...)
       [not found] ` <handler.19650.D19650.142336612525392.notifdone@debbugs.gnu.org>
@ 2015-02-10  2:45 ` Fabián Ezequiel Gallina
  4 siblings, 0 replies; 7+ messages in thread
From: Fabián Ezequiel Gallina @ 2015-02-10  2:45 UTC (permalink / raw)
  To: 19650-done


Alternate approach installed at revno 859e865 in the master branch.


Thanks,
Fabián.





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

* bug#19650:
       [not found]   ` <jwvpp8eujc3.fsf-monnier+emacsbugs@gnu.org>
@ 2015-03-13  1:19     ` Stefan Monnier
  0 siblings, 0 replies; 7+ messages in thread
From: Stefan Monnier @ 2015-03-13  1:19 UTC (permalink / raw)
  To: Carlos Pita; +Cc: 19650, Fabian Ezequiel Gallina

> 1) Changing insert for insert-before-markers is problematic because it
> somehow wreaks havoc with font locking. I guess some other markers are
> being moved around besides he-string-end, maybe the one pointing to
> the end of the prompt or something like that (since everything gets
> colored the same the prompt is). Moreover, the he-string-beg marker
> would still point to the wrong place no matter what its type were.

Indeed, the issue is not "insert-before" vs "insert-after" but that we
delete+insert the exact same text, so the markers should simply not
move, but Emacs can't know that.

Basically, the delete+insert only changes the text's properties, so "the
right way" to fix this is to not delete and not insert, but instead to
take the result string, extract its text-properties and apply them
carefully to the corresponding of the buffer, so as not to affect
any marker.

Another "right way" is to do the font-locking "in situ" instead of doing
it in a side buffer.  This would be good, but IIUC it's not as
straightforward as it sounds.

> 3) Same as (2) above, but saving/restoring the *positions*  of both
> he-string-beg and he-string-end. This is the best solution I could
> figure out till now. Take a look at the attached patch, please.
> What do you think?

I think it's hideous, but maybe it's OK as a temporary workaround.
I'll let Fabian decide if he wants it in his code.  But if he accepts
it, the code should have some extra comments explaining what's going on.


        Stefan





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

end of thread, other threads:[~2015-03-13  1:19 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-01-21 22:47 bug#19650: 25.0.50; python-shell-font-lock-post-command-hook breaks hippie-expand Carlos Pita
2015-01-22 16:42 ` bug#19650: Carlos Pita
     [not found]   ` <jwvpp8eujc3.fsf-monnier+emacsbugs@gnu.org>
2015-03-13  1:19     ` bug#19650: Stefan Monnier
2015-02-02 19:29 ` bug#19650: Carlos Pita
2015-02-08  3:28 ` bug#19650: 25.0.50; python-shell-font-lock-post-command-hook breaks hippie-expand Fabián Ezequiel Gallina
     [not found] ` <handler.19650.D19650.142336612525392.notifdone@debbugs.gnu.org>
2015-02-09 14:12   ` bug#19650: closed (25.0.50; python-shell-font-lock-post-command-hook breaks hippie-expand) Carlos Pita
2015-02-10  2:45 ` bug#19650: 25.0.50; python-shell-font-lock-post-command-hook breaks hippie-expand Fabián Ezequiel Gallina

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.