内容简介:Shell Scripts to Facilitate Effective Note TakingThis is aIt's command based and prints out available subcommands for any given command, these means you can use a directory of markdown files like a personal wiki, much like OneNote/Evernote/Notable, for exa
cadmus
Shell Scripts to Facilitate Effective Note Taking
Introduction
This is a self-contained shell script that uses pre-existing tools (such as TMSU and recoll) to provide an interface for markdown notes.
It's command based and prints out available subcommands for any given command, these means you can use a directory of markdown files like a personal wiki, much like OneNote/Evernote/Notable, for example:
and an overview of what it looks like in the terminal
For example if you wanted to extract all the tags from your markdown notes (either #tags
or from the YAML), cadmus has a tool for that:
Ultimately the idea is it is to act a menu to dispatch different scripts I already had so I could more easily share those scripts with classmates.
The real heavy lifting is done by Pandoc, Recoll, ripgrep, skim/fzf, TMSU etc.
Installation
Automatic
Copy this into your shell:
cd $(mktemp -d) wget https://raw.githubusercontent.com/RyanGreenup/cadmus/master/install.sh bash install.sh
- Cadmus will work from within a self-contained directory and add a symlink to
~/.local/bin
- in this way it's zero lock-in, it does not modify your curr directory of Markdown files.
- Installation will automatically create a config file in its directory (which is by default
~/.cadmus
- The script will list anythat are not satisfied.
Manual
To install manually:
- Download cadmus and put it into the
PATH
git clone https://github.com/RyanGreenup/cadmus ~/.cadmus \ || echo "Delete $HOME/.cadmus first" mkdir -p $HOME/.local/bin ln -s "$HOME/.cadmus/bin/cadmus" "$HOME/.local/bin/"
-
According to the SystemD Standard
~/.local/bin
should be in$PATH
, if you are using some other init implementation you can add this directory to"$PATH"
it by doing something like this:## Should work in bash/zsh/fish echo $PATH | grep "$HOME/.local/bin" &> /dev/null && echo "$HOME/.local/bin in path already" || ls "$HOME/.local/bin" &> /dev/null && echo 'PATH="$PATH:$HOME/.local/bin"' >> $HOME/.profile
-
When first run, the script will prompt you to make a config file in the directory in which it is run.
Assumptions
It is assumed that:
- Notes are:
- Markdown files with a
.md
extension - Recoll updates it's index on the fly
- The notes directory will need to be indexed by Recoll in order for the results to show up when using
cadmus search
.
- The notes directory will need to be indexed by Recoll in order for the results to show up when using
- Markdown files with a
- SSD
- I use an SSD and so I let some scripts be pretty inefficient (for example something like
grep | cut | xargs find
to avoid creating a variable), I don't know if HDD performance would be great.
- I use an SSD and so I let some scripts be pretty inefficient (for example something like
- All Notes have Unique Names
- On MacOS you'll need to define
xdg-open
and have GNU coreutils, so do something like:
alias xdg-open='open &>/dev/null' alias realpath=grealpath &>/dev/null
Configuring recoll
Currently the search just uses the default recoll config, I intend to modify this to use ~/.cadmus
as a config directory so as to not interfere with the default config.
It isn't in practice an issue if ~/.recoll
is indexing more than the notes because you can just modify the call to Skim ( sk
) in ..cadmus.. to start the call with ~/Notes/MD
.
Design Philosophy
- cadmus acts as a menu for scripts to acheive things
- The Actual work will be done by subscripts denoted by
description.bash
- The subscripts will take the note directory as an argument so they are portable and modular
- The Arguments will be shifted and then all passed down to subfunctions
- the script name
willshould always be printed to the terminal so the individual script can be repurposed with out fishing through code.
- The Actual work will be done by subscripts denoted by
- Subscripts
willshould take only one argument (orSTDIN
)- If the first argument is either
-h
or--help
help will be printed and thenexit 0
- This might lead to some limitations but the simplicity is for sanity, modularity and extensibility.
- Will always return absolute path.
- I played around with relative path but it got confusing when calling the script from inside a function inside a script, so instead if you want a relative path you should do
scriptname './' | xargs realpath --relative-to='./'
- I played around with relative path but it got confusing when calling the script from inside a function inside a script, so instead if you want a relative path you should do
- If the first argument is either
- Be a Front end to tie together different scripts and tools
- Don't replicate work other people have done.
- Plain Text, Free as in Speech and Beer.
- try to make modular subscripts:
- Pipe in input, output goes to STDOUT
Dependencies
-
jq
-
mdcat AUR
-
- Make sure to include
pcre2
, this comes in Arch , if usingcargo
:
cargo install ripgrep --features 'pcre2'
- Make sure to include
-
tmsu AUR
Recommended for all Features
- ip
- if you're on mac this stackExchange answer suggests iproute2 may work
- Kitty
- I've also heard good things about iterm2
- MkDocs
- nvim
- tectonic
- WeasyPrint
Interesting / Helpful / Recommended Generally (Not strictly necessary)
- guake or yakuake
- MarkText
- mdless
- readability-cli
- VNote
- VSCode
PATH
If any dependencies are installed with pip
or cargo
it will be necessary to add these directories to your PATH
:
## bash echo ' export PATH="$HOME/.local/bin:$PATH" export PATH="$HOME/.cargo/bin:$PATH" ' >> ~/.bashrc ## zsh echo ' export PATH="$HOME/.local/bin:$PATH" export PATH="$HOME/.cargo/bin:$PATH" ' >> ~/.bashrc ## fish echo ' set PATH $HOME/.local/bin $PATH set PATH $HOME/bin $PATH set PATH "$HOME/.cargo/bin $PATH ' >> ~/.config/fish/config.fish
Recommended Aliases
I wrote all this with aliases in mind, when I settle on some aliases i'll put up my fish
functions. (I also wanted autocomplete)
Why / Comparison with other tools
So the boxes I needed ticked are, more or less:
FOSS | Offline | Linux/BSD? | terminal? | RawFiles? | Markdown | AnyEditor? | |
---|---|---|---|---|---|---|---|
OneNote |
|
|
|
|
|
|
|
EverNote |
|
? |
|
|
|
|
|
Notable |
|
|
|
|
|
|
|
Zim |
|
|
|
|
|
|
|
Obsidian |
|
|
|
|
|
|
|
dokuwiki |
|
|
|
|
|
|
|
joplin |
|
|
|
|
|
|
|
mediawiki |
|
|
|
|
|
|
|
Org-Mode |
|
|
|
|
|
|
|
Cadmus |
|
|
|
|
|
|
|
† You can't open the files from vim with FZF so it gets a no. ‡ Unlike dokuwiki everything is in a database so it gets a no * With a Plugin
Related
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
写给大家看的Web设计书
Robin Williams、John Tollett / 苏金国、刘亮 / 人民邮电出版社 / 201005 / 69.00元
在这个网络时代,Web设计几乎已经成为每个人生活的必备技能。如果你想自力更生创建一个网站,或者认为自己的网站在设计上还不尽如人意,希望它看上去更具创意和专业性,那么本书正是为你准备的! 作者Robin和John先采用通俗易懂的方式将有关基础知识娓娓道来,比如Internet、搜索信息、构建简单网页等,然后为我们奉上了精妙的技巧、技术和设计示例来启发大家的设计灵感,比如Web基本设计原则、实现......一起来看看 《写给大家看的Web设计书》 这本书的介绍吧!