writing: Restructure module layout per-program

Similarly to the qutebrowser module we change the layout to have a
program name at the top-level and all required files for that specific
program within, whether they reside within .config, .local or anywhere
else.
We use dotter mappings to achieve this.
This commit is contained in:
Marty Oehme 2024-09-18 16:43:15 +02:00
parent 0903e7e443
commit 85c152a07c
Signed by: Marty
GPG key ID: EDBF2ED917B2EF6A
19 changed files with 8 additions and 2 deletions

203
writing/papis/papistui.yaml Normal file
View file

@ -0,0 +1,203 @@
# current issues/requests
# - [ ] call arbitrary shell command
# - [ ] non-blocking opening of files
# - [ ] distinguish in config between aliases for multiline/table
# - [ ] update view after more operations
# - if I call an 'update' command (e.g. set new tag or read status), it will not update in list until 'edit' command invoked and rebuilding the list
# - two selection additions:
# - [ ] select all in view
# - [ ] limit view to currently selected
#
# for papis itself:
# - [ ] I can not search custom numeric fields in whoosh? i.e. 'priority:1' will not give results. 'priority:high' will
base:
vimflavour: nvim
documentlist:
defaultstyle: multiline
marked-icon: "󰁔"
multilinestyle:
rows:
# TODO: show if already note attached; have info window display note content?
- "{' ' if 'priority' not in doc or doc['priority'] == 'low' else '<red>󱝇 </red>' if doc['priority'] == 'high' else '<yellow>󱝇 </yellow>'}<cyan>{doc.alias('type')} {doc['ref']}</cyan> {doc.alias('readstatus')} {' 󰘓 ' if doc['notes'] else ''}"
- "<white><bold>{doc.html_escape['title']}</bold></white>"
- "<blue>{doc.html_escape['author']}</blue>"
- "{doc.foreach('tags', '<lightgray>(</lightgray><gray><dim>{}</dim></gray><lightgray>)</lightgray>', split = ', ', sep = ' ')}"
tablestyle:
separator: " "
headerstyle: "underline|bold"
rowstyle: "white_bg"
cursorrowstyle: "black_white|bold"
columns:
- {
header: "󱝇",
content: "{'' if 'priority' not in doc or doc['priority'] == 'low' else '󰝥' if doc['priority'] == 'high' else '󰝦'}",
width: 1,
}
- {
header: "󰑇",
content: "{'󰗠' if doc['readstatus'] == 'read' else '󰗡' if doc['readstatus'] == 'skimmed' else ' '}",
width: 1,
}
- {
header: "",
content: "{'󰎚' if doc['notes'] else '󰎛' if doc['note'] else ' '}",
width: 1,
}
- {
header: "󰉺",
content: "{doc.alias('type')}",
width: 1,
}
- { header: "Authors", content: "{doc['author']}", width: 25 }
- { header: "Year", content: "{str(doc['year'])}", width: 4 }
- { header: "Title", content: "{doc['title']}", width: 125 }
- { header: "Reference", content: "{doc['ref']}", width: 15 }
- {
header: "󰘓",
content: "{str(len(doc.get_files()) if len(doc.get_files()) > 0 else '')}",
width: 1,
}
- { header: "Tags", content: "{doc['tags'] if isinstance(doc['tags'], str) else doc.foreach('tags', '{}', sep=', ')}", width: 35 }
aliases:
type:
{
article: "",
book: "",
inbook: "",
incollection: "󰪧",
software: "󰅩",
presentation: "󰐨",
thesis: "",
techreport: "󰁰",
_default_: "",
}
readstatus:
{
read: "<green>󰗠</green>",
skimmed: "<yellow>󰗡</yellow>"
}
keymappings:
q: quit
"?": help
T: toggle_style
S: cmd "sort "
/: search_mode
<key_down>: scroll_down
<key_up>: scroll_up
<ctrl-f>: page_down
<ctrl-b>: page_up
G: jump_to_bottom
gg: jump_to_top
j: scroll_down
k: scroll_up
o: open -r "pdf$"
O: open -d
b: browse
B: papis browse -k doi papis_id:{doc['papis_id']}
R: view_reset
<c-r>: reload
e:
- edit
- edit info
n:
- papis edit -n papis_id:{doc['papis_id']}
- edit notes
"'n":
- search "notes:.+"
- limit to entries with notes
"'u":
- search "readstatus:read OR readstatus:skimmed"
- limit to read entries
"'r":
- search "NOT readstatus:read AND NOT readstatus:skimmed"
- limit to unread entries
" ": mark_selected
mm: mark_selected
M: mark_down
J: mark_down
mu: unmark_all
mv: mark_view
",t": cmd "tag "
",r":
- papis update -s readstatus read papis_id:{doc['papis_id']}
- set readstatus read
",k":
- papis update -s readstatus skimmed papis_id:{doc['papis_id']}
- set readstatus skimmed
",u":
- papis update -s readstatus "" papis_id:{doc['papis_id']}
- set readstatus unread
",ph":
- papis update -s priority high papis_id:{doc['papis_id']}
- set priority high
",pm":
- papis update -s priority medium read papis_id:{doc['papis_id']}
- set priority medium
",pl":
- papis update -s priority low read papis_id:{doc['papis_id']}
- set priority low
i:
- info_toggle
- "Toggle info window"
I:
- info_cycle
- "Cycle info windows"
<ctrl-p>: info_scroll_up
<ctrl-n>: info_scroll_down
# all require 'clip' script to be available on PATH
yy:
- copy_to_clipboard "[@{doc['ref']}]"
- yank pandoc-styled reference
ss:
- vim_send "[@{doc['ref']}]"
- send vim pandoc-styled reference
yl:
- copy_to_clipboard "\\cite\{{doc['ref']}\}"
- yank latex-styled reference
sl:
- vim_send "\\cite\{{doc['ref']}\}"
- send vim latex-styled reference
yr:
- copy_to_clipboard "{format_reference(doc,style='apa')}"
- yank apa-styled reference
sr:
- vim_send "{format_reference(doc,style='apa')}"
- send vim apa-styled reference
yt:
- copy_to_clipboard "{doc['title']}"
- yank title
yu:
- copy_to_clipboard "{doc['url']}"
- yank url
yd:
- copy_to_clipboard "{doc['doi']}"
- yank doi
# TODO look into https://github.com/supersambo/papis-tui vim-send mappings
infowindow:
default_on: False
views:
doc:
content: "author: {doc['author'].strip()}\n title: {doc['title'].strip()}\n tags:{doc['tags'] if isinstance(doc['tags'], str) else doc.foreach('tags', '{}', sep=', ')}"
height: 8
apa:
content: "{format_reference(doc,style='apa')}"
abstract:
content: "{doc['abstract']}"
linewrap: True
height: 8
commandline:
search:
keyword_aliases: { a: "author:", t: "title:", y: "year:", k: "tags:" }
statusbar:
left:
default: "<black_green><bold> {info['mode_upper']} </black_green></bold><green_bg></green_bg>"
normal: "<black_green><bold> {info['mode_upper']} </black_green></bold><green_bg></green_bg>"
command: "<black_cyan><bold> {info['mode_upper']} </black_cyan></bold><cyan_bg></cyan_bg>"
select: "<black_red><bold> {info['mode_upper']} </black_red></bold><red_bg></red_bg>"
search: "<black_magenta><bold> {info['mode_upper']} </black_magenta></bold><magenta_bg></magenta_bg>"
right:
default: "<green>{info['sortkeys']} </green><cyan_bg></cyan_bg><black_cyan> {info['idx']} < {info['marked']} < {info['view']} < {info['items']} </black_cyan>"