Hi Jonathan and Eric,

Jon, to get help on the function at point you can do something like this:

(defun matlab-shell-help-at-point ()
  (interactive)
  (let ((fcn (matlab-read-word-at-point)))
    (if (and fcn (not (equal fcn "")))
        (matlab-shell-describe-command fcn))))
(define-key matlab-mode-map (kbd "C-h .") #'matlab-shell-help-at-point)

Matlab-mode works with company out of the box for me. Can you describe the 
error(s) you are getting?

For jump-to-function you have two options (three including Eric's suggestion):

1. Install dumb-jump from MELPA. Then hitting 'M-.' on a function name should 
take you to the definition. Note that this only works for functions that are 
defined in m files in the same directory or project.

2. Patch matlab-shell.el with the attached patch, then put

(add-hook 'xref-backend-functions #'matlab-shell-xref-activate)

In your init file somewhere. This should enable xref support for Matlab shell. 
This should work for all functions that MATLAB shell knows about, including 
built-in ones. 

Eric, I'm working on better completion in matlab-mode buffers using 
matlab-shell with your patch as a starting point. I should have something 
decent in a few days. Could you take a look at the xref integration? I tested 
it on matlab built-ins, user functions and variables, and tried to make sure it 
failed gracefully when it couldn't find a definition. More testing is probably 
required.

Thanks,
Karthik

diff -u /home/karthik/.local/share/git/matlab-emacs-src/matlab-shell.el /home/karthik/.local/share/git/matlab-emacs-src/matlab-shell-new.el
--- /home/karthik/.local/share/git/matlab-emacs-src/matlab-shell.el	2020-11-28 23:04:08.875674271 -0800
+++ /home/karthik/.local/share/git/matlab-emacs-src/matlab-shell-new.el	2020-11-28 23:44:32.755934812 -0800
@@ -1536,6 +1536,33 @@
 	      (substring output 0 (match-beginning 0)))))))
 
 
+;;; MATLAB Shell integration with xref ========================================
+(when (featurep 'xref)
+  (cl-defmethod xref-backend-identifier-at-point ((_backend (eql matlab-shell)))
+    (let ((ident (matlab-read-word-at-point)))
+      (and (not (equal ident "")) ident)))
+
+  (cl-defmethod xref-backend-definitions ((_backend (eql matlab-shell)) prompt)
+    (let* ((file-and-flag (matlab-shell-which-fcn prompt))
+           (built-in-p (cdr file-and-flag))
+           (file (if built-in-p
+                     (replace-regexp-in-string "/@[^/]+" "" (car file-and-flag))
+                   (car file-and-flag))))
+      (message file)
+      (if (file-exists-p file)
+        (list (xref-make prompt
+                         (xref-make-file-location
+                          file
+                          1 0))))))
+
+  (cl-defmethod xref-backend-apropos ((_backend (eql matlab-shell)) pattern)
+    (xref-backend-definitions 'matlab-shell pattern))
+
+  (defun matlab-shell-xref-activate ()
+    "Function to activate xref backend.
+Add this function to `xref-backend-functions' for matlab shell to use xref to find function and variable definitions."
+    (and (matlab-shell-buffer-barf-not-running)
+         'matlab-shell)))
 
 ;;; MATLAB Shell Commands =====================================================
 ;;

Diff finished.  Sat Nov 28 23:44:47 2020
.    

Eric Ludlam <ericlud...@gmail.com> writes:

> Hi,
>
> The existing matlab completion stuff should work with company .. or at 
> least there is code in there referencing company completion engine.  I 
> was never a fan so I don't use that particular package.
>
> In the MATLAB menu, you will find a "Locate MATLAB function" option 
> which is similar to jump-to functionality like etags.
>
> Newer emacsen now how 'xref' as a bit of infrastructure and keybinding 
> but matlab mode doesn't plug into it yet.  In theory matlab mode could 
> hook matlab-shell-locate-fcn into xref but I haven't researched how to 
> do that yet.
>
> Eric
>
> On 11/27/20 12:44 AM, Jonathan Sahar wrote:
>> Hi Eric,
>>
>> Thanks so much for taking the time to test it!
>> It's not unique to that sturct.
>> Is there anything that I need/can configure on terms of the completion 
>> engine? I'm using company for most other things, maybe there's some 
>> conflict, or some missing configuration?
>>
>> Thank you for the patch! I'll try it out, and I'll using Matlab mode 
>> from the git source as well.
>>
>> Do you have a pointers for setting up jump-to-function functionally?
>>
>> Thanks again for all the help and information, it's really appreciated.
>>
>> Jonathan
>>
>> On Thu, 26 Nov 2020, 19:01 Eric Ludlam, <ericlud...@gmail.com 
>> <mailto:ericlud...@gmail.com>> wrote:
>>
>>     Hi Jonathan,
>>
>>     I happened to have MATLAB 18a installed and was able to test using
>>     matlab.el, and matlab-shell.el from git, but could not replicate a
>>     completion problem.  Sorry. Is it special to the "EEG" data
>>     structure,
>>     or does this occur everywhere?
>>
>>     You had some other questions too.
>>
>>     Matlab mode does support CEDET, but you do not need to use CEDET in
>>     order to use matlab mode.  MATLAB mode without support packages
>>     supports
>>     a  bunch of different completion features, but most are pretty
>>     simple.
>>     If you enable CEDET with the data base and have matlab-shell
>>     running, it
>>     will try to use the shell to find files on your path, but it
>>     doesn't use
>>     the shell for completions.  That code is pretty old and I don't think
>>     those bits were every plugged together.
>>
>>     I did a little hacking and put together the attached patch that
>>     enables
>>     completion via MATLAB shell in MATLAB buffers.  It is rather
>>     primitive
>>     as it only does global symbols and knows nothing about the local
>>     context, but perhaps it can serve as inspiration for putting
>>     something
>>     more complete together.
>>
>>     Lastly, in a MATLAB buffer, you can type:
>>
>>     M-x matlab-shell-describe-command RET
>>
>>     on a symbol and it should do vaguely what you were asking for below.
>>
>>     Eric
>>
>>     On 11/25/20 11:41 AM, Jonathan Sahar wrote:
>>     > Hi Eric, thanks for your reply!
>>     >
>>     > I'm running version  '9.4.0.949201 (R2018a) Update 6'.
>>     > I've installed matlab-mode through Doom emacs' (package! ...)
>>     > directive, but I've looked at the changelog locally and on
>>     > sourceforge, and the latest commit is the same one...
>>     >
>>     > Best,
>>     > Jonathan
>>     >
>>     >
>>     >
>>     >
>>     > On Wed, 25 Nov 2020 at 18:03, Eric Ludlam <ericlud...@gmail.com
>>     <mailto:ericlud...@gmail.com>
>>     > <mailto:ericlud...@gmail.com <mailto:ericlud...@gmail.com>>> wrote:
>>     >
>>     >     Hi Jonathan,
>>     >
>>     >     As new version of MATLAB come out, the text that comes out for
>>     >     errors,
>>     >     completions, and all sorts of things change which can break
>>     the shell.
>>     >
>>     >     What version of MATLAB are you using, and which version of
>>     the matlab
>>     >     mode code are you using?
>>     >
>>     >     We made a bunch of updates last winter to ML shell which you
>>     can get
>>     >     from the git repository:
>>     >
>>     > https://sourceforge.net/p/matlab-emacs/src/ci/master/tree/
>>     >
>>     >     There are also a few extra fixes on the 'usage1' branch
>>     which haven't
>>     >     been merged into the main branch yet.
>>     >
>>     >     That all said, I don't recall big changes needed for completion
>>     >     lately. :(
>>     >
>>     >     Eric
>>     >
>>     >
>>     >     On 11/18/20 10:03 AM, Jonathan Sahar wrote:
>>     >     >
>>     >     > I've been working with matlab-mode and matlab-shell for
>>     the last
>>     >     few
>>     >     > days, and I'm really digging it so far. The only two
>>     things I can't
>>     >     > get to work properly are completion - neither in shell,
>>     nor in .m
>>     >     > files - and jumping to function definitions, and I would
>>     really
>>     >     > appreciate some help with these. when I hit TAB in shell,
>>     my text
>>     >     > turns into
>>     >     >
>>     >     > |>> emacsdocomplete('EEG.(cond') |
>>     >     >
>>     >     > and when I hit RETURN I get (the appropriate):
>>     >     >
>>     >     > |emacs_completions_output = java.lang.String[]: 'cond'
>>     'condeig' |
>>     >     >
>>     >     > but it's not integrated into the shell properly, i.e. I can't
>>     >     choose
>>     >     > which of the above I want, I have to re-type the command
>>     along with
>>     >     > the chosen completion. In .m files I just get nothing
>>     except for
>>     >     the
>>     >     > word completion for words already in the buffer - which I've
>>     >     > configured myself.
>>     >     >
>>     >     > I've read somewhere that the completion is meant to be
>>     related to
>>     >     > CEDET somehow but I couldn't make out much more (I'm
>>     working on
>>     >     Doom
>>     >     > Emacs, and I seen to have CEDET installed, and can run
>>     >     > matlab-cedet-setup, which does nothing as far as I can tell).
>>     >     >
>>     >     > As to function definitions - I don't even know where to
>>     start..
>>     >     I've
>>     >     > read that ctags now supports matlab, but I don't know
>>     where (if)
>>     >     the
>>     >     > actual .m files for the built-in functions reside in the
>>     install
>>     >     dir.
>>     >     >
>>     >     > Ideally I'd love to be able to stand on a function name and be
>>     >     able to
>>     >     > get the "help funcName" output in another buffer or
>>     something (this
>>     >     > works from the shell).
>>     >     >
>>     >     > Thanks a lot!
>>     >     >
>>     >
>>
>
>
>
> _______________________________________________
> Matlab-emacs-discuss mailing list
> Matlab-emacs-discuss@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/matlab-emacs-discuss
_______________________________________________
Matlab-emacs-discuss mailing list
Matlab-emacs-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matlab-emacs-discuss

Reply via email to