| 
					
				 | 
			
			
				@@ -1,19 +1,23 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				---- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-title:  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-title-meta: Dirnotes README 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-note: run this with pandoc -T "Dirnotes README" -s README.md -t html > README.html 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				---- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# Dirnotes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Table of Contents 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+---------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Dirnotes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  * [SYNOPSIS](#synopsis) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  * [USAGE](#usage) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  * [INSTALLATION](#installation) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    * [CONFIG FILE](#config-file) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  * [LIMITATIONS](#limitations) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  * [PROGRAMMER NOTES](#programmer-notes) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    * [MacOS](#macos) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  * [DEVELOPMENT STATUS](#status) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-### SYNOPSIS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+## SYNOPSIS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 The **dirnotes** family of apps allows you to add a descriptive comment to a file. The descriptions are stored in two places: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * in the xattr properties of the file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * in a database located in the user's home directory 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * in the _xattr_ properties of the file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * in a _database_ located in the user's home directory 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 [The [MacOS](#macos) stores its comments in a similar way.] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -25,19 +29,78 @@ The <code>**dirnotes-tui**</code> is a very similar app, but uses the _curses_ f 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 The <code>**dirnotes-cli**</code> is a command line tool, which may be handy for scripting. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-### USAGE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+## USAGE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 The <code>**dirnotes**</code> program displays usage and keystoke info when you press _F1_. The <code>**dirnotes-tui**</code> program display onscreen usage when you press the 'h' key, or _F1_.  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 The <code>**dirnotes-cli**</code> program has a man page. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-In short, you navigate <code>**dirnotes**</code> and <code>**dirnotes-tui**</code> by using the up/down arrow keys, <enter> to enter into a directory. The **-tui** version accepts _e_ for edit,  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+In short, you navigate <code>**dirnotes**</code> and <code>**dirnotes-tui**</code> by using the up/down arrow keys, <enter> to enter into a directory.  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+The **-tui** version accepts _e_ for edit,  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 _s_ for sort, _M_ to change between xattr/database priority. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 The **<code>dirnotes-cli</code>** has options for _-l_ list and _-c_ create a comment.  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-### Direct Access 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+## INSTALLATION 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Each of the 3 apps in the family is self contained.  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+The <code>**dirnotes**</code> app requires _Python3_ and the _Qt5_ framework.  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+The <code>**dirnotes-tui**</code> and <code>**dirnotes-cli**</code> apps simply require _Python3_. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+### CONFIG FILE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+By default, the file **~/.dirnotes.conf** will be used to load the user's config.  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+This is a JSON file, with three attributes that are important: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+> * xattr_tag (default: <code>usr.xdg.comment</code>) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+> * database (default: <code>~/.dirnotes.db</code>)  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+> * start_mode (_xattr_ or _db_ priority) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+[_not fully implemented_] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+## LIMITATIONS  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+The file comments are located in two locations: a database, and in the  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+xattr properties of the file. Each of these storage locations has its  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+own benefits and limitations: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+### xattr 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Comments stored in the xattr properties can be copied/moved with the file, if you 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+use the correct options for <code>**cp**</code>. The <code>**mv**</code> utility  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+automatically preserves _xattr_. Other programs can also be coerced into  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+perserving _xattr_ properties: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* <code>**rsync**</code> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* <code>**tar**</code> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* <code>**mksquashfs**</code> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Not all file systems support xattr properties (vfat/exfat does not). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+The current implementation of <code>**sshfs**</code> and <code>**scp**</code>  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+do not support the copy of _xattr_ properties. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+If you want to copy files to a remote machine and include the _xattr_ comments, use <code>**rsync**</code> with the _-X_ option. Or <code>**tar**</code>. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Some editing apps (like _vim_) will create a new file when saving the data, which orphans the _xattr_ comments. For these apps, use the _database_ system.   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Instead of an API, here is how you can get directly at the underlying comment data. If you intend to use the **dirnotes** apps, try to keep the two versions of the comments in sync. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+## database 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Comments stored in the database work for all filesystem types (including vfat/exfat/sshfs) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Comments are personalized to the _current user_. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Another user on the same system will not see these comments. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Files are indexed by their complete path name. Removable filesystems should be 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+mounted in a consistent way, so that the complete path name is reproducable. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Comments stored in the database do not travel with the files when 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+they are moved or copied, unless using the **dirnotes** family of tools.  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+## PROGRAMMER NOTES 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Instead of an API, here is how you can get directly at the underlying comment data.  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+If you intend to use the **dirnotes** apps, try to keep the two versions of the comments in sync. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   * xattr 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -73,20 +136,40 @@ The comments are stored in an Sqlite3 database, usually located at "~/.dirnotes. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 |author     |   the system name of the user who created the comment  |  patb |  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 The 'date' and 'size' fields reflect the file's modification date and size at the time of the last edit of the file comment, which is also 'comment_date'. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+As comments are editted or appended, new records are added to the database. Older records are are not purged. This gives you a history of the comments, but it means that fetching the most recent comment involves something like 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+~~~~ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  SELECT * FROM dirnotes WHERE name=? ORDER BY comment_date DESC 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+~~~~ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+and just fetch the first record. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ### MacOS {#macos} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 The **MacOS** inherently supports file comments. The Finder app manages most of the user activity. It handles file comments in a similar manner to **Dirnotes**. Comments are stored in two places: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * in the xattr properties of the file   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  ** using a different xattr-tag   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * in a database located in each directory   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  ** in the .DS-Store file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  * in the xattr properties of the file   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    * using a different xattr-tag (<code>com.apple.metadata:kMDItemFinderComment</code>)  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    * the comment string is wrapped in a <code>pList</code> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  * in a database located in each directory   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    * in the .DS-Store file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 The user can examine the file comments by opening the GetInfo dialog, and scrolling down to "Comment" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 If the Finder is used to copy/move files, the comments are moved properly to both destinations. If you use the os to copy/move the files, you can ask that the xattr properties get moved, but the .DS-Store file will not be updated. That means the Finder will not see file comments on the destination file. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 **MacOS** has AppleScript, by which you can ask the Finder to perform the file copy/move. In this case, the comments are moved properly. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+## DEVELOPMENT STATUS{#status} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Each app is a standalone file. That means there is a lot of redundancy between the tthree apps. And there _may_ be some inconsistency. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+2022-10-04 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+: All three apps are functioning and usable.   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  The _config_file_ is fully implemented.  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Themes are not implemented.  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Comments are intended to be _utf-8_, but are _strings_ in some places.  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  MacOS code is not written yet.  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  The _help_ dialogs in <code>**dirnotes-tui**</code> are meagre. 
			 |