{"id":47726922,"url":"https://github.com/thanoulis/tpmg","last_synced_at":"2026-04-02T20:44:36.131Z","repository":{"id":87084690,"uuid":"317206764","full_name":"thanoulis/tpmg","owner":"thanoulis","description":"simple zenity/kdialog/etc replacement written in core Tcl/Tk","archived":false,"fork":false,"pushed_at":"2024-02-28T19:26:35.000Z","size":519,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-02-28T20:33:59.284Z","etag":null,"topics":["command-line","dialog","gui","kdialog","qarma","shell","zenity"],"latest_commit_sha":null,"homepage":"","language":"Tcl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thanoulis.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2020-11-30T11:48:08.000Z","updated_at":"2024-02-13T22:50:31.000Z","dependencies_parsed_at":"2024-02-28T20:42:41.574Z","dependency_job_id":null,"html_url":"https://github.com/thanoulis/tpmg","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/thanoulis/tpmg","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thanoulis%2Ftpmg","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thanoulis%2Ftpmg/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thanoulis%2Ftpmg/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thanoulis%2Ftpmg/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thanoulis","download_url":"https://codeload.github.com/thanoulis/tpmg/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thanoulis%2Ftpmg/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31316007,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["command-line","dialog","gui","kdialog","qarma","shell","zenity"],"created_at":"2026-04-02T20:44:35.461Z","updated_at":"2026-04-02T20:44:36.124Z","avatar_url":"https://github.com/thanoulis.png","language":"Tcl","funding_links":[],"categories":[],"sub_categories":[],"readme":"----\n\n**tpmg** is a **Poor Man's GUI** much like [zenity](https://gitlab.gnome.org/GNOME/zenity) or [kdialog](https://invent.kde.org/utilities/kdialog) written in core [Tcl/Tk](https://www.tcl.tk).\n\n----\n\n### Dialogs\n\n* [Calendar](#calendar-dialog \"Calendar\")\n* [Color](#color-dialog \"Color\")\n* [Directory](#directory-dialog \"Directory\")\n* [Entry](#entry-dialog \"Entry\")\n* [FileSave](#filesave-dialog \"FileSave\")\n* [FileSelect](#fileselect-dialog \"FileSelect\")\n* [Information](#information-dialog \"Information\")\n* [List](#list-dialog \"List\")\n* [Notification](#notification-popup \"Notification\")\n* [Password](#password-dialog \"Password\")\n* [Progress](#progress-dialog \"Progress\")\n* [Scale](#scale-dialog \"Scale\")\n* [Text](#text-dialog \"Text\")\n\n----\n\n#### Calendar dialog\n\n* description:\n\n  Display a date selection dialog.\n\n  Date format can be customized with `--format` option.\n\n  Format options are almost the same with `date` utility from **coreutils**.\n\n  See `man n clock` or `man 1 date` for details.\n\n* options:\n  | option        | type    | description       | default       |\n  |---------------|:-------:|-------------------|:-------------:|\n  | --title=      | string  | set window title  | \"Select Date\" |\n  | --format=     | string  | format date       | \"%a %d %b %Y\" |\n  | --day=        | integer | set initial day   | current day   |\n  | --month=      | integer | set initial month | current month |\n  | --year=       | integer | set initial year  | current year  |\n  | --help        |         | this help         |\n\n* returns:\n\n  | OK                | Cancel | Error |\n  |:-----------------:|:------:|:-----:|\n  | selected\u003cbr/\u003edate | 1      | 255   |\n\n* example:\n\n  ```shell\n  tpmg --calendar --title=\"Select a date\" --format=\"%d%m%y\" \\\n    --day=\"18\" --month=\"3\" --year=\"1986\"\n  ```\n\n* screenshot:\n\n  ![CalendarDialog](screenshots/CalendarDialog.png \"CalendarDialog\")\n\n----\n\n#### Color dialog\n\n* description:\n\n  Displays a color selection dialog. Appearance depends on platform.\n\n* options:\n\n  | option   | type     | description       | default           |\n  |----------|:--------:|-------------------|:-----------------:|\n  | --title= | string   | set window title  | \"Select a Color\"  |\n  | --color= | hexcolor | set initial color | \"#d9d9d9\"         |\n  | --help   |          | this help         |\n\n* returns:\n\n  | OK    | Cancel | Error |\n  |:-----:|:------:|:-----:|\n  | color | 1      | 255   |\n\n* example:\n\n  ```shell\n  tpmg --color --title=\"Choose Color\" --color=\"#eed421\"\n  ```\n\n* screenshot:\n\n  ![ColorDialog](screenshots/ColorDialog.png \"ColorDialog\")\n\n----\n\n#### Directory dialog\n\n* description:\n\n  Display a directory select dialog. Appearance depends on platform.\n\n* options:\n\n  | option   | type   | description          | default              |\n  |----------|:------:|----------------------|:--------------------:|\n  | --title= | string | set window title     | \"Select a Directory\" |\n  | --exist  |        | directory must exist |\n  | --help   |        | this help            |\n\n* returns:\n\n  | OK        | Cancel | Error |\n  |:---------:|:------:|:-----:|\n  | directory | 1      | 255   |\n\n* example:\n\n  ```shell\n  tpmg --directory --title=\"Select a Directory\" --exist\n  ```\n\n* screenshot:\n\n  ![DirectoryDialog](screenshots/DirectoryDialog.png \"DirectoryDialog\")\n\n----\n\n#### Entry dialog\n\n* description:\n\n  Display any number of entry dialogs. Default is one.\n\n  Configuration is done through `--text` option, with comma separated label texts, as in example below.\n\n* options:\n  | option        | type   | description      | default             |\n  |---------------|:------:|------------------|:-------------------:|\n  | --title=      | string | set window title | \"Enter Text\"        |\n  | --text=       | csv    | set label text   | \"Enter text below:\" |\n  | --default=    | csv    | set initial text |\n  | --help        |        | this help        |\n\n* returns:\n\n  | OK         | Cancel | Error |\n  |:----------:|:------:|:-----:|\n  | entry list | 1      | 255   |\n\n* example:\n\n  ```shell\n  tpmg --entry --title=\"Personal Information\" \\\n    --text=\"First name:,Last name:,email:\" \\\n    --default=\",,email@example.com\"\n  ```\n\n* screenshot:\n\n  ![EntryDialog](screenshots/EntryDialog.png \"EntryDialog\")\n\n----\n\n#### FileSave dialog\n\n* description:\n\n  Display a file save dialog. Appearance depends on platform.\n\n* options:\n\n  | option       | type   | description                 | default           |\n  |--------------|:------:|-----------------------------|:-----------------:|\n  | --title=     | string | set window title            | \"Save File\"       |\n  | --ext=       | csv    | set filetype filter         | show all files    |\n  | --file=      | path   | set initial file            |\n  | --noconfirm  |        | do not confirm on overwrite | confirm overwrite |\n  | --help       |        | this help                   |\n\n* returns:\n\n  | OK        | Cancel | Error |\n  |:---------:|:------:|:-----:|\n  | file path | 1      | 255   |\n\n* example:\n\n  ```shell\n  tpmg --filesave --title=\"Save File\" --file=\"~/myfile.txt\" --noconfirm\n  ```\n\n* screenshot:\n\n  ![FileSaveDialog](screenshots/FileSaveDialog.png \"FileSaveDialog\")\n\n----\n\n#### FileSelect dialog\n\n* description:\n\n  Display a file selection dialog. Appearance depends on platform.\n\n* options:\n\n  | option    | type   | description           | default        |\n  |-----------|:------:|-----------------------|:--------------:|\n  | --title=  | string | set window title      | \"Select Files\" |\n  | --ext=    | csv    | set filetype filter   | show all files |\n  | --single  |        | single file selection |\n  | --help    |        | this help             |\n\n* returns:\n\n  | OK        | Cancel | Error |\n  |:---------:|:------:|:-----:|\n  | file list | 1      | 255   |\n\n* example:\n\n  ```shell\n  tpmg --fileselect --title=\"Select a File\" --ext=\"*.txt,*\" --single\n  ```\n\n* screenshot:\n\n  ![FileSelectDialog](screenshots/FileSelectDialog.png \"FileSelectDialog\")\n\n----\n\n#### Information dialog\n\n* description:\n\n  Display an information dialog. Supports icons for info, error, question and warning.\n\n  Can have a combination of buttons, as okcancel, yesno, retrycancel, etc.\n\n  Main message is bold and equals to the first non option string.\n\n  All other strings are message details, with every string represent a line.\n\n* options:\n\n  | option       | type               | description                 | default |\n  |--------------|:------------------:|-----------------------------|:-------:|\n  | --title=     | string             | set window title            |\n  | --icon=      | icon\u003csup\u003e1\u003c/sup\u003e   | icon to use in dialog       | info    |\n  | --button=    | button\u003csup\u003e2\u003c/sup\u003e | buttons to use in dialog    | ok      |\n  | first string | string             | main message (in bold)      |\n  | other string | string             | message details             |\n  | --help       |                    | this help                   |\n\n  \u003e1: info error question warning\u003cbr/\u003e\n  \u003e2: ok okcancel yesno yesnocancel retrycancel abortretryignore\n\n* returns:\n\n  the button\u003csup\u003e2\u003c/sup\u003e name\n\n* example:\n\n  ```shell\n  tpmg --information --title=\"Are you sure?\" --icon=\"question\" \\\n    --button=\"yesnocancel\" \"All data will be wiped!\" \\\n    \"This action cannot be undone.\" \"Proceed?\"\n  ```\n\n* screenshot:\n\n  ![InformationDialog](screenshots/InformationDialog.png \"InformationDialog\")\n\n----\n\n#### List dialog\n\n* description:\n\n  Display an option list with radio, combobox, check buttons or menu items. Default type is check buttons.\n\n  Configuration is done through `--options` option, with comma separated list, much like in **Entry** dialog.\n\n  Can also set the \"default\" option in a radio/combobox/menu list, or toggle default values in the check list.\n\n  The following example shows how.\n\n* options:\n\n  | option     | type         | description       | default              |\n  |------------|:------------:|-------------------|:--------------------:|\n  | --title=   | string       | set window title  | \"Set Options\"        |\n  | --text=    | string       | set label text    | \"Set options below:\" |\n  | --type=    | radio\\|combo\\|menu\\|check | set list type | check |\n  | --options= | csv          | set options list  |\n  | --default= | radio:string\u003cbr/\u003ecombo:string\u003cbr/\u003emenu:string\u003cbr/\u003echeck:csv | default option\u003cbr/\u003edefault option\u003cbr/\u003edefault menu item\u003cbr/\u003eset option to true |\n  | --anchor=  | w\\|e\\|c      | list placement in window | w             |\n  | --edit     |              | can edit combobox | read only            |\n  | --help     |              | this help         |\n\n* returns:\n\n  | OK                      | Cancel | Error |\n  |:-----------------------:|:------:|:-----:|\n  | radio: selected option  | 1      | 255   |\n  | combo: selected option  | 1      | 255   |\n  | menu : clicked item     | 1      | 255   |\n  | check: true\\|false list | 1      | 255   |\n\n* example:\n\n  ```shell\n  tpmg --list --title=\"Select filetype\" --text=\"Select filetype:\" \\\n    --type=\"radio\" --options=\"Text File,RTF Document,Word Document\" \\\n    --default=\"Text File\" --anchor=\"w\"\n  ```\n\n* screenshot:\n\n  ![ListDialog](screenshots/ListDialog.png \"ListDialog\")\n\n----\n\n#### Notification popup\n\n* description:\n\n  Display a notification popup.\n\n  Does not need a running notification daemon.\n\n  Notification popup will close when clicked, or after `delay` seconds.\n\n* options:\n  | option        | type                 | description                     | default             |\n  |---------------|:--------------------:|---------------------------------|:-------------------:|\n  | --title=      | string               | set window title                | \"tPMG Notification\" |\n  | --delay=      | integer              | set timeout (seconds)           | 5                   |\n  | --geometry=   | `width`x`height±X±Y` | set popup geometry \u003csup\u003e1\u003c/sup\u003e | upper right corner  |\n  | --icon=       | icon\u003csup\u003e2\u003c/sup\u003e     | icon to use                     |\n  | --background= | hexcolor             | set background color            | orange              |\n  | --foreground= | hexcolor             | set foreground color            | black               |\n  | other strings | string               | text to show                    |\n  | --help        |                      | this help                       |\n\n  \u003e1:\u003cbr/\u003e\n  \u003e width:  popup width in pixels\u003cbr/\u003e\n  \u003e height: popup height in pixels\u003cbr/\u003e\n  \u003e X:      popup X position on screen\u003cbr/\u003e\n  \u003e Y:      popup Y position on screen\u003cbr/\u003e\n  \u003e`width`x`height` or `±X±Y` can be omitted\u003cbr/\u003e\n  \u003e2: info error question warning\n\n* returns:\n\n  | OK   | Error |\n  |:----:|:-----:|\n  | ok   | 255   |\n\n* example:\n\n  ```shell\n  tpmg --notification --title=\"Notify Sith Lord\" --delay=\"10\" \\\n    --geometry=\"200x50+0+0\" --icon=\"error\" \\\n    --background=\"#f8a300\" --foreground=\"#000000\" \\\n    \"System failure\" \"Cannot execute order: 66\"\n  ```\n\n* screenshot:\n\n  ![Notification](screenshots/Notification.png \"Notification\")\n\n----\n\n#### Password dialog\n\n* description:\n\n  Display a classic username/password dialog.\n\n  Username entry can be omitted.\n\n  Password entry hides text with asterisks.\n\n* options:\n\n  | option        | type   | description                 | default      |\n  |---------------|:------:|-----------------------------|:------------:|\n  | --title=      | string | set window title            | \"Login As\"   |\n  | --nousername  |        | hide the \"Username\" entry   |\n  | --help        |        | this help                   |\n\n* returns:\n\n  | OK                    | Cancel | Error |\n  |:---------------------:|:------:|:-----:|\n  | username\u003cbr/\u003epassword | 1      | 255   |\n\n* example:\n\n  ```shell\n  tpmg --password --title=\"Welcome $USER\" --nousername\n  ```\n\n* screenshot:\n\n  ![PasswordDialog](screenshots/PasswordDialog.png \"PasswordDialog\")\n\n----\n\n#### Progress dialog\n\n* description:\n\n  Display a progress bar dialog.\n\n  **Progress** dialog reads data from `stdin` line by line.\n\n  Lines must be prefixed with `tpmg:`, or are ignored.\n\n  If text is a number, the progress bar advances to that number.\n\n  Else, it updates the label text.\n\n* options:\n\n  | option   | type     | description                | default         |\n  |----------|:--------:|----------------------------|:---------------:|\n  | --title= | string   | set window title           | \"Show Progress\" |\n  | --text=  | string   | set label text             |\n  | --color= | hexcolor | set progress bar color     | Tk default      |\n  | --pulse  |          | pulsating progress bar     |\n  | --auto   |          | close window on completion |\n  | --max=   | integer  | set max value              | 100             |\n  | --value= | integer  | set initial bar value      | 0               |\n  | --help   |          | this help                  |\n\n* returns:\n\n  | OK | Cancel | Error |\n  |:--:|:------:|:-----:|\n  | ok | 1      | 255   |\n\n* example:\n\n  ```shell\n  #!/usr/bin/env sh\n  (\n  echo \"tpmg:Starting jobs...\"; sleep 1\n  echo \"tpmg:30\"; echo \"tpmg:Setting variables...\"; sleep 1\n  echo \"tpmg:70\"; echo \"tpmg:Clearing cache...\"; sleep 1\n  echo \"This line will be ignored\"; sleep 1\n  echo \"tpmg:100\"; echo \"tpmg:Done.\"\n  ) | tpmg --progress --color=\"#948b84\" --auto\n  ```\n\n* screenshot:\n\n  ![ProgressDialog](screenshots/ProgressDialog.png \"ProgressDialog\")\n\n* bugs:\n\n  Wrong behavior on pulsating progress bar (not critical).\n\n----\n\n#### Scale dialog\n\n* description:\n\n  Display a scale dialog. Min, max and current value can be configured.\n\n* options:\n\n  | option   | type    | description       | default               |\n  |----------|:-------:|-------------------|:---------------------:|\n  | --title= | string  | set window title  | \"Adjust Value\"        |\n  | --text=  | string  | set label text    | \"Adjust value below:\" |\n  | --min=   | integer | set min value     | 0                     |\n  | --max=   | integer | set max value     | 100                   |\n  | --value= | integer | set initial value | 0                     |\n  | --step=  | integer | set step size     | 1                     |\n  | --help   |         | this help         |\n\n* returns:\n\n  | OK    | Cancel | Error |\n  |:-----:|:------:|:-----:|\n  | scale | 1      | 255   |\n\n* example:\n\n  ```shell\n  tpmg --scale --title=\"Adjust Transparency\" \\\n    --text=\"Choose window transparency:\" \\\n    --min=\"0\" --max=\"100\" --value=\"20\"\n  ```\n\n* screenshot:\n\n  ![ScaleDialog](screenshots/ScaleDialog.png \"ScaleDialog\")\n\n----\n\n#### Text dialog\n\n* description:\n\n  Display a text information dialog.\n\n  Text can be from file, from command line in the form of every string is a new line and from standard input.\n\n  In case of multiple inputs, will concatenate the text, with `file`-\u003e`string`-\u003e`stdin` hierarchy.\n\n* options:\n\n  | option        | type   | description       | default       |\n  |---------------|:------:|-------------------|:-------------:|\n  | --title=      | string | set window title  | \"Show Text\"   |\n  | --file=       | path   | text file to show |\n  | --edit        |        | can edit text     | no edit       |\n  | --wrap        |        | wrap text         | no wrap       |\n  | --font=       | font   | font to use       | \"TkFixedFont\" |\n  | other strings | string | text body (every string is a new line) |\n  | --help        |        | this help         |\n\n* returns:\n\n  | OK | Cancel | Error |\n  |:--:|:------:|:-----:|\n  | ok | 1      | 255   |\n\n* example:\n\n  ```shell\n  tpmg --text --title=\"README\" --file=\"~/README.txt\" \\\n    --edit --font=\"{DejaVu Sans Mono} 12 bold\"\n  ```\n\n* screenshot:\n\n  ![TextDialog](screenshots/TextDialog.png \"TextDialog\")\n\n----\n\n### Dependencies\n\n* **Tcl** version 8.6 or later.\n\n* **Tk** version 8.6 or later.\n\n##### For Microsoft Windows users:\n\n* [ActiveTcl](https://www.activestate.com/activetcl) version 8.6 or later.\n\n----\n\n### License\n\n**tpmg** is licensed under the **MIT License**.\n\nRead [LICENSE](LICENSE) for details.\n\n----\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthanoulis%2Ftpmg","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthanoulis%2Ftpmg","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthanoulis%2Ftpmg/lists"}