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