Auto arg

From PyMOLWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

cmd.auto_arg controls auto-completion of command arguments in PyMOL's command line. It is an array of dictionaries. When Pymol's console attempts to auto-complete the n-th argument of command abc, it will look at cmd.auto_arg[n]['abc'] (n starts from 0). This is a list with three elements. For arguments which do not have an entry in cmd.auto_arg, the default is to auto-complete file names.

  1. The first element is a lambda function which returns an Shortcut object. Shortcut object wraps the list of candidate strings, given to its constructor.
  2. The second element is a string, which describs the argument.
  3. The third element is a string, which will be added after autocompletion (postfix).

PYTHON EXAMPLE

cmd.auto_arg[0]['test']=[lambda: cmd.Shortcut(['abc','bcd']), '1st argument', ', ']

This code defines the auto-completion list for the first argument of command test. When you type 'test ' and press TAB, PyMOL will show you two candidates as:

parser: matching 1st argument:
     abc  bcd 

If you type 'a' and press TAB again, PyMOL will complete it to "test abc, ". Note that ', ' is added.

Pre-defined lambdas

In most cases, you just want to complete from object names or setting lists. Then you don't have to write your own lambda function. Just use cmd.object_sc for choosing from objects.

cmd.auto_arg[0]['test'] = [ cmd.object_sc, 'object', '']

Or even simpler, borrow from one of the core commands:

# "extract" also uses cmd.object_sc in its first argument
cmd.auto_arg[0]['test'] = cmd.auto_arg[0]['extract']

Use cmd.selection_sc for setting names (like 'line_width'), cmd.map_sc for maps and cmd.repres_sc for representations ('sticks', 'lines', etc).

More Examples

The first argument of the save command auto-completes to filenames by default. If you want for example filenames and object names to auto-complete, use this (from pymol-users mailing list):

import glob
names_filenames_sc = lambda: cmd.Shortcut(cmd.get_names() + glob.glob('*'))
cmd.auto_arg[0]['save'] = [names_filenames_sc, 'filename or object name', '']

SEE ALSO

  • extend
  • parser.py, cmd.py, shortcut.py, completing.py