[CEDET-devel] [PATCH] ghost-displayor's focus-request fix
Brought to you by:
zappo
From: Dan K. <jus...@gm...> - 2008-07-09 00:07:53
|
Hi all. semantic-idle-complition-mode by default uses semantic-displayor-ghost class for displaying completions, but it has a little problem. Assume, that I have a function called "test" and my buffer contains a string "te-!-" (where -!- is cursor). After some time I see its possible completion "st": te-!-st But if I move cursor left, "completion" moves with it: t-!-ste -!-stte Assume, that I have the same string "te" and my cusor is not at the end of this string. For example: -!-te After some time I get its completion exactly *before* completed string: -!-stte If cursor was between "t" and "e", I'll get: "tste". The following patch fixes(I hope :)) this problem: == --- cedet/semantic/semantic-complete.el 2008-07-08 22:20:22.000000000 +0400 +++ ../cedet-cvs-patch/cedet/semantic/semantic-complete.el 2008-07-09 03:52:14.000000000 +0400 @@ -1727,35 +1727,34 @@ (focus (semantic-displayor-focus-tag obj)) (tag (car focus)) (table (cdr focus)) + (comp-text nil) ) (if (not tag) (semantic-completion-message "No tags to focus on.") ;; Display the focus completion as ghost text after the current ;; inline text. + (setq comp-text (semantic-completion-text)) (when (or (not (slot-boundp obj 'ghostoverlay)) (not (semantic-overlay-live-p (oref obj ghostoverlay)))) - (oset obj ghostoverlay - (semantic-make-overlay (point) (1+ (point)) (current-buffer) t))) + (when (/= (point) (cdr (bounds-of-thing-at-point 'word))) + (forward-word)) + (oset obj ghostoverlay + (semantic-make-overlay (point) (1+ (point)) (current-buffer) t))) - (let* ((lp (semantic-completion-text)) - (os (substring (semantic-tag-name tag) (length lp))) + (let* ((ftn (semantic-tag-name tag)) + (os (substring ftn (length comp-text))) (ol (oref obj ghostoverlay)) ) - - (put-text-property 0 (length os) 'face 'region os) - - (semantic-overlay-put - ol 'display (concat os (buffer-substring (point) (1+ (point))))) - ) - ;; Calculate text difference between contents and the focus item. - (let* ((mbc (semantic-completion-text)) - (ftn (concat (semantic-tag-name tag))) - ) - (put-text-property (length mbc) (length ftn) 'face - 'bold ftn) - (semantic-completion-message - (format "%s [%d of %d matches]" ftn (1+ (oref obj focus)) tablelength))) - ))) + (put-text-property 0 (length os) 'face 'region os) + (semantic-overlay-put + ol 'display (concat os (buffer-substring (point) (1+ (point))))) + + ;; Calculate text difference between contents and the focus item. + (put-text-property (length comp-text) (length ftn) 'face + 'bold ftn) + (semantic-completion-message + (format "%s [%d of %d matches]" ftn (1+ (oref obj focus)) tablelength)) + )))) ;;; ------------------------------------------------------------ == -- W.B.R. Dan. |