{"id":19378168,"url":"https://github.com/almarklein/notes","last_synced_at":"2025-02-24T16:18:46.459Z","repository":{"id":72713774,"uuid":"263042297","full_name":"almarklein/notes","owner":"almarklein","description":"Tiny note taking app","archived":false,"fork":false,"pushed_at":"2020-05-11T12:56:07.000Z","size":37,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-07T05:28:30.610Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","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/almarklein.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-05-11T12:55:41.000Z","updated_at":"2024-05-25T21:44:49.000Z","dependencies_parsed_at":"2023-03-03T01:00:26.459Z","dependency_job_id":null,"html_url":"https://github.com/almarklein/notes","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/almarklein%2Fnotes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/almarklein%2Fnotes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/almarklein%2Fnotes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/almarklein%2Fnotes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/almarklein","download_url":"https://codeload.github.com/almarklein/notes/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240511295,"owners_count":19813237,"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-11-10T09:05:03.718Z","updated_at":"2025-02-24T16:18:46.437Z","avatar_url":"https://github.com/almarklein.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NOTES.txt\n  \nThis is a specification of a simple, text-only protocol for storing and\nselecting notes. The protocol explicitly differentiates between notmal\nnotes (i.e. journal entries), tasks, and ideas (as in a [spark\nfile](https://medium.com/the-writers-room/8d6e7df7ae58)). It also makes\nuse of hashtags (which are #great) to organize notes.\n\nThis repo also contains an app that implements the protocol. \n\n\n# Introduction\n  \nThe idea is to maintain a (large) collection of text notes, and allow\nthe user to very easily select all notes accoring to simple critera.\n\nThere are three kind of notes: tasks, ideas and normal notes. All these\nnotes are stored in one heap and shown chronologically by default.\n\n\n# Note storage\n  \nMultiple notes can be stored in a text file. Notes are separated by\nlines that start with ``----``. This separater line can also\ncontain extra information, organized in key-value pairs separated by commas.\nCurrently supported are *id*, *c* (created) and *m* (modified).\nFor example: ``---- id:asjasdb32b2323g23jg23j c:2014-01-30 m:2014-01-31 11:36``\n\nFor ease of use one can also specify simply the date (and time). \nThe date should be formatted as: ``YYYY-MM-DD``. Time (if given) should\nbe formatted as ``HH:MM`` or ``HH:MM:SS``.\n\nThis simple note format makes it easy for other applications to hook\ninto the notes system, and the user can easily manage his/her notes\nusing a simple text editor.\n\n\n# Specifying note type\n  \nEach note can start with a prefix to identify its type:\n\n    % This is a normal note \n    ----- \n    ! This is a task \n    ---- \n    ? This is an idea \n    ---- \n    This is also a normal note \n    The percent sign is optional.\n    \nNotes can be prioritized (three levels are supported):\n\n    !! Finish this task quickly! \n    ---- \n    !!! This task is even more important \n    ---- \n    ?? This is a particularly good idea \n    ---- \n    %% This would be sort of like a sticky note \n    Prioritizing makes the most sense for tasks.\n    \nFinally, any note that starts with a dot is hidden. You can of course\ndelete notes, but sometimes it's nice to look back at all the tasks\nthat you've accomplished.\n\n    .! A completed task \n    ---- \n    .? An idea that turned out to be a bad one\n    ---- \n    .Some note that may be irrelevant now\n    \n\n# Using tags\n  \nEach note can have zero or more tags. You create a tag simply by\nstarting a word with ``#``, similar to hashtags in twitter of G+. Tags\ndefine a context and allows the user to easily (and quickly) select\ncertain notes of interest.\n\n    % This is a note about #tags \n    For instance #home, or #work, or #myproject \n    To help retrieving notes, users are encouraged to \n    specify at least one tag per note.\n    \n\n# Selection syntax\n  \nThis format also specifies a simple syntax for selecting notes. An\napplication supporting this format will typically have a one-line\ntext-box into which you can write your query. This may sound a bit\nold-school, but bear with me; the syntax is really\neasy!\n\nFirstly, if the query is empty, all notes of all types (except hidden\nnotes) are shown in chronological order. Notes with no date are\nconsidered infinitelt old.\n\nTo select a type of note, the first word of the query should simply\nmatch the note type:\n\n    %  (Select all normal notes) \n    !  (Select all tasks) \n    ?  (Select all ideas) \n    .  (Select all hidden notes) \n    !!  (Select all tasks with priority 2 and higher)\n    \nIf a particular type of note is selected, the notes are organized by\npriority (and then chronologically).\n\nThe query can further contain tags. The application may provide you\nwith an easy way to see all used tags. The tags are case insensitive.\nIf multiple tags are given, the result is the AND of the subqueries:\n\n    ! #work  (Select all tasks related to work) \n    ! #work #cloud  (Select all tasks that are related to work AND to \"cloud\")\n    #home  (Select all notes related to home) \n    # (Select all notes that have no tags)\n      \nFinally, the query can also contain plain words. In this case the\napplicaton will search through the full texts of all notes, and the\nselection may therefore be less fast if you have many notes. It is up\nto the application to support only whole words or also partial words.\nAll word searches are case insensitive though.\n\n    ! #work Ian  (Select all work-related tasks that mention Ian) \n    ? cloud  (Select all ideas that have the word \"cloud\" in them)\n    \n\n# Advanced selection syntax\n  \nTODO:\n\n  * Reversing order\n  * Selecting a date range\n    \n\n# Application\n\nThe application in this repo needs Python3, qtpy and PyQt5/PySide2/PyQt4/PySide.\n\nIt can also be used as a tool for Pyzo. To do so, clone the repository in your\n``~/.pyzo/tools/`` folder or equivalent.\n\n\n# Syncing and scaling up to large amounts of notes\n  \nIn Notes.text one selects a folder to store the notes. Each device that\nstores notes to this folder does so in its own file. In this way,\nyou are guaranteed to have no synchronization conflicts.\n\nAn application that displays the notes for you should read the notes\nfrom all files that are named ``notes.\u003cdevicename\u003e.txt``, but only\nwrite new or modified notes to the file that corresponds to the current\ndevice.\n\nIn this way, you can safely create new notes or modify them from any device\neven when you have no internet connection. After syncing, you will simply\nget the most recently modified version of each note. And you will have\na backup of the versions created by each device.\n\nSo what happens when you create a note on one device and modify it on \nanother? There will be two versions of the note, but the latter has\na modified time that is later. Applications can keep track of notes\nusing their id. If an id is not specified explicitly, the sha1 hash\nof the text of the note (not the separator line) is used. In this way\nif you add a note in plain text and omit an id, it can be modified\nfrom another divice without 'duplication' it.\n\nThe application should be able to cope with large amount of notes\n(possibly coming from different files. This means that a lightweight\nminimal representation of each note should maintained, but that widgets\nare only created for notes that are shown. Possibly, extra widges are\ncreated on the fly as the user scrolls through the notes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falmarklein%2Fnotes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falmarklein%2Fnotes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falmarklein%2Fnotes/lists"}