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 <[email protected]> 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, <[email protected]
>> <mailto:[email protected]>> 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 <[email protected]
>> <mailto:[email protected]>
>> > <mailto:[email protected] <mailto:[email protected]>>> 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
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/matlab-emacs-discuss
_______________________________________________
Matlab-emacs-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matlab-emacs-discuss