# Macros
This is a collection of scripts I use to make managing files and processes easier.
Use it to automagically select and run terminal applications, send signals to daemons, execute arbitrary commands, search the web, grab passwords from a password manager, and more.

### Installing dependencies
`sudo apt install pass enscript dunst xclip scrot mpc mpd ghostscript zathura
suckless-tools youtube-dl`

All of them are optional except suckless-tools. Many of the features aren't
interdependent and are made up of 1 or 2 functions.

- [ dmenu ](http://tools.suckless.org/dmenu/) is for the prompts. It can be
  changed to rofi or some other solution
- scrot and xclip for screenshots
- all scripts assume your prefered terminal is [ st ](http://st.suckless.org)
- mpc is for media controls
- zathura, ghostscript, and enscript are an aesthetic option for viewing man
  pages and command outputs as document files rather than terminal output

## prompt
The central script that gives the rest of the features interactivity. Read
the source code for more details.
### Usage
	prompt [ COMMAND ]

#### COMMANDS
* launch
* action
* cmd
* cmd_clip
* search
* username
* password
* other_password
* edit_password
* open
* edit

most functionality is accessible from launch and action only

### Notes
- Picking a directory opens st at it's location
- Set bindings for `prompt action` and `prompt launch`
- Some prompts like `search package` will infer with their default operation
  when the string entered is an invalid selection
- the password functions assume that logins for the same services are all
  stored in the same file, with each account's information seperated by an
  empty line. Each line containing a username begins with 'username:', each
  line containing a password is the first line of it's section.

## mru
Used for storing file paths and their modification times in ~/.cache/mru/.
When a file is opened with prompt open, it moves to the top of the home list.
I wrote it because locate was too limiting.

	mru [COMMAND] [CACHE]

#### COMMMAND
- init
- update
- updatedirs
- output
- list
- insert [ FILE ]

### Get Started
	`mru init; mru update; mru updatedirs`

#### Notes
- by default, it ignores hidden directories
- If no cache name is specified, it assumes 'home'
- more cache paths can be added by editing the cache_info variable in the
  source code. For fast load times you may want to seperate different tasks or
  types of files into their own cache, i.e projects, videos, config files.
- If if the file passed to `mru insert` does not exist, it is removed from the cache
- You may want to run mru update at startup to add new files and cleanup hidden
  files in .cache/mru
- You don't need to install jump, zsh, or some other hack to switch directories
  quickly. Use this alias:
  `alias cdz='cd $((mru listdirs | fzf --height=50%) || printf ".")'`

### Initializing
	mru init

## pages
pages is a command for viewing /tmp/pages-{number} files with st or zathura.
The files are the result of prompt commands like `prompt search` -> Go page or
can be created from your own scripts. I use it for viewing local documentation
quickly.

### Usage
	pages [ pager | pdf | browser | send ] [ NAME ]

send will send stdin to the named page with the naming convention
/tmp/pages-{NAME}. All other commands attempt to open the named page if it
exists.

#### Notes
* Page names don't have to be numbers, here is an example vim Ex mode command I
  use to convert a markdown file to html and open it in a browser: 
  `:!markdown % | pages send 1.html | pages browser 1.html`
  This could be given it's own keybinding.

#### TODO
- Finish vpn and networking stuff after ini script is finished, then make sure
- variables to the script to make assumed paths easier to change
- emoji select to clipboard
- use attach-session -t . -c /dir for selecting multiplexer directory
- ddg fill options should be taken from bookmarks or history
- Make password prompts green
- Figure out range selecting for parsing passwords
- Figure out using dmenu instead of gnome key prompt (pinentry)
what?- Consider entr in dwm-start for watching files
- change xdg text/plain opener to use vim and st if not in terminal
- unicode character insertion
change prompt icon to nerd icon
- finish dwm patching, select window with wmctrl, then setup vpn, then maybe dmenu patches

## Searching the web
The prompt's rawurlencode function makes it easy to create new search functions for any website or service. Append the output of a call to rawurlencode to the site's search prefix, then pass the resulting string to an application like lynx or brave-browser. No need for installing packages or directories of config files.
Example:
```firefox "html.duckduckgo.com/html?q=$(rawurlencode "$1")"```