Files
ZDTT/__pycache__/terminal.cpython-313.pyc

263 lines
69 KiB
Plaintext
Raw Normal View History

<EFBFBD>
<00>5i<1C><00> <00><><00>SrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK r SSK
r
SSK r SSK J r SSK rSSKrSSKr1Skr1SkrSSSS S
S S S S.rSrSrSrSrSr"SS5rSr\S:Xa\"5 gg)z^
ZDTT Terminal - A custom terminal interface
Only works on Debian-based or Arch Linux systems
<EFBFBD>N)<01>datetime><00>mx<6D>pop<6F>kali<6C>mint<6E>neon<6F>zorin<69>debian<61>deepin<69>parrot<6F>pop_os<6F>ubuntu<74>raspbian<61> linuxmint<6E>
elementary<EFBFBD>
peppermint<EFBFBD>pop-os<6F>mx-linux>
<00>arch<63>artix<69>chakra<72>garuda<64>manjaro<72> archlinux<75> arcolinux<75> blackarch<63> endeavour<75> endeavouros<6F><02>44<34>97)<02>41r!)<02>42<34>30)<02>46r$)<02>45r!)<02>43r$)<02>47r$)<02>40r!)<08>blue<75>red<65>green<65>cyan<61>magenta<74>yellow<6F>white<74>blackc<00>f<00>0n[SS5nUHonUR5nU(aURS5(dSU;aM8URSS5up4UR5RS5nX@U'Mq SSS5 U$!,(df  U$=f![a U$f=f)z9Return a dict of fields from /etc/os-release if availablez/etc/os-release<73>r<>#<23>=<3D><00>"N)<05>open<65>strip<69>
startswith<EFBFBD>split<69>FileNotFoundError)<05>data<74>f<>line<6E>key<65>values <20> terminal.py<70>_parse_os_releaserCEs<><00><00> <0A>D<EFBFBD>
 <0A> <11>#<23>S<EFBFBD> )<29>Q<EFBFBD><19><04><1B>z<EFBFBD>z<EFBFBD>|<7C><04><1B>t<EFBFBD><EFBFBD><EFBFBD>s<EFBFBD>3<>3<>s<EFBFBD>$<24><EFBFBD><1C>!<21>Z<EFBFBD>Z<EFBFBD><03>Q<EFBFBD>/<2F>
<EFBFBD><03><1D> <0B> <0B> <0A>+<2B>+<2B>C<EFBFBD>0<><05>!<21>S<EFBFBD> <09> <1A>*<2A> <10>K<EFBFBD>*<2A> )<29> <10>K<EFBFBD><4B> <1D> <0A> <0C> <0F>K<EFBFBD> <0A>s/<00> B"<00>A6B<03>B"<00>
B<07>B"<00>B"<00>"
B0<03>/B0c<00>t<00>[5nUH<>nU(dM URSS5R5R5nU(dMCUR U5 URSS5RSS5nUR 5HnU(dM UR U5 M M<> U$)z+Normalize distro identifiers for comparisonr7<00><00>-<2D> <20>_)<06>set<65>replacer9<00>lower<65>addr;)<06>values<65>tokensrA<00>
normalized<EFBFBD>delimiters_replaced<65>parts rB<00>_collect_tokensrRVs<><00><00> <10>U<EFBFBD>F<EFBFBD><17><05><14> <14><1A>]<5D>]<5D>3<EFBFBD><02>+<2B>1<>1<>3<>9<>9<>;<3B>
<EFBFBD><19> <14><0E>
<EFBFBD>
<EFBFBD>:<3A><1E>(<28>0<>0<><13>c<EFBFBD>:<3A>B<>B<>3<EFBFBD><03>L<><1B>'<27>-<2D>-<2D>/<2F>D<EFBFBD><13>t<EFBFBD><16>
<EFBFBD>
<EFBFBD>4<EFBFBD> <20>0<><18> <12>M<EFBFBD>c<00><><00>[RRS5(agSn[SU55(ag[ 5n[ UR S5UR S55nU[-(agU[-(ag[R"S5(ag[R"S 5(agg
) z6Return distro identifier: 'debian', 'arch', or 'other'z/etc/debian_versionr
)z/etc/arch-releasez/etc/artix-releasec3<00>`# <00>UH$n[RRU5v<00> M& g7f<01>N)<03>os<6F>path<74>exists)<02>.0rXs rB<00> <genexpr><3E>+_detect_supported_distro.<locals>.<genexpr>qs <00><00><00>
9<EFBFBD>L<EFBFBD>D<EFBFBD>2<EFBFBD>7<EFBFBD>7<EFBFBD>><3E>><3E>$<24> <1F> <1F>L<EFBFBD>s<00>,.r<00>ID<49>ID_LIKE<4B>apt-get<65>pacman<61>other) rWrXrY<00>anyrCrR<00>get<65>SUPPORTED_DEBIAN_IDS<44>SUPPORTED_ARCH_IDS<44>shutil<69>which)<03> arch_markers<72>
os_releaserNs rB<00>_detect_supported_distrorjhs<><00><00> <09>w<EFBFBD>w<EFBFBD>~<7E>~<7E>+<2B>,<2C>,<2C><17><06>L<EFBFBD> <0B>
9<EFBFBD>L<EFBFBD>
9<EFBFBD>9<>9<><15>"<22>$<24>J<EFBFBD> <1C>Z<EFBFBD>^<5E>^<5E>D<EFBFBD>1<>:<3A>><3E>><3E>)<29>3L<33> M<>F<EFBFBD> <0A>$<24>$<24><17> <0A>"<22>"<22><15><0E>|<7C>|<7C>I<EFBFBD><1E><1E><17> <0A>|<7C>|<7C>H<EFBFBD><1D><1D><15> rSc<00><00>SSSS.n[S5 [SURUS535 [S5 [S 5 [S
5R5R 5nUS;aU$U(a[S US 35 U$) z'Allow user to override detected distro.z Debian-basedz
Arch-basedzUnsupported/Other)r
rra<00><============================================================zDetected distribution: <20>Unknownz:If this is incorrect, enter one of: debian / arch / other.z)Press Enter to accept the detected value.z-Override distribution (leave blank to keep): zUnknown override 'z'. Using detected value.)<05>printrc<00>inputr9rK)<03>detected_distro<72> label_map<61>overrides rB<00>_prompt_distro_overriders<00>s<><00><00>!<21><1C>$<24><06>I<EFBFBD>

<EFBFBD>(<28>O<EFBFBD> <09> #<23>I<EFBFBD>M<EFBFBD>M<EFBFBD>/<2F>9<EFBFBD>$M<>#N<>
O<EFBFBD>P<> <09>
F<EFBFBD>G<> <09>
5<EFBFBD>6<><14>D<>E<>K<>K<>M<>S<>S<>U<>H<EFBFBD><0F>.<2E>.<2E><17><0F><0F> <0A>"<22>8<EFBFBD>*<2A>,D<>E<>F<> <1A>rSc<00>F<00>[RS:wa<>[S5 [S5 [S[R35 [S5 [S5 [S5 [5 [S5R 5R 5nUS:wa![S 5 [R "S
5 g [5nUS ;a<>[S5 [S 5 [S5 [S5 [5 [S5 [S5 [S5 [S5 [S5 [5 [S5R 5R 5nUS:wa![S 5 [R "S
5 [U5nU$)z8Detect supported distributions and warn when unsupported<65>linuxrlu<⚠️ WARNING: ZDTT Terminal is designed for Linux systemsz Detected platform: z+ZDTT may not work correctly on your system.z+Some features may be unavailable or broken.zContinue anyway? (yes/no): <20>yes<65>Installation cancelled.rra)r
ru2⚠️ WARNING: Unsupported Distribution DetectedzCZDTT Terminal is optimized for Debian-based and Arch Linux systems.z-Running on your current system may result in:u, • Some commands may not work as expectedu$ • Auto-install features may failu" • Reduced plugin compatibilityu- • Package management commands unavailablez!Continue installation? (yes/no): ) <09>sys<79>platformrnror9rK<00>exitrjrs)<02>response<73>distros rB<00>check_system_compatibilityr}<00>sB<00><00> <0B>|<7C>|<7C>w<EFBFBD><1E> <0A>h<EFBFBD><0F> <0A>L<>M<> <0A>&<26>s<EFBFBD>|<7C>|<7C>n<EFBFBD>5<>6<> <0A>h<EFBFBD><0F> <0A>;<3B><<3C> <0A>;<3B><<3C> <0A><07><18>6<>7<>=<3D>=<3D>?<3F>E<>E<>G<><08> <13>u<EFBFBD> <1C> <11>+<2B> ,<2C> <0F>H<EFBFBD>H<EFBFBD>Q<EFBFBD>K<EFBFBD><16>&<26> '<27>F<EFBFBD> <0A>'<27>'<27> <0A>h<EFBFBD><0F> <0A>B<>C<> <0A>h<EFBFBD><0F> <0A>S<>T<> <0A><07> <0A>=<3D>><3E> <0A><<3C>=<3D> <0A>4<>5<> <0A>2<>3<> <0A>=<3D>><3E> <0A><07><18><<3C>=<3D>C<>C<>E<>K<>K<>M<><08> <13>u<EFBFBD> <1C> <11>+<2B> ,<2C> <0F>H<EFBFBD>H<EFBFBD>Q<EFBFBD>K<EFBFBD>%<25>V<EFBFBD> ,<2C>F<EFBFBD> <11>MrSc<00>n<00>\rSrSrS=SjrSrSrSrSrSr Sr
S r S
r S r S rS rSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSr Sr!S r"S!r#S"r$S#r%S$r&S%r'S&r(S'r)S(r*S)r+S*r,S+r-S,r.S-r/S.r0S/r1S0r2S1r3S2r4S3r5S4r6S5r7S6r8S7r9S8r:S9r;S:r<S;r=g<)><3E> ZDTTTerminal<61><6C>c<00><00>[R"5UlSUl[R
"5UlXlUS:HUlUS:HUl UR=(d URUl
[RRS5Ul [RRS5Ul[RRURS5Ul[RRURS5Ul[RRURS5Ul[RRURS 5Ul[RRURS
5UlS UlSUl[.R0"5UlS UlUR75 0UlUR;5 UR=5UlURA5 S Ul!SUl"SUl#SUl$SUl%0SURL_SURN_SURP_SURR_SURT_SURV_SURX_SURZ_SUR\_SUR^_SUR`_SURb_SURd_SURf_SURh_S URj_S!URl_URnURpURrURtURvURxURzUR|UR~UR<>UR<>UR<>UR<>UR<>UR<>S".EUlFUR<>5 UR<>5 UR<>5 g)#NTr
rz~/.zdttz~/.zdtt_history<72>pluginszplugin_errors.logz
banner.txt<78>aliasesz config.jsonr*Fzzzzz<31>help<6C>clearrz<00>quit<69>about<75>echo<68>history<72>alias<61>unalias<61>zps<70>time<6D> statusbar<61>ls<6C>pwd<77>cd<63>cat)<0F>nano<6E> fastfetch<63>mkdir<69>touch<63>rm<72>mv<6D>cp<63>whoami<6D>date<74>uname<6D>grep<65>python<6F>python3<6E>pip<69>pip3)J<>getpass<73>getuser<65>username<6D>runningrW<00>getcwd<77> current_dirr|<00> is_debian<61>is_arch<63> is_supportedrX<00>
expanduser<EFBFBD>zdtt_dir<69> history_file<6C>join<69>
plugin_dir<EFBFBD>log_file<6C> banner_file<6C> aliases_file<6C> config_file<6C>status_bar_color<6F>status_bar_thread<61> threading<6E>Event<6E>status_bar_stop_event<6E>scroll_region_set<65> setup_loggingr<67><00> load_aliases<65> read_version<6F>version<6F>load_preferences<65> COLOR_RESET<45> COLOR_GREEN<45>
COLOR_BLUE<EFBFBD>
COLOR_CYAN<EFBFBD>
COLOR_BOLD<EFBFBD>cmd_help<6C> cmd_clear<61>cmd_exit<69>cmd_quit<69> cmd_about<75>cmd_echo<68> cmd_history<72> cmd_plugins<6E> cmd_alias<61> cmd_unalias<61>cmd_zps<70>cmd_time<6D> cmd_statusbar<61>cmd_ls<6C>cmd_pwd<77>cmd_cd<63>cmd_cat<61>cmd_nano<6E> cmd_fastfetch<63> cmd_mkdir<69> cmd_touch<63>cmd_rm<72>cmd_mv<6D>cmd_cp<63>
cmd_whoami<EFBFBD>cmd_date<74> cmd_uname<6D>cmd_grep<65>
cmd_python<EFBFBD> cmd_python3<6E>cmd_pip<69>cmd_pip3<70>commands<64>setup_readline<6E> load_plugins<6E>check_for_updates)<02>selfr|s rB<00>__init__<5F>ZDTTTerminal.__init__<5F>sY<00><00><1F><0F><0F>)<29><04> <0A><1B><04> <0C><1D>9<EFBFBD>9<EFBFBD>;<3B><04><18><1C> <0B><1F>8<EFBFBD>+<2B><04><0E><1D><16>'<27><04> <0C> <20>N<EFBFBD>N<EFBFBD>:<3A>d<EFBFBD>l<EFBFBD>l<EFBFBD><04><19><1A><07><07>*<2A>*<2A>9<EFBFBD>5<><04> <0A><1E>G<EFBFBD>G<EFBFBD>.<2E>.<2E>/@<40>A<><04><19><1C>'<27>'<27>,<2C>,<2C>t<EFBFBD>}<7D>}<7D>i<EFBFBD>@<40><04><0F><1A><07><07> <0C> <0C>T<EFBFBD>]<5D>]<5D>4G<34>H<><04> <0A><1D>7<EFBFBD>7<EFBFBD><<3C><<3C><04> <0A> <0A>|<7C>D<><04><18><1E>G<EFBFBD>G<EFBFBD>L<EFBFBD>L<EFBFBD><14><1D><1D> <09>B<><04><19><1D>7<EFBFBD>7<EFBFBD><<3C><<3C><04> <0A> <0A>}<7D>E<><04><18> &<26><04><1D>!%<25><04><1E>%.<2E>_<EFBFBD>_<EFBFBD>%6<><04>"<22>!&<26><04><1E> <0A><1A><1A><1C><1A><04> <0C> <0C><19><19><1B><1C>(<28>(<28>*<2A><04> <0C> <0A><1D><1D><1F>%<25><04><18>%<25><04><18>$<24><04><0F>$<24><04><0F>#<23><04><0F>#
<EFBFBD> <12>D<EFBFBD>M<EFBFBD>M<EFBFBD>#
<EFBFBD> <13>T<EFBFBD>^<5E>^<5E>#
<EFBFBD> <13>D<EFBFBD>M<EFBFBD>M<EFBFBD>#
<EFBFBD> <13>D<EFBFBD>M<EFBFBD>M<EFBFBD> #
<EFBFBD>
<14>T<EFBFBD>^<5E>^<5E> #
<EFBFBD> <13>D<EFBFBD>M<EFBFBD>M<EFBFBD> #
<EFBFBD> <16>t<EFBFBD>'<27>'<27>#
<EFBFBD> <16>t<EFBFBD>'<27>'<27>#
<EFBFBD> <14>T<EFBFBD>^<5E>^<5E>#
<EFBFBD> <16>t<EFBFBD>'<27>'<27>#
<EFBFBD> <12>4<EFBFBD><<3C><<3C>#
<EFBFBD> <13>D<EFBFBD>M<EFBFBD>M<EFBFBD>#
<EFBFBD> <18><14>+<2B>+<2B>#
<EFBFBD> <11>$<24>+<2B>+<2B>#
<EFBFBD> <12>4<EFBFBD><<3C><<3C>!#
<EFBFBD>" <11>$<24>+<2B>+<2B>##
<EFBFBD>$ <12>4<EFBFBD><<3C><<3C>%#
<EFBFBD>&<19>M<EFBFBD>M<EFBFBD><1D>+<2B>+<2B><19>^<5E>^<5E><19>^<5E>^<5E><16>+<2B>+<2B><16>+<2B>+<2B><16>+<2B>+<2B><1A>o<EFBFBD>o<EFBFBD><18>M<EFBFBD>M<EFBFBD><19>^<5E>^<5E><18>M<EFBFBD>M<EFBFBD><1A>o<EFBFBD>o<EFBFBD><1B>'<27>'<27><17><<3C><<3C><18>M<EFBFBD>M<EFBFBD>E#
<EFBFBD><04> <0A>L <0A><1B><1B><1D> <0A><19><19><1B> <0A><1E><1E> rSc<00><><00>[R"URSS9 [R"UR
[R SSS9 g)zSetup logging for plugin errorsT<73><01>exist_okz)%(asctime)s - %(levelname)s - %(message)s<>%Y-%m-%d %H:%M:%S)<04>filename<6D>level<65>format<61>datefmtN)rW<00>makedirsr<73><00>logging<6E> basicConfigr<67><00>ERROR<4F>r<>s rBr<><00>ZDTTTerminal.setup_loggings:<00><00> <0B> <0B> <0B>D<EFBFBD>M<EFBFBD>M<EFBFBD>D<EFBFBD>1<> <10><1B><1B><19>]<5D>]<5D><19>-<2D>-<2D>><3E>'<27> 
rSc<00><><00>[RR[RR[5S5[RR S5/nUH8n[ US5nUR5R5sSSS5 s $ g!,(df  ML=f![a M\f=f)z"Read version from version.txt filez version.txtz~/.local/share/zdtt/version.txtr3Nz0.0.1.a)
rWrXr<><00>dirname<6D>__file__r<5F>r8<00>readr9r<)r<><00> version_pathsrXr>s rBr<><00>ZDTTTerminal.read_version*s<><00><00> <0F>G<EFBFBD>G<EFBFBD>L<EFBFBD>L<EFBFBD><12><17><17><1F><1F><18>2<>M<EFBFBD> B<> <0E>G<EFBFBD>G<EFBFBD> <1E> <1E>@<40> A<>
<EFBFBD> <0A>
"<22>D<EFBFBD> <19><19>$<24><03>_<EFBFBD><01><1C>6<EFBFBD>6<EFBFBD>8<EFBFBD>><3E>><3E>+<2B>%<25>_<EFBFBD>"<22><19> %<25>_<EFBFBD><5F>$<24> <19><18> <19>s0<00>' B2<02>3B <05> B2<02>
B/ <09>*B2<02>/B2<02>2
C<05>?Cc<00>J<00>[URS5n[R"U5nSSS5 WR SUR
5Ulg!,(df  N0=f![ a g[Ra [R"S5 gf=f)z/Load user preferences such as status bar color.r3Nr<4E>z.Preferences file is corrupted; using defaults.)
r8r<><00>json<6F>loadrcr<>r<<00>JSONDecodeErrorr<72><00>warning)r<>r>r=s rBr<><00>ZDTTTerminal.load_preferences<s<00><00> N<01><15>d<EFBFBD>&<26>&<26><03>,<2C><01><1B>y<EFBFBD>y<EFBFBD><11>|<7C><04>-<2D>$(<28>H<EFBFBD>H<EFBFBD>-?<3F><14>AV<41>AV<41>$W<>D<EFBFBD> !<21>-<2D>,<2C><>!<21> <11> <10><13>#<23>#<23> N<01> <13>O<EFBFBD>O<EFBFBD>L<> M<> N<01>s-<00>A*<00>A<03>)A*<00>
A'<07>#A*<00>*
B"<03>6)B"<03>!B"c<00><><00>0n[URS5n[R"U5nSSS5 UR US'[URS5n[R"XSS9 SSS5 g!,(df  NR=f![[R
4a 0nNsf=f!,(df  g=f)zPersist user preferences.r3Nr<4E><00>w<>)<01>indent)r8r<>rrr<rr<><00>dump)r<>r=r>s rB<00>save_preferences<65>ZDTTTerminal.save_preferencesGs<><00><00><11><04> <16><15>d<EFBFBD>&<26>&<26><03>,<2C><01><1B>y<EFBFBD>y<EFBFBD><11>|<7C><04>-<2D>
$(<28>#8<>#8<><04> <1F> <20> <11>$<24>"<22>"<22>C<EFBFBD> (<28>A<EFBFBD> <10>I<EFBFBD>I<EFBFBD>d<EFBFBD>a<EFBFBD> (<28>)<29> (<28>-<2D>,<2C><>!<21>4<EFBFBD>#7<>#7<>8<> <16><15>D<EFBFBD> <16><>
)<29> (<28>s9<00>B<00>A=<03>B<00>B0<03>=
B <07>B<00> B<00>B-<03>,B-<03>0
B>c<00><><00>Sn[RRUSS9nUR5R S5R 5nSSS5 WUR :wa;[5 [SUR SU35 [S5 [5 gg!,(df  NZ=f![a gf=f) z#Check if a new version is availablez)https://zdtt-sources.zane.org/version.txtr<00><01>timeoutzutf-8Nu 🔔 Update available! Current: u → Latest: z Run 'zdtt update' to update) <09>urllib<69>request<73>urlopenr<6E><00>decoder9r<>rn<00> Exception)r<><00>urlr{<00>remote_versions rBr<><00>ZDTTTerminal.check_for_updatesUs<><00><00> <11>=<3D>C<EFBFBD><17><1E><1E>'<27>'<27><03>Q<EFBFBD>'<27>7<>8<EFBFBD>!)<29><1D><1D><1F>!7<>!7<><07>!@<40>!F<>!F<>!H<><0E>8<><1E><14><1C><1C>-<2D><15><07><15>8<><14><1C><1C><0E>m<EFBFBD>Tb<54>Sc<53>d<>e<><15>6<>7<><15><07> .<2E> 8<>7<><37><19> <11> <10> <11>s)<00> B5<00>.B$<03>AB5<00>$
B2<07>.B5<00>5
C<03>Cc<00><><00>[5 [R"5nUR(dSOSnSnURU:dUR
U:a?[SUR 35 UR(d [S5 [5 g[RRUR5(a<>[URS5nUR5nSU;aURSUR 5n[U5 UR(dUR5 SSS5 gS
UR S 3n[U5 UR(dUR5 gg![a N<>f=f!,(df  N\=f![a#n[ R""S U35 SnAN<>SnAff=f) zADisplay the ZDTT ASCII art banner (or custom banner if available)<29> <00> <00>,zZDTT Terminal vu,⚠️ Unsupported system - limited supportNr3z {version}zFailed to load custom banner: u<>
░█████████ ░███████ ░██████████░██████████
░██ ░██ ░██ ░██ ░██
░██ ░██ ░██ ░██ ░██
░███ ░██ ░██ ░██ ░██
░██ ░██ ░██ ░██ ░██
░██ ░██ ░██ ░██ ░██
░█████████ ░███████ ░██ ░██
ZDTT Terminal v<>
)rnrf<00>get_terminal_sizer<65><00>columns<6E>linesr<73>rrWrXrYr<>r8r<>rJ<00>_show_compatibility_warningr<67><00>error)r<><00> term_size<7A>
min_height<EFBFBD> min_widthr><00> custom_banner<65>e<>banners rB<00>display_banner<65>ZDTTTerminal.display_bannergs<><00><00> <0A><07> <11><1E>0<>0<>2<>I<EFBFBD>$(<28>#4<>#4<><12>"<22>J<EFBFBD><1A>I<EFBFBD><18> <20> <20>9<EFBFBD>,<2C> <09><0F><0F>*<2A>0L<30><15><0F><04> <0C> <0C>~<7E>6<>7<><1B>(<28>(<28><19>H<>I<><15><07><16> 1M<01> <0E>7<EFBFBD>7<EFBFBD>><3E>><3E>$<24>*<2A>*<2A> +<2B> +<2B> D<01><19>$<24>*<2A>*<2A>C<EFBFBD>0<>A<EFBFBD>$%<25>F<EFBFBD>F<EFBFBD>H<EFBFBD>M<EFBFBD>"<22>m<EFBFBD>3<>(5<>(=<3D>(=<3D>k<EFBFBD>4<EFBFBD><<3C><<3C>(X<> <0A><19>-<2D>(<28><1F>,<2C>,<2C><1C>8<>8<>:<3A><1A>1<>0<>
<10><15> <0C> <0C>~<7E><01> <04><06> <0E>f<EFBFBD> <0A><14> <20> <20> <10> ,<2C> ,<2C> .<2E>!<21><>K<19> <11> <10> <11><>1<>0<><30><1D> D<01><17> <0A> <0A> ><3E>q<EFBFBD>c<EFBFBD>B<>C<>C<><43> D<01>sI<00>B
F<00>F%<00>A F<03>=F%<00>
F<03>F<03>
F"<07>F%<00>"F%<00>%
G<03>/G <03> Gc<00>|<00>UR(ag[5 [S5 [S5 [5 g)z2Show compatibility warning for unsupported systemsNu7⚠️ Running on unsupported system - limited supportz8 Tested on Debian-based and Arch Linux distributions.)r<>rnr<>s rBr<00>(ZDTTTerminal._show_compatibility_warning<6E>s*<00><00> <0F> <1C> <1C> <12> <0A><07> <0A>G<>H<> <0A>H<>I<> <0A>rSc<00>d<00>UR5 UR5 UR5 g)z?Reserve the first terminal row and start the status bar thread.N)<03>_set_scroll_region<6F>_start_status_bar_thread<61>_render_status_barr<72>s rB<00>initialize_status_bar<61>"ZDTTTerminal.initialize_status_bar<61>s&<00><00> <0C><1F><1F>!<21> <0C>%<25>%<25>'<27> <0C><1F><1F>!rSc<00><><00>URR5 UR(a8URR5(aURR SS9 SUlUR 5 g)z6Stop the status bar thread and release terminal state.g<00>?r N)r<>rIr<><00>is_aliver<65><00>_reset_scroll_regionr<6E>s rB<00>shutdown_status_bar<61> ZDTTTerminal.shutdown_status_bar<61>s\<00><00> <0C>"<22>"<22>&<26>&<26>(<28> <0F> !<21> !<21>d<EFBFBD>&<<3C>&<<3C>&E<>&E<>&G<>&G<> <10> "<22> "<22> '<27> '<27><03> '<27> 4<>!%<25><04><1E> <0C>!<21>!<21>#rSc<00><00>UR(a URR5(agURR5 [R
"UR SSS9UlURR5 g)N<> ZDTTStatusBarT)<03>target<65>name<6D>daemon)r<>r2r<>r<>r<><00>Thread<61>_status_bar_loop<6F>startr<74>s rBr-<00>%ZDTTTerminal._start_status_bar_thread<61>sj<00><00> <0F> !<21> !<21>d<EFBFBD>&<<3C>&<<3C>&E<>&E<>&G<>&G<> <12> <0C>"<22>"<22>(<28>(<28>*<2A>!*<2A>!1<>!1<><17>(<28>(<28> <20><17>"
<EFBFBD><04><1E>
<0A><1E><1E>$<24>$<24>&rSc<00><><00>URR5(dSUR5 URRS5(agURR5(dMRgg)Nr)r<><00>is_setr.<00>waitr<74>s rBr<<00>ZDTTTerminal._status_bar_loop<6F>sT<00><00><16>,<2C>,<2C>3<>3<>5<>5<> <10> #<23> #<23> %<25><13>)<29>)<29>.<2E>.<2E>q<EFBFBD>1<>1<><15><17>,<2C>,<2C>3<>3<>5<>5rSc<00> <00>UR5n[RRS5 [RRS5 [RRS5 [RRU5 [RRUR5 [RRS5 [RR 5 g![ a [U5 gf=f)z7Render a single-line status bar with branding and time.z<><31>zN)<08>_build_status_bar_textrx<00>stdout<75>writer<65><00>flushrrn)r<><00>bar_texts rBr.<00>ZDTTTerminal._render_status_bar<61>s<><00><00><17>.<2E>.<2E>0<><08> <1C> <0F>J<EFBFBD>J<EFBFBD> <1C> <1C>X<EFBFBD> &<26> <0F>J<EFBFBD>J<EFBFBD> <1C> <1C>[<5B> )<29> <0F>J<EFBFBD>J<EFBFBD> <1C> <1C>Y<EFBFBD> '<27> <0F>J<EFBFBD>J<EFBFBD> <1C> <1C>X<EFBFBD> &<26> <0F>J<EFBFBD>J<EFBFBD> <1C> <1C>T<EFBFBD>-<2D>-<2D> .<2E> <0F>J<EFBFBD>J<EFBFBD> <1C> <1C>X<EFBFBD> &<26> <0F>J<EFBFBD>J<EFBFBD> <1C> <1C> <1E><><18> <1C> <11>(<28>O<EFBFBD> <1C>s<00>C"C5<00>5D <03> D c<00>T<00>Sn[R"5RS5R5n[R
"5n[ UR[U5[U5-S-5n[ U[U5-
[U5-
S-
S5nSUSU-US3n[U5U:aURU5nOUSUn[RURS5upxSUS US
U3$![a [U5[U5-S-nN<>f=f) NzZDTT by ZaneDevz%I:%M:%p<>rr6rGrzm[<5B>m)r<00>now<6F>strftimerKrfr<00>maxr<00>lenr<00>ljust<73>STATUS_BAR_COLORSrcr<>) r<><00> left_text<78>time_strr!<00>width<74>padding<6E> bar_plain<69>bg_code<64>fg_codes rBrF<00>#ZDTTTerminal._build_status_bar_text<78>s<00><00>%<25> <09><1B><<3C><<3C>><3E>*<2A>*<2A>:<3A>6<><<3C><<3C>><3E><08> 7<><1E>0<>0<>2<>I<EFBFBD><17> <09>)<29>)<29>3<EFBFBD>y<EFBFBD>><3E>C<EFBFBD><08>M<EFBFBD>+I<>A<EFBFBD>+M<>N<>E<EFBFBD><16>e<EFBFBD>c<EFBFBD>)<29>n<EFBFBD>,<2C>s<EFBFBD>8<EFBFBD>}<7D><<3C>q<EFBFBD>@<40>!<21>D<><07><17> <09>{<7B>3<EFBFBD><17>=<3D>/<2F>(<28><1A>1<EFBFBD>=<3D> <09> <0E>y<EFBFBD>><3E>E<EFBFBD> !<21>!<21><0F><0F><05>.<2E>I<EFBFBD>!<21>&<26>5<EFBFBD>)<29>I<EFBFBD>,<2C>0<>0<><14>1F<31>1F<31> <0C>U<><18><07><16>w<EFBFBD>i<EFBFBD>v<EFBFBD>g<EFBFBD>Y<EFBFBD>a<EFBFBD> <09>{<7B>;<3B>;<3B><><19> 7<><17> <09>N<EFBFBD>S<EFBFBD><18>]<5D>2<>Q<EFBFBD>6<>E<EFBFBD> 7<>s<00>AD<00>$D'<03>&D'c<00><><00>[R"5Rn[US5n[R
R SUS35 [R
R S5 [R
R S5 [R
R S5 [R
R5 SUlg ![a
SUlg f=f)
z'Reserve the top row for the status bar.rz3rDrEzTFN)
rfrrrQrxrGrHrIr<>r)r<><00>rowss rBr,<00>ZDTTTerminal._set_scroll_region<6F>s<><00><00>
+<2B><19>+<2B>+<2B>-<2D>3<>3<>D<EFBFBD><16>t<EFBFBD>Q<EFBFBD><<3C>D<EFBFBD> <0F>J<EFBFBD>J<EFBFBD> <1C> <1C>w<EFBFBD>t<EFBFBD>f<EFBFBD>A<EFBFBD>.<2E> /<2F> <0F>J<EFBFBD>J<EFBFBD> <1C> <1C>[<5B> )<29> <0F>J<EFBFBD>J<EFBFBD> <1C> <1C>Y<EFBFBD> '<27> <0F>J<EFBFBD>J<EFBFBD> <1C> <1C>[<5B> )<29> <0F>J<EFBFBD>J<EFBFBD> <1C> <1C> <1E>%)<29>D<EFBFBD> "<22><><18> +<2B>%*<2A>D<EFBFBD> "<22> +<2B>s<00>CC<00>C'<03>&C'c<00><><00>UR(dg[RRS5 [RR 5 SUlg)z#Restore default scrolling behavior.NzF)r<>rxrGrHrIr<>s rBr3<00>!ZDTTTerminal._reset_scroll_region<6F>s8<00><00><13>%<25>%<25> <12> <0B>
<EFBFBD>
<EFBFBD><18><18><18>"<22> <0B>
<EFBFBD>
<EFBFBD><18><18><1A>!&<26><04>rSc<00><><00>[R"UR5 [R"S5 [
R "[RUR5 [R"UR5 [R"S5 [R"S5 g![a N<>f=f)z-Setup readline for history and tab completioni<6E>z tab: completezset editing-mode emacsN) <0B>readline<6E>read_history_filer<65>r<<00>set_history_length<74>atexit<69>register<65>write_history_file<6C> set_completer<65>complete<74>parse_and_bindr<64>s rBr<><00>ZDTTTerminal.setup_readlines<><00><00> <11> <14> &<26> &<26>t<EFBFBD>'8<>'8<> 9<>
<11>#<23>#<23>D<EFBFBD>)<29> <0F><0F><0F><08>3<>3<>T<EFBFBD>5F<35>5F<35>G<> <11><1E><1E>t<EFBFBD>}<7D>}<7D>-<2D><10><1F><1F><0F>0<> <11><1F><1F> 8<>9<><39>!<21> <11> <10> <11>s<00> B4<00>4
C<03>Cc<00><><00>/n[R"5nURU5(dSUS[R"5;a<>URR 5Vs/sHoURU5(dMUPM nnUR URR 5Vs/sHofRU5(dMUPM sn5 O]URS5(a[RRU5nU(dSnOUS-n[R"U5nUnU[U5:aX2$gs snfs snf! /nN$=f)zTab completion functionrGN<>~<7E>*) rc<00>get_line_bufferr:<00>
get_begidxr<EFBFBD><00>keys<79>extendr<64>rWrXr<><00>globrR) r<><00>text<78>state<74>optionsr?<00>cmdr<64><00>pattern<72>matchess rBrj<00>ZDTTTerminal.completes"<00><00><15><07><18>'<27>'<27>)<29><04> <10>?<3F>?<3F>4<EFBFBD> <20> <20>C<EFBFBD>t<EFBFBD>4J<34>X<EFBFBD>5H<35>5H<35>5J<35>/K<>$K<>&*<2A>m<EFBFBD>m<EFBFBD>&8<>&8<>&:<3A>S<>&:<3A>s<EFBFBD>n<EFBFBD>n<EFBFBD>T<EFBFBD>>R<>s<EFBFBD>&:<3A>G<EFBFBD>S<> <13>N<EFBFBD>N<EFBFBD>t<EFBFBD>|<7C>|<7C>/@<40>/@<40>/B<>]<5D>/B<>e<EFBFBD>FV<46>FV<46>W[<5B>F\<5C>E<EFBFBD>/B<>]<5D> ^<5E><14><EFBFBD><EFBFBD>s<EFBFBD>#<23>#<23><19>w<EFBFBD>w<EFBFBD>)<29>)<29>$<24>/<2F><04><18><1D><07><1E><13>*<2A><07> <1D><1E>)<29>)<29>G<EFBFBD>,<2C><07>!<21><07>
<11>3<EFBFBD>w<EFBFBD><<3C> <1F><1A>><3E> !<21><13><>/T<01><>]<5D><> <1D><1C><07>s$<00>&E<04>E<04>2E<08>E<08>"E<00>Ec
<00><><00>[RRUR5(d [R"URSS9 g[
R
"[RR URS55nSnSnUH<>n[RRU5SSn[US5nUR5nSSS5 0n[WU5 SU;aLUS"5n [U [5(a"URRU 5 US - nM<>[S
5e[S 5e US:<3A>a[)SUS35 gg!,(df  N<>=f![ aOn
US - n["R$"S WS ['U
535 ["R$"SU35 Sn
A
GM4Sn
A
ff=f)z/Load plugin commands from the plugins directoryTr<54>N<>*.pyr<00><><EFBFBD><EFBFBD><EFBFBD>r3<00>register_commandsr6z,register_commands() must return a dictionaryz+Plugin missing register_commands() functionzFailed to load plugin '<27>': z Plugin file: u⚠ z: plugin(s) failed to load. Check ~/.zdtt/plugin_errors.log)rWrXrYr<>r<>rtr<><00>basenamer8r<><00>exec<65>
isinstance<EFBFBD>dictr<74><00>update<74>
ValueErrorrr<>r <00>strrn) r<><00> plugin_files<65> loaded_count<6E> failed_count<6E> plugin_file<6C> plugin_namer><00> plugin_code<64>plugin_namespace<63>plugin_commandsr%s rBr<><00>ZDTTTerminal.load_plugins:s<><00><00><11>w<EFBFBD>w<EFBFBD>~<7E>~<7E>d<EFBFBD>o<EFBFBD>o<EFBFBD>.<2E>.<2E> <0E>K<EFBFBD>K<EFBFBD><04><0F><0F>$<24> 7<> <12><1C>y<EFBFBD>y<EFBFBD><12><17><17><1C><1C>d<EFBFBD>o<EFBFBD>o<EFBFBD>v<EFBFBD>!F<>G<> <0C><18> <0C><18> <0C>'<27>K<EFBFBD> =<3D> <20>g<EFBFBD>g<EFBFBD>.<2E>.<2E>{<7B>;<3B>C<EFBFBD>R<EFBFBD>@<40> <0B><1A>+<2B>s<EFBFBD>+<2B>q<EFBFBD>"#<23>&<26>&<26>(<28>K<EFBFBD>,<2C>$&<26> <20><14>[<5B>"2<>3<>'<27>*:<3A>:<3A>&6<>7J<37>&K<>&M<>O<EFBFBD>!<21>/<2F>4<EFBFBD>8<>8<><1C> <0A> <0A>,<2C>,<2C>_<EFBFBD>=<3D>$<24><01>)<29> <0C>(<28>)W<>X<>X<>$<24>%R<>S<>S<>-(<28>> <18>!<21> <1B> <11>D<EFBFBD><1C><0E>&`<60>a<> b<> <1C>3,<2C>+<2B><>$<1D> =<3D><1C><01>!<21> <0C><17> <0A> <0A> 7<> <0B>}<7D>C<EFBFBD><03>A<EFBFBD><06>x<EFBFBD>P<>Q<><17> <0A> <0A> <0A>k<EFBFBD>]<5D>;<3B><<3C><<3C><>  =<3D>s8<00>.E3<02>E"<05>AE3<02>3E3<02>"
E0 <09>,E3<02>3
G <05>=AG<05>G c<00>L<00>[RRUR5(dg[ URS5nUH<>nUR 5nU(aUR S5(aM2SU;dM:URSS5up4UR 5nUR 5nU(dMwU(dM<>X@RU'M<> SSS5 g!,(df  g=f![a#n[R"SU35 SnAgSnAff=f)z#Load user-defined aliases from fileNr3r4r5r6zFailed to load aliases: ) rWrXrYr<>r8r9r:r;r<>rr<>r )r<>r>r?r9<00>commandr%s rBr<><00>ZDTTTerminal.load_aliasesgs<><00><00><11>w<EFBFBD>w<EFBFBD>~<7E>~<7E>d<EFBFBD>/<2F>/<2F>0<>0<> <12> :<3A><15>d<EFBFBD>'<27>'<27><13>-<2D><11><1D>D<EFBFBD><1F>:<3A>:<3A><<3C>D<EFBFBD><1F>4<EFBFBD>?<3F>?<3F>3<EFBFBD>#7<>#7<> <20><1B>d<EFBFBD>{<7B>(,<2C>
<EFBFBD>
<EFBFBD>3<EFBFBD><01>(:<3A> <0A><04>#<23>z<EFBFBD>z<EFBFBD>|<7C><04>")<29>-<2D>-<2D>/<2F><07><1F>4<EFBFBD>G<EFBFBD>G<EFBFBD>18<31>L<EFBFBD>L<EFBFBD><14>.<2E><1E>.<2E>-<2D>-<2D><><19> :<3A> <13>M<EFBFBD>M<EFBFBD>4<>Q<EFBFBD>C<EFBFBD>8<> 9<> 9<><39> :<3A>sG<00>C6<00>9C%<03>9C%<03>C%<03>
C%<03>C6<00>%
C3<07>/C6<00>3C6<00>6
D#<03>D<03>D#c<00><><00>[URS5nURS5 URS5 URS5 [URR 55Hup#URUSUS35 M SSS5 g!,(df  g=f![ a1n[R"SU35 [S U35 SnAgSnAff=f)
zSave aliases to filerz# ZDTT Terminal Aliases
z# Format: alias_name=command
z#
r5rNzFailed to save aliases: zError: Failed to save aliases: )
r8r<>rH<00>sortedr<64><00>itemsrr<>r rn)r<>r>r9r<>r%s rB<00> save_aliases<65>ZDTTTerminal.save_aliases~s<><00><00> 9<><15>d<EFBFBD>'<27>'<27><13>-<2D><11><11><07><07>3<>4<><11><07><07>8<>9<><11><07><07><05><0E>%+<2B>D<EFBFBD>L<EFBFBD>L<EFBFBD>,><3E>,><3E>,@<40>%A<>M<EFBFBD>D<EFBFBD><15>G<EFBFBD>G<EFBFBD>t<EFBFBD>f<EFBFBD>A<EFBFBD>g<EFBFBD>Y<EFBFBD>b<EFBFBD>1<>2<>&B<01> .<2E>-<2D>-<2D><> <19> 9<> <13>M<EFBFBD>M<EFBFBD>4<>Q<EFBFBD>C<EFBFBD>8<> 9<> <11>3<>A<EFBFBD>3<EFBFBD>7<> 8<> 8<><38> 9<>s5<00>B)<00>A7B<03>B)<00>
B&<07>"B)<00>&B)<00>)
C$<03>3'C<03>C$c<00><><00>UR5R5nU(dU$USnX0R;a:URUn[U5S:<3A>aUSSR USS5-- nU$U$)zExpand aliases in command linerr6rGN)r9r;r<>rRr<>)r<><00> command_line<6E>partsrx<00>expandeds rB<00>expand_aliases<65>ZDTTTerminal.expand_aliases<65>sy<00><00><1C>"<22>"<22>$<24>*<2A>*<2A>,<2C><05><14><1F> <1F><14>A<EFBFBD>h<EFBFBD><03> <0E>,<2C>,<2C> <1E><1B>|<7C>|<7C>C<EFBFBD>(<28>H<EFBFBD><12>5<EFBFBD>z<EFBFBD>A<EFBFBD>~<7E><18>C<EFBFBD>#<23>(<28>(<28>5<EFBFBD><11><12>9<EFBFBD>"5<>5<>5<><08><1B>O<EFBFBD><1B>rSc<00><><00>[R"5n[RRS5nUR U5(aSU[ U5S-nOUnSnSnSUUR UURUURUSUURUSUURUSUURUUUURUS 3nU$)
z+Return the custom prompt string with colorsrnN<><01><02>[<5B>@<40>ZDTTrGz]=> ) rWr<>rXr<>r:rRr<>r<>r<>r<>r<>)r<><00>cwd<77>home<6D> display_path<74>RL_PROMPT_START<52> RL_PROMPT_END<4E>prompts rB<00>
get_prompt<EFBFBD>ZDTTTerminal.get_prompt<70>s<><00><00><11>i<EFBFBD>i<EFBFBD>k<EFBFBD><03><11>w<EFBFBD>w<EFBFBD>!<21>!<21>#<23>&<26><04> <0E>><3E>><3E>$<24> <1F> <1F><1E><13>S<EFBFBD><14>Y<EFBFBD>Z<EFBFBD><1F>0<>L<EFBFBD><1E>L<EFBFBD>!<21><0F><1E> <0A><16>o<EFBFBD>&<26>t<EFBFBD>'7<>'7<>&8<><1D><0F><04> <0A> <0A><EFBFBD>#<23>$<24>T<EFBFBD>%5<>%5<>$6<>}<7D>o<EFBFBD><14>_<EFBFBD>%<25>d<EFBFBD>o<EFBFBD>o<EFBFBD>%6<>}<7D>o<EFBFBD>T<EFBFBD>/<2F>IZ<49>[_<>[k<>[k<>Zl<5A>mz<6D>l{<7B>{|<7C>#<23>$<24>T<EFBFBD>_<EFBFBD>_<EFBFBD>$5<>m<EFBFBD>_<EFBFBD>\<5C>N<EFBFBD>#<23>$<24>T<EFBFBD>%5<>%5<>$6<>}<7D>o<EFBFBD>T<EFBFBD> K<01><06>
<16> rSc<00><><00>[S5 [S5 [S5 [S5 [S5 [S5 [S5 [S5 [S 5 [S
5 [S 5 [S 5 [S 5 [S5 [5 [S5 [S5 [S5 [S5 [S5 [S5 [S5 [S5 [S5 [S5 [S5 [5 [S5 [S5 [S5 [S5 [S5 [S5 [5 [S 5 [S!5 [S"5 [S#5 [S$5 [5 [S%5 [S&5 [S'5 [S(5 [S)5 [5 g*)+zDisplay available commandsz
ZDTT Terminal Commands:z2 help - Display this help messagez) clear - Clear the screenz' echo <message> - Echo a messagez, about - About ZDTT Terminalz- history - Show command historyz/ plugins [reload] - List or reload pluginsz: alias [name=cmd] - Create or display command aliasesz( unalias <name> - Remove an alias<61>0 zps install <url> - Install plugin from URLzA time [options] - Display date/time (MM/DD/YY 12h default)z< statusbar color <name> - Change status bar highlight colorz4 exit - Exit ZDTT (return to shell)z7 quit - Quit and close terminal windowzFile System Commands:z0 ls [options] - List directory contentsz0 pwd - Print working directoryz) cd <directory> - Change directoryz. cat <file> - Display file contentsz) mkdir <directory> - Create directoryz* touch <file> - Create empty filezC rm [-rf] <file> - Remove file/directory (prompts without -f)z) mv <src> <dest> - Move/rename filez" cp [-r] <src> <dest> - Copy filez4 grep <pattern> <file> - Search for pattern in filezSystem Commands:z- whoami - Display current userz2 date - Display current date/timez3 uname [options] - Display system informationz, nano <file> - Edit file with nanoz< fastfetch - Display system info (auto-installs)zPython Commands:z/ python [args] - Run Python interpreterz1 python3 [args] - Run Python 3 interpreterz0 pip [args] - Run pip package managerz1 pip3 [args] - Run pip3 package manager<65> Features:u5 ↑/↓ arrows - Navigate command historyz5 Tab - Auto-complete commands/filesz8 -oszdtt flag - Run any command in system shellz. Example: htop -oszdttN)rn<00>r<><00>argss rBr<><00>ZDTTTerminal.cmd_help<6C>s<><00><00> <0A>)<29>*<2A> <0A>B<>C<> <0A>9<>:<3A> <0A>7<>8<> <0A><<3C>=<3D> <0A>=<3D>><3E> <0A>?<3F>@<40> <0A>J<>K<> <0A>8<>9<> <0A>@<40>A<> <0A>Q<>R<> <0A>L<>M<> <0A>D<>E<> <0A>G<>H<> <0A><07> <0A>%<25>&<26> <0A>@<40>A<> <0A>@<40>A<> <0A>9<>:<3A> <0A>><3E>?<3F> <0A>9<>:<3A> <0A>:<3A>;<3B> <0A>S<>T<> <0A>9<>:<3A> <0A>2<>3<> <0A>D<>E<> <0A><07> <0A> <20>!<21> <0A>=<3D>><3E> <0A>B<>C<> <0A>C<>D<> <0A><<3C>=<3D> <0A>L<>M<> <0A><07> <0A> <20>!<21> <0A>?<3F>@<40> <0A>A<>B<> <0A>@<40>A<> <0A>A<>B<> <0A><07> <0A>k<EFBFBD><1A> <0A>E<>F<> <0A>E<>F<> <0A>H<>I<> <0A>><3E>?<3F> <0A>rSc<00><><00>[R"[RS:waSOS5 UR5 UR 5 UR 5 g)zClear the terminal screen<65>ntr<74><00>clsN)rW<00>systemr9r,r.r'r<>s rBr<><00>ZDTTTerminal.cmd_clear<61>s><00><00>
<EFBFBD> <09> <09>R<EFBFBD>W<EFBFBD>W<EFBFBD><04>_<EFBFBD>'<27>%<25>8<> <0C><1F><1F>!<21> <0C><1F><1F>!<21> <0C><1B><1B>rSc<00>(<00>[S5 SUlg)z,Exit ZDTT Terminal (returns to parent shell)zGoodbye!FN)rnr<>r<>s rBr<><00>ZDTTTerminal.cmd_exit<69>s<00><00> <0A>j<EFBFBD><19><1C><04> rSc<00>F<00>[S5 [R"S5 g)z-Quit and close the terminal window completelyzClosing terminal window...rN)rnrxrzr<>s rBr<><00>ZDTTTerminal.cmd_quit<69>s<00><00> <0A>*<2A>+<2B> <0C><08><08><11> rSc<00>0<00>[SUR35 [S5 UR(a [S5 O(UR(a [S5 O [S5 [5 [S5 [S5 [S5 [S 5 [S
5 [S 5 [S 5 [S 5 [S5 [S5 [S5 [S5 [S5 [S5 [S5 [5 [S5 [SUR35 [SUR
35 [SUR 35 [SUR35 [5 g)z'Display information about ZDTT Terminalz
ZDTT Terminal vzCA custom terminal interface for Debian-based and Arch Linux systemsz1Running on: Debian-based system (fully supported)z(Running on: Arch Linux (fully supported)z0Running on: Unsupported system (limited support)r<>u* • Automatic update checking on startupu= • Command history with ↑/↓ navigation (1000 commands)u+ • Tab completion for commands and filesu# • Command aliases (alias g=git)u6 • Flexible time/date display with multiple formatsu • Colorized promptu2 • Smart banner (auto-hides on small terminals)u, • Plugin system with ZPS package manageru( • Plugin hot-reload (plugins reload)u' • Safe rm with confirmation promptsu0 • Custom banner support (~/.zdtt/banner.txt)u • Native command supportu/ • System command execution via -oszdtt flagu • Clean, premium interfacezConfiguration:u • ZDTT directory: u • Aliases: u • Custom banner: u • Plugin errors: N)rnr<>r<>r<>r<>r<>r<>r<>r<>s rBr<><00>ZDTTTerminal.cmd_about<75>s=<00><00> <0A>!<21>$<24>,<2C>,<2C><1E>0<>1<> <0A>S<>T<> <10>><3E>><3E> <11>E<> F<> <11>\<5C>\<5C> <11><<3C> =<3D> <11>D<> E<> <0A><07> <0A>k<EFBFBD><1A> <0A>:<3A>;<3B> <0A>M<>N<> <0A>;<3B><<3C> <0A>3<>4<> <0A>F<>G<> <0A>&<26>'<27> <0A>B<>C<> <0A><<3C>=<3D> <0A>8<>9<> <0A>7<>8<> <0A>@<40>A<> <0A>,<2C>-<2D> <0A>?<3F>@<40> <0A>.<2E>/<2F> <0A><07> <0A><1E><1F> <0A>&<26>t<EFBFBD>}<7D>}<7D>o<EFBFBD>6<>7<> <0A><0F><04> 1<> 1<>2<>3<>4<> <0A>%<25>d<EFBFBD>&6<>&6<>%7<>8<>9<> <0A>%<25>d<EFBFBD>m<EFBFBD>m<EFBFBD>_<EFBFBD>5<>6<> <0A>rSc<00><><00>[R"5nUS:Xa [S5 gSnU(a&USR5(a[ US5n[ SX#-
S-5n[5 [ XBS-5H3n[R"U5nU(dM"[USSU35 M5 [5 g)zDisplay command historyrzNo history availableN<65>2r6<00>4d<34> )rc<00>get_current_history_lengthrn<00>isdigit<69>intrQ<00>range<67>get_history_item)r<>r<><00>history_length<74>limitr=<00>irxs rBr<><00>ZDTTTerminal.cmd_historys<><00><00>!<21><<3C><<3C>><3E><0E> <19>Q<EFBFBD> <1E> <11>(<28> )<29> <12><13><05> <0F>D<EFBFBD><11>G<EFBFBD>O<EFBFBD>O<EFBFBD>%<25>%<25><17><04>Q<EFBFBD><07>L<EFBFBD>E<EFBFBD><13>A<EFBFBD>~<7E>-<2D><01>1<>2<><05> <0A><07><16>u<EFBFBD>q<EFBFBD>0<>1<>A<EFBFBD><1A>+<2B>+<2B>A<EFBFBD>.<2E>C<EFBFBD><12>s<EFBFBD><15><11>2<EFBFBD><06>b<EFBFBD><13><05>&<26>'<27>2<> <0E>rSc<00>`<00>U(a<>USS:Xa<>[S5 /n[URR55H;up4[ US5(dMUR
U:wdM*UR U5 M= UHnURU M URR5 UR5 UR5 [S5 [5 g[R"[RRURS55nU(dO[S5 [S UR35 [S
5 [S 5 [S 5 [5 g[S [!U5S35 UH3n[RR#U5SSn[SU35 M5 [5 [S UR35 [SUR$35 [5 [S5 [S5 [5 g)zList or reload pluginsr<00>reloadzReloading plugins...<2E>__self__u"✓ Plugins reloaded successfully!Nr}z
No plugins installed.zPlugin directory: zJ
To create a plugin, create a .py file with a register_commands() functionz8that returns a dictionary of command names to functions.z0
Or use: zps install <url> to install from a URLz
Loaded Plugins (z):r~u • z Error log: z Commands:z9 plugins reload - Reload all plugins without restarting)rn<00>listr<74>r<><00>hasattrr<72><00>appendr<64>r<>r<>r<>rtrWrXr<>r<>rRr<>r<>) r<>r<>r<><00>cmd_name<6D>cmd_funcrxr<>r<>r<>s rBr<><00>ZDTTTerminal.cmd_plugins5s<><00><00> <10>D<EFBFBD><11>G<EFBFBD>x<EFBFBD>'<27> <11>(<28> )<29> <20>O<EFBFBD>&*<2A>4<EFBFBD>=<3D>=<3D>+><3E>+><3E>+@<40>&A<>"<22><08><1A>8<EFBFBD>Z<EFBFBD>0<>0<>X<EFBFBD>5F<35>5F<35>$<24>5N<35>#<23>*<2A>*<2A>8<EFBFBD>4<>'B<01>
'<27><03><18>M<EFBFBD>M<EFBFBD>#<23>&<26>'<27> <11>L<EFBFBD>L<EFBFBD> <1E> <1E> <20> <10> <1D> <1D> <1F> <11> <1D> <1D> <1F> <11>6<> 7<> <11>G<EFBFBD> <12><1C>y<EFBFBD>y<EFBFBD><12><17><17><1C><1C>d<EFBFBD>o<EFBFBD>o<EFBFBD>v<EFBFBD>!F<>G<> <0C><1B> <11>+<2B> ,<2C> <11>&<26>t<EFBFBD><EFBFBD><EFBFBD>&7<>8<> 9<> <11>_<> `<60> <11>L<> M<> <11>E<> F<> <11>G<EFBFBD> <12> <0A>"<22>3<EFBFBD>|<7C>#4<>"5<>R<EFBFBD>8<>9<>'<27>K<EFBFBD><1C>'<27>'<27>*<2A>*<2A>;<3B>7<><03><12><<3C>K<EFBFBD> <11>F<EFBFBD>;<3B>-<2D>(<28> )<29>(<28> <0E><07> <0A>"<22>4<EFBFBD>?<3F>?<3F>"3<>4<>5<> <0A> <0B>D<EFBFBD>M<EFBFBD>M<EFBFBD>?<3F>+<2B>,<2C> <0A><07> <0A>k<EFBFBD><1A> <0A>I<>J<> <0A>rSc<00>0<00>U(d<>UR(d,[S5 [S5 [S5 [5 g[S5 [URR55Hup#[SUSU35 M [5 gSR U5nSU;aBUS nXPR;a[USURU35 g[S
US 35 gUR SS 5up#UR 5nUR 5nU(aU(d[S 5 [S5 gX R;a[SUS35 X0RU'UR5 [SUSU35 g)z!Create or display command aliasesz
No aliases defined.zUsage: alias name=commandzExample: alias g=gitz
Defined Aliases:r<>r5NrGrzalias: <20> : not foundr6zalias: invalid formatz
Warning: 'z4' is a built-in command. Alias will take precedence.zAlias created: ) r<>rnr<>r<>r<>r;r9r<>r<>)r<>r<>r9r<><00> alias_def<65>
alias_names rBr<><00>ZDTTTerminal.cmd_aliasfsi<00><00><13><17><<3C><<3C><15>-<2D>.<2E><15>1<>2<><15>,<2C>-<2D><15><07> <13> <16>*<2A>+<2B>%+<2B>D<EFBFBD>L<EFBFBD>L<EFBFBD>,><3E>,><3E>,@<40>%A<>M<EFBFBD>D<EFBFBD><19>B<EFBFBD>t<EFBFBD>f<EFBFBD>A<EFBFBD>g<EFBFBD>Y<EFBFBD>/<2F>0<>&B<01><15><07> <12><18>H<EFBFBD>H<EFBFBD>T<EFBFBD>N<EFBFBD> <09> <0E>i<EFBFBD> <1F><1D>a<EFBFBD><17>J<EFBFBD><19>\<5C>\<5C>)<29><15><1A> <0C>A<EFBFBD>d<EFBFBD>l<EFBFBD>l<EFBFBD>:<3A>&><3E>%?<3F>@<40>A<> <13><16><07>
<EFBFBD>|<7C>;<3B>7<>8<> <12>"<22><0F><0F><03>Q<EFBFBD>/<2F> <0A><04><13>z<EFBFBD>z<EFBFBD>|<7C><04><19>-<2D>-<2D>/<2F><07><13>7<EFBFBD> <11>)<29> *<2A> <11>-<2D> .<2E> <12> <10>=<3D>=<3D> <20> <11>J<EFBFBD>t<EFBFBD>f<EFBFBD>$X<>Y<> Z<>$<24> <0C> <0C>T<EFBFBD><1A> <0C><19><19><1B> <0A><0F><04>v<EFBFBD>Q<EFBFBD>w<EFBFBD>i<EFBFBD>0<>1rSc<00><><00>U(d[S5 [S5 gUSnX R;a,URU UR5 [SU35 g[SUS35 g)zRemove command aliaseszunalias: missing alias namezUsage: unalias nameNrzAlias removed: z unalias: r<>)rnr<>r<>)r<>r<>r9s rBr<><00>ZDTTTerminal.cmd_unalias<61>se<00><00><13> <11>/<2F> 0<> <11>'<27> (<28> <12><13>A<EFBFBD>w<EFBFBD><04> <0F><<3C><<3C> <1F><14> <0C> <0C>T<EFBFBD>"<22> <10> <1D> <1D> <1F> <11>O<EFBFBD>D<EFBFBD>6<EFBFBD>*<2A> +<2B> <11>I<EFBFBD>d<EFBFBD>V<EFBFBD>;<3B>/<2F> 0rSc<00><><00>U(dX[S5 [S5 [S5 [S5 [S5 [S5 [S5 [5 gUS nUS
:XaUR/5 gUS :XGa<>[U5S :a[S 5 [S5 gUSnURS5SnUR S5(d[SUS35 [S5 g[
R "URSS9 [
RRURU5n[
RRU5(a=[SUS35R5R5nUS:wa [S5 g[SUS35 [RR!U5nUR#5nSSS5 [%US5nUR'W5 SSS5 [SUS 35 [S!U35 [5 [S"5 [S#5 [S$5 [5 g[S+US,35 [S-5 g!,(df  N<>=f!,(df  N<>=f![R(R*a1n [S%U R,S&35 [S'U35 Sn A gSn A f[R(R.a-n [S(5 [S)U R035 Sn A gSn A f[2an [S*U 35 Sn A gSn A ff=f).z/ZDTT Package System - Install plugins from URLsz
ZDTT Package System (ZPS)<29>
Usage:r<>zC zps list - List installed plugins (same as 'plugins')z
Examples:z8 zps install https://plugins.zane.org/example_plugin.pyzC zps install https://raw.githubusercontent.com/user/repo/plugin.pyNrr<><00>installrzzps install: missing URLzUsage: zps install <url>r6<00>/<2F><><EFBFBD><EFBFBD><EFBFBD>z.pyzError: 'z' is not a Python filezPlugin URLs must end with .pyTr<54>zPlugin 'z'' already exists. Overwrite? (yes/no): rvrwz Downloading z...<2E>wbu ✓ Plugin 'z' installed successfully!z Location: zTo use the plugin:z) 1. Type 'plugins reload' to load it nowz 2. Or restart ZDTTz'Error: Failed to download plugin (HTTP <20>)zURL: z"Error: Failed to connect to serverzReason: zError: zzps: unknown subcommand '<27>'zTry: zps install <url>)rnr<>rRr;<00>endswithrWr<>r<>rXr<>rYror9rKrrrr<>r8rHr <00> HTTPError<6F>code<64>URLError<6F>reasonr)
r<EFBFBD>r<><00>
subcommandrr<><00> target_pathr{<00>plugin_contentr>r%s
rBr<><00>ZDTTTerminal.cmd_zps<70>s<><00><00><13> <11>/<2F> 0<> <11>*<2A> <1D> <11>D<> E<> <11>W<> X<> <11>-<2D> <20> <11>L<> M<> <11>W<> X<> <11>G<EFBFBD> <12><19>!<21>W<EFBFBD>
<EFBFBD> <15><16> <1F> <10> <1C> <1C>R<EFBFBD> <20> <12> <15><19> "<22><12>4<EFBFBD>y<EFBFBD>1<EFBFBD>}<7D><15>0<>1<><15>0<>1<><16><16>q<EFBFBD>'<27>C<EFBFBD><1B>y<EFBFBD>y<EFBFBD><13>~<7E>b<EFBFBD>)<29>H<EFBFBD><1C>$<24>$<24>U<EFBFBD>+<2B>+<2B><15><08><18>
<EFBFBD>*@<40>A<>B<><15>5<>6<><16> <0F>K<EFBFBD>K<EFBFBD><04><0F><0F>$<24> 7<><1C>'<27>'<27>,<2C>,<2C>t<EFBFBD><EFBFBD><EFBFBD><08>A<>K<EFBFBD><12>w<EFBFBD>w<EFBFBD>~<7E>~<7E>k<EFBFBD>*<2A>*<2A> <20>8<EFBFBD>H<EFBFBD>:<3A>5\<5C>!]<5D>^<5E>d<>d<>f<>l<>l<>n<><08><1B>u<EFBFBD>$<24><19>3<>4<><1A> <11>L<EFBFBD><18>
<EFBFBD>#<23>.<2E> /<2F> %<25><1B>^<5E>^<5E>+<2B>+<2B>C<EFBFBD>0<>H<EFBFBD>%-<2D>]<5D>]<5D>_<EFBFBD>N<EFBFBD>1<><1A>+<2B>t<EFBFBD>,<2C><01><15>G<EFBFBD>G<EFBFBD>N<EFBFBD>+<2B>-<2D><16> <0C>X<EFBFBD>J<EFBFBD>.G<>H<>I<><15> <0C>[<5B>M<EFBFBD>2<>3<><15><07><15>*<2A>+<2B><15>A<>B<><15>,<2C>-<2D><15><07> <13> <0A>)<29>*<2A><1C>Q<EFBFBD>7<>8<> <0A>&<26>'<27>71<>0<><30>-<2D>,<2C><><1A><<3C><<3C>)<29>)<29> %<25><15>?<3F><01><06><06>x<EFBFBD>q<EFBFBD>I<>J<><15><05>c<EFBFBD>U<EFBFBD>m<EFBFBD>$<24>$<24> <13><> <1A><<3C><<3C>(<28>(<28> -<2D><15>:<3A><<3C><15><08><11><18><18>
<EFBFBD>+<2B>,<2C>,<2C> <13><><1D> %<25><15><07><01>s<EFBFBD>m<EFBFBD>$<24>$<24> <12><> %<25>sa<00>.J<00> I:<03>J<00>2J <03>AJ<00>:
J<07>J<00>
J<07>J<00>M<03>:'K&<03>&!M<03>#L/<03>/ M<03><M<03>Mc<00>,<00>[R"5nSnSnUGH<>nUS;aSnMUS;aSnMURS5(aURSS5SnMEUS ;a<>[ S
5 [ S 5 [ S 5 [ S 5 [ S5 [ S5 [ S5 [ S5 [ S5 [ S5 [ S5 [ S5 [ S5 [ S5 [ S5 [ S5 [ S5 [ S5 [ S5 [ S5 [ 5 gUS:XaSnSnGM@US :XaS!nGMKUS":Xa[ UR S#55 gUS$:Xa?U(a[ UR S%55 g[ UR S&55 gUS':XdGM<>[ [ [R"555 g U(a[ UR U55 gUR S#5nU(aUR S%5nOUR S&5n[ US)U35 g![an[ S(U35 SnAgSnAff=f)*z2Display current date and time with various formatsFN)z--24hz-24<32>24hT)z--12hz-12<31>12hz --format=r5r6)z--helpz-hz-
Time Command - Display current date and timer<65>z3 time - Default format (MM/DD/YY 12h)z( time --24h - Use 24-hour formatz2 time --12h - Use 12-hour format (default)z* time --format=... - Custom format stringz
Pre-defined formats:z% time iso - ISO 8601 formatz( time full - Full date and timez time date - Date onlyz time clock - Time onlyz$ time unix - Unix timestampz
Custom format codes:z+ %Y - Year (4 digit) %m - Month (01-12)z* %d - Day (01-31) %H - Hour (00-23)z, %I - Hour (01-12) %M - Minute (00-59)z# %S - Second (00-59) %p - AM/PMz( %A - Weekday name %B - Month namez
Example:z# time --format='%Y-%m-%d %H:%M:%S'<27>isor<6F><00>fullz%A, %B %d, %Y at %I:%M:%S %pr<70>z%m/%d/%y<>clockz%H:%M:%Sz %I:%M:%S %p<>unixzError: Invalid format string - rG)
rrOr:r;rnrPr<><00> time_moduler<65>r) r<>r<>rO<00>use_24h<34> custom_format<61>argr%<00>date_strrVs rBr<><00>ZDTTTerminal.cmd_time<6D>s@<00><00><16>l<EFBFBD>l<EFBFBD>n<EFBFBD><03><18><07><1C> <0A><17>C<EFBFBD><12>-<2D>-<2D><1E><07><14>/<2F>/<2F><1F><07><14><1E><1E> <0B>,<2C>,<2C> #<23> <09> <09>#<23>q<EFBFBD> 1<>!<21> 4<> <0A><14>(<28>(<28><15>F<>G<><15>j<EFBFBD>!<21><15>K<>L<><15>@<40>A<><15>J<>K<><15>B<>C<><15>.<2E>/<2F><15>=<3D>><3E><15>@<40>A<><15>7<>8<><15>7<>8<><15><<3C>=<3D><15>.<2E>/<2F><15>C<>D<><15>B<>C<><15>D<>E<><15>;<3B><<3C><15>@<40>A<><15>l<EFBFBD>#<23><15>;<3B><<3C><15><07><16><14><05><1C> 3<> <0A><1E><07><14><06><1D> ><3E> <0A><14><06><1D><15>c<EFBFBD>l<EFBFBD>l<EFBFBD>:<3A>.<2E>/<2F><16><14><07><1E><1A><19>#<23>,<2C>,<2C>z<EFBFBD>2<>3<><17><1A>#<23>,<2C>,<2C>}<7D>5<>6<><16><14><06><1D><15>c<EFBFBD>+<2B>*<2A>*<2A>,<2C>-<2D>.<2E><16>]<18>b <19> =<3D><15>c<EFBFBD>l<EFBFBD>l<EFBFBD>=<3D>1<>2<> <13><17><<3C><<3C>
<EFBFBD>+<2B><08> <12><1A>|<7C>|<7C>J<EFBFBD>/<2F>H<EFBFBD><1A>|<7C>|<7C>M<EFBFBD>2<>H<EFBFBD> <0A><18>
<EFBFBD>!<21>H<EFBFBD>:<3A>&<26>'<27><><1D> =<3D><15>7<><01>s<EFBFBD>;<3B><<3C><<3C> <12><> =<3D>s<00>
I1<00>1
J<03>;J<03>Jc <00><><00>U(d\[SUR35 [S5 [SSR[[R 55535 gUSR 5nUS:wa [S5 g[U5S :aD[S
5 [SSR[[R 55535 gUS R 5nU[;aH[S US 35 [SSR[[R 55535 gX0lUR5 UR5 [SUS35 g)z$Configure the status bar appearance.zStatus bar color: zUsage: statusbar color <color>zAvailable colors: z, Nr<00>colorz8Unknown statusbar option. Usage: statusbar color <color>rz-Missing color. Usage: statusbar color <color>r6zUnsupported color 'z'.zStatus bar color updated to <20>.)
rnr<>r<>r<>rTrrrKrRr
r.)r<>r<>r<>r<>s rBr<><00>ZDTTTerminal.cmd_statusbar>s:<00><00><13> <11>&<26>t<EFBFBD>'<<3C>'<<3C>&=<3D>><3E> ?<3F> <11>2<> 3<> <11>&<26>t<EFBFBD>y<EFBFBD>y<EFBFBD><16>8I<38>8N<38>8N<38>8P<38>1Q<31>'R<>&S<>T<> U<> <12><19>!<21>W<EFBFBD>]<5D>]<5D>_<EFBFBD>
<EFBFBD> <15><17> <20> <11>L<> M<> <12> <0E>t<EFBFBD>9<EFBFBD>q<EFBFBD>=<3D> <11>A<> B<> <11>&<26>t<EFBFBD>y<EFBFBD>y<EFBFBD><16>8I<38>8N<38>8N<38>8P<38>1Q<31>'R<>&S<>T<> U<> <12><14>Q<EFBFBD><07> <0A> <0A><0F><05> <10>)<29> )<29> <11>'<27><05>w<EFBFBD>b<EFBFBD>1<> 2<> <11>&<26>t<EFBFBD>y<EFBFBD>y<EFBFBD><16>8I<38>8N<38>8N<38>8P<38>1Q<31>'R<>&S<>T<> U<> <12> %<25><1D> <0C><1D><1D><1F> <0C><1F><1F>!<21> <0A>,<2C>U<EFBFBD>G<EFBFBD>1<EFBFBD>5<>6rSc<00>\<00>U(a[SRU55 g[5 g)zEcho the provided argumentsrGN)rnr<>r<>s rBr<><00>ZDTTTerminal.cmd_echo[s<00><00> <0F> <11>#<23>(<28>(<28>4<EFBFBD>.<2E> !<21> <11>GrSc<00>><00>SS/U-n[R"U5 g)zList directory contentsr<73><00> --color=autoN<6F><02>
subprocess<EFBFBD>run<75>r<>r<>rxs rBr<><00>ZDTTTerminal.cmd_lsds<00><00><13>^<5E>$<24>t<EFBFBD>+<2B><03><12><0E><0E>s<EFBFBD>rSc<00>@<00>[[R"55 g)zPrint working directoryN)rnrWr<>r<>s rBr<><00>ZDTTTerminal.cmd_pwdis<00><00> <0A>b<EFBFBD>i<EFBFBD>i<EFBFBD>k<EFBFBD>rSc<00><><00>U(d [RRS5nOUSn[RRU5n[R"U5 [R"5Ulg![ a [SUS35 g[a [SUS35 g[a [SUS35 gf=f)zChange directoryrnrzcd: <20>: No such file or directoryz: Not a directory<72>: Permission deniedN)
rWrXr<><00>chdirr<72>r<>r<rn<00>NotADirectoryError<6F>PermissionError)r<>r<>r8s rBr<><00>ZDTTTerminal.cmd_cdms<><00><00><13><17>W<EFBFBD>W<EFBFBD>'<27>'<27><03>,<2C>F<EFBFBD><19>!<21>W<EFBFBD>F<EFBFBD>
6<><17>W<EFBFBD>W<EFBFBD>'<27>'<27><06>/<2F>F<EFBFBD> <0E>H<EFBFBD>H<EFBFBD>V<EFBFBD> <1C>!<21>y<EFBFBD>y<EFBFBD>{<7B>D<EFBFBD> <1C><> <20> ><3E> <11>D<EFBFBD><16><08> ;<3B><<3C> =<3D>!<21> 4<> <11>D<EFBFBD><16><08> 1<>2<> 3<><1E> 6<> <11>D<EFBFBD><16><08> 3<>4<> 5<> 6<>s<00>AA><00>>C<03>C<03>3C<03> Cc<00>h<00>U(d [S5 gUH1n[US5n[UR5SS9 SSS5 M3 g!,(df  ME=f![a [SUS35 Md[a [SUS35 M[
a [SUS 35 M<>f=f)
zDisplay file contentszcat: missing file operandNr3rE)<01>endzcat: r r
z: Is a directory)rnr8r<>r<r <00>IsADirectoryError)r<>r<>r<>r>s rBr<><00>ZDTTTerminal.cmd_cat<61>s<><00><00><13> <11>-<2D> .<2E> <12><1C>H<EFBFBD> :<3A><19>(<28>C<EFBFBD>(<28>A<EFBFBD><19>!<21>&<26>&<26>(<28><02>+<2B>)<29>(<28><1D>(<28>(<28><>$<24> E<01><15><05>h<EFBFBD>Z<EFBFBD>'B<>C<>D<>"<22> =<3D><15><05>h<EFBFBD>Z<EFBFBD>':<3A>;<3B><<3C>$<24> :<3A><15><05>h<EFBFBD>Z<EFBFBD>'7<>8<>9<> :<3A>s9<00> A<02>A <05>A<02>
A <09>A<02>A<02>B1<05>:B1<05>B1<05>0B1c<00><><00>U(d [S5 gUHn[R"USS9 M g![a [SUS35 M:[a [SUS35 MUf=f)zCreate directoryzmkdir: missing operandNFr<46>z mkdir: cannot create directory '<27>': File exists<74>': Permission denied)rnrWr<><00>FileExistsErrorr )r<>r<><00> directorys rBr<><00>ZDTTTerminal.cmd_mkdir<69>sp<00><00><13> <11>*<2A> +<2B> <12><1D>I<EFBFBD> Z<01><12> <0B> <0B>I<EFBFBD><05>6<><1E><>#<23> T<01><15>8<><19> <0B>><3E>R<>S<>"<22> Z<01><15>8<><19> <0B>CW<43>X<>Y<> Z<01>s<00>4<02>A,<05>A,<05>+A,c<00><><00>U(d [S5 gUHn[US5R5 M g![a [SUS35 M?f=f)zCreate empty fileztouch: missing file operandN<64>aztouch: cannot touch 'r)rnr8<00>closer )r<>r<>r<>s rBr<><00>ZDTTTerminal.cmd_touch<63>sZ<00><00><13> <11>/<2F> 0<> <12><1C>H<EFBFBD> N<01><14>X<EFBFBD>s<EFBFBD>#<23>)<29>)<29>+<2B><1D><>#<23> N<01><15>-<2D>h<EFBFBD>Z<EFBFBD>7K<37>L<>M<> N<01>s<00>9<02>A<05>Ac<00><00>U(d [S5 gUVs/sHo"RS5(dMUPM nnUVs/sHo"RS5(aMUPM nnU(d [S5 gSU;=(d SU;=(d SU;nSU;=(d SU;=(d SU;nUGHUn[RR U5(a[R
"U5 MA[RR U5(a<>U(a<>U(d<>[RRU5n[S[R"U555n [S US
U S 35 [S 5R5R5n
U
S:wa[S5 GM[R"U5 GM[SUS35 [S5 GM<U(d[SUS35 GMUGMX gs snfs snf! [S US 35 N<>=f![a U(d[SUS35 GM<>GM<>[ a+n U(d[SUSU 35 Sn A GM<>Sn A GM<>Sn A ff=f)zRemove file or directoryzrm: missing operandNrF<00>-rz-rfz-frz-fc3<00>V# <00>UHupn[U5[U5-v<00> M! g7frV)rR)rZrH<00>dirs<72>filess rBr[<00>&ZDTTTerminal.cmd_rm.<locals>.<genexpr><3E>s$<00><00><00>0l<30>^k<>N<EFBFBD>A<EFBFBD>UZ<55><13>U<EFBFBD><1A>c<EFBFBD>$<24>i<EFBFBD>1G<31>^k<>s<00>')zrm: remove directory 'z
' and its z items?z'?zType 'yes' to confirm: rvzrm: operation cancelledzrm: cannot remove 'z': Is a directoryz%rm: use 'rm -r' to remove directories<65>': No such file or directoryrzrm: error removing 'r<>)rnr:rWrX<00>isfile<6C>remove<76>isdir<69>abspath<74>sum<75>walkror9rKrf<00>rmtreer r) r<>r<>r<><00>flags<67>paths<68> recursive<76>forcerX<00>abs_path<74>
item_countr{r%s rBr<><00>ZDTTTerminal.cmd_rm<72>s<00><00><13> <11>'<27> (<28> <12>!%<25><<3C><04><13><0E><0E>s<EFBFBD>(;<3B><13><04><05><<3C> $<24>@<40><04><13>N<EFBFBD>N<EFBFBD>3<EFBFBD>,?<3F><13><04><05>@<40><14> <11>'<27> (<28> <12><19>E<EFBFBD>M<EFBFBD>E<>U<EFBFBD>e<EFBFBD>^<5E>E<>u<EFBFBD><05>~<7E> <09><14><05> <0A>A<><15>%<25><1E>A<>5<EFBFBD>E<EFBFBD>><3E><05><19>D<EFBFBD>! ?<3F><15>7<EFBFBD>7<EFBFBD>><3E>><3E>$<24>'<27>'<27><16>I<EFBFBD>I<EFBFBD>d<EFBFBD>O<EFBFBD><17>W<EFBFBD>W<EFBFBD>]<5D>]<5D>4<EFBFBD>(<28>(<28> <20>$<24>')<29>w<EFBFBD>w<EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>'<<3C>H<EFBFBD>M<01>-0<>0l<30>^`<60>^e<>^e<>fj<66>^k<>0l<30>-l<>
<EFBFBD> %<25>(><3E>x<EFBFBD>j<EFBFBD>
<EFBFBD>S]<5D>R^<5E>^e<>&f<> g<>(-<2D>-F<>'G<>'M<>'M<>'O<>'U<>'U<>'W<>H<EFBFBD>'<27>5<EFBFBD>0<> %<25>&?<3F> @<40> (<28><1E> <0A> <0A>d<EFBFBD>+<2B><1D> 3<>D<EFBFBD>6<EFBFBD>9J<39>K<>L<><1D>E<>F<> <20><1D> 3<>D<EFBFBD>6<EFBFBD>9U<39>V<>W<>!<21>7<1A><>=<3D><>@<40><>0M<01> %<25>(><3E>x<EFBFBD>j<EFBFBD><02>&K<> L<><4C>#<23> L<01><1C><19>/<2F><04>v<EFBFBD>5I<35>J<>K<>K<><1D><1C> ?<3F><1C><19>0<><14><06>c<EFBFBD>!<21><13>=<3D>><3E>><3E><1D><> ?<3F>se<00>H<04>H<04>H<04>H<04>::H0<02>6AH0<02>8H<02>8H0<02>;H0<02>H0<02>1H0<02>H-<05>+H0<02>0 J <05> J <05>!J<05>J c<00><><00>[U5S:a [S5 gUSnUSn[R"X#5 g![a [SUS35 g[
a [SUS 35 gf=f)
zMove/rename filerzmv: missing file operandNrr6zmv: cannot stat 'r#zmv: cannot move 'r)rRrnrf<00>mover<r )r<>r<><00>src<72>dests rBr<><00>ZDTTTerminal.cmd_mv<6D>s}<00><00> <0E>t<EFBFBD>9<EFBFBD>q<EFBFBD>=<3D> <11>,<2C> -<2D> <12><12>1<EFBFBD>g<EFBFBD><03><13>A<EFBFBD>w<EFBFBD><04> A<01> <12>K<EFBFBD>K<EFBFBD><03> "<22><> <20> I<01> <11>%<25>c<EFBFBD>U<EFBFBD>*F<>G<> H<><1E> A<01> <11>%<25>c<EFBFBD>U<EFBFBD>*><3E>?<3F> @<40> A<01>s<00>><00>A4<03>A4<03>3A4c<00>><00>[U5S:a [S5 gUVs/sHo"RS5(dMUPM nnUVs/sHo"RS5(aMUPM nn[U5S:a [S5 gUSnUSnSU;=(d S U;n[RR U5(a[ R"XV5 g[RRU5(a.U(a[ R"XV5 g[S
US 35 g[S US 35 gs snfs snf![a [S US 35 g[a [SUS35 g[a [SUS35 gf=f)z Copy filerzcp: missing file operandNrFz$cp: missing destination file operandrr6rz-Rz*cp: -r not specified; omitting directory 'r<>zcp: cannot stat 'r#zcp: cannot create 'rzcp: cannot create directory 'r) rRrnr:rWrXr$rf<00>copy2r&<00>copytreer<r r)r<>r<>r<>r+r,r4r5r-s rBr<><00>ZDTTTerminal.cmd_cp<63>sc<00><00> <0E>t<EFBFBD>9<EFBFBD>q<EFBFBD>=<3D> <11>,<2C> -<2D> <12>!%<25><<3C><04><13><0E><0E>s<EFBFBD>(;<3B><13><04><05><<3C> $<24>@<40><04><13>N<EFBFBD>N<EFBFBD>3<EFBFBD>,?<3F><13><04><05>@<40> <0E>u<EFBFBD>:<3A><01>><3E> <11>8<> 9<> <12><13>A<EFBFBD>h<EFBFBD><03><14>Q<EFBFBD>x<EFBFBD><04><19>E<EFBFBD>M<EFBFBD>2<>T<EFBFBD>U<EFBFBD>]<5D> <09> H<01><11>w<EFBFBD>w<EFBFBD>~<7E>~<7E>c<EFBFBD>"<22>"<22><16> <0C> <0C>S<EFBFBD>'<27><13><17><17><1D><1D>s<EFBFBD>#<23>#<23><1C><1A>O<EFBFBD>O<EFBFBD>C<EFBFBD>.<2E><19>F<>s<EFBFBD>e<EFBFBD>1<EFBFBD>M<>N<><15>)<29>#<23><15>.J<>K<>L<><4C>-=<3D><>@<40><>,!<21> I<01> <11>%<25>c<EFBFBD>U<EFBFBD>*F<>G<> H<><1E> D<01> <11>'<27><04>v<EFBFBD>-A<>B<> C<><1E> H<01> <11>1<>$<24><16>~<7E>F<> G<> H<01>sG<00>E<04>E<04> E<04>&E<04>%:E <00> AE <00>"E <00>2E <00> F<03>'F<03>F<03>Fc<00>t<00>[U5S:a [S5 gSS/U-n[R"U5 g)zSearch for pattern in filerzgrep: missing pattern or fileNr<4E>r)rRrnrrrs rBr<><00>ZDTTTerminal.cmd_greps4<00><00> <0E>t<EFBFBD>9<EFBFBD>q<EFBFBD>=<3D> <11>1<> 2<> <12><15>~<7E>&<26><14>-<2D><03><12><0E><0E>s<EFBFBD>rSc<00>.<00>[UR5 g)zDisplay current userN)rnr<>r<>s rBr<><00>ZDTTTerminal.cmd_whoami"s<00><00> <0A>d<EFBFBD>m<EFBFBD>m<EFBFBD>rSc<00>8<00>[R"S/U-5 g)zDisplay current date/timer<65>Nrr<>s rBr<><00>ZDTTTerminal.cmd_date&s<00><00><12><0E><0E><06>x<EFBFBD>$<24><EFBFBD>'rSc<00>8<00>[R"S/U-5 g)zDisplay system informationr<6E>Nrr<>s rBr<><00>ZDTTTerminal.cmd_uname*s<00><00><12><0E><0E><07>y<EFBFBD>4<EFBFBD>'<27>(rSc<00>^<00>U(d [S5 g[R"S/U-5 g)zEdit file with nanoznano: missing file operandNr<4E>)rnrrr<>s rBr<><00>ZDTTTerminal.cmd_nano.s#<00><00><13> <11>.<2E> /<2F> <12><12><0E><0E><06>x<EFBFBD>$<24><EFBFBD>'rSc<00>"^<00>SnU4SjnU"5nU(GdTR(dN[S5 [S5 [S5 [S5 [S5 [S5 [S 5 g
U"5upVU(d8[S 5 [S 5 U(a[S U35 g
[S5 g
[S5 [5 [R"USS9 [5 [S5 [5 U"5nU(d[S5 [S5 g
[R"U/U-5 g
![Ra/ [S5 U(a[S U35 O [S5 g
f=f)z<Display system info with fastfetch (auto-installs if needed)c<00>@<00>[R"S5nU(aU$SS[RR S5/nUHWn[RR U5(dM)[R "U[R5(dMUUs $ g)z/Return absolute path to fastfetch if available.r<>z/usr/bin/fastfetchz/usr/local/bin/fastfetchz~/.local/bin/fastfetchN)rfrgrWrXr<>r$<00>access<73>X_OK)<03>fastfetch_path<74> common_pathsrXs rB<00>_find_fastfetch_binary<72>:ZDTTTerminal.cmd_fastfetch.<locals>._find_fastfetch_binary8sx<00><00>#<23>\<5C>\<5C>+<2B>6<>N<EFBFBD><1D>%<25>%<25>%<25>*<2A><12><07><07>"<22>"<22>#;<3B><<3C><0E>L<EFBFBD>
%<25><04><15>7<EFBFBD>7<EFBFBD>><3E>><3E>$<24>'<27>'<27>B<EFBFBD>I<EFBFBD>I<EFBFBD>d<EFBFBD>B<EFBFBD>G<EFBFBD>G<EFBFBD>,D<>,D<><1F>K<EFBFBD>%<25>rSc<00>><01>SnTR(a/SQnSnOTR(a/SQnSnOg[[SS5nUSL=(a
U"5S:Hn[R
"S 5nU(aX4$U(aU/U-U4$SU4$)
z:Return (cmd_list, manual_hint) based on distro/privileges.N)r_r<>z-yr<79>zsudo apt-get install fastfetch)r`z-Sz --noconfirmr<6D>zsudo pacman -S fastfetch)NN<4E>geteuidr<00>sudo)r<>r<><00>getattrrWrfrg)<06> manual_hint<6E>base_cmdrN<00>is_root<6F> sudo_pathr<68>s <20>rB<00>_build_install_command<6E>:ZDTTTerminal.cmd_fastfetch.<locals>._build_install_commandIs<><00><><00><1E>K<EFBFBD><13>~<7E>~<7E>D<><08>><3E> <0B><15><1C><1C>G<><08>8<> <0B>!<21><1E>b<EFBFBD>)<29>T<EFBFBD>2<>G<EFBFBD><1D>T<EFBFBD>)<29><<3C>g<EFBFBD>i<EFBFBD>1<EFBFBD>n<EFBFBD>G<EFBFBD><1E> <0C> <0C>V<EFBFBD>,<2C>I<EFBFBD><16><1F>,<2C>,<2C><18>!<21>{<7B>X<EFBFBD>-<2D>{<7B>:<3A>:<3A><18><1B>$<24> $rSzfastfetch is not installed.zFAuto-install is only supported on Debian-based and Arch Linux systems.z=Please install fastfetch manually using your package manager:u3 • Debian/Ubuntu: sudo apt-get install fastfetchu, • Arch/Manjaro: sudo pacman -S fastfetchu( • Fedora: sudo dnf install fastfetchu- • openSUSE: sudo zypper install fastfetchNzSfastfetch is not installed and cannot be auto-installed because elevated privilegeszFare required but 'sudo' was not found (or you're not running as root).zTry manually: z2Please install fastfetch via your package manager.z)fastfetch is not installed. Installing...T)<01>checkz!fastfetch installed successfully!zFailed to install fastfetchz:fastfetch installation completed but binary was not found.z/Ensure fastfetch is in your PATH and try again.)r<>rnrr<00>CalledProcessError)r<>r<>rKrU<00> fastfetch_bin<69> install_cmdrQs` rBr<><00>ZDTTTerminal.cmd_fastfetch6sQ<00><><00> <18>" %<25>6/<2F>0<> <0A><1C><17>$<24>$<24><15>3<>4<><15>^<5E>_<><15>U<>V<><15>K<>L<><15>D<>E<><15>@<40>A<><15>E<>F<><16>'=<3D>'?<3F> $<24>K<EFBFBD><1E><15>k<>l<><15>^<5E>_<><1E><19>N<EFBFBD>;<3B>-<2D>8<>9<><17><1A>N<>O<><16> <11>=<3D> ><3E> <11>G<EFBFBD> <17><1A><0E><0E>{<7B>$<24>7<><15><07><15>9<>:<3A><15><07>3<>4<>M<EFBFBD> <20><15>R<>S<><15>G<>H<><16><12><0E><0E> <0A><EFBFBD><14>-<2D>.<2E><><1E>0<>0<> <17><15>3<>4<><1E><19>N<EFBFBD>;<3B>-<2D>8<>9<><19>N<>O<><16>  <17>s<00>4E <00> AF<03> Fc<00>8<00>[R"S/U-5 g)zRun python commandr<64>Nrr<>s rBr<><00>ZDTTTerminal.cmd_python<6F>s<00><00><12><0E><0E><08>z<EFBFBD>D<EFBFBD>(<28>)rSc<00>8<00>[R"S/U-5 g)zRun python3 commandr<64>Nrr<>s rBr<><00>ZDTTTerminal.cmd_python3<6E>s<00><00><12><0E><0E> <09>{<7B>T<EFBFBD>)<29>*rSc<00><><00>[R"S5(a[R"S/U-5 g[ S5 [ S5 g)zRun pip commandr<64>zpip: command not found<6E>5Try installing with: sudo apt-get install python3-pipN<70>rfrgrrrnr<>s rBr<><00>ZDTTTerminal.cmd_pip<69>s5<00><00> <11><<3C><<3C><05> <1E> <1E> <16>N<EFBFBD>N<EFBFBD>E<EFBFBD>7<EFBFBD>T<EFBFBD>><3E> *<2A> <11>*<2A> +<2B> <11>I<> JrSc<00><><00>[R"S5(a[R"S/U-5 g[ S5 [ S5 g)zRun pip3 commandr<64>zpip3: command not foundraNrbr<>s rBr<><00>ZDTTTerminal.cmd_pip3<70>s5<00><00> <11><<3C><<3C><06> <1F> <1F> <16>N<EFBFBD>N<EFBFBD>F<EFBFBD>8<EFBFBD>d<EFBFBD>?<3F> +<2B> <11>+<2B> ,<2C> <11>I<> JrSc<00>l<00>UR5(dgURU5nSU;aRURSS5R5nU(a[R"U5nUS:wag[ S5 gUR5R5nUSR5n[U5S:<3A>aUSSO/nX`R;aURU"U5 g[ SU35 [ S 5 [ S
5 g![
an[ SU35 SnAgSnAff=f) zParse and execute a commandNz-oszdttrErzError executing command: z&No command specified with -oszdtt flagr6zCommand not found: z#Type 'help' for available commands.z,Tip: Use -oszdtt flag to run system commands) r9r<>rJrWr<>rrnr;rKrRr<>)r<>r<><00>system_command<6E>resultr%r<>rxr<>s rB<00>execute_command<6E>ZDTTTerminal.execute_command<6E>s#<00><00><1B>!<21>!<21>#<23>#<23> <12><1C>*<2A>*<2A><<3C>8<> <0C> <15> <0C> $<24>)<29>1<>1<>)<29>R<EFBFBD>@<40>F<>F<>H<>N<EFBFBD><1D>;<3B><1F>Y<EFBFBD>Y<EFBFBD>~<7E>6<>F<EFBFBD><1D><11>{<7B><1C>
<13><16>><3E>?<3F> <12><1C>"<22>"<22>$<24>*<2A>*<2A>,<2C><05><13>A<EFBFBD>h<EFBFBD>n<EFBFBD>n<EFBFBD><1E><03><1F><05>J<EFBFBD><11>N<EFBFBD>u<EFBFBD>Q<EFBFBD>R<EFBFBD>y<EFBFBD><02><04> <0E>-<2D>-<2D> <1F> <10>M<EFBFBD>M<EFBFBD>#<23> <1E>t<EFBFBD> $<24> <11>'<27><03>u<EFBFBD>-<2D> .<2E> <11>7<> 8<> <11>@<40> A<><41>!<21>;<3B><19>5<>a<EFBFBD>S<EFBFBD>9<>:<3A>:<3A> <13><> ;<3B>s<00>D<00>
D3<03>D.<03>.D3c<00><><00>[R"[RS:waSOS5 UR5 UR 5 UR
(a>[ UR55nURU5 UR
(aM>UR5 g![a [S5 N;[a [S5 M?f=f!UR5 f=f)zMain terminal loopr<70>r<>r<>z>
Use 'exit' to return to shell, or 'quit' to close the window.z
Goodbye!N) rWr<>r9r/r'r<>ror<>ri<00>KeyboardInterruptrn<00>EOFErrorr4)r<>r<>s rBr<00>ZDTTTerminal.run<75>s<><00><00> <0B> <09> <09>R<EFBFBD>W<EFBFBD>W<EFBFBD><04>_<EFBFBD>'<27>%<25>8<> <0C>"<22>"<22>$<24> <0C><1B><1B><1D> '<27><16>,<2C>,<2C><1A>#<23>D<EFBFBD>O<EFBFBD>O<EFBFBD>$5<>6<>G<EFBFBD><18>(<28>(<28><17>1<><17>,<2C>,<2C>,<2C> <11> $<24> $<24> &<26><> )<29>]<01><19>[<5B>\<5C><1F><1A><19>,<2C>'<27><19><1A><> <11> $<24> $<24> &<26>s<<00>C <00> *B.<00>
C <00>.C<03>C <00>C<03>C <00>C<03>C <00> C2)r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r|r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>N)r
)><3E>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__firstlineno__r<5F>r<>r<>r<>r
r<>r'rr/r4r-r<r.rFr,r3r<>rjr<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>rir<00>__static_attributes__<5F>rSrBrr<00>s:<00><00>T!<21>l 
<EFBFBD><19>$ N<01> )<29><11>$9/<2F>v<10>"<22> $<24> '<27><16> <1C><<3C>$ +<2B>'<27>:<3A>*"<14>H+c<01>Z:<3A>. 9<><1C>$<16>2/<10>b<1E><1D>
<14>#<10>J<10>,/<10>b,2<>\ 1<>O(<28>bH(<28>T7<>:<14><1C>
<1B>6<>(:<3A>" Z<01>
N<01>4?<3F>lA<01> #H<01>J<1C><1D>(<28>)<29>(<28>Z/<2F>|*<2A>+<2B>K<01>K<01>!B<01>F'rSrc<00>J<00>[5n[US9nUR5 g)N)r|)r}rr)r|<00>terminals rB<00>mainrw<00>s<00><00> '<27> )<29>F<EFBFBD><1B>6<EFBFBD>*<2A>H<EFBFBD> <0C>L<EFBFBD>L<EFBFBD>NrS<00>__main__)<1D>__doc__rWrxr<>rrfrcrtrfr<>r<>rr<00>urllib.requestr<00> urllib.errorr<72>r<>rdrerTrCrRrjrsr}rrwrortrSrB<00><module>r|s<><00><01><04>

<EFBFBD>
<EFBFBD><0E><11> <0A><0F> <0B> <0A><0E><10> <0B><1D><15><13><1A><02><14>( <02><12> <19> <17> <19> <18><1B><1A> <19> <19> <02><11><10>"<12>$<13>:<1B>,(<12>V\'<27>\'<27>~(<13> <0C>z<EFBFBD><19><08>F<EFBFBD>rS