Wymienialnia Wiedzy

Zasady projektowania interfejsu Gnome 3

Przy okazji "dawania szansy" nowemu Gnome, trafiłem na taką stronę: GNOME Shell Design Principles.

Nie śledziłem za bardzo rozwoju nowego Gnome - może dla bardziej zorientowanych to żadna nowość, ale powiem szczerze, że mnie to zaskoczyło. Niby wiedziałem, że Gnome ma swoje "human interface guidlines" i stawiają na prostotę (co im różni ludzie z Torvaldsem włącznie zarzucają), ale jak ktoś to podsumował, to pomyślałem - kucze, oni (twórcy Gnome) mają rację!

No bo jak tu powiedzieć coś złego o zdaniu "Be the vehicle, not the destination" albo "...Human attention is the most valuable and scarcest commodity in human computer interaction."?

Nawet jeśli wszyscy projektanci interfejsów wiedzą to wszystko, to chyba nikt nie podąża za tymi wytycznymi w takim stopniu jak ekipa od nowego Gnome. A trzeba przyznać, że w ich pracy widać to na każdym kroku.

No i taka ciekawostka - nowy Gnome mimo, że jeszcze nie wyszedł z testing, działa całkiem stabilnie, co jak wiemy nie jest regułą przy wypuszczaniu nowych wersji dużych środowisk.

Kategorie: Linux
Tagi: gnome gnome3 linux
27 marca 2011, 10:21:06
3 komentarze

mutt i gmail

Mutt to chyba jedyny klient pocztowy, który potrafi z linii komend wysłać maila z załącznikiem. Nawet jeśli nie jest jedyny, to googlanie typu "jak wysłać maila z załącznikiem z linii komend" najczęściej prowadzi właśnie do mutta.

Właśnie od takich poszukiwań zaczęła się moja znajomość z tym programem. Jak już go zainstalowałem, to stwierdziłem, że może warto dać mu szansę, skonfigurować po swojemu i poużywać.

Po paru dniach mogę z czystym sumieniem powiedzieć, że program jest naprawdę fajny. Brak mu co prawda graficznego interfejsu, więc "nowoczesne" maile nie będą wyglądały tak pięknie jak sobie autor maila wymyślił, ale ma to też swoje zalety - po zapamiętaniu kilku literek służących do wykonywania podstawowych czynności, używanie mutta jest bardzo przyjemne.

Nie napiszę tu nic odkrywczego - Internet jest pełen poradników do tego programu. Chcę jednak zebrać do kupy nieco informacji. Chociażby po to, żeby następnym razem nie spędzić kilku godzin na czytaniu.

Po pierwsze - konfiguracja do odbierania poczty z GMaila. Gdzieś na forum Debiana widziałem długi poradnik jak zebrać do kupy procmail, fetchmail, esmtp i mutta. Do tego jeszcze regułki dla crona, żeby się sama poczta sprawdzała. Rzeczywiście daje się to zastosować, ale dla mnie to przerost formy nad treścią, tym bardziej, że nie widzę zastosowania dla procmail do moich maili - filtry z GMaila dają radę.

Ze wszystkich pomysłów na pogodzenie mutta z GMailem podobają mi się dwa. Oba stosunkowo proste.

Wysyłanie i odbieranie poczty

Sposób pierwszy - "online IMAP"

Zaletą jest to, że konfiguracja jest bardzo prosta i nie potrzebujemy żadnych dodatkowych aplikacji. Przy szybkim, stałym łączu jest to bardzo fajne rozwiązanie, bo mutt jest jednak przyjemniejszy od webowej aplikacji Google.

Odpowiedni kawałek .muttrc wygląda tak:


set imap_user = "YOUR.NAME@gmail.com"
set imap_pass = "YOURPASSWORD"
set smtp_url = "smtp://YOUR.NAME@smtp.gmail.com:587/"
set smtp_pass = "YOURPASSWORD"
set from = "YOUR.NAME@gmail.com"
set realname = "Your Real Name"

set folder = "imaps://imap.gmail.com:993"
set spoolfile = "+INBOX"
set imap_check_subscribed
set hostname = gmail.com
set mail_check = 120
set timeout = 300
set imap_keepalive = 300
set postponed = "+[GMail]/Drafts"
set header_cache=~/.mutt/cache/headers
set message_cachedir=~/.mutt/cache/bodies
set certificate_file=~/.mutt/certificates
set move = no
set include
set sort = 'threads'
set sort_aux = 'reverse-last-date-received'
set auto_tag = yes
ignore "Authentication-Results:"
ignore "DomainKey-Signature:"
ignore "DKIM-Signature:"
hdr_order Date From To Cc
alternative_order text/plain text/html *
auto_view text/html
bind editor  complete-query
bind editor ^T complete
bind editor  noop 

Sposób drugi - "offline IMAP"

Idea nieco jak z dawnych czasów, kiedy do poczty używało się POP3 i na dysku gromadziło się wszystkie maile. Program offlineimap jest pewnie w repozytoriach większości dystrybucji (w Archu jest w community) i służy do tego, żeby co jakiś czas synchronizować archiwum maili trzymane na dysku. Zaletą takiego rozwiązania jest oczywiście to, że mamy całą pocztę na własnym komputerze, więc awaria łącza, serwerów Google itp. nam nie straszna. Na razie jest to jednak rozwiązanie poza moim zasięgiem, gdyż mam ponad 3,5 GM maili i Internet przez komórkę. Ale być może się na nie skuszę, jak tylko podłączę się do UPC.

Konfiguracja OfflineIMAP sprowadza się do utworzenia pliku .offlineimaprc o następującej treści:


[general]
# NOTE: cronjob calls the quiet UI with -u
ui = TTY.TTYUI
accounts = GMail

[Account GMail]
localrepository = Gmail-Local
remoterepository = Gmail-Remote

[Repository Gmail-Local]
type = Maildir
localfolders = ~/.mutt/gmail

[Repository Gmail-Remote]
type = Gmail 
remoteuser = YOUR.NAME@gmail.com
remotepass = PASSWORD
realdelete = no

[mbnames]
enabled = yes
filename = ~/.mutt/gmail
header = "mailboxes "
peritem = "+%(accountname)s/%(foldername)s"
sep = " "
footer = "\n"

folderfilter = lambda foldername: foldername in ['INBOX']

Ostatnia linijka sprawia że synchronizujemy tylko skrzynkę INBOX. Jak wspomniałem nie mam na razie jak sprawdzić całości rozwiązania, ale wydaje mi się, że synchronizowanie wszystkich skrzynek sprawi, że niektóre maile będziemy trzymali na dysku w kilku kopiach, więc to głupio.

Do pliku .muttrc dodajemy linijkę:


mailboxes ~/.mutt/gmail/INBOX

Oczywiście skrzynek możemy sobie podłączyć więcej.

Oba te rozwiązania można pogodzić. Obecnie mam mutta w wersji "online" ale ponieważ dodatkowa, offline'owa skrzynka jest dodana (i nawet zsynchronizowałem parę maili) to mogę ciągle do niej zajrzeć, mam więc coś na kształt podręcznego archiwum. Co prawda to trochę bez sensu, bo te skrzynki są od siebie niezależne, więc mimo że mam jakiegoś maila w archiwum, to i tak będzie się ściągał gdy spróbuję go otworzyć.

Tak więc chcąc trzymać maile na dysku znacznie lepiej byłoby poprostu przrobić odpowiedni kawałek pliku .muttrc na:


set folder = ~/.mutt/gmail
set spoolfile = "~/.mutt/gmail/[Gmail].Sent Mail"
set postponed = ~/.mutt/gmail/[Gmail].Drafts

a offlineimap dodać do crona, albo odpalać sobie w zależności od potrzeby.

Sposób trzeci - maile z lini poleceń

Wspomniałem o tym na samym początku. Maila wysyłamy tak:


echo -e "TREŚĆ MAILA" | mutt ADRESAT@SERWER.NET \
        -s "TEMAT MAILA" \
        -a LISTA PLIKÓW DO ZAŁĄCZENIA

Sprawdzanie pisowni

Mutt do pisania maili używa zewnętrznego edytora. Jeśli chcemy, aby nasze maile były sprawdzane pod względem poprawności polecam do .muttrc dodać linijkę:


set editor="vim -c \"set spell spelllang=pl,en\""

Oczywiście jeśli edytor już mamy ustawiony, to nie dodajemy, a zmieniamy tą linię.

"GMail features"

Usuwanie maili

Google w swojej poczcie niektóre rzeczy robi inaczej. Przykładem jest kasowanie maili - wykonanie takiej akcji w mutt nie usunie naszej poczty, a jedynie przeniesie ją z INBOX do "All mail" (formalnie: usunie label INBOX). Aby skasować pocztę, należy mailom dać label "Trash" i dopiero usunięcie takich maili skutkuje ich fizycznym wywaleniem. Na szczęście mutt potrafi się z tym uporać. Wystarczy dodać makro przenoszące do kosza pod klawisz "D" normalnie służący do usuwania poczty. Mailami w śmietniku się nie przejmuję, gdyż po 30 dniach znikną automagicznie, więc mogę śmiało nadpisać sobie oryginalny skrót do kasowania maili - nie potrzebuję tej funkcji.

W tym miejscu pozwolę sobie zauważyć, że sporo poradników opisując konfigurację mutt dla GMaila wplata w .muttrc linijkę:

set record=~/.Mail/mailboxes/sent

Może ja nie rozumiem zamysłu autorów, ale IMO to się mija z celem - GMail z automatu wkłada wysyłane maile do "Sent mail" a dodając taką linijkę dodamy sobie maila jeszcze raz do "Sent mail" w związku z czym z każdej wysłanej wiadomości stworzy się wątek, w którym będą dwa maile - nasz oryginalny i jeden dodany przez mutta. Zresztą co ja będę się rozpisywał - sami zobaczcie co się dzieje jak się to wpisze.

Książka adresowa

Nie wiem jak Wy, ale ja nie jestem fanem trzymania kontaktów na dysku - używam tylko książki "on line", w której poza mailami trzymam też numery telefonów (i oczywiście synchronizuję z komórką). Dlatego do KMaila używam Akonadi. Co jednak z muttem? Na szczęście też jest łatwo. Z pomocą przychodzi goobook. Użytkownicy Archlinux znajdą to w AUR. Tu mała uwaga - ostatnia wersja nie dawała mi się "spatchować" - wywalenie odpowiedniego kawałka z pliku PKGBUILD rozwiązało problem.

Jak działa goobook? Bardzo prosto - polecenie "goobook query mama" wyszukuje email do mamy w książce google. Dodajmy więc do .muttrc coś takiego:

set query_command="goobook query '%s'"

"Parę skrótów klawiszowych które trzeba znać"

W górym pasku zawsze widać parę podstawowych skrótów, więc nie będę się rozpisywał. Wspomnę tylko o tych kilku, których tam nie ma, a warto je poznać.

  • Ctrl+R - oznaczenie wiadomości jako przeczytana
  • l - filtrowanie maili (używam zamiast wyszukiwania)
  • v - lista załączników z danego maila - potem możemy użyć:
  • | - zrobienie na załączniku czegoś takiego "załącznik | polecenie" gdzie polecenie podajemy
  • f - przesłanie załącznika dalej (zamiast forwardowania całego maila)
  • $ - synchronizowanie skrzynki z serwerem. Jak skasowaliśmy parę maili to właśnie to trzeba wcisnąć, żeby zmiany zostały odzwierciedlone na skrzynce.
  • c - otwórz mailbox - przechodzenie pomiędzy skrzynkami / katalogami

Załączniki i mailcap

Jak każdy chyba klient pocztowy, tak i Mutt potrafi otwierać załączniki w zewnętrznych programach. Aby to działało, najpierw do .muttrc dodajemy wpis mówiący, gdzie nasz mailcap się znajduje. W moim przpadku jest to linijka: set mailcap_path = ~/.mutt/mailcap

Następnie musimy wypełnić wspomniany pliczek informacjami co w czym otwierać. U mnie wygląda to tak:

video/*;                        mplayer %s

text/html;                      elinks -dump %s; nametemplate=%s.html; copiousoutput

image/*;                        gthumb %s

application/ms-excel;           localc %s

application/vnd.ms-excel;       localc %s

application/msword;             abiword %s

application/pdf;                evince s%

Linijka dla text/html jest szczególnie fajna (spisana bezczelnie z Wiki Archa), bo sprawia, że elinks przerobi nam wszystkie htmle na normalny tekst, który mutt sobie bez trudu otworzy, nie używając żadnego zewnętrznego programu (a więc nie wyskoczy nam żadne kolejne okienko). Aby to działało, potrzebujemy jednak jeszcze jednej linijki w .muttrc: auto_view text/html

PGP

Chociaż nie mam bogatej "network of trust" i nie znam wielu użytkowników PGP, z reguły podpisuję maile. Mutt oczywiście z PGP radzi sobie doskonale - wystarczy dopisać odpowiedni kawałek do .muttrc.


set pgp_decode_command="/usr/bin/gpg  --charset utf-8   %?p?--passphrase-fd 0? --no-verbose --quiet  --batch  --output - %f"
set pgp_verify_command="/usr/bin/gpg   --no-verbose --quiet  --batch  --output - --verify %s %f"
set pgp_decrypt_command="/usr/bin/gpg   --passphrase-fd 0 --no-verbose --quiet  --batch  --output - %f"
set pgp_sign_command="/usr/bin/gpg    --no-verbose --batch --quiet   --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f"
set pgp_clearsign_command="/usr/bin/gpg   --charset utf-8 --no-verbose --batch --quiet   --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f"
set pgp_encrypt_only_command="pgpewrap /usr/bin/gpg  --charset utf-8    --batch  --quiet  --no-verbose --output - --encrypt --textmode --armor --always-trust -- -r %r -- %f"

set pgp_encrypt_sign_command="pgpewrap /usr/bin/gpg  --charset utf-8 --passphrase-fd 0  --batch --quiet  --no-verbose  --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust -- -r %r -- %f"
set pgp_import_command="/usr/bin/gpg  --no-verbose --import -v %f"
set pgp_export_command="/usr/bin/gpg   --no-verbose --export --armor %r"
set pgp_verify_key_command="/usr/bin/gpg   --verbose --batch  --fingerprint --check-sigs %r"
set pgp_list_pubring_command="/usr/bin/gpg   --no-verbose --batch --quiet   --with-colons --list-keys %r" 
set pgp_list_secring_command="/usr/bin/gpg   --no-verbose --batch --quiet   --with-colons --list-secret-keys %r" 
set pgp_good_sign="^gpg: Good signature from"
set pgp_sign_as=0xABCD1234
set pgp_timeout=60
set pgp_good_sign="^gpg: Good signature from"
set crypt_autosign
set crypt_replysign
set crypt_replyencrypt=yes
set crypt_replysignencrypted=yes
set crypt_verify_sig=yes


Właściwie przepisałem to ze strony mutta, więc tam właśnie odsyłam spragnionych wiedzy. Sam nie wnikałem w te ustawienia - poprostu copy-paste, zmiana identyfikatora i tyle konfigurowania.

Kolory

Mutta możemy sobie po swojemu pokolorować. Składnia jest taka:


color object foreground background [ regexp ]

lub:


color index foreground background pattern

Co to jest to "pattern"? Jest to sposób w jaki możemy wybrać konkretne wiadomości. Na przykład:

  • "~F"
  • - oflagowane wiadomości
  • "~D"
  • - skasowane wiadomości (są widoczne na liście dopóki nie zsynchronizujemy się z serwerem)
  • "~T"
  • - otagowane wiadomości
  • "~N"
  • - nowe wiadomości

color   attachment  blue         default
color   header      green        default  "^message-id:"
color   header      green        default  "^x-mailer:"
color   header      green        default  "^user-agent:"
color   header      blue         default  "^date: "
color   header      brightblue   default  "^from: "
color   header      green        default  "^subject: "
color   header      brightblue   default  "^to: "
color   header      brightblue   default  "^cc: "
color   header      brightblue   default  "^reply-to: "
color   index       green        default  ~F
color   index       red          default  ~D
color   index       blue         default  ~T
color   index       brightblue   default  ~N
color   indicator   brightwhite  blue
color   markers     red          default
color   quoted      magenta      default
color   signature   brightblue   default
color   status      brightwhite  green
color   tilde       cyan         default
color   tree        blue         default
color   body        black        default  "(^| )_[-a-z0-9_]+_[,.?]?[ \n]"

Mutt rozpoznaje mniej więcej tyle kolorów, co przeciętny mężczyzna. Są to:

  • white
  • black
  • green
  • magenta
  • blue
  • cyan
  • yellow
  • red
  • default
  • colorx

Ostatnia pozycja (zamiast x wstawiamy liczbę) to przyporządkowanie kolorów ustawionych dla terminala.

Więcej informacji

Jak pisałem - nie jestem tu specjalnie odkrywczy. Większość z tego co napisałem można wygooglać, znaleźć w dokumentacji (man mutt, ale głównie man muttrc) albo na http://www.mutt.org/.

Kategorie: Linux, Techblog
Tagi: gmail imap linux mail mutt offlineimap poczta
12 marca 2011, 21:16:08
5 komentarzy