Difference between revisions of "User:Remig/plico/toABnt"
(Adjust) |
(lc all functions) |
||
Line 1: | Line 1: | ||
− | '''ToABnt''' allows the user to convert a polynucleotide chain from A-form to B-form and ''vice versa''. | + | '''ToABnt''' allows the user to convert a polynucleotide chain or chain pair from A-form to B-form and ''vice versa''. |
When you ALT-CLICK on any atom, you are prompted to convert its chain from its current form to either the A-form or the B-form. The two forms differ primarily in the pucker conformation of their sugar moieties. The A-form has its sugars in the C3'-endo conformation whereas the B-form has it in the C2'-endo conformation. The A-form is characteristic of RNA while the B-form is characteristic of DNA. | When you ALT-CLICK on any atom, you are prompted to convert its chain from its current form to either the A-form or the B-form. The two forms differ primarily in the pucker conformation of their sugar moieties. The A-form has its sugars in the C3'-endo conformation whereas the B-form has it in the C2'-endo conformation. The A-form is characteristic of RNA while the B-form is characteristic of DNA. | ||
Line 6: | Line 6: | ||
ToABnt is a member of the Plico suite of protein folding tools described [[User:Remig/plico|here]]. It may be installed and accessed as a macro with the file: | ToABnt is a member of the Plico suite of protein folding tools described [[User:Remig/plico|here]]. It may be installed and accessed as a macro with the file: | ||
<pre>Title=PLICO toAB NT | <pre>Title=PLICO toAB NT | ||
− | Script=script <path to your script directory>/toABnt.spt; | + | Script=script <path to your script directory>/toABnt.spt;plico_to_ab_nt |
</pre> saved as toABnt.macro in your .jmol/macros directory as described in [[Macro]]. | </pre> saved as toABnt.macro in your .jmol/macros directory as described in [[Macro]]. | ||
Copy and paste the following into a text editor and save in your scripts directory as toABnt.spt. | Copy and paste the following into a text editor and save in your scripts directory as toABnt.spt. | ||
<pre># toABnt - Jmol script by Ron Mignery | <pre># toABnt - Jmol script by Ron Mignery | ||
− | # v1. | + | # v1.4 beta 5/16/2014 -lc all functions |
# | # | ||
# Convert a polynucleotide chain from A-form to B-form or vice versa | # Convert a polynucleotide chain from A-form to B-form or vice versa | ||
Line 51: | Line 51: | ||
gToA = FALSE | gToA = FALSE | ||
− | function | + | function to_ab_nt_auto(iChain, toA) { |
# Load common functions if not already | # Load common functions if not already | ||
− | + | load_common() | |
gChain1 = iChain | gChain1 = iChain | ||
gToA = toA | gToA = toA | ||
− | + | to_ab_nt(TRUE) | |
} | } | ||
− | function | + | function to_ab_nt(auto) { |
if (not gBusy) { | if (not gBusy) { | ||
gBusy = TRUE | gBusy = TRUE | ||
Line 102: | Line 102: | ||
if (i == res5) { | if (i == res5) { | ||
if (auto == FALSE) { | if (auto == FALSE) { | ||
− | var isForm = ( | + | var isForm = (is_form_a( i, gChain1) ? "A" : "B") |
var p = prompt(format("Convert chain %s from %s-form to:", | var p = prompt(format("Convert chain %s from %s-form to:", | ||
gChain1, isForm), "A-form|B-form", TRUE) | gChain1, isForm), "A-form|B-form", TRUE) | ||
Line 159: | Line 159: | ||
select bSet or {(atomno < @{aP.atomno}) and | select bSet or {(atomno < @{aP.atomno}) and | ||
(atomno >= @{{atomIndex=g5cargoIdx}.atomno}) and (chain=gChain1)} | (atomno >= @{{atomIndex=g5cargoIdx}.atomno}) and (chain=gChain1)} | ||
− | + | set_dihedral_atoms(aP, aO3p, aC3p, aC4p, (gToA ? kPO3C3C4A : kPO3C3C4B)) | |
− | + | set_dihedral_atoms(aO5, aP, aO3p, aC3p, (gToA ? kO5PO3C3A : kO5PO3C3B)) | |
select bSet or {(atomno < @{aO5.atomno}) and | select bSet or {(atomno < @{aO5.atomno}) and | ||
(atomno >= @{{atomIndex=g5cargoIdx}.atomno}) and (chain=gChain1)} | (atomno >= @{{atomIndex=g5cargoIdx}.atomno}) and (chain=gChain1)} | ||
− | + | set_dihedral_atoms(aC5, aO5, aP, aO3p, (gToA ? kC5O5PO3A : kC5O5PO3B)) | |
} | } | ||
select bSet or {(atomno < @{aO5.atomno}) and | select bSet or {(atomno < @{aO5.atomno}) and | ||
(atomno >= @{{atomIndex=g5cargoIdx}.atomno}) and (chain=gChain1)} | (atomno >= @{{atomIndex=g5cargoIdx}.atomno}) and (chain=gChain1)} | ||
− | + | set_dihedral_atoms(aC4, aC5, aO5, aP, (gToA ? kC4C5O5PA : kC4C5O5PB)) | |
select (bP or (connected(bP) and {resno=k})) | select (bP or (connected(bP) and {resno=k})) | ||
− | + | set_dihedral_atoms(bC4, bC5, bO5, bP, (gToA ? kC4C5O5PA : kC4C5O5PB)) | |
select bSet or {(atomno < @{aC5.atomno}) and | select bSet or {(atomno < @{aC5.atomno}) and | ||
(atomno >= @{{atomIndex=g5cargoIdx}.atomno}) and (chain=gChain1)} | (atomno >= @{{atomIndex=g5cargoIdx}.atomno}) and (chain=gChain1)} | ||
− | + | set_dihedral_atoms(aC3, aC4, aC5, aO5, (gToA ? kC3C4C5O5A : kC3C4C5O5B)) | |
select (bP or (connected(bP) and {resno=k})) | select (bP or (connected(bP) and {resno=k})) | ||
− | + | set_dihedral_atoms(bC3, bC4, bC5, bO5, (gToA ? kC3C4C5O5A : kC3C4C5O5B)) | |
select (({(resno >= k) and (chain=gChain2)} | select (({(resno >= k) and (chain=gChain2)} | ||
or {(resno <= i) and (chain=gChain1)}) and not aO3) | or {(resno <= i) and (chain=gChain1)}) and not aO3) | ||
− | + | set_dihedral_atoms(aO3, aC3, aC4, aC5, (gToA ? kO3C3C4C5A : kO3C3C4C5B)) | |
select bO3 | select bO3 | ||
− | + | set_dihedral_atoms(bC5, bC4, bC3, bO3, (gToA ? kO3C3C4C5A : kO3C3C4C5B)) | |
Line 218: | Line 218: | ||
} | } | ||
select pSet or {(resno=i) and (chain=gChain1) and base} | select pSet or {(resno=i) and (chain=gChain1) and base} | ||
− | + | set_dihedral_atoms(aO4, aC1, aNx, aCx, ang) | |
select {pSet and not base} | select {pSet and not base} | ||
− | + | set_dihedral_atoms(bCx, bNx, bC1, bO4, pang) | |
# Set pucker 3' endo or 2' endo | # Set pucker 3' endo or 2' endo | ||
select pSet or {(resno=i) and (chain=gChain1) and base} | select pSet or {(resno=i) and (chain=gChain1) and base} | ||
− | + | set_dihedral_atoms(aC4, aO4, aC1, aNx, (gToA ? kC4O4C1NxA : kC4O4C1NxB)) | |
select {pSet and not base} | select {pSet and not base} | ||
− | + | set_dihedral_atoms(bNx, bC1, bO4, bC4, (gToA ? kC4O4C1NxA : kC4O4C1NxB)) | |
select (pSet or | select (pSet or | ||
{((resno=i) and (chain=gChain1) and base) or aC1}) | {((resno=i) and (chain=gChain1) and base) or aC1}) | ||
− | + | set_dihedral_atoms(aC5, aC4, aO4, aC1, (gToA ? kC5C4O4C1A : kC5C4O4C1B)) | |
select {pSet and not base and not bC1} | select {pSet and not base and not bC1} | ||
− | + | set_dihedral_atoms(bC1, bO4, bC4, bC5, (gToA ? kC5C4O4C1A : kC5C4O4C1B)) | |
select aC2 or aO2 | select aC2 or aO2 | ||
− | + | set_dihedral_atoms(aC4, aO4, aC1, aC2, (gToA ? kC4O4C1C2A : kC4O4C1C2B)) | |
if (aO2.size > 0) { | if (aO2.size > 0) { | ||
ang = (gToA ? kC3C1C2O2A : kC3C1C2O2B) | ang = (gToA ? kC3C1C2O2A : kC3C1C2O2B) | ||
− | + | set_dihedral_atoms(aC3, aC1, aC2, aO2, (gToA ? kC3C1C2O2A : kC3C1C2O2B)) | |
} | } | ||
− | + | set_distance_atoms(aC3, aC2, 1.52) | |
− | + | set_distance_atoms(aC1, aC2, 1.52) | |
select bC2 or bO2 | select bC2 or bO2 | ||
− | + | set_dihedral_atoms(bC4, bO4, bC1, bC2, (gToA ? kC4O4C1C2A : kC4O4C1C2B)) | |
if (bO2.size > 0) { | if (bO2.size > 0) { | ||
ang = (gToA ? kC3C1C2O2A : kC3C1C2O2B) | ang = (gToA ? kC3C1C2O2A : kC3C1C2O2B) | ||
− | + | set_dihedral_atoms(bC3, bC1, bC2, bO2, (gToA ? kC3C1C2O2A : kC3C1C2O2B)) | |
} | } | ||
− | + | set_distance_atoms(bC3, bC2, 1.52) | |
− | + | set_distance_atoms(bC1, bC2, 1.52) | |
refresh | refresh | ||
Line 266: | Line 266: | ||
} | } | ||
− | # Bound to ALT-LEFT-CLICK by | + | # Bound to ALT-LEFT-CLICK by plicoto_ab_nt |
− | function | + | function to_ab_chain_mb() { |
color {all} @gScheme | color {all} @gScheme | ||
gChain1 = {atomIndex=_atomPicked}.chain | gChain1 = {atomIndex=_atomPicked}.chain | ||
color {chain=gChain1} @gAltScheme | color {chain=gChain1} @gAltScheme | ||
refresh | refresh | ||
− | + | to_ab_nt(FALSE) | |
} | } | ||
# Load common functions if not already | # Load common functions if not already | ||
− | function | + | function load_common() { |
− | if (kCommon < | + | if (kCommon < 2) { |
script $SCRIPT_PATH$plicoCommon.spt | script $SCRIPT_PATH$plicoCommon.spt | ||
− | if (kCommon < | + | if (kCommon < 2) { |
prompt ("A newer version of plicoCommon.SPT is required") | prompt ("A newer version of plicoCommon.SPT is required") | ||
quit | quit | ||
} | } | ||
} | } | ||
− | if (kNTcommon < | + | if (kNTcommon < 2) { |
script $SCRIPT_PATH$plicoNTcommon.spt | script $SCRIPT_PATH$plicoNTcommon.spt | ||
− | if (kNTcommon < | + | if (kNTcommon < 2) { |
prompt ("A newer version of plicoNTcommon.SPT is required") | prompt ("A newer version of plicoNTcommon.SPT is required") | ||
quit | quit | ||
Line 293: | Line 293: | ||
} | } | ||
− | # Top level of | + | # Top level of to_ab_nt |
− | function | + | function plico_to_ab_nt() { |
# Load common functions if not already | # Load common functions if not already | ||
− | + | load_common() | |
gPlico = "TO A-FORM/B-FORM" | gPlico = "TO A-FORM/B-FORM" | ||
− | + | plico_prelim(FALSE) | |
gEcho = ("________A <==> B_______|ALT-CLICK=mark chain|DOUBLE-CLICK=exit") | gEcho = ("________A <==> B_______|ALT-CLICK=mark chain|DOUBLE-CLICK=exit") | ||
Line 308: | Line 308: | ||
bind "ALT-LEFT-CLICK" "_pickAtom"; | bind "ALT-LEFT-CLICK" "_pickAtom"; | ||
− | bind "ALT-LEFT-CLICK" "+: | + | bind "ALT-LEFT-CLICK" "+:to_ab_chain_mb"; |
− | bind "DOUBLE" " | + | bind "DOUBLE" "plico_exit"; |
} | } | ||
− | # End of | + | # End of to_ab_nt.SPT</pre> |
− | </pre> |
Revision as of 16:41, 16 May 2014
ToABnt allows the user to convert a polynucleotide chain or chain pair from A-form to B-form and vice versa. When you ALT-CLICK on any atom, you are prompted to convert its chain from its current form to either the A-form or the B-form. The two forms differ primarily in the pucker conformation of their sugar moieties. The A-form has its sugars in the C3'-endo conformation whereas the B-form has it in the C2'-endo conformation. The A-form is characteristic of RNA while the B-form is characteristic of DNA.
This routine is called automatically by the Plico routine Polymeraze when a polynucleotide is generated.
ToABnt is a member of the Plico suite of protein folding tools described here. It may be installed and accessed as a macro with the file:
Title=PLICO toAB NT Script=script <path to your script directory>/toABnt.spt;plico_to_ab_nt
saved as toABnt.macro in your .jmol/macros directory as described in Macro.
Copy and paste the following into a text editor and save in your scripts directory as toABnt.spt.
# toABnt - Jmol script by Ron Mignery # v1.4 beta 5/16/2014 -lc all functions # # Convert a polynucleotide chain from A-form to B-form or vice versa # kC5O5PO3B = -71.0 kO5PO3C3B = -106.0 kPO3C3C4B = -160.67 kO3C3C4C5B = 125.44 kC3C4C5O5B = 55.65 kC4C5O5PB = 169.0 kO4C4C3C2B = 15.92 kC4O4C1C2B = -41.7 kC4O4C1NxB = -159.03 kC5C4O4C1B = 146.31 kC3C1C2O2B = -167.9 kPuB = 59.0 kPyB = 61.0 kC5O5PO3A = -59.3 kO5PO3C3A = -63.1 kPO3C3C4A = -157.4 kO3C3C4C5A = 75.5 kC3C4C5O5A = 49.55 kC4C5O5PA = 169.2 kO4C4C3C2A = -35.55 kC4O4C1C2A = 3.8 kC4O4C1NxA = -117.4 kC5C4O4C1A = 144.85 kC3C1C2O2A = 116.3 kPuA = 13.5 kPyA = 16.5 gToab = FALSE gToabAlt = FALSE gToA = FALSE function to_ab_nt_auto(iChain, toA) { # Load common functions if not already load_common() gChain1 = iChain gToA = toA to_ab_nt(TRUE) } function to_ab_nt(auto) { if (not gBusy) { gBusy = TRUE select all g5cargoIdx = {(atomno=@{{chain=gChain1}.atomno.min}) and (chain=gChain1)}.atomIndex g3cargoIdx = {(atomno=@{{chain=gChain1}.atomno.max}) and (chain=gChain1)}.atomIndex # If new drag if (gNewDrag) { gNewDrag = FALSE save state gState } # Move the cargo select {gCargoSet} gChain1 = {atomIndex=g3cargoIdx}.chain gChain2 = "" # Move between A-form and B-form var res5 = {atomIndex=g5cargoIdx}.resno var res3 = {atomIndex=g3cargoIdx}.resno var pSet = ({}) var bSet = ({}) var k = -1 var kmax = k var ang = 0 var pang = 0 var isP = FALSE for (var i = res5; i <= res3; i++) { var j = i-1 var aO3 = {(resno=i) and (chain=gChain1) and (atomName="O3\'")} var aC3 = {(resno=i) and (chain=gChain1) and (atomName="C3\'")} var aC4 = {(resno=i) and (chain=gChain1) and (atomName="C4\'")} var aC5 = {(resno=i) and (chain=gChain1) and (atomName="C5\'")} var aO5 = {(resno=i) and (chain=gChain1) and (atomName="O5\'")} var aP = {(resno=i) and (chain=gChain1) and (atomName="P")} if (i == res5) { if (auto == FALSE) { var isForm = (is_form_a( i, gChain1) ? "A" : "B") var p = prompt(format("Convert chain %s from %s-form to:", gChain1, isForm), "A-form|B-form", TRUE) if (p == "A-form") { gToA = TRUE } else if (p == "B-form") { gToA = FALSE } else { color {all} @gScheme break } background ECHO pink refresh print format("Converting to %s", p) } # If paired var lcAtoms = (within(3.0, FALSE, {(resno=i) and (chain=gChain1) and base}) and not {chain=gChain1}) isP = (lcAtoms.size > 0) gChain2 = (isP ? lcAtoms[1].chain : "") k = (isP ? lcAtoms[1].resno : -1) kmax = k } pSet = {(resno=k) and (chain=gChain2)} var bO3 = {(resno=k) and (chain=gChain2) and (atomName="O3\'")} var bC3 = {(resno=k) and (chain=gChain2) and (atomName="C3\'")} var bC4 = {(resno=k) and (chain=gChain2) and (atomName="C4\'")} var bC5 = {(resno=k) and (chain=gChain2) and (atomName="C5\'")} var bO5 = {(resno=k) and (chain=gChain2) and (atomName="O5\'")} var bP = {(resno=k) and (chain=gChain2) and (atomName="P")} # If not 5' terminus var aC4p = ({}) var aC3p = ({}) var aO3p = ({}) var bO5p = ({}) var bC4p = ({}) var bC3p = ({}) var bO3p = ({}) var bPp = ({}) if (i > res5) { aC4p = {(resno=j) and (chain=gChain1) and (atomName="C4\'")} aC3p = {(resno=j) and (chain=gChain1) and (atomName="C3\'")} aO3p = {(resno=j) and (chain=gChain1) and (atomName="O3\'")} bO5p = {(resno=@{k+1}) and (chain=gChain2) and (atomName="O5\'")} bC4p = {(resno=@{k+1}) and (chain=gChain2) and (atomName="C4\'")} bC3p = {(resno=@{k+1}) and (chain=gChain2) and (atomName="C3\'")} bO3p = {(resno=@{k+1}) and (chain=gChain2) and (atomName="O3\'")} bPp = {(resno=@{k+1}) and (chain=gChain2) and (atomName="P")} select bSet or {(atomno < @{aP.atomno}) and (atomno >= @{{atomIndex=g5cargoIdx}.atomno}) and (chain=gChain1)} set_dihedral_atoms(aP, aO3p, aC3p, aC4p, (gToA ? kPO3C3C4A : kPO3C3C4B)) set_dihedral_atoms(aO5, aP, aO3p, aC3p, (gToA ? kO5PO3C3A : kO5PO3C3B)) select bSet or {(atomno < @{aO5.atomno}) and (atomno >= @{{atomIndex=g5cargoIdx}.atomno}) and (chain=gChain1)} set_dihedral_atoms(aC5, aO5, aP, aO3p, (gToA ? kC5O5PO3A : kC5O5PO3B)) } select bSet or {(atomno < @{aO5.atomno}) and (atomno >= @{{atomIndex=g5cargoIdx}.atomno}) and (chain=gChain1)} set_dihedral_atoms(aC4, aC5, aO5, aP, (gToA ? kC4C5O5PA : kC4C5O5PB)) select (bP or (connected(bP) and {resno=k})) set_dihedral_atoms(bC4, bC5, bO5, bP, (gToA ? kC4C5O5PA : kC4C5O5PB)) select bSet or {(atomno < @{aC5.atomno}) and (atomno >= @{{atomIndex=g5cargoIdx}.atomno}) and (chain=gChain1)} set_dihedral_atoms(aC3, aC4, aC5, aO5, (gToA ? kC3C4C5O5A : kC3C4C5O5B)) select (bP or (connected(bP) and {resno=k})) set_dihedral_atoms(bC3, bC4, bC5, bO5, (gToA ? kC3C4C5O5A : kC3C4C5O5B)) select (({(resno >= k) and (chain=gChain2)} or {(resno <= i) and (chain=gChain1)}) and not aO3) set_dihedral_atoms(aO3, aC3, aC4, aC5, (gToA ? kO3C3C4C5A : kO3C3C4C5B)) select bO3 set_dihedral_atoms(bC5, bC4, bC3, bO3, (gToA ? kO3C3C4C5A : kO3C3C4C5B)) var aC1 = {(resno=i) and (chain=gChain1) and (atomName="C1\'")} var aC2 = {(resno=i) and (chain=gChain1) and (atomName="C2\'")} var aO2 = {(resno=i) and (chain=gChain1) and (atomName="O2\'")} var aO4 = {(resno=i) and (chain=gChain1) and (atomName="O4\'")} var bC1 = {(resno=k) and (chain=gChain2) and (atomName="C1\'")} var bC2 = {(resno=k) and (chain=gChain2) and (atomName="C2\'")} var bO2 = {(resno=k) and (chain=gChain2) and (atomName="O2\'")} var bO4 = {(resno=k) and (chain=gChain2) and (atomName="O4\'")} # Set chi var aNx = -1 var aCx = -1 var bNx = -1 var bCx = -1 if ((aC1 and {purine}).size > 0) { aNx = {(resno=i) and (chain=gChain1) and (atomName="N9")} aCx = {(resno=i) and (chain=gChain1) and (atomName="C8")} bNx = {(resno=k) and (chain=gChain2) and (atomName="N1")} bCx = {(resno=k) and (chain=gChain2) and (atomName="C6")} ang = (gToA ? kPuA : kPuB) pang = (gToA ? kPyA : kPyB) } else { aNx = {(resno=i) and (chain=gChain1) and (atomName="N1")} aCx = {(resno=i) and (chain=gChain1) and (atomName="C6")} bNx = {(resno=k) and (chain=gChain2) and (atomName="N9")} bCx = {(resno=k) and (chain=gChain2) and (atomName="C8")} ang = (gToA ? kPyA : kPyB) pang = (gToA ? kPuA : kPuB) } select pSet or {(resno=i) and (chain=gChain1) and base} set_dihedral_atoms(aO4, aC1, aNx, aCx, ang) select {pSet and not base} set_dihedral_atoms(bCx, bNx, bC1, bO4, pang) # Set pucker 3' endo or 2' endo select pSet or {(resno=i) and (chain=gChain1) and base} set_dihedral_atoms(aC4, aO4, aC1, aNx, (gToA ? kC4O4C1NxA : kC4O4C1NxB)) select {pSet and not base} set_dihedral_atoms(bNx, bC1, bO4, bC4, (gToA ? kC4O4C1NxA : kC4O4C1NxB)) select (pSet or {((resno=i) and (chain=gChain1) and base) or aC1}) set_dihedral_atoms(aC5, aC4, aO4, aC1, (gToA ? kC5C4O4C1A : kC5C4O4C1B)) select {pSet and not base and not bC1} set_dihedral_atoms(bC1, bO4, bC4, bC5, (gToA ? kC5C4O4C1A : kC5C4O4C1B)) select aC2 or aO2 set_dihedral_atoms(aC4, aO4, aC1, aC2, (gToA ? kC4O4C1C2A : kC4O4C1C2B)) if (aO2.size > 0) { ang = (gToA ? kC3C1C2O2A : kC3C1C2O2B) set_dihedral_atoms(aC3, aC1, aC2, aO2, (gToA ? kC3C1C2O2A : kC3C1C2O2B)) } set_distance_atoms(aC3, aC2, 1.52) set_distance_atoms(aC1, aC2, 1.52) select bC2 or bO2 set_dihedral_atoms(bC4, bO4, bC1, bC2, (gToA ? kC4O4C1C2A : kC4O4C1C2B)) if (bO2.size > 0) { ang = (gToA ? kC3C1C2O2A : kC3C1C2O2B) set_dihedral_atoms(bC3, bC1, bC2, bO2, (gToA ? kC3C1C2O2A : kC3C1C2O2B)) } set_distance_atoms(bC3, bC2, 1.52) set_distance_atoms(bC1, bC2, 1.52) refresh bSet = bset or pSet if (k > 0) { k-- } } # endfor gBusy = FALSE background ECHO yellow refresh } } # Bound to ALT-LEFT-CLICK by plicoto_ab_nt function to_ab_chain_mb() { color {all} @gScheme gChain1 = {atomIndex=_atomPicked}.chain color {chain=gChain1} @gAltScheme refresh to_ab_nt(FALSE) } # Load common functions if not already function load_common() { if (kCommon < 2) { script $SCRIPT_PATH$plicoCommon.spt if (kCommon < 2) { prompt ("A newer version of plicoCommon.SPT is required") quit } } if (kNTcommon < 2) { script $SCRIPT_PATH$plicoNTcommon.spt if (kNTcommon < 2) { prompt ("A newer version of plicoNTcommon.SPT is required") quit } } } # Top level of to_ab_nt function plico_to_ab_nt() { # Load common functions if not already load_common() gPlico = "TO A-FORM/B-FORM" plico_prelim(FALSE) gEcho = ("________A <==> B_______|ALT-CLICK=mark chain|DOUBLE-CLICK=exit") echo @gEcho gChain = "" unbind bind "ALT-LEFT-CLICK" "_pickAtom"; bind "ALT-LEFT-CLICK" "+:to_ab_chain_mb"; bind "DOUBLE" "plico_exit"; } # End of to_ab_nt.SPT