Własny przycisk w Operze na przykładzie skryptozakładki
Wstęp
W komentarzu do wpisu o pasku zakładek napisałem, że w swojej Operze tegoż paska używam właściwie z jednego tylko powodu - ważnej skryptozakładki. Już dawno temu planowałem przerobienie tej skryptozakładki na rozszerzenie, które doda odpowiedni przycisk, ale jakoś tak nie po drodze mi było z czytaniem dokumentacji rozszerzeń w Operze.Po przeczytaniu wspomnianego wpisu, stwierdziłem, że trzeba z tym wreszcie zrobić porządek. Pomyślałem też, że po co robić rozszerzenie, skoro można wstawić swój przycisk i już.
Gotowe przyciski użytkownika
Najpierw odwiedziłem starą, dobrą podstronę Opera Browser Wiki. Są na niej gotowe przyciski użytkownika, jak też linki do stron, z pomocą których można zrobić swój przycisk, całość, niestety, dość stara. Odwiedziłem po kolei kilka podlinkowanych stron, przydały się dwie: pierwsza i druga. Natchnienie i pojęcie jak to ma wyglądać już miałem.
Edycja przycisków na paskach narzędziowych
Przed przystąpieniem do działań zasadniczych należy przygotować sobie plac boju. W tym celu wszedłem do Preferencji (Ctrl+F12), a tam Zaawansowane ->Paski narzędzi ->Konfiguracja pasków narzędzi. Zaznaczyłem bieżący i kliknąłem Utwórz kopię. Zaznaczyłem też znów bieżący plik, aby edytować tę kopię. Wszystko to dlatego, że nie należy edytować używanych przez Operę plików w trakcie jej działania.
Otworzyłem folder ~/.opera/toolbar i plik tool_2.ini (to plik z moją kopią konfiguracji pasków). W pliku tym znalazłem interesujący mnie fragment. Jaki był interesujący? W sumie wszystko jedno, trzeba tylko wiedzieć gdzie się coś wstawia, np. sekcja [code][Browser Toolbar.content] Button0, -4062831=Open document Button1, -1001150226=Save document Button2, 880020204=Print document[/code] zawiera konfigurację paska głównego - w powyższym fragmencie są to przyciski Otwórz, Zapisz i Drukuj. Jak widać, są one numerowane (od zera), więc najprościej dodać nowy przycisk z odpowiednim numerem, na końcu któregoś paska, a potem gotowy przycisk przemieścić tam, gdzie będzie wygodnie.
No ale co tam ma być? Tutaj wykorzystałem to, co widać na drugiej z podanych wyżej stron o przyciskach, oraz istniejące przyciski: w miejscu na polecenie trzeba po prostu wstawić kod skryptozakładki. Wygląda to tak:
Button1="Go to page, "KOD_SKRYPTOZAKŁADKI", , "NAZWA","IKONA""
"Go to page" jest typem/akcją przycisku. Ikony nie podałem, zostawiłem pusty cudzysłów, przez co zawsze wyświetla mi się podana tam nazwa. Kod się tu źle wyświetla, więc całość podam tak: wklejto.pl/txt93245. Trzeba pamiętać, żeby wszelkie cudzysłowy były w kodzie pojedyncze, bo podwójne są wykorzystywane przez sam plik konfiguracyjny.
Pozostaje już tylko zapisać plik i w Preferencjach wybrać tę właśnie nową konfigurację.
Efekt
W efekcie dostałem przycisk, którego etykieta to "Pl <-> En". Działa on na Wikipedii. Naciśnięcie go przy otwartej wersji polskiej przeniesie na wersję angielską i na odwrót. Przy czym, jeśli jest w treści strony jest link do artykułu w tej drugiej wersji językowej, to będzie użyty adres z tego linku, a jeśli nie, to po prostu zmienione zostaną dwie litery w adresie: "en" na "pl", a "pl" na "en". Na innych stronach efektu brak. Dawno nie zaglądałem do tego kodu. Może można go poprawić, ale że i tak działa, to nie mam motywacji. :)
Podsumowanie
W opisany sposób można wstawić jako przycisk dowolną skryptozakładkę. Przyciski w Operze zresztą, nie ograniczają się do skryptozakładek. Mogą one wywoływać na wszelkie sposoby wszelkie opcje w aplikacji, oraz niektóre w systemie. I tak mam np. przycisk otwierający prosty dokument HTML/JS, konwertujący podany/zaznaczony tekst w ROT‑13; przycisk dodający stronę jako zakładkę, jeśli jeszcze nie ma ona zakładki, albo edytujący istniejącą zakładkę; przyciski otwierające bieżącą stronę w Firefoksie, Konquerorze i Chromium; przycisk otwierający gnome-terminal (ich kod jest następujący:
Button6, "Go to page"="Go to page, "data:text/html,<title>ROT13</title><textarea rows='15' cols='73'>%t</textarea> <input type='button' onclick='rot13()' value='Crypt/Decrypt' /><script type='text/javascript'>tA=document.getElementsByTagName('textarea')[0];onload=function(){tA.value=utf(window.unescape(tA.value))};function rot13(t,m,c){txt=tA.value;t='';m=0;for(i=0;i<txt.length;i++){c=txt.charCodeAt(i);if((c>96)&&(c<124)){m=96}else if((c>64)&&(c<91)){m=64}else{t+=txt.charAt(i);continue;}c-=m;c=(c+13)>26?c-13:c+13;t+=String.fromCharCode(c+m);}tA.value=t}function utf(t,p,i,c,c1,c2,s){p='';i=c=c1=c2=0;s=String.fromCharCode;while(i<t.length){c=t.charCodeAt(i);if(c<128){p+=s(c);i++;}else if((c>191)&&(c<224)){c2=t.charCodeAt(i+1);p+=s(((c&31)<<6)|(c2&63));i+=2;}else{c2=t.charCodeAt(i+1);c3=t.charCodeAt(i+2);p+=s(((c&15)<<12)|((c2&63)<<6)|(c3&63));i+=3;}}return p}</script>", , "ROT13"" Button7, "Star"="Highlight bookmark, , , "Star" | Add to bookmarks, , , -1183760952, "Missing bookmark"" Button8, "W Fx"="Execute program, "firefox", "%u", "W Fx"" Button9, "W Kq"="Execute program, "konqueror", "%u", "W Kq"" Button10, "W GC"="Execute program, "chromium-browser", "%u", "W Ch"" Button11, "Cmd"="Execute program, "gnome-terminal", , "Cmd""
Mam tego więcej, ale zamiast marnować bajty na serwerze wypisywaniem całości, odeślę zainteresowanych Czytelników na wspomnianą Opera Browser Wiki, na której jest sporo przydatnych przycisków, a z której wziąłem wszystkie te, których sam nie zrobiłem. I co najistotniejsze, podstawowym sposobem dodawania przycisków w Operze jest przeciągnij i upuść z odpowiedniej strony.
PS Pasek zakładek poszedł na śmietnik.