Slik skriver du dine egne rørmenuskripter

Forrige uke introduserte jeg Openbox-rørmenyer og presenterte de fire som jeg liker best i de offisielle galleriene.

Det som er flott med rørmenyer er imidlertid at det er veldig enkelt å skrive dine egne - det vil si at Openbox administrerer all den dynamiske informasjonen du trenger. For å bevise dette, som jeg forventet i mitt forrige innlegg, skal jeg denne uken forklare trinnvis hvordan jeg skrev en rørmeny som lar meg lese RSS-feeder rett fra Openbox, uten å åpne noen nettleser eller grafisk RSS-klient med mindre jeg virkelig ønsker å lese litt full artikkel.

Et slikt manus har en åpenbar forutsetning som ikke har noe å gjøre med Openbox og det er menyer: det trenger som enkel tekstlister med nyhetstitler og URL-er, innhentet på andre måter. Med andre ord, du må allerede ha lastet ned og konvertert til et passende, enklere format, RSS-innmatingene du vil lese. Personlig har jeg resirkulert en kommandolinje-RSS-nedlasting for dette formålet som jeg skrev i fjor for et litt annet formål, som konverterer RSS-feeds til HTML-format. Dette skriptet tar to argumenter: et vilkårlig feed-navn og URL-adressen til en RSS-feed. Deretter laster den ned som mater og lagrer URL-adressene og titlene i en ren tekstfil. Som et eksempel, når jeg gir URLen til RSS-feeden til Tech Republic-bloggene:

 get_rss.py Tech_Republic 'http://www.techrepublic.com/search?t=1&o=1&mode=rss' 

Jeg får noe slikt (jeg trimmet nettadresser og titler for lesbarhet):

Tech_Republic | Comic-Con 2011 høydepunkter: Film, TV | http://www.techrepublic.com/blog/geekend/comic-con

Tech_Republic | Topp 10 lyssvangre kamper i Star Wars-filmer | http://www.techrepublic.com/blog/geekend/

Tech_Republic | Teknisk resultattavle, 29. juli | http://www.techrepublic.com/blog/hiner/

Så la oss anta at du har flere filer i dette formatet i en reservert katalog, med jevne mellomrom skrevet om fra noen cron-jobb. Hvordan transformerer du innholdet i en menybasert RSS-leser i Openbox? Jeg gjør det med dette 19 linjeskriptet:

 1 #! / Bin / bash 
 2 
 3 RSS_FEED_DIR = "/ home / marco / .rss_feeds" 
 4 ekko "" 
 5 for FEED i `finn $ RSS_FEED_DIR -type f` 
 6 gjør 
 7 FEED_NAME = `head -1 $ FEED | kuttet '-d |' -f1` 
 8 ekko "" 
 9 mens du leser linjen 
 10 gjør 
 11 POST_TITLE = `ekko" $ linje "| kuttet '-d |' -f2` 
 12 POST_URL = `ekko" $ linje "| kuttet '-d |' -f3` 
 13 ekko "" 
 14 ekko "firefox $ POST_URL" 
 15 ekko "" 
 16 ferdig <$ FEED 
 17 ferdig 
 18 ekko "" 
 19 avkjørsel 

La meg vise deg det endelige resultatet før jeg forklarer detaljene. Hvis du kjører skriptet over med spørsmål, får du noe slikt (igjen, trimmet for lesbarhet):

 firefox http: //www.techrepublic.com / ... 
 ... 
 Men hvis du "installerer" det som et Openbox-rørmenyskript, og følg fremgangsmåten jeg forklarte forrige uke, vil du få root-undermenyer som er direkte RSS-feeder, som de som er vist i figur A. 

Alt manuset gjør er å:

  • les alle filene i RSS_FEED_DIR-mappen (linje 5), en linje om gangen (linje 9)
  • trekke ut tittel og URL for hvert element i den gjeldende RSS-strømmen (linjer 11/12)
  • skriv dem ut til standardutdata, pakket inn i riktig Openbox-kompatibel markering

Den eneste vanskelige delen her er å vite nøyaktig hva den markeringen må være. Når du studerer koden over, kan du øyeblikkelig lære markeringen for å generere åpnings- og lukkeuttalelser for hver meny (linje 4 og 18), merkede separatorer (linje 8) og menyelementer som gjør at Openbox starter programmer, i stedet for bare å vise litt tekst. Slike elementer erklærer inne og koder (linje 14) kommandoen som Openbox må utføre når du klikker på menyposten med den tilhørende etiketten (linje 13). En kommando som firefox vil be Firefox om å åpne den siden, i en ny fane hvis den allerede kjører. Hvis du trenger dem, er alle de gory detaljene i syntaks for Openbox-menyen i Openbox wiki.

Hva er igjen? Bare en ting. Den imøtekommende leseren vil ha lagt merke til at selv om manuset fungerer perfekt som den er, vil det generere menyer som blir for lange, det er ubrukelige, så snart de vokser over 20/30 oppføringer. Løsningen er å dele oppføringene i en undermeny per feed, ved å la skriptet generere den ekstra markeringen som har denne effekten. Du kan oppnå dette resultatet ved å skrive om linje 8 på denne måten:

 ekko "" 
og legge til kommandoekkoet etter linje 16. Dette vil gi hver RSS-feed en egen undermeny, som du kan se i figur B.

Generelt kan nyhetstitler på generiske språk inneholde noen spesielle (Openbox-messige) tegn som kan føre til at Openbox ikke viser dem. Jeg har ikke møtt slike titler ennå, men de finnes sannsynligvis. Jeg har ikke plass til å gå inn på alle detaljer her (tenkte jeg kunne gjøre det i et eget innlegg), men skulle det være tilfelle, må du slippe unna alle slike tegn i titlene, rett før du legger dem inn i $ POST_TITLE . For øyeblikket håper jeg at jeg har vist deg hvor kraftige, fleksible og enkle å bygge Openbox-rørmenyer kan være, uansett hva dine behov er!

© Copyright 2020 | mobilegn.com