{"id":15724280,"url":"https://github.com/cedlemo/tortosa","last_synced_at":"2025-10-21T03:30:17.001Z","repository":{"id":144940380,"uuid":"12061176","full_name":"cedlemo/Tortosa","owner":"cedlemo","description":"Simple GNU/Linux terminal emulator based on vte3 lib.","archived":false,"fork":false,"pushed_at":"2020-04-03T10:53:15.000Z","size":7006,"stargazers_count":3,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2024-12-12T18:48:28.625Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cedlemo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","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,"publiccode":null,"codemeta":null}},"created_at":"2013-08-12T16:52:42.000Z","updated_at":"2021-05-30T17:14:05.000Z","dependencies_parsed_at":"2023-04-04T21:03:13.457Z","dependency_job_id":null,"html_url":"https://github.com/cedlemo/Tortosa","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cedlemo%2FTortosa","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cedlemo%2FTortosa/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cedlemo%2FTortosa/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cedlemo%2FTortosa/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cedlemo","download_url":"https://codeload.github.com/cedlemo/Tortosa/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237424967,"owners_count":19307993,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-10-03T22:15:59.567Z","updated_at":"2025-10-21T03:30:16.518Z","avatar_url":"https://github.com/cedlemo.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tortosa\n\nVte Terminal Emulator\n\n\u003cimg src=\"https://github.com/cedlemo/Tortosa/raw/develop/preview.png\" width=\"576\" alt=\"Screenshot\"\u003e\n\n## Install/remove\n\n```\nsh build.sh\nmake\nsudo make install\n```\n\nTortosa is by default installed in:\n\n```\n~ ls /usr/local/share/glib-2.0/schemas\ncom.github.cedlemo.tortosa.gschema.xml  gschemas.compiled\n~ whereis tortosa\ntortosa: /usr/local/bin/tortosa\n```\n\n## Expected Functionnalities\n\n### Done\n* Window with a terminal\n* Css theming for all the widgets\n* Setup unit testing environment\n* define rules to memory managment\n* add an application menu\n* Enforce a coding style (use clang linter ?)\n* GSettings\n  - load gschema\n  - adapt makefile to install gschema\n* Add terminal right-click menu\n   - add copy action\n   - add paste action\n* Display the title of the current terminal in the header bar\n* Window with multiple terminals managment\n  - multiple terminals in tabs (one terminal in one tab, GtkNotebook)\n  - add shortcuts to manage tabs\n\t- ctrl+shift + t : new terminal\n\t- ctrl+shift + left : previous terminal\n\t- ctrl+shift + right : next terminal\n\n### To Do\n* Window with multiple terminals managment\n  - multiple terminals in tabs (one terminal in one tab, GtkNotebook)\n  - multiple terminals in pans (multiple terminal in one tab)\n  - add shortcuts to manage tabs\n* Terminal colors / Palette managment\n* GSettings\n  - specify the Css theme file\n  - specify the shell to use\n  - specify the Palette color\n  - specify the Vte configuration\n* Vte Regexp + actions\n* Unit testing\n\n## Development Notes\n\n### Build, clean test:\n\n* https://developer.gnome.org/anjuta-build-tutorial/stable/create-autotools.html.en\n* https://developer.gnome.org/gtk3/stable/gtk-getting-started.html\n* https://stackoverflow.com/questions/10999549/how-do-i-create-a-configure-script\n\n```bash\naclocal\nautomake --add-missing --foreign\nautoconf\n./configure\nmake\n./src/tortosa\n```\nUse `sh build.sh`\n\nLaunch tortosa to test it:\n\n```\nmake launch\n```\n\nClean the repository after build:\n\n```bash\nmake clean\nmake maintainer-clean\n```\n\nGenerates the compile_commands.json for ccls/clang used with coc.\n\n```bash\n# after having buildt everything\nbear make\n```\n\n### Debug\n\n#### Gdb\n\n#### Valgrind:\n\n* https://developer.gnome.org/programming-guidelines/stable/tooling.html.en#valgrind\n* http://liacs.leidenuniv.nl/~stefanovtp/courses/StudentenSeminarium/Papers/OS/IMMG.pdf\n\n```bash\nlibtool exec valgrind --tool=memcheck --leak-check=full --suppressions=./gtk.supp ./src/tortosa\nG_SLICE=debug-blocks valgrind --tool=memcheck --leak-check=full --suppressions=./gtk.supp ./src/tortos\n```\n\n* G_SLICE=debug-blocks will turn off gtk's advanced memory management to allow valgrind to show correct results.\n* --leak-check=full will show stack traces for the leaked memory blocks.\n* You can also use --show-reachable=yes to see stack traces for all memory blocks that haven't been free when the program exits.\n* There is also the massif valgrind tool that tracks memory usage to show which parts of the program are using the most memory.\n\nRun program under massif:\n\n```\nG_SLICE=always-malloc valgrind --tool=massif --detailed-freq=2 --max-snapshots=400 --num-callers=20 ./src/tortosa\n```\n\n## Global Structure:\n\n### Classes hierarchy\n\nThe structure should be the following:\n\n```\nTortosaApplication\n    |\n     ---\u003e TortosaWindowApplication\n             |\n\t      ---\u003e TortosaHeaderBar\n\t     |\n\t      ---\u003e TortosaNotebook\n\t      \t\t|\n\t\t\t ---\u003e TortosaTab (1 to n)\n\t\t\t       |\n\t\t\t        ---\u003e TortosaPan (1 to n)\n```\n\n### Tortosa Shell\n\nThe application uses a single instance of a TortosaShell class to store all of its runtime information. This\n instance is stored as a global variable and is accessible in all the different parts of the code thanks to the\n `tortosa_shell_get_default` constructor which implements the singleton pattern.\n\nThis design is shamelessly stolen from Epiphany:\n\n    * https://gitlab.gnome.org/GNOME/epiphany/blob/master/HACKING.md\n    * https://gitlab.gnome.org/GNOME/epiphany/blob/master/src/ephy-shell.h\n    * https://gitlab.gnome.org/GNOME/epiphany/blob/master/src/ephy-shell.c\n\n### Style:\n\n#### Generates the parser configuration file:\n\n    ```\n    clang-format -style=google -dump-config \u003e .clang-format\n    ```\n\n#### Format the files:\n    ```\n    clang-format -i file.c\n    ```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcedlemo%2Ftortosa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcedlemo%2Ftortosa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcedlemo%2Ftortosa/lists"}