Hi,

Sorry about the delay, I had a busy few weeks. Here's the diff for
matlab.el, I also included one for company-matlab-shell.el which enables
predictions while editing the middle of a line.

Best,
Nate

On Tue, Oct 3, 2017 at 3:24 PM Eric Ludlam <eric.lud...@mathworks.com>
wrote:

> Ah, this is a good reminder I need to poke the source forge site to point
> at the new github location that Uwe is using.
>
>
>
> Start with the mailing list.  I’m not sure what process would work best
> for Uwe.
>
>
>
> Eric
>
>
>
> *From:* Nathaniel Chodosh [mailto:nchod...@andrew.cmu.edu]
>
> *Sent:* Tuesday, October 03, 2017 1:18 PM
>
>
> *To:* Eric Ludlam <eric.lud...@mathworks.com>;
> matlab-emacs-discuss@lists.sourceforge.net
> *Subject:* Re: [Matlab-emacs-discuss] Removing extra lines from
> collect-command-output
>
>
>
> Great. I've never contributed to a sourceforge project, should I post the
> diff under patches?
>
>
>
> On Tue, Oct 3, 2017 at 12:59 PM Eric Ludlam <eric.lud...@mathworks.com>
> wrote:
>
> Sounds reasonable to me.
>
>
>
> When you are happy with your changes, post a diff and hopefully Uwe can
> install it.
>
>
>
> Thanks
>
> Eric
>
>
>
> *From:* Nathaniel Chodosh [mailto:nchod...@andrew.cmu.edu]
>
> *Sent:* Tuesday, October 03, 2017 12:26 PM
> *To:* Eric Ludlam <eric.lud...@mathworks.com>;
> matlab-emacs-discuss@lists.sourceforge.net
> *Subject:* Re: [Matlab-emacs-discuss] Removing extra lines from
> collect-command-output
>
>
>
> That's what I thought the purpose of the newline is, but the documentation
> for comint-simple-send states that it automatically appends a newline to
> the command, so it's not needed.
>
> As an aside I think that in the current version of emacs the while loop in
> the same function needs to be wrapped in a with-local-quit to avoid raising
> an error (or at least the accept-process-output call does).
>
> Best,
>
> Nate
>
>
>
> On Mon, Oct 2, 2017 at 4:14 PM Eric Ludlam <eric.lud...@mathworks.com>
> wrote:
>
> I wrote that a long time ago, but my vague recollection is that the
> newline was needed to make the subprocess execute the command.  Is it
> adding a 2nd newline to the end of ‘command’ resulting in the spare line?
>
>
>
> Eric
>
>
>
> *From:* Nathaniel Chodosh [mailto:nchod...@andrew.cmu.edu]
> *Sent:* Monday, October 02, 2017 1:27 PM
> *To:* matlab-emacs-discuss@lists.sourceforge.net
> *Subject:* [Matlab-emacs-discuss] Removing extra lines from
> collect-command-output
>
>
>
> Hello,
>
> I've noticed that calling 'matlab-shell-collect-command-output' can result
> in extra new lines being sent to the *MATLAB* buffer which aren't deleted.
> When using company-mode to complete text this behavior is pretty annoying
> since as I'm typing lines are being inserted above the prompt. I believe
> that the cause of this is the line:
> (comint-simple-send (get-buffer-process (current-buffer))
>
>               (concat command "\n"))
>
> The newline added to the end of the command causes an extra line to be
> printed since it's interpreted as execute 'command' and then send a
> newline. Removing the newline fixes the problem.
>
> This seems like a suspiciously simple fix so I'm wondering why the newline
> was being appended to the command.
>
> Thanks,
>
> Nate
>
> P.S I am new to using mailing lists so if I've committed any faux pas in
> this email please let me know
>
>
74c74
< 	    (apply 'start-itimer
---
> :	    (apply 'start-itimer
5415c5415
< 			  (concat command "\n"))
---
> 			  command)
5418,5423c5418,5422
<       (while (or (>= (+ pos (string-width command)) (point)) (not (matlab-on-empty-prompt-p)))
< 	(accept-process-output (get-buffer-process (current-buffer)))
< 	(goto-char (point-max))
< 	;;(message "MATLAB reading...")
< 	)
<       ;;(message "MATLAB reading...done")
---
>       (with-local-quit
>        (while (or (>= (+ pos (string-width command)) (point))
> 		  (not (matlab-on-empty-prompt-p)))
> 	 (accept-process-output (get-buffer-process (current-buffer)))
> 	 (goto-char (point-max))))
27,47c27
<    (goto-char (point-max))
<    (let ((inhibit-field-text-motion t))
<      (beginning-of-line))
<    (re-search-forward comint-prompt-regexp)
<    (let* ((lastcmd (buffer-substring (point) (matlab-point-at-eol)))
< 	  (tempcmd lastcmd)
< 	  (completions nil)
< 	  (limitpos nil))
<      ;; search for character which limits completion, and limit command to it
<      (setq limitpos
< 	   (if (string-match ".*\\([( /[,;=']\\)" lastcmd)
< 	       (1+ (match-beginning 1))
< 	     0))
<      (setq lastcmd (substring lastcmd limitpos))
<      ;; Whack the old command so we can insert it back later.
<      (delete-region (+ (point) limitpos) (matlab-point-at-eol))
<      ;; double every single quote
<      (while (string-match "[^']\\('\\)\\($\\|[^']\\)" tempcmd)
<        (setq tempcmd (replace-match "''" t t tempcmd 1)))
<      ;; collect the list
<      (setq completions (matlab-shell-completion-list tempcmd))
---
>    (let ((orig-point (point)))
49,50c29,52
<      (insert lastcmd)
<      completions))
---
>      (let ((inhibit-field-text-motion t))
>        (beginning-of-line))
>      (re-search-forward comint-prompt-regexp)
>      
>      (let* ((lastcmd (buffer-substring-no-properties (point) orig-point))
> 	    (eol-offset (if (> orig-point (point))
> 			    (- orig-point (point-max))
> 			  0))
> 	    (tempcmd lastcmd)
> 	    (completions nil)
> 	    (limitpos nil))
>        ;; search for character which limits completion, and limit command to it
>        (setq limitpos
> 	     (if (string-match ".*\\([( /[,;=']\\)" lastcmd)
> 		 (1+ (match-beginning 1))
> 	       0))
>        (setq lastcmd (substring lastcmd limitpos))
>        ;; double every single quote
>        (while (string-match "[^']\\('\\)\\($\\|[^']\\)" tempcmd)
> 	 (setq tempcmd (replace-match "\"" t t tempcmd 1)))
>        ;; collect the list
>        (setq completions (matlab-shell-completion-list tempcmd))
>        (goto-char (+ (point-max) eol-offset))
>        completions)))
55,65c57,69
<       (goto-char (point-max))
<       (let ((inhibit-field-text-motion t))
< 	(beginning-of-line))
<       (re-search-forward comint-prompt-regexp)
<       (let* ((lastcmd (buffer-substring (point) (matlab-point-at-eol)))
< 	     limitpos)
< 	(setq limitpos
< 	      (if (string-match ".*\\([( /[,;=']\\)" lastcmd)
< 		  (1+ (match-beginning 1))
< 		0))
< 	(substring-no-properties lastcmd limitpos)))))
---
>       (let ((orig-point (point))) 
> 	(goto-char (point-max))
> 	(let ((inhibit-field-text-motion t))
> 	  (beginning-of-line))
> 	(re-search-forward comint-prompt-regexp)
> 	(when (>= orig-point (point))
> 	 (let* ((lastcmd (buffer-substring (point) orig-point))
> 		limitpos)
> 	   (setq limitpos
> 		 (if (string-match ".*\\([( /[,;=']\\)" lastcmd)
> 		     (1+ (match-beginning 1))
> 		   0))
> 	   (substring-no-properties lastcmd limitpos)))))))
70a75
> 
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Matlab-emacs-discuss mailing list
Matlab-emacs-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matlab-emacs-discuss

Reply via email to