diff --git a/README.md b/README.md index 9e631f9..9d43955 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ To use, copy config.lua.template into config.lua and edit it to your liking. - rofi - fish - upower, xbacklight - - flameshot, scrot, xclip, tesseract + - flameshot, xclip, tesseract - pamixer - sox - ibus diff --git a/modules/screenshot/init.lua b/modules/screenshot/init.lua index f3998ce..e764c11 100644 --- a/modules/screenshot/init.lua +++ b/modules/screenshot/init.lua @@ -2,14 +2,8 @@ local script = conf_dir .. "modules/screenshot/screenshot.fish" script = script .. " " ---[[ -local function capture(source, target) - awful.spawn(script .. "capture " .. source .. " " .. target, false) -end -]]-- - -local function flameshot() - awful.spawn("flameshot gui", false) +local function screenshot_action(mode) + awful.spawn(script .. mode, false) end @@ -17,12 +11,34 @@ return { keybinds = gears.table.join( awful.key( {}, "Print", function () - flameshot() + screenshot_action("normal") end, { description = "Take a screenshot", - group = "Desktop" + group = "Screenshot" + } + ), + + awful.key( {"Control"}, "Print", + function () + screenshot_action("ocr") + end, + + { + description = "OCR Capture", + group = "Screenshot" + } + ), + + awful.key( {"Shift"}, "Print", + function () + screenshot_action("pin") + end, + + { + description = "Pin a screenshot", + group = "Screenshot" } ) ) diff --git a/modules/screenshot/screenshot.fish b/modules/screenshot/screenshot.fish new file mode 100755 index 0000000..5575595 --- /dev/null +++ b/modules/screenshot/screenshot.fish @@ -0,0 +1,48 @@ +#!/usr/bin/fish +# +# Screenshot wrapper +# +# Usage: ./screenshot.fish [action] +# Actions: +# Normal: regular flameshot +# Pin: flameshot fast pin +# OCR: flameshot -> tesseract -> xclip, no save. + + +function capture + # Screenshot save location + set dest $HOME/Screenshots/ + + #set tmp_file (mktemp --tmpdir "scrot-tmp-XXX.png") + set tmp_file "/tmp/screenshot-tmp.png" + + switch $argv[1] + case normal + flameshot gui + + case pin + flameshot gui --accept-on-select --pin + + case ocr + flameshot gui --accept-on-select --path $tmp_file + + # Recognize text + set ocr (tesseract --dpi 96 -l eng $tmp_file stdout) + + # Trim whitespace and copy to clipboard + echo $ocr | sed -e "s/^[ \t]*//" | xclip -i -rmlastnl -selection clipboard + rm $tmp_file + + + case "*" + echo "Unknown action \"$argv[1]\"" + echo "" + echo "Usage: screenshot.fish [action]" + echo " Valid actions: normal, pin, ocr" + return 0 + end + + return 1 +end + +capture $argv diff --git a/modules/screenshot/screenshot.sh b/modules/screenshot/screenshot.sh deleted file mode 100755 index e283e2e..0000000 --- a/modules/screenshot/screenshot.sh +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/fish -# -# Screenshot wrapper -# -# Take a screenshot of a -# region, window, or screen -# and -# save it to $dest -# copy it to the clipboard -# pipe it through tesseract and xclip the result - - -function capture - # Screenshot save location - set dest $HOME/Screenshots/ - - #set tmp_file (mktemp --tmpdir "scrot-tmp-XXX.png") - set tmp_file "/tmp/scrot-tmp.png" - - # Capture the desired portion of the screen - switch $argv[1] - case window - scrot --overwrite --silent --focused $tmp_file - case screen - scrot --overwrite --silent $tmp_file - case region - scrot --overwrite --silent --select --freeze --line style=dash,width=2 $tmp_file - case "*" - echo "Unknown source \"$argv[1]\"" - echo "" - echo "Usage: capture [source] [target]" - echo " Valid sources: window, screen, region" - echo " Valid targets: save, copy, ocr" - return 0 - end - - # Output to the desired location - switch $argv[2] - case save - set fname (md5sum $tmp_file | cut -c 1-32) - mv $tmp_file "$dest$fname.png" - - case copy - # Don't use the mktmp file here, since we can't clean - # it away immediately. Use the fixed /tmp/scrot-clip insead. - # (Only applicable when a mktemp file is being used) - #rm $tmp_file - #set tmp_file /tmp/scrot-clip.png - - xclip -i -selection clipboard -t "image/png" $tmp_file - - case ocr - # Recognize text - set ocr (tesseract --dpi 96 -l eng $tmp_file stdout) - - # Trim whitespace and copy to clipboard - echo $ocr | sed -e "s/^[ \t]*//" | xclip -i -rmlastnl -selection clipboard - rm $tmp_file - - case "*" - echo "Unknown target \"$argv[2]\"" - echo "" - echo "Usage: capture [source] [target]" - echo " Valid sources: window, screen, region" - echo " Valid targets: save, copy, ocr" - return 0 - end - - return 1 -end - -# Awesomewm refuses to execute this without a sleep. -sleep 0.1 -capture $argv