Create a select menu with smenu
Multiple Choice
The -T
option allows for the selection of multiple points by pressing the T or Insert keys in the running script for each relevant point. Complete the selection by pressing Enter. A marked entry appears underlined. Remove the marker by repeatedly pressing T or Delete.
The software uses the space as a field separator, unless you specify otherwise. However, the example shown in Listing 6 (Figure 6) uses a colon, which allows you to use tools (e.g., cut
) during further processing of the variable's contents, to address a column.
Menu Preselection
If you have no way to limit the list of menu options from the command in the pipe, filter the data when you call smenu
. If necessary, use regular expressions (-e
option, Listing 7). Alternatively, work with the positive hits (-i
option, Listing 8).
The effect is generally the same: The unwanted entries appear in a color that offer less contrast and cannot be selected (Figure 7). When using both options simultaneously, keep in mind that exclusion has a higher priority. As a result, you might not get any items to select.
PDF Search
To browse a (quite large) portfolio of PDF files, use the pdfsearch.sh
shell script (Listing 9). Using smenu, the small program displays the selection of hits and allows you to take further actions.
Listing 9
pdfsearch.sh
#!/bin/bash # pdfsearch.sh while true; do clear # Enter search term echo "browse PDF archive " echo "----------------------" read -p "enter search term (cancel: Enter or Ctrl+C): " sube if [ -z $sube ]; then exit fi # Evaluation list structure, case sensitivity is ignored. # only the number of hits is issued for i in $(pdfgrep -H -c -i "$sube" *.pdf); do number of hits = $(echo $i | cut-d\: -f2) if [ $number of hits-gt 0 ]; then hitlist=$(echo $hitlist $i) fi done # if hit is list empty, new loop run if [ -z "$hit list" ]; then echo "no hits" sleep 3 continue fi # here comes smenu while true; do file=$(echo $hitlist | tr "\ " "\n" | smenu -d -n20 -c -m "select file for display (q to cancel):" | cut -d\: -f1) # If cancel with [q], delete hit list and # new loop run if [ -z $file ]; then unset hit list break fi # Evince and Qpdfview support the transfer # a search term when launching on Shell evince --find "$sube" $file # continue or finished? Continue= $(echo "select done" | smenu -d -m "continue with" -s /A) if [ "$continue" = "done" ]; then break fi done done
The script only runs under Bash because it uses the read
command. Either assign the appropriate rights to run it directly, or call it with:
bash pdfsearch.sh
(For PDFs, check out qpdfview
or Evince: Both accept a search term at launch.)
When launching, enter the search term (Figure 8), which the script then transfers to pdfgrep
. It shows only the number of hits, ignoring case sensitivity. Any hits are provided for selection via smenu.
If you have selected a file to display, the script browses the search term in the PDF viewer. It then highlights it in the document (Figure 9). After closing the display program, either reuse the selection or enter a new search term (Figure 10).
« Previous 1 2 3 Next »
Buy this article as PDF
(incl. VAT)
Buy Linux Magazine
Subscribe to our Linux Newsletters
Find Linux and Open Source Jobs
Subscribe to our ADMIN Newsletters
Support Our Work
Linux Magazine content is made possible with support from readers like you. Please consider contributing when you’ve found an article to be beneficial.
News
-
Fedora 40 Beta Released Soon
With the official release of Fedora 40 coming in April, it's almost time to download the beta and see what's new.
-
New Pentesting Distribution to Compete with Kali Linux
SnoopGod is now available for your testing needs
-
Juno Computers Launches Another Linux Laptop
If you're looking for a powerhouse laptop that runs Ubuntu, the Juno Computers Neptune 17 v6 should be on your radar.
-
ZorinOS 17.1 Released, Includes Improved Windows App Support
If you need or desire to run Windows applications on Linux, there's one distribution intent on making that easier for you and its new release further improves that feature.
-
Linux Market Share Surpasses 4% for the First Time
Look out Windows and macOS, Linux is on the rise and has even topped ChromeOS to become the fourth most widely used OS around the globe.
-
KDE’s Plasma 6 Officially Available
KDE’s Plasma 6.0 "Megarelease" has happened, and it's brimming with new features, polish, and performance.
-
Latest Version of Tails Unleashed
Tails 6.0 is based on Debian 12 and includes GNOME 43.
-
KDE Announces New Slimbook V with Plenty of Power and KDE’s Plasma 6
If you're a fan of KDE Plasma, you'll be thrilled to hear they've announced a new Slimbook with an AMD CPU and the latest version of KDE Plasma desktop.
-
Monthly Sponsorship Includes Early Access to elementary OS 8
If you want to get a glimpse of what's in the pipeline for elementary OS 8, just set up a monthly sponsorship to help fund its continued existence.
-
DebConf24 to be Held in South Korea
Busan will be the location of the latest DebConf running July 28 through August 4