From: Adrià C. M. <adr...@ur...> - 2012-03-22 12:57:14
|
It works! I had to use 'set syncscript on' instead of 'sync script'. But when I enter any command from the Jmol console, in data[1] I have: mycommand## EDITOR_IGNORE ## #NOSYNC; What does that '## EDITOR_IGNORE ## #NOSYNC;' thing mean? Am I doing something wrong? Here's my code: https://gist.github.com/2158139 Adrià El 22 de març de 2012 11:48, Adrià Cereto Massagué <adr...@ur...>ha escrit: > Thank you! I'll try the JmolStatusListener approach. > > I think it would be helpful for others to have this on the wiki. > > Regards, > > Adrià > > El 22 de març de 2012 3:39, Robert Hanson <ha...@st...> ha escrit: > > Ah, I see. Let's work on this..... >> >> That's very interesting, and it's easy. Absolutely no hacking of Jmol >> code. It's all ready for you. A couple of options: >> >> 1) create a JmolScript function with the command name. That's your >> starting point. it doesn't matter what this function does. maybe nothing. >> >> Function myCommand () {} >> >> Now the user can type; >> >> mycommand whatever whatever whatever.... >> >> 2) Now, in your application's JmolStatusListener, you need to tell Jmol >> that you are interested in listening for script commands and also process >> those. That's called a SYNC callback. See the Export.java example: >> >> class MyStatusListener implements JmolStatusListener { >> >> public boolean notifyEnabled(EnumCallback type) { >> // indicate here any callbacks you will be working with. >> // some of these flags are not tested. See >> org.jmol.viewer.StatusManager.java >> switch (type) { >> case SYNC: >> return true; >> default: >> return false; >> } >> } >> >> @SuppressWarnings("incomplete-switch") >> public void notifyCallback(EnumCallback type, Object[] data) { >> switch (type) { >> case SYNC: >> ... >> break; >> } >> } >> >> >> now issue the Jmol script command; >> >> sync script >> sync ON >> >> and watch every script command come your way. >> >> The command from Viewer.StatusManager will be this: >> >> void syncSend(String script, String appletName, int port) { >> if (port != 0 || notifyEnabled(EnumCallback.SYNC)) >> jmolCallbackListener.notifyCallback(EnumCallback.SYNC, >> new Object[] { null, script, appletName, Integer.valueOf(port) >> }); >> } >> >> So the script command will appear as data[1]. >> >> I realize this is not at all obvious. But it is very powerful and >> flexible. >> >> Another option would be within your function to use the JAVASCRIPT >> command. That will return a string value to Jmol. And, come to think of it, >> we could set that up to return anything in the form of a ScriptToken. So >> for example: >> >> >> Function getCharges (atoms) { >> return javascript("exec getES: " + atoms.label("%i %e %[xyz]") >> } >> >> Now if in Jmol the user enters: >> >> print getcharges({helix}) >> >> they will see the result after your end processes that command. Of >> course, if you want, rather than just returning the result, you could do >> anything you want with it. >> >> More possibilities: Maybe you would like to connect with Jmol over a >> socket? We do that in the molecular playground. It works great, and you can >> receive and send commands to Jmol using the SYNC command with a port number: >> >> SYNC -30000 >> >> Now Jmol is listening on port 30000 for NIOS calls. Now you can connect a >> client and off you go. >> >> more about that if you are interested. No documentation on that I think. >> >> Bob >> >> >> >> Bob >> >> >> >> >> >> >> >> listen for your command and do anything with it you want to. >> >> The "registering" in jmol is just the definition of >> >> You would just ignore all the commands you aren't interested in >> processing. >> >> >> >> 2012/3/21 Adrià Cereto Massagué <adr...@ur...> >> >>> >>> >>> El 21 de març de 2012 19:31, Robert Hanson <ha...@st...> ha >>> escrit: >>> >>> That's Jmol script, not JavaScript. Yes, essentially exactly like pyMol. >>>> You can write any macro you want. >>>> >>> >>> I didn't explain well. >>> I can implement some of that functionality using JmolScript, but not >>> everything I want. >>> I would like to map commands to, or directly call ,Java (not JavaScript >>> nor JmolScript) functions from the Jmol console. >>> With pymol one can register any python function as a command available >>> from pymol's console. >>> Here it's explained: http://www.pymolwiki.org/index.php/Extend >>> >>> >>> Is there something similar in Jmol? >>> >>> >>> >>> >>>> >>>> >>>> 2012/3/21 Adrià Cereto Massagué <adr...@ur...> >>>> >>>>> >>>>> >>>>> El 21 de març de 2012 1:45, Robert Hanson <ha...@st...> ha >>>>> escrit: >>>>> >>>>> Custom commands can be simply set up by defining a function with that >>>>>> command name. is that what you mean -- sort of a macro? >>>>>> >>>>>> >>>>>> >>>>>> function colorMeBlue(atoms) { >>>>>> >>>>>> color @atoms blue >>>>>> >>>>>> } >>>>>> >>>>>> >>>>>> >>>>>> colorMeBlue {helix} >>>>>> >>>>>> >>>>>> >>>>>> >>>>> Thank you. I have some commands I can implement in JmolScript, and >>>>> therefore defien as functions, >>>>> but I would like to call or execute an external Java method. Can it be >>>>> done? >>>>> >>>>> In PyMol it is possible to map a python function to a script command. >>>>> Is there something similar in Jmol? >>>>> >>>>> >>>>>> >>>>>> >>>>>> 2012/3/20 Adrià Cereto Massagué <adr...@ur...> >>>>>> >>>>>>> Hello, >>>>>>> >>>>>>> I am new to Jmol, and I am developing an application which relies on >>>>>>> it (the Integration.java example has been very useful) >>>>>>> >>>>>>> I want to have some custom commands available from the scripting >>>>>>> console. Is there an easy way for doing so? >>>>>>> >>>>>>> I have tried extending AppConsole and overriding the enterPressed() >>>>>>> method and checking AppConsole.text for the last line, but then I have no >>>>>>> way no clear the custom command from the console unless i call >>>>>>> super.enterPressed(), which prints a script error about (obviously) not >>>>>>> recognizing the command. >>>>>>> >>>>>>> Thank you in advance, >>>>>>> >>>>>>> Adrià >>>>>>> >>>>>>> -- >>>>>>> *Adrià Cereto Massagué* >>>>>>> Ph.D Student >>>>>>> Nutrigenomics Research Group >>>>>>> Biochemistry and Biotechnology Department >>>>>>> Building N4, Campus Sescelades >>>>>>> Universitat Rovira i Virgili >>>>>>> Tarragona, Catalonia >>>>>>> >>>>>>> Languages: Català, Español, English, Français, Deutsch, Português >>>>>>> >>>>>>> Nota importante<http://www.gnu.org/philosophy/no-word-attachments.es.html>| Important >>>>>>> Notice <http://www.gnu.org/philosophy/no-word-attachments.html> >>>>>>> >>>>>>> ------------------------------------------------------------------------------ >>>>>>> This SF email is sponsosred by: >>>>>>> Try Windows Azure free for 90 days Click Here >>>>>>> http://p.sf.net/sfu/sfd2d-msazure >>>>>>> _______________________________________________ >>>>>>> Jmol-users mailing list >>>>>>> Jmo...@li... >>>>>>> https://lists.sourceforge.net/lists/listinfo/jmol-users >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Robert M. Hanson >>>>>> Professor of Chemistry >>>>>> St. Olaf College >>>>>> 1520 St. Olaf Ave. >>>>>> Northfield, MN 55057 >>>>>> http://www.stolaf.edu/people/hansonr >>>>>> phone: 507-786-3107 >>>>>> >>>>>> >>>>>> If nature does not answer first what we want, >>>>>> it is better to take what answer we get. >>>>>> >>>>>> -- Josiah Willard Gibbs, Lecture XXX, Monday, February 5, 1900 >>>>>> >>>>>> >>>>>> ------------------------------------------------------------------------------ >>>>>> This SF email is sponsosred by: >>>>>> Try Windows Azure free for 90 days Click Here >>>>>> http://p.sf.net/sfu/sfd2d-msazure >>>>>> >>>>>> _______________________________________________ >>>>>> Jmol-users mailing list >>>>>> Jmo...@li... >>>>>> https://lists.sourceforge.net/lists/listinfo/jmol-users >>>>>> >>>>>> >>>>> >>>>> >>>>> ------------------------------------------------------------------------------ >>>>> This SF email is sponsosred by: >>>>> Try Windows Azure free for 90 days Click Here >>>>> http://p.sf.net/sfu/sfd2d-msazure >>>>> _______________________________________________ >>>>> Jmol-users mailing list >>>>> Jmo...@li... >>>>> https://lists.sourceforge.net/lists/listinfo/jmol-users >>>>> >>>>> >>>> >>>> >>>> -- >>>> Robert M. Hanson >>>> Professor of Chemistry >>>> St. Olaf College >>>> 1520 St. Olaf Ave. >>>> Northfield, MN 55057 >>>> http://www.stolaf.edu/people/hansonr >>>> phone: 507-786-3107 >>>> >>>> >>>> If nature does not answer first what we want, >>>> it is better to take what answer we get. >>>> >>>> -- Josiah Willard Gibbs, Lecture XXX, Monday, February 5, 1900 >>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> This SF email is sponsosred by: >>>> Try Windows Azure free for 90 days Click Here >>>> http://p.sf.net/sfu/sfd2d-msazure >>>> >>>> _______________________________________________ >>>> Jmol-users mailing list >>>> Jmo...@li... >>>> https://lists.sourceforge.net/lists/listinfo/jmol-users >>>> >>>> >>> >>> >>> ------------------------------------------------------------------------------ >>> This SF email is sponsosred by: >>> Try Windows Azure free for 90 days Click Here >>> http://p.sf.net/sfu/sfd2d-msazure >>> _______________________________________________ >>> Jmol-users mailing list >>> Jmo...@li... >>> https://lists.sourceforge.net/lists/listinfo/jmol-users >>> >>> >> >> >> -- >> Robert M. Hanson >> Professor of Chemistry >> St. Olaf College >> 1520 St. Olaf Ave. >> Northfield, MN 55057 >> http://www.stolaf.edu/people/hansonr >> phone: 507-786-3107 >> >> >> If nature does not answer first what we want, >> it is better to take what answer we get. >> >> -- Josiah Willard Gibbs, Lecture XXX, Monday, February 5, 1900 >> >> >> ------------------------------------------------------------------------------ >> This SF email is sponsosred by: >> Try Windows Azure free for 90 days Click Here >> http://p.sf.net/sfu/sfd2d-msazure >> >> _______________________________________________ >> Jmol-users mailing list >> Jmo...@li... >> https://lists.sourceforge.net/lists/listinfo/jmol-users >> >> > |