notesmgr 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- notesmgr-0.1.0/LICENSE.txt +22 -0
- notesmgr-0.1.0/PKG-INFO +299 -0
- notesmgr-0.1.0/README.md +156 -0
- notesmgr-0.1.0/README_pypi.md +262 -0
- notesmgr-0.1.0/notesmgr.egg-info/PKG-INFO +299 -0
- notesmgr-0.1.0/notesmgr.egg-info/SOURCES.txt +60 -0
- notesmgr-0.1.0/notesmgr.egg-info/dependency_links.txt +1 -0
- notesmgr-0.1.0/notesmgr.egg-info/entry_points.txt +2 -0
- notesmgr-0.1.0/notesmgr.egg-info/requires.txt +10 -0
- notesmgr-0.1.0/notesmgr.egg-info/top_level.txt +1 -0
- notesmgr-0.1.0/pyproject.toml +40 -0
- notesmgr-0.1.0/setup.cfg +4 -0
- notesmgr-0.1.0/setup.py +33 -0
- notesmgr-0.1.0/src/notesmgr/__init__.py +5 -0
- notesmgr-0.1.0/src/notesmgr/__main__.py +10 -0
- notesmgr-0.1.0/src/notesmgr/actions.py +86 -0
- notesmgr-0.1.0/src/notesmgr/application.py +93 -0
- notesmgr-0.1.0/src/notesmgr/button_row.py +149 -0
- notesmgr-0.1.0/src/notesmgr/clipboard_linux.py +58 -0
- notesmgr-0.1.0/src/notesmgr/clipboard_macos.py +78 -0
- notesmgr-0.1.0/src/notesmgr/clipboard_tool.py +84 -0
- notesmgr-0.1.0/src/notesmgr/clipboard_windows.py +198 -0
- notesmgr-0.1.0/src/notesmgr/cmd_line.py +63 -0
- notesmgr-0.1.0/src/notesmgr/commands.py +307 -0
- notesmgr-0.1.0/src/notesmgr/config.py +152 -0
- notesmgr-0.1.0/src/notesmgr/config_defaults.py +41 -0
- notesmgr-0.1.0/src/notesmgr/config_editor.py +62 -0
- notesmgr-0.1.0/src/notesmgr/config_files.py +147 -0
- notesmgr-0.1.0/src/notesmgr/console.py +62 -0
- notesmgr-0.1.0/src/notesmgr/descriptions.py +27 -0
- notesmgr-0.1.0/src/notesmgr/dialogs.py +389 -0
- notesmgr-0.1.0/src/notesmgr/editor_command.py +138 -0
- notesmgr-0.1.0/src/notesmgr/errors.py +14 -0
- notesmgr-0.1.0/src/notesmgr/explorer_drag.py +222 -0
- notesmgr-0.1.0/src/notesmgr/explorer_drop.py +195 -0
- notesmgr-0.1.0/src/notesmgr/explorer_font.py +81 -0
- notesmgr-0.1.0/src/notesmgr/explorer_tree.py +148 -0
- notesmgr-0.1.0/src/notesmgr/failure_report.py +92 -0
- notesmgr-0.1.0/src/notesmgr/file_watch.py +115 -0
- notesmgr-0.1.0/src/notesmgr/folder_ops.py +173 -0
- notesmgr-0.1.0/src/notesmgr/main_window.py +474 -0
- notesmgr-0.1.0/src/notesmgr/markdown_render.py +78 -0
- notesmgr-0.1.0/src/notesmgr/menu_bar.py +114 -0
- notesmgr-0.1.0/src/notesmgr/note_blocks.py +511 -0
- notesmgr-0.1.0/src/notesmgr/note_file.py +203 -0
- notesmgr-0.1.0/src/notesmgr/note_fonts.py +189 -0
- notesmgr-0.1.0/src/notesmgr/note_image.py +75 -0
- notesmgr-0.1.0/src/notesmgr/note_ops.py +316 -0
- notesmgr-0.1.0/src/notesmgr/note_panel.py +227 -0
- notesmgr-0.1.0/src/notesmgr/note_table.py +145 -0
- notesmgr-0.1.0/src/notesmgr/note_tags.py +241 -0
- notesmgr-0.1.0/src/notesmgr/note_text.py +62 -0
- notesmgr-0.1.0/src/notesmgr/note_view.py +273 -0
- notesmgr-0.1.0/src/notesmgr/order_file.py +150 -0
- notesmgr-0.1.0/src/notesmgr/project.py +168 -0
- notesmgr-0.1.0/src/notesmgr/project_ops.py +302 -0
- notesmgr-0.1.0/src/notesmgr/py.typed +0 -0
- notesmgr-0.1.0/src/notesmgr/rich_clipboard.py +107 -0
- notesmgr-0.1.0/src/notesmgr/session.py +71 -0
- notesmgr-0.1.0/src/notesmgr/shortcuts.py +131 -0
- notesmgr-0.1.0/src/notesmgr/trash.py +31 -0
- notesmgr-0.1.0/src/notesmgr/version_info.py +78 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Tom Björkholm
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
notesmgr-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: notesmgr
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Manager for small notes and AI prompts.
|
|
5
|
+
Author: Tom Björkholm
|
|
6
|
+
Author-email: Tom Björkholm <klausuler_linnet0q@icloud.com>
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
Project-URL: Homepage, https://github.com/tom-bjorkholm/notesmgr
|
|
9
|
+
Project-URL: Source code, https://github.com/tom-bjorkholm/notesmgr
|
|
10
|
+
Project-URL: Documentation, https://github.com/tom-bjorkholm/notesmgr/blob/master/doc
|
|
11
|
+
Keywords: notes,prompts,AI
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
16
|
+
Classifier: Operating System :: OS Independent
|
|
17
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
18
|
+
Classifier: Intended Audience :: Information Technology
|
|
19
|
+
Classifier: Typing :: Typed
|
|
20
|
+
Requires-Python: >=3.12
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
License-File: LICENSE.txt
|
|
23
|
+
Requires-Dist: argcomplete>=3.7.2
|
|
24
|
+
Requires-Dist: edit-cfg-json-tk>=0.4.0
|
|
25
|
+
Requires-Dist: edit-cfg-json>=0.4.0
|
|
26
|
+
Requires-Dist: config-as-json>=1.7
|
|
27
|
+
Requires-Dist: markdown>=3.11
|
|
28
|
+
Requires-Dist: types-Markdown>=3.10.2.20260712
|
|
29
|
+
Requires-Dist: packaging>=26.3
|
|
30
|
+
Requires-Dist: send2trash>=2.1.0
|
|
31
|
+
Requires-Dist: types-Send2Trash>=2.1.0.20260408
|
|
32
|
+
Requires-Dist: versionreporter>=0.4
|
|
33
|
+
Dynamic: author
|
|
34
|
+
Dynamic: license-file
|
|
35
|
+
Dynamic: requires-dist
|
|
36
|
+
Dynamic: requires-python
|
|
37
|
+
|
|
38
|
+
# notesmgr - Managing small notes and AI prompts
|
|
39
|
+
|
|
40
|
+
## What it does
|
|
41
|
+
|
|
42
|
+
`notesmgr` is a small desktop application that keeps small notes and AI
|
|
43
|
+
prompts in order. It is made for the texts you keep coming back to: the
|
|
44
|
+
prompts you paste into an AI assistant, snippets, checklists, and short
|
|
45
|
+
notes.
|
|
46
|
+
|
|
47
|
+
- Notes are ordinary text files in ordinary folders, so they can be kept
|
|
48
|
+
in git, synced, backed up and edited with any editor.
|
|
49
|
+
- The notes of a folder are kept in an order of your choosing, and are
|
|
50
|
+
reordered with a button, a key or by dragging.
|
|
51
|
+
- A note is edited in the editor you already use, such as Visual Studio
|
|
52
|
+
Code, and the note shown in `notesmgr` follows as you save.
|
|
53
|
+
- Every folder has a template that each new note of the folder starts
|
|
54
|
+
from.
|
|
55
|
+
- A note is copied to the clipboard with one key, either as it is
|
|
56
|
+
written or formatted, so that pasting it into Mail, Word or Slack keeps
|
|
57
|
+
headings, lists and bold text.
|
|
58
|
+
- Notes written in markdown are shown formatted for reading.
|
|
59
|
+
|
|
60
|
+
It runs on macOS, Microsoft Windows and Linux.
|
|
61
|
+
|
|
62
|
+
## Installing
|
|
63
|
+
|
|
64
|
+
`notesmgr` needs Python 3.12 or newer, with Tk (tkinter). Install it
|
|
65
|
+
from [PyPI](https://pypi.org/project/notesmgr):
|
|
66
|
+
|
|
67
|
+
On macOS and Linux:
|
|
68
|
+
|
|
69
|
+
````sh
|
|
70
|
+
pip3 install --upgrade notesmgr
|
|
71
|
+
````
|
|
72
|
+
|
|
73
|
+
On Microsoft Windows:
|
|
74
|
+
|
|
75
|
+
````sh
|
|
76
|
+
pip install --upgrade notesmgr
|
|
77
|
+
````
|
|
78
|
+
|
|
79
|
+
The Python from python.org has Tk built in on macOS and on Windows.
|
|
80
|
+
On Linux Tk is often a package of its own, such as `python3-tk` on
|
|
81
|
+
Debian and Ubuntu. Copying a note formatted needs `xclip` (X11) or
|
|
82
|
+
`wl-copy` (Wayland) on Linux; without them the note is copied as
|
|
83
|
+
plain text.
|
|
84
|
+
|
|
85
|
+
## Getting started
|
|
86
|
+
|
|
87
|
+
1. Start `notesmgr`.
|
|
88
|
+
2. Choose `File` → `New project…` and pick a folder. It can be an empty
|
|
89
|
+
folder or one that already holds notes, which are then taken in.
|
|
90
|
+
3. Press `New` (`Cmd+N` on mac, `Ctrl+N` elsewhere), give the note a
|
|
91
|
+
name, and write it in the editor that opens.
|
|
92
|
+
4. Select the note in the tree to the left to read it, and press
|
|
93
|
+
`Copy raw` (`Cmd+C` / `Ctrl+C`) to put it on the clipboard.
|
|
94
|
+
|
|
95
|
+
Next time, open the project with `File` → `Open project…`, or name it
|
|
96
|
+
on the command line: `notesmgr ~/notes`.
|
|
97
|
+
|
|
98
|
+
## Using notesmgr
|
|
99
|
+
|
|
100
|
+
### The main window
|
|
101
|
+
|
|
102
|
+
To the left is the tree of the project: its folders, and in each
|
|
103
|
+
folder the template of the folder followed by its notes in their order.
|
|
104
|
+
Subfolders come first, in alphabetical order.
|
|
105
|
+
|
|
106
|
+
To the right is the selected note with a row of buttons above it. A
|
|
107
|
+
note whose name ends with `.md` or `.md.txt` is shown formatted, and a
|
|
108
|
+
note ending with `.txt` is shown exactly as it is written. When a note
|
|
109
|
+
is changed by your editor or by any other program, the note shown
|
|
110
|
+
follows about a second later.
|
|
111
|
+
|
|
112
|
+
A new note or folder is made in the selected folder, in the folder of
|
|
113
|
+
the selected note, or in the root folder of the project when nothing is
|
|
114
|
+
selected.
|
|
115
|
+
|
|
116
|
+
### Buttons and keyboard shortcuts
|
|
117
|
+
|
|
118
|
+
Every button is also in the `Note` menu. On mac the shortcuts use `Cmd`,
|
|
119
|
+
and on Windows and Linux they use `Ctrl`.
|
|
120
|
+
|
|
121
|
+
| Button | Shortcut | What it does |
|
|
122
|
+
| --- | --- | --- |
|
|
123
|
+
| `Copy raw` | `Cmd+C` | Copies the note as it is written. When part of the note is selected, the key copies just that part. |
|
|
124
|
+
| `Copy formatted` | `Cmd+Shift+C` | Copies the note formatted, for pasting into Mail, Word, Slack and the like. |
|
|
125
|
+
| `Duplicate` | `Cmd+D` | Copies the note, under a name and into a folder you choose. |
|
|
126
|
+
| `Edit` | `Cmd+E` | Opens the note in your editor. `Return` in the tree does the same. |
|
|
127
|
+
| `New` | `Cmd+N` | Makes a note from the template of the folder and opens it in your editor. |
|
|
128
|
+
| `Delete` | `Cmd+Backspace` | Moves the note to the trash, after asking. |
|
|
129
|
+
| `Up` | `Cmd+Up` | Moves the note one place up. |
|
|
130
|
+
| `Down` | `Cmd+Down` | Moves the note one place down. |
|
|
131
|
+
|
|
132
|
+
The other shortcuts are:
|
|
133
|
+
|
|
134
|
+
| Shortcut | What it does |
|
|
135
|
+
| --- | --- |
|
|
136
|
+
| `Cmd+Shift+N` | Makes a folder (`Folder` → `New folder…`). |
|
|
137
|
+
| `Cmd++`, `Cmd+-`, `Cmd+0` | Draws the note and the tree larger, smaller, and in the normal size again (`View` menu). |
|
|
138
|
+
| `Cmd+W` on mac, `Ctrl+Q` elsewhere | Quits. |
|
|
139
|
+
| `Tab` | Goes from the tree to the buttons and on to the note. |
|
|
140
|
+
|
|
141
|
+
The template of a folder is shown, edited and copied like any note,
|
|
142
|
+
but it cannot be duplicated, deleted or moved: every folder has exactly
|
|
143
|
+
one template.
|
|
144
|
+
|
|
145
|
+
### Dragging
|
|
146
|
+
|
|
147
|
+
Notes and folders can be dragged in the tree. A note dropped above or
|
|
148
|
+
below another note is moved to that place, and a note dropped on a
|
|
149
|
+
folder is moved to the end of that folder. A folder dropped on another
|
|
150
|
+
folder is moved into it with everything it holds. While you drag, a
|
|
151
|
+
line shows where a note would land and the folder that would take it is
|
|
152
|
+
marked. `Escape` gives up the drag. A name that the other folder holds
|
|
153
|
+
already is refused rather than moved.
|
|
154
|
+
|
|
155
|
+
### Folders
|
|
156
|
+
|
|
157
|
+
The `Folder` menu makes, renames and deletes folders of the project. A
|
|
158
|
+
new folder starts with a copy of the template of the folder above it. A
|
|
159
|
+
folder can be renamed at any time, and is deleted, to the trash, only
|
|
160
|
+
when it holds no notes and no folders. The root folder of the project
|
|
161
|
+
is renamed and deleted outside `notesmgr`.
|
|
162
|
+
|
|
163
|
+
### Configuration
|
|
164
|
+
|
|
165
|
+
`Configuration` → `Edit configuration…` edits the configuration of the
|
|
166
|
+
open project, which is stored in `notesmgr.cfg` in the root folder of the
|
|
167
|
+
project. It holds:
|
|
168
|
+
|
|
169
|
+
- `editor`: the command that opens a note. `{file}` stands for the note,
|
|
170
|
+
and the note is put last when the command has no `{file}`, so `code`
|
|
171
|
+
and `code {file}` mean the same thing. For a new configuration it is
|
|
172
|
+
Visual Studio Code (`code`) when that is installed, otherwise the
|
|
173
|
+
editor that `$EDITOR` names, otherwise `open` on mac, Notepad on
|
|
174
|
+
Windows and `emacs` elsewhere.
|
|
175
|
+
- `file_extension`: what new notes are called, one of `.md.txt` (the
|
|
176
|
+
default), `.md` and `.txt`. `.md.txt` is the default because many
|
|
177
|
+
systems do not see `.md` as a safe kind of file.
|
|
178
|
+
- `max_note_size`: how many characters of a note are shown, from 2000 to
|
|
179
|
+
100000 and 25000 unless you say otherwise. A longer note is shown up to
|
|
180
|
+
there, with a warning above it.
|
|
181
|
+
|
|
182
|
+
A configuration file looks like this:
|
|
183
|
+
|
|
184
|
+
````json
|
|
185
|
+
{
|
|
186
|
+
"editor": "code -n {file}",
|
|
187
|
+
"file_extension": "MD_TXT",
|
|
188
|
+
"max_note_size": 25000
|
|
189
|
+
}
|
|
190
|
+
````
|
|
191
|
+
|
|
192
|
+
`Configuration` → `Save configuration as user wide…` makes the
|
|
193
|
+
configuration of the project the one that every new project starts
|
|
194
|
+
with. With no project open, `Edit configuration…` edits that user wide
|
|
195
|
+
configuration.
|
|
196
|
+
|
|
197
|
+
### Command line
|
|
198
|
+
|
|
199
|
+
````sh
|
|
200
|
+
notesmgr [PROJECT_FOLDER]
|
|
201
|
+
notesmgr --version
|
|
202
|
+
````
|
|
203
|
+
|
|
204
|
+
Started with a folder, `notesmgr` opens the project in it. `--version`
|
|
205
|
+
reports the versions of `notesmgr` and of the packages it uses, and
|
|
206
|
+
which newer releases there are, just as `Help` → `Version information…`
|
|
207
|
+
does.
|
|
208
|
+
|
|
209
|
+
## Details
|
|
210
|
+
|
|
211
|
+
This section says what `notesmgr` does in the cases where you might
|
|
212
|
+
wonder.
|
|
213
|
+
|
|
214
|
+
### The files of a project
|
|
215
|
+
|
|
216
|
+
- `notesmgr.cfg` in the root folder holds the configuration of the
|
|
217
|
+
project.
|
|
218
|
+
- Every folder holds one template, `template.md.txt`, `template.md` or
|
|
219
|
+
`template.txt` after the `file_extension` of the project.
|
|
220
|
+
- Every folder holds a hidden `.notes_order.txt` that lists the notes of
|
|
221
|
+
the folder, one name per line, in the order they are shown. Folders
|
|
222
|
+
are not listed in it.
|
|
223
|
+
- Every other file ending with `.txt`, `.md` or `.md.txt` is a note.
|
|
224
|
+
|
|
225
|
+
All of these can be edited with any text editor while `notesmgr` is not
|
|
226
|
+
looking. Deleting a note, a folder or a template always moves it to the
|
|
227
|
+
trash of the operating system, so it can be taken back.
|
|
228
|
+
|
|
229
|
+
### What opening a project puts in order
|
|
230
|
+
|
|
231
|
+
- `.notes_order.txt` is repaired: names of notes that are gone are
|
|
232
|
+
removed, and notes it does not name are added at the end in
|
|
233
|
+
alphabetical order. A folder whose `.notes_order.txt` cannot be read or
|
|
234
|
+
written is reported, and its notes are shown in alphabetical order.
|
|
235
|
+
- A folder without a template gets one: an empty one in the root
|
|
236
|
+
folder, and a copy of the template of the folder above it elsewhere.
|
|
237
|
+
- A template whose extension is not the `file_extension` of the project
|
|
238
|
+
is renamed, and you are told so. Changing `file_extension` therefore
|
|
239
|
+
renames the templates the next time the project is opened.
|
|
240
|
+
- A folder holding more than one template is the one thing `notesmgr`
|
|
241
|
+
cannot decide for you. You are asked which one to keep, and the others
|
|
242
|
+
go to the trash. Answering nothing leaves every file as it is, and the
|
|
243
|
+
project is not opened.
|
|
244
|
+
|
|
245
|
+
### What a formatted note shows
|
|
246
|
+
|
|
247
|
+
Headings, paragraphs, bold, italic, `~~struck through~~` text, code in a
|
|
248
|
+
line and code blocks, lists nested as deeply as you like, tables, block
|
|
249
|
+
quotes, horizontal lines, and the text of links. PNG and GIF images next
|
|
250
|
+
to the note are drawn where the note shows them, and other images are
|
|
251
|
+
named by their description. HTML in a note is shown as the text it is.
|
|
252
|
+
A note that is not valid UTF-8 is not shown, and says why.
|
|
253
|
+
|
|
254
|
+
### How `Copy formatted` works
|
|
255
|
+
|
|
256
|
+
The note goes on the clipboard as rich text and as plain text, so that
|
|
257
|
+
an application that takes formatting gets it, and a plain text field
|
|
258
|
+
gets the note as it is written. A note that is not markdown is copied
|
|
259
|
+
as preformatted text, so that a table lined up by hand stays lined up.
|
|
260
|
+
It uses what the operating system already has: `textutil` and
|
|
261
|
+
`osascript` on mac, the Windows clipboard itself, and `xclip` or
|
|
262
|
+
`wl-copy` on Linux. When the tool it needs is missing, the note is
|
|
263
|
+
copied as plain text and you are told why.
|
|
264
|
+
|
|
265
|
+
### Where the user wide configuration is
|
|
266
|
+
|
|
267
|
+
It is read from the file that `$NOTESMGR_CFG` names, when that file
|
|
268
|
+
exists, otherwise from `~/.notesmgr.cfg`, and otherwise the built-in
|
|
269
|
+
defaults are used. It is written to the file that `$NOTESMGR_CFG`
|
|
270
|
+
names, whether that file exists yet or not, and to `~/.notesmgr.cfg`
|
|
271
|
+
when the variable is not set.
|
|
272
|
+
|
|
273
|
+
### What is remembered
|
|
274
|
+
|
|
275
|
+
Nothing is remembered from one run to the next: not the last project,
|
|
276
|
+
not the size of the window, and not the size of the text. Within one
|
|
277
|
+
run, the folder chooser starts in the project opened last.
|
|
278
|
+
|
|
279
|
+
## What notesmgr is built on
|
|
280
|
+
|
|
281
|
+
`notesmgr` uses `config-as-json` and `edit-cfg-json-tk` for its
|
|
282
|
+
configuration, `markdown` for reading notes written in markdown,
|
|
283
|
+
`versionreporter` for the version report, `argcomplete` for the command
|
|
284
|
+
line, and `Send2Trash` for moving files to the trash.
|
|
285
|
+
|
|
286
|
+
## Source code
|
|
287
|
+
|
|
288
|
+
Source code and tests are available at
|
|
289
|
+
[https://github.com/tom-bjorkholm/notesmgr](https://github.com/tom-bjorkholm/notesmgr).
|
|
290
|
+
|
|
291
|
+
## Test summary
|
|
292
|
+
|
|
293
|
+
- Test result: 1489 passed, 13 deselected in 7s
|
|
294
|
+
- No flake8 warnings.
|
|
295
|
+
- No mypy errors found.
|
|
296
|
+
- No pylint warnings.
|
|
297
|
+
- No python layout warnings.
|
|
298
|
+
- Built version(s): 0.1.0
|
|
299
|
+
- Build and test using Python 3.14.7
|
notesmgr-0.1.0/README.md
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# notesmgr
|
|
2
|
+
|
|
3
|
+
## What it does
|
|
4
|
+
|
|
5
|
+
Notes manager is a very small application to keep small notes
|
|
6
|
+
and AI prompts files ordered. The main intended functionality includes:
|
|
7
|
+
|
|
8
|
+
- Keeping a project with folders of notes (that is small text files)
|
|
9
|
+
- Keeping the notes in a defined order, and allowing them to be
|
|
10
|
+
reordered.
|
|
11
|
+
- Opening an external editor to create and edit notes.
|
|
12
|
+
- Keeping a template in each folder that will be prefilled into
|
|
13
|
+
each new notes file.
|
|
14
|
+
|
|
15
|
+
## Using it
|
|
16
|
+
|
|
17
|
+
If you want to use it, install it using pip from
|
|
18
|
+
|
|
19
|
+
[https://pypi.org/project/notesmgr](https://pypi.org/project/notesmgr).
|
|
20
|
+
|
|
21
|
+
There is no need to download anything from GitHub to use the application
|
|
22
|
+
or to base your code on the library.
|
|
23
|
+
|
|
24
|
+
### Installing on macOS and Linux
|
|
25
|
+
|
|
26
|
+
````sh
|
|
27
|
+
pip3 install --upgrade notesmgr
|
|
28
|
+
````
|
|
29
|
+
|
|
30
|
+
### Installing on Microsoft Windows
|
|
31
|
+
|
|
32
|
+
````sh
|
|
33
|
+
pip install --upgrade notesmgr
|
|
34
|
+
````
|
|
35
|
+
|
|
36
|
+
### Information for use
|
|
37
|
+
|
|
38
|
+
To learn how to use notesmgr please see
|
|
39
|
+
[https://pypi.org/project/notesmgr](https://pypi.org/project/notesmgr)
|
|
40
|
+
or [README_pypi.md](README_pypi.md).
|
|
41
|
+
|
|
42
|
+
For the code documentation generated from the docstrings, see
|
|
43
|
+
[doc/api.md](doc/api.md).
|
|
44
|
+
|
|
45
|
+
## Cloning
|
|
46
|
+
|
|
47
|
+
**Note: Repository is not yet uploaded to GitHub.**
|
|
48
|
+
|
|
49
|
+
This repository uses submodules. Clone it with:
|
|
50
|
+
|
|
51
|
+
```sh
|
|
52
|
+
git clone --recurse-submodules git@github.com:tom-bjorkholm/notesmgr.git
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
If you already cloned without submodules, initialize them with:
|
|
56
|
+
|
|
57
|
+
```sh
|
|
58
|
+
git submodule update --init --recursive
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
To update the checked-out submodule revisions:
|
|
62
|
+
|
|
63
|
+
```sh
|
|
64
|
+
git submodule update --remote --merge
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Supported Python versions
|
|
68
|
+
|
|
69
|
+
- Package runtime baseline: Python 3.12 or newer
|
|
70
|
+
- Maintainer validation target: Python 3.12, 3.13, and 3.14
|
|
71
|
+
- Main day-to-day development: usually the newest supported Python version
|
|
72
|
+
|
|
73
|
+
## Development workflow
|
|
74
|
+
|
|
75
|
+
On macOS and Linux, the normal workflow is:
|
|
76
|
+
|
|
77
|
+
1. Run `./run_setup_build_environment.py` once after cloning or when the
|
|
78
|
+
build environment needs to be recreated.
|
|
79
|
+
2. Run `./run_build.py` for the normal build-and-test cycle.
|
|
80
|
+
3. Run `./run_clean_build.py` before review or release work that needs a
|
|
81
|
+
completely fresh build.
|
|
82
|
+
|
|
83
|
+
The helper scripts are:
|
|
84
|
+
|
|
85
|
+
- `run_setup_build_environment.py`
|
|
86
|
+
Create or refresh the build environment.
|
|
87
|
+
- `run_build.py`
|
|
88
|
+
Build the package and run the configured checks in the project virtual
|
|
89
|
+
environment.
|
|
90
|
+
- `run_clean.py`
|
|
91
|
+
Remove files generated by the build system.
|
|
92
|
+
- `run_clean_build.py`
|
|
93
|
+
Perform a clean build from scratch. This is especially useful because some
|
|
94
|
+
duplicate-code diagnostics only appear on a clean build.
|
|
95
|
+
- `run_pypi_build.py`
|
|
96
|
+
Create the distribution artifacts intended for PyPI publishing.
|
|
97
|
+
- `run_static_checks.py`
|
|
98
|
+
Run mypy, flake8, python-layout and pylint on the named files only, for
|
|
99
|
+
fast iteration while editing. It does not update the virtual environment,
|
|
100
|
+
so imports from `./venv` are not refreshed.
|
|
101
|
+
- `run_focus_sensitive_tests.py`
|
|
102
|
+
Run the GUI tests that need an unlocked display and an uninterrupted
|
|
103
|
+
focused window. These are excluded from the normal build, and the
|
|
104
|
+
computer must be left alone while they run.
|
|
105
|
+
|
|
106
|
+
The standard verification suite includes pytest, pylint, flake8, mypy and
|
|
107
|
+
python-layout. After a build, the generated reports can be browsed through
|
|
108
|
+
`reports/index.html`.
|
|
109
|
+
|
|
110
|
+
After running `run_build.py` or `run_clean_build.py`, you can manually test
|
|
111
|
+
the built and installed application in the virtual environment `./venv`.
|
|
112
|
+
|
|
113
|
+
## How the code is organised
|
|
114
|
+
|
|
115
|
+
All code is in the single package `src/notesmgr`, and every source module
|
|
116
|
+
has one test module in `test/test_notesmgr`. The code is split in two
|
|
117
|
+
layers:
|
|
118
|
+
|
|
119
|
+
- **Model, free of Tk.** Everything that has a right answer: which note
|
|
120
|
+
is at which place, whether a name can be used, how `.notes_order.txt`
|
|
121
|
+
is repaired, what the editor command line is, and what goes on the
|
|
122
|
+
clipboard. Examples are `project.py`, `project_ops.py`, `note_ops.py`,
|
|
123
|
+
`folder_ops.py`, `order_file.py`, `explorer_drop.py`, `note_blocks.py`
|
|
124
|
+
and `rich_clipboard.py`. These are tested without a display.
|
|
125
|
+
- **View, thin Tk.** Widgets that show what the model says and call the
|
|
126
|
+
model: `main_window.py`, `explorer_tree.py`, `note_panel.py`,
|
|
127
|
+
`note_view.py`, `dialogs.py` and the others. They are tested with a real
|
|
128
|
+
Tk root window that is never shown.
|
|
129
|
+
|
|
130
|
+
What cannot be done is raised as `NotesmgrError`, with a message meant for
|
|
131
|
+
the user, and the view shows it in a message box. Anything else that fails
|
|
132
|
+
inside a Tk callback is shown in a window with its traceback by
|
|
133
|
+
`failure_report.py`, because a program started from a desktop has no
|
|
134
|
+
terminal. On Windows, the `gui-scripts` entry point has no standard
|
|
135
|
+
streams at all, so `console.py` shows command line errors in a window.
|
|
136
|
+
|
|
137
|
+
The keyboard shortcuts are listed in `shortcuts.py`, one entry per action,
|
|
138
|
+
and are shown as accelerators on the menu entries of the same actions.
|
|
139
|
+
|
|
140
|
+
The implementation plan and the decisions taken step by step are in
|
|
141
|
+
`.plans/initials_steps.md`.
|
|
142
|
+
|
|
143
|
+
## Manual tests before a release
|
|
144
|
+
|
|
145
|
+
Run `./run_focus_sensitive_tests.py` and leave the computer alone while
|
|
146
|
+
it runs.
|
|
147
|
+
|
|
148
|
+
## Test summary
|
|
149
|
+
|
|
150
|
+
- Test result: 1489 passed, 13 deselected in 7s
|
|
151
|
+
- No flake8 warnings.
|
|
152
|
+
- No mypy errors found.
|
|
153
|
+
- No pylint warnings.
|
|
154
|
+
- No python layout warnings.
|
|
155
|
+
- Built version(s): 0.1.0
|
|
156
|
+
- Build and test using Python 3.14.7
|