├── .gitattributes ├── .gitignore ├── LICENSE ├── README.md ├── hello world.txt ├── main.py └── note.txt /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | share/python-wheels/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | MANIFEST 28 | 29 | # PyInstaller 30 | # Usually these files are written by a python script from a template 31 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 32 | *.manifest 33 | *.spec 34 | 35 | # Installer logs 36 | pip-log.txt 37 | pip-delete-this-directory.txt 38 | 39 | # Unit test / coverage reports 40 | htmlcov/ 41 | .tox/ 42 | .nox/ 43 | .coverage 44 | .coverage.* 45 | .cache 46 | nosetests.xml 47 | coverage.xml 48 | *.cover 49 | *.py,cover 50 | .hypothesis/ 51 | .pytest_cache/ 52 | cover/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | .pybuilder/ 76 | target/ 77 | 78 | # Jupyter Notebook 79 | .ipynb_checkpoints 80 | 81 | # IPython 82 | profile_default/ 83 | ipython_config.py 84 | 85 | # pyenv 86 | # For a library or package, you might want to ignore these files since the code is 87 | # intended to run in multiple environments; otherwise, check them in: 88 | # .python-version 89 | 90 | # pipenv 91 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 92 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 93 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 94 | # install all needed dependencies. 95 | #Pipfile.lock 96 | 97 | # poetry 98 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. 99 | # This is especially recommended for binary packages to ensure reproducibility, and is more 100 | # commonly ignored for libraries. 101 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control 102 | #poetry.lock 103 | 104 | # pdm 105 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. 106 | #pdm.lock 107 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it 108 | # in version control. 109 | # https://pdm.fming.dev/#use-with-ide 110 | .pdm.toml 111 | 112 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm 113 | __pypackages__/ 114 | 115 | # Celery stuff 116 | celerybeat-schedule 117 | celerybeat.pid 118 | 119 | # SageMath parsed files 120 | *.sage.py 121 | 122 | # Environments 123 | .env 124 | .venv 125 | env/ 126 | venv/ 127 | ENV/ 128 | env.bak/ 129 | venv.bak/ 130 | 131 | # Spyder project settings 132 | .spyderproject 133 | .spyproject 134 | 135 | # Rope project settings 136 | .ropeproject 137 | 138 | # mkdocs documentation 139 | /site 140 | 141 | # mypy 142 | .mypy_cache/ 143 | .dmypy.json 144 | dmypy.json 145 | 146 | # Pyre type checker 147 | .pyre/ 148 | 149 | # pytype static type analyzer 150 | .pytype/ 151 | 152 | # Cython debug symbols 153 | cython_debug/ 154 | 155 | # PyCharm 156 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can 157 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore 158 | # and can be added to the global gitignore or merged into this file. For a more nuclear 159 | # option (not recommended) you can uncomment the following to ignore the entire idea folder. 160 | #.idea/ 161 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Creative Commons Legal Code 2 | 3 | CC0 1.0 Universal 4 | 5 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE 6 | LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN 7 | ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS 8 | INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES 9 | REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS 10 | PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM 11 | THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED 12 | HEREUNDER. 13 | 14 | Statement of Purpose 15 | 16 | The laws of most jurisdictions throughout the world automatically confer 17 | exclusive Copyright and Related Rights (defined below) upon the creator 18 | and subsequent owner(s) (each and all, an "owner") of an original work of 19 | authorship and/or a database (each, a "Work"). 20 | 21 | Certain owners wish to permanently relinquish those rights to a Work for 22 | the purpose of contributing to a commons of creative, cultural and 23 | scientific works ("Commons") that the public can reliably and without fear 24 | of later claims of infringement build upon, modify, incorporate in other 25 | works, reuse and redistribute as freely as possible in any form whatsoever 26 | and for any purposes, including without limitation commercial purposes. 27 | These owners may contribute to the Commons to promote the ideal of a free 28 | culture and the further production of creative, cultural and scientific 29 | works, or to gain reputation or greater distribution for their Work in 30 | part through the use and efforts of others. 31 | 32 | For these and/or other purposes and motivations, and without any 33 | expectation of additional consideration or compensation, the person 34 | associating CC0 with a Work (the "Affirmer"), to the extent that he or she 35 | is an owner of Copyright and Related Rights in the Work, voluntarily 36 | elects to apply CC0 to the Work and publicly distribute the Work under its 37 | terms, with knowledge of his or her Copyright and Related Rights in the 38 | Work and the meaning and intended legal effect of CC0 on those rights. 39 | 40 | 1. Copyright and Related Rights. A Work made available under CC0 may be 41 | protected by copyright and related or neighboring rights ("Copyright and 42 | Related Rights"). Copyright and Related Rights include, but are not 43 | limited to, the following: 44 | 45 | i. the right to reproduce, adapt, distribute, perform, display, 46 | communicate, and translate a Work; 47 | ii. moral rights retained by the original author(s) and/or performer(s); 48 | iii. publicity and privacy rights pertaining to a person's image or 49 | likeness depicted in a Work; 50 | iv. rights protecting against unfair competition in regards to a Work, 51 | subject to the limitations in paragraph 4(a), below; 52 | v. rights protecting the extraction, dissemination, use and reuse of data 53 | in a Work; 54 | vi. database rights (such as those arising under Directive 96/9/EC of the 55 | European Parliament and of the Council of 11 March 1996 on the legal 56 | protection of databases, and under any national implementation 57 | thereof, including any amended or successor version of such 58 | directive); and 59 | vii. other similar, equivalent or corresponding rights throughout the 60 | world based on applicable law or treaty, and any national 61 | implementations thereof. 62 | 63 | 2. Waiver. To the greatest extent permitted by, but not in contravention 64 | of, applicable law, Affirmer hereby overtly, fully, permanently, 65 | irrevocably and unconditionally waives, abandons, and surrenders all of 66 | Affirmer's Copyright and Related Rights and associated claims and causes 67 | of action, whether now known or unknown (including existing as well as 68 | future claims and causes of action), in the Work (i) in all territories 69 | worldwide, (ii) for the maximum duration provided by applicable law or 70 | treaty (including future time extensions), (iii) in any current or future 71 | medium and for any number of copies, and (iv) for any purpose whatsoever, 72 | including without limitation commercial, advertising or promotional 73 | purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each 74 | member of the public at large and to the detriment of Affirmer's heirs and 75 | successors, fully intending that such Waiver shall not be subject to 76 | revocation, rescission, cancellation, termination, or any other legal or 77 | equitable action to disrupt the quiet enjoyment of the Work by the public 78 | as contemplated by Affirmer's express Statement of Purpose. 79 | 80 | 3. Public License Fallback. Should any part of the Waiver for any reason 81 | be judged legally invalid or ineffective under applicable law, then the 82 | Waiver shall be preserved to the maximum extent permitted taking into 83 | account Affirmer's express Statement of Purpose. In addition, to the 84 | extent the Waiver is so judged Affirmer hereby grants to each affected 85 | person a royalty-free, non transferable, non sublicensable, non exclusive, 86 | irrevocable and unconditional license to exercise Affirmer's Copyright and 87 | Related Rights in the Work (i) in all territories worldwide, (ii) for the 88 | maximum duration provided by applicable law or treaty (including future 89 | time extensions), (iii) in any current or future medium and for any number 90 | of copies, and (iv) for any purpose whatsoever, including without 91 | limitation commercial, advertising or promotional purposes (the 92 | "License"). The License shall be deemed effective as of the date CC0 was 93 | applied by Affirmer to the Work. Should any part of the License for any 94 | reason be judged legally invalid or ineffective under applicable law, such 95 | partial invalidity or ineffectiveness shall not invalidate the remainder 96 | of the License, and in such case Affirmer hereby affirms that he or she 97 | will not (i) exercise any of his or her remaining Copyright and Related 98 | Rights in the Work or (ii) assert any associated claims and causes of 99 | action with respect to the Work, in either case contrary to Affirmer's 100 | express Statement of Purpose. 101 | 102 | 4. Limitations and Disclaimers. 103 | 104 | a. No trademark or patent rights held by Affirmer are waived, abandoned, 105 | surrendered, licensed or otherwise affected by this document. 106 | b. Affirmer offers the Work as-is and makes no representations or 107 | warranties of any kind concerning the Work, express, implied, 108 | statutory or otherwise, including without limitation warranties of 109 | title, merchantability, fitness for a particular purpose, non 110 | infringement, or the absence of latent or other defects, accuracy, or 111 | the present or absence of errors, whether or not discoverable, all to 112 | the greatest extent permissible under applicable law. 113 | c. Affirmer disclaims responsibility for clearing rights of other persons 114 | that may apply to the Work or any use thereof, including without 115 | limitation any person's Copyright and Related Rights in the Work. 116 | Further, Affirmer disclaims responsibility for obtaining any necessary 117 | consents, permissions or other rights required for any use of the 118 | Work. 119 | d. Affirmer understands and acknowledges that Creative Commons is not a 120 | party to this document and has no duty or obligation with respect to 121 | this CC0 or use of the Work. 122 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Pnulate Terminal 2 | 3 | Pnulate terminal offers you a more comfortable command prompt, in short this program is similar to cmd, the syntax is easier and there are very efficient and comfortable codes, it is completely open source 4 | 5 | ## Example usage 6 | 7 | ``--gethtml5lib https://example.com`` 8 | this command pulls the html code of the entered url 9 | 10 | 11 | ``--qr https://example.com`` 12 | this command generates a qr code for the given url 13 | 14 | 15 | there are multiple commands, you can learn them using the ``-help`` command 16 | 17 | 18 | ![1pagepnt](https://github.com/user-attachments/assets/5a23d18a-c3ac-445f-bf91-20eb01023b6c) 19 | 20 | 21 | 22 | ## libraries 23 | 24 | ![2pnlt](https://github.com/user-attachments/assets/f632f190-2486-4423-9e20-73afbb526b29) 25 | 26 | 27 | ## How to install 28 | 29 | -go to tags and select v1.0 or any other version 30 | 31 | ![mogli](https://github.com/user-attachments/assets/83fbb7b5-e556-43f9-a4c5-9babeaf8b250) 32 | 33 | -Go to the above page and download the files named Pnulate.exe and icon.ico 34 | 35 | ![mooogli](https://github.com/user-attachments/assets/15091435-a0f2-4ebf-9b58-79b6ccbcfc27) 36 | 37 | -then create a folder and put the downloaded files in it 38 | 39 | ![mxglolo](https://github.com/user-attachments/assets/79d81e7f-934b-4e92-a6f4-78549a737200) 40 | 41 | -Run Pnulate.exe and if you have any problems, please contact rootlockinc@gmail.com with your problem 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /hello world.txt: -------------------------------------------------------------------------------- 1 | print("hello team") 2 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | import os 2 | import requests 3 | import qrcode 4 | from tkinter import Tk, filedialog 5 | import webbrowser 6 | import time 7 | import random 8 | import getpass 9 | from datetime import datetime 10 | from tqdm import tqdm 11 | 12 | logo = (""" 13 | ____ _ _ 14 | | _ \ _ __ _ _| | __ _| |_ ___ 15 | | |_) | '_ \| | | | |/ _` | __/ _ \\ 16 | | __/| | | | |_| | | (_| | || __/ 17 | |_| |_| |_|\__,_|_|\__,_|\__\___| 18 | 19 | GitHub: https://github.com/Rootninjaa/Pnulate-Terminal 20 | Contact: rootlockinc@gmail.com 21 | --help: all command 22 | 23 | """)#I used the logo this way because the program was breaking otherwise and I used it this way to fix it. 24 | 25 | def system_info(): 26 | print("===== System Information =====") 27 | print(f"Operating System: {os.name}") 28 | user = getpass.getuser() 29 | print(f"User: {user}") 30 | current_directory = os.getcwd() 31 | print(f"Current Directory: {current_directory}") 32 | cpu_count = os.cpu_count() 33 | print(f"CPU Core Count: {cpu_count}") 34 | print("==============================") 35 | 36 | def fetch_html_code(url): 37 | root = Tk() 38 | root.withdraw() 39 | 40 | try: 41 | response = requests.get(url) 42 | 43 | if response.status_code == 200: 44 | for _ in tqdm(range(6), unit="second", desc="Fetching HTML", colour="#660099"): 45 | time.sleep(1) 46 | print("Completed") 47 | 48 | file_path = filedialog.asksaveasfilename( 49 | defaultextension=".html", 50 | filetypes=[("HTML files", "*.html")], 51 | title="Save HTML Code" 52 | ) 53 | 54 | if file_path: 55 | with open(file_path, 'w', encoding='utf-8') as f: 56 | f.write(response.text) 57 | print(f"HTML saved to {file_path}") 58 | else: 59 | print("Save operation canceled.") 60 | else: 61 | print(f"Failed to fetch URL: {response.status_code}") 62 | 63 | except requests.RequestException as e: 64 | print(f"Request failed: {e}") 65 | except Exception as e: 66 | print(f"An error occurred: {e}") 67 | finally: 68 | root.destroy() 69 | 70 | def view_file_content(file_name): 71 | if os.path.isfile(file_name): 72 | try: 73 | print("Reading file...") 74 | # Use a single progress bar for the file reading 75 | with tqdm(total=1, unit="file", desc="File reading", colour="#660099") as pbar: 76 | # Simulate a delay (if needed) 77 | time.sleep(1) # Adjust the sleep time as necessary 78 | 79 | # Read the file content 80 | with open(file_name, 'r', encoding='utf-8') as file: 81 | content = file.read() 82 | 83 | pbar.update(1) # Update the progress bar after reading the file 84 | 85 | print("Completed") # Reading operation completed message 86 | print(f"Content:\n") 87 | print(content) 88 | 89 | except Exception as e: 90 | print(f"Failed to read file: {e}") 91 | else: 92 | print(f"Error: '{file_name}' not found.") 93 | 94 | def create_qr_code(text): 95 | qr = qrcode.QRCode( 96 | version=1, 97 | error_correction=qrcode.constants.ERROR_CORRECT_L, 98 | box_size=10, 99 | border=4, 100 | ) 101 | qr.add_data(text) 102 | qr.make(fit=True) 103 | img = qr.make_image(fill='black', back_color='white') 104 | 105 | dialog = Tk() 106 | try: 107 | file_path = filedialog.asksaveasfilename( 108 | defaultextension=".png", 109 | filetypes=[("PNG files", "*.png")], 110 | title="Save QR Code" 111 | ) 112 | 113 | if file_path: 114 | img.save(file_path) 115 | print(f"QR code saved as '{file_path}'.") 116 | else: 117 | print("ERROR 637: QR code not saved.") 118 | finally: 119 | dialog.destroy() 120 | 121 | def open_browser(url): 122 | try: 123 | if url: 124 | webbrowser.open(url) 125 | print(f"Opening URL: {url}") 126 | else: 127 | print("ERROR 638: URL not provided.") 128 | except Exception as e: 129 | print(f"Failed to open URL: {e}") 130 | 131 | def delete_file(file_name): 132 | if os.path.isfile(file_name): 133 | try: 134 | os.remove(file_name) 135 | print(f"File '{file_name}' has been deleted.") 136 | except Exception as e: 137 | print(f"Failed to delete file: {e}") 138 | else: 139 | print(f"Error: '{file_name}' not found.") 140 | 141 | def list_files(directory): 142 | for _ in tqdm(range(6), unit="second", desc="files are listed", colour="#660099"): 143 | time.sleep(3) 144 | print("Completed") 145 | 146 | if os.path.isdir(directory): 147 | try: 148 | files = os.listdir(directory) 149 | if files: 150 | print(f"Files in '{directory}':") 151 | for file in tqdm(files, desc="Listing files"): 152 | print(file) 153 | else: 154 | print(f"No files found in '{directory}'.") 155 | except Exception as e: 156 | print(f"Failed to list files: {e}") 157 | else: 158 | print(f"Error: '{directory}' not found or not a directory.") 159 | 160 | def generate_random_password(): 161 | number_list = ["10", "20", "19", "30", "1"] 162 | suffix_list = ["byterminal", "bypluxee", "hoodbyegood"] 163 | number = random.choice(number_list) 164 | suffix = random.choice(suffix_list) 165 | print(f"Password: {number + suffix}") 166 | 167 | def clear_terminal(): 168 | os.system('cls' if os.name == 'nt' else 'clear') 169 | print("Terminal cleared.") 170 | 171 | def create_text_file(): 172 | file_name = input("Enter new file name (e.g., file.txt): ") 173 | content = input("Enter file content: ") 174 | 175 | try: 176 | print("Creating file...") 177 | 178 | # Simulate the file creation process with a progress bar 179 | with tqdm(total=6, unit="second", desc="File creating", colour="#660099") as pbar: 180 | for _ in range(6): 181 | time.sleep(1) # Simulating time taken to create the file 182 | pbar.update(1) # Update the progress bar 183 | 184 | # Write content to the file after simulating the progress 185 | with open(file_name, 'w', encoding='utf-8') as file: 186 | file.write(content) 187 | 188 | print(f"File '{file_name}' created.") 189 | 190 | except Exception as e: 191 | print(f"Failed to create file: {e}") 192 | 193 | print(logo) 194 | 195 | def show_current_date_time(): 196 | now = datetime.now() 197 | print(f"Current Date and Time: {now.strftime('%Y-%m-%d %H:%M:%S')}") 198 | 199 | while True: 200 | command = input("Pnulate:~$ ") 201 | 202 | if command == "--help": 203 | print("--kill terminal = quit the terminal") 204 | print("--help = all commands help") 205 | print("--show = show content of a file") 206 | print("--qr = generate a QR code for the provided URL and open a file dialog to save it") 207 | print("--gethtml5lib = returns the HTML codes of the site whose URL is written") 208 | print("--openwebsite = opens the site you want") 209 | print("--deletefile = deletes the specified file") 210 | print("--listfiles = lists all files in the specified directory") 211 | print("--genpass = generates a random password") 212 | print("--clear = clears the terminal") 213 | print("--neofetch = displays system properties") 214 | print("--createfile = creates a new text file") 215 | print("--datetime = displays the current date and time") 216 | 217 | 218 | elif command == "--kill terminal": 219 | print("Terminal killed.") 220 | break 221 | 222 | elif command.startswith("--show "): 223 | file_name = command[len("--show "):].strip() 224 | view_file_content(file_name) 225 | 226 | elif command.startswith("--qr "): 227 | url = command[len("--qr "):].strip() 228 | create_qr_code(url) 229 | 230 | elif command.startswith("--gethtml5lib "): 231 | url = command[len("--gethtml5lib "):].strip() 232 | fetch_html_code(url) 233 | 234 | elif command.startswith("--openwebsite "): 235 | url = command[len("--openwebsite "):].strip() 236 | open_browser(url) 237 | 238 | elif command.startswith("--deletefile "): 239 | file_name = command[len("--deletefile "):].strip() 240 | delete_file(file_name) 241 | 242 | elif command.startswith("--listfiles "): 243 | directory = command[len("--listfiles "):].strip() 244 | list_files(directory) 245 | 246 | elif command == "--genpass": 247 | generate_random_password() 248 | 249 | elif command == "--clear": 250 | clear_terminal() 251 | 252 | elif command == "--neofetch": 253 | system_info() 254 | 255 | elif command == "--createfile": 256 | create_text_file() 257 | 258 | elif command == "--datetime": 259 | show_current_date_time() 260 | 261 | else: 262 | print("ERROR 323: is not recognized as an internal or external command") 263 | 264 | input(".") 265 | -------------------------------------------------------------------------------- /note.txt: -------------------------------------------------------------------------------- 1 | program 2 | --------------------------------------------------------------------------------