Source code for pestifer.subcommands.setup_vmd

# Author: Cameron F. Abrams <cfa22@drexel.edu>
"""
The setup-vmd subcommand.  Generates ~/.pestifer/vmd_init.tcl with a
hardcoded PESTIFER_TCLROOT and appends a one-line source hook to ~/.vmdrc.
"""
import argparse as ap
import os
from dataclasses import dataclass
from pathlib import Path

from . import Subcommand
from ..core.resourcemanager import ResourceManager

_VMDRC_HOOK = 'if {[file exists ~/.pestifer/vmd_init.tcl]} { source ~/.pestifer/vmd_init.tcl }'
_VMDRC_MARKER = '# pestifer setup-vmd'

[docs] @dataclass class SetupVMDSubcommand(Subcommand): name: str = 'setup-vmd' short_help: str = "install pestifer's Tcl library into your VMD startup environment" long_help: str = ( "Generates ~/.pestifer/vmd_init.tcl with the absolute path to pestifer's " "Tcl root and appends a one-line source hook to ~/.vmdrc. " "Re-run after upgrading pestifer or switching conda environments." )
[docs] @staticmethod def func(args: ap.Namespace, **kwargs): r = ResourceManager() tcl_root = r.get_tcldir() assert os.path.exists(tcl_root), f'Tcl root not found: {tcl_root}' pestifer_dir = Path.home() / '.pestifer' pestifer_dir.mkdir(exist_ok=True) vmd_init = pestifer_dir / 'vmd_init.tcl' vmd_init.write_text( f'# Auto-generated by: pestifer setup-vmd\n' f'# Re-run this command after upgrading pestifer or switching environments.\n' f'set PESTIFER_TCLROOT {{{tcl_root}}}\n' f'source ${{PESTIFER_TCLROOT}}/vmdrc.tcl\n' ) print(f'Written: {vmd_init}') vmdrc = Path.home() / '.vmdrc' existing = vmdrc.read_text() if vmdrc.exists() else '' if _VMDRC_MARKER in existing: print(f'{vmdrc}: hook already present, not modified') else: with open(vmdrc, 'a') as f: f.write(f'\n{_VMDRC_MARKER}\n{_VMDRC_HOOK}\n') print(f'Appended source hook to {vmdrc}') return True
[docs] def add_subparser(self, subparsers): super().add_subparser(subparsers) return self.parser