{"id":15720843,"url":"https://github.com/sanel/ono","last_synced_at":"2025-05-13T02:50:33.563Z","repository":{"id":17555309,"uuid":"20358216","full_name":"sanel/ono","owner":"sanel","description":"Quickly access your applications from system tray","archived":false,"fork":false,"pushed_at":"2022-12-10T13:23:04.000Z","size":116,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-01T06:02:46.489Z","etag":null,"topics":["c","gtk2","gtk3","repl","scheme","tray","tray-app","tray-menu"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sanel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-05-31T15:12:26.000Z","updated_at":"2023-05-11T04:16:10.000Z","dependencies_parsed_at":"2023-01-11T20:26:50.337Z","dependency_job_id":null,"html_url":"https://github.com/sanel/ono","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/sanel%2Fono","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sanel%2Fono/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sanel%2Fono/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sanel%2Fono/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sanel","download_url":"https://codeload.github.com/sanel/ono/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253862740,"owners_count":21975583,"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":["c","gtk2","gtk3","repl","scheme","tray","tray-app","tray-menu"],"created_at":"2024-10-03T22:00:32.640Z","updated_at":"2025-05-13T02:50:33.537Z","avatar_url":"https://github.com/sanel.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ono \n\nSmall application that sits inside system tray, allowing you to\nmanage [Offlineimap](http://offlineimap.org) and mail agent easily.\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://raw.github.com/sanel/ono/master/images/shot.png\"\n     alt=\"ono\" title=\"ono screenshot\"\u003e\n\u003c/p\u003e\n\n## Introduction\n\n*ono* is free, configurable and portable GUI application from\nwhere you can easily handle Offlineimap and start any mail agent\n(including terminal agents, like [Mutt](http://www.mutt.org)).\n\nThanks to builtin scripting language, you can even abuse *ono* to\nserve any program without system tray support.\n\n## Installation \u0026 running\n\nMake sure you have C compiler, GNU make and Gtk+2 installed\n(compilation under Gtk+3 isn't tested, but should work out of the\nbox).\n\n[Download](https://github.com/sanel/ono/releases) latest official\nrelease or clone this repository (if you would like to have bleeding\nedge code), and inside *ono* folder run:\n\n```\n$ make\n```\n\nTo install it, as superuser (or root) run:\n\n```\n$ make install\n```\n\nIf you happen to have permissions to install as normal user using\n*sudo*, this will work too:\n\n```\n$ sudo make install\n```\n\nBefore running it, make sure to configure it first. The next section\nwill explain you the details behind configuration and how to adjust it\nto suit your needs.\n\n## Configuration\n\n*ono* comes with sample configuration file named **onorc**\n(distributed with the source code, but not installed by\ndefault). You have to copy it to *$HOME/.onorc* and configure to match\nyour Offlineimap configuration.\n\nConfiguration language *ono* is using is\n[Scheme](http://en.wikipedia.org/wiki/Scheme_(programming_language)),\nbetter say a subset of R5RS specification, which gives *ono* enough\nflexibility to be extended and modified without writing additional C\ncode.\n\nIf you never used Scheme before, no worry; Scheme is very simple\nlanguage easy to learn and there are numerous tutorials online for\nbeginners; for example\n[Yet Another Scheme Tutorial](http://www.shido.info/lisp/idx_scm_e.html).\n\n**onorc** is heavily commented, but here is how it can look like:\n\n```scheme\n; this is a comment\n\n;(set! *offlineimap-path* \"/opt/offlineimap/bin/offlineimap\")\n;(set! *offlineimap-args* \"-u quiet\")\n\n(ono-menu\n  (vector \"Fetch yahoo\" \"yahoo\")\n  (vector \"Fetch gmail\" \"gmail\")\n  (vector \"Fetch All\" (lambda () (offlineimap #f #f))))\n\n(ono-on-tray-click\n (lambda ()\n   (system \"mrxvt -m -e mutt\")))\n```\n\n***offlineimap-path*** should contain Offlineimap program location. By\ndefault, you don't have to set this variable (*ono* will try to search\nit on your _$PATH_) unless you have installed Offlineimap on unusual\nlocation.\n\n***offlineimap-args*** are global Offlineimap command line arguments\nused for all accounts. With *ono* you can set account specific or\nglobal arguments (arguments Offlineimap understands, of course).\n\n**ono-menu** is a construct where you put menu items, displayed when\nright mouse button is clicked on *ono* system tray icon. Each entry\nhas label name, Offlineimap account name (or Scheme function) and\noptional icon, assigned to given menu item.\n\nFor example, the statement:\n\n```scheme\n  (vector \"Fetch yahoo\" \"yahoo\")\n```\n\ntells *ono* to add menu entry labeled as \"Fetch yahoo\" and assign\naction; in this case is to invoke Offlineimap with *yahoo* account,\njust like you would say in command line: *offlineimap -a yahoo*.\n\nAction can be either Scheme string or function. In case of string,\n*ono* will assume you have Offlineimap account with the same name or\nwill not be able to run Offlineimap successfully. However, if you\nwould like more advanced control, you should use a function.\n\nIn our example, \"Fetch All\" entry is using a function with explicit\ncall of builtin *(offlineimap)* Scheme function. *(offlineimap)*\naccepts two parameters, account entry in offlineimaprc and\nOfflineimap additional arguments.\n\nIf you put **#f** (false in Scheme), *ono* will call Offlineimap\nwithout account and arguments, which will at the end request from\nOfflineimap to synchronize all accounts.\n\n**ono-on-tray-click** tells *ono* what to do when you click on *ono*\nicon in system tray (usually with left mouse button). In our example,\nit will run *mrxvt* terminal in fullscreen and start Mutt mail agent.\n\n## Command line arguments\n\nYou can run *ono -h* to see command line arguments, which should be\nself-explanatory. \n\n## Using ono REPL\n\n*ono* comes with builtin Scheme\n[REPL](http://en.wikipedia.org/wiki/Read\\u2013eval\\u2013print_loop)\nwhere you can write and evaluate Scheme code, experiment with *ono*\nfunctions, test configuration and more. To start it, use **ono -r**\nand to see how things works you can, for example, call manually\n*(offlineimap)* like:\n\n```\nOno REPL. Type (quit) to exit interpreter.\n\u003e (offlineimap \"gmail\" \"--info\")\n```\n\nwhich will output in REPL details about given account. This command is\nthe same as you would say to Offlineimap:\n\n```\n$ offlineimap -a gmail --info\n```\n\n## License\n\nCopyright (c) Sanel Zukan. GPL v2.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsanel%2Fono","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsanel%2Fono","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsanel%2Fono/lists"}