/xattr

Emacs library to interact with extended attributes

Primary LanguageEmacs LispGNU General Public License v3.0GPL-3.0

Xattr

https://github.com/xFA25E/xattr/actions/workflows/test.yml/badge.svg

Emacs library to interact with extended attributes

Overview

This library enables the user to interact with extended attributes (xattrs from now on). Xattrs are key-value metadata that can be added to files if filesystem supports them. This has been tested only on Linux.

Features

Operations that are possible on xattrs: set, get, remove, list, empty-p

MAP implementation: xattr-map.el implements map interface for xattr-map

Motivation

I needed to tag files in dired. I was abusing image-dired package to tag files, but, in the end, it was designed to work only with media files, which gave some troubles. Future work will require to write some dired-tags package based on this library.

Building

You need to get emacs-module.h from emacs source files and set its directory to EMACS_SRC make variable

make EMACS_SRC=/path/to/dir/where/emacs-module.h/is/stored

Usage

(xattr-set "my-file-name.ext" "user.my.attribute" "with value")
;; => "with value"

(xattr-set "my-file-name.ext" "user.my.attribute2" "with value2")
;; => "with value2"

(xattr-get "my-file-name.ext" "user.my.attribute")
;; => "with value"

(xattr-list "my-file-name.ext")
;; => ("user.my.attribute" "user.my.attribute2")

(xattr-remove "my-file-name.ext" "user.my.attribute")
;; => nil

(xattr-list "my-file-name.ext")
;; => ("user.my.attribute2")

(xattr-empty-p "my-file-name.ext")
;; => nil

(require 'xattr-map)
(let ((map (xattr-map "my-file-name.ext")))
  (map-keys map)
  ;; => ("user.my.attribute2")
  (map-values map)
  ;; => ("with value2")
  )

Documentation

(xattr-set FILE NAME VALUE)

(xattr-get FILE NAME)

(xattr-list FILE)

(xattr-empty-p FILE)

(xattr-remove FILE NAME)

All of this functions can signal different errors. Please, inspect define-error definitions in xattr.el to learn more.

(xattr-map FILE)

Todo

Relative paths

C module handles relative files relative to the directory where GNU/Emacs started. Should we handle this in every xattr call?

License

Copyright (c) 2022 Valeriy Litkovskyy Licensed under the GPL3 License.