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é <adrian.cer...@urv.cat>

>
>
> El 21 de març de 2012 19:31, Robert Hanson <hans...@stolaf.edu> 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é <adrian.cer...@urv.cat>
>>
>>>
>>>
>>> El 21 de març de 2012 1:45, Robert Hanson <hans...@stolaf.edu> 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é <adrian.cer...@urv.cat>
>>>>
>>>>>  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
>>>>> Jmol-users@lists.sourceforge.net
>>>>> 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
>>>> Jmol-users@lists.sourceforge.net
>>>> 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
>>> Jmol-users@lists.sourceforge.net
>>> 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
>> Jmol-users@lists.sourceforge.net
>> 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
> Jmol-users@lists.sourceforge.net
> 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
Jmol-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jmol-users

Reply via email to