«««

8 września 2013

Dotki w hostname

Z przyczyn nie do końca dla mnie jasnych, nie mogłem ustawić kropeczek w nazwie moich linuksików. Najpierw problem był z arch, potem z ubu. Kropki były po prostu usuwane. WTF?! Wyjaśniło się po przeczytaniu man hostnamectl. Okazuje się, że są 3 różne hostname i domyślnie ustawiane są wszystkie 3 na raz. Nie wnikając za bardzo w temat, jeśli pominiemy ustawianie wersji "pretty", wówczas kropeczki nie będą usuwane.

root@quad ~ # hostnamectl set-hostname --static --transient acme.dyndns.org
root@acme.dyndns.org ~ # hostname
acme.dyndns.org

Rozwiązanie jest absurdalne, gdyż wersja "pretty" to akurat ta wersja opisowa.

25 stycznia 2011

Zabawa w chowanego

Rozszerzenie nautilus-python tym razem do ukrywania plików (mechanizm działa tylko w nautilus). Okazuje się, że można ukrywać pliki na sposób "windowsowy" (bez kropki), jeśli w katalogu utworzymy plik .hidden z listą plików do ukrycia.

Przykład zastosowania

Wchodzimy do folderu ~/.local/share/nautilus-python/extensions i chcemy ukryć wszystkie pliki *.pyc. Wystarczy nacisnąć Ctrl+S wpisać *.pyc, aby zaznaczyć pliki do ukrycia i z menu pod prawym klawiszem myszy wybrać 'Hide all selected files'. W drugą mańkę będzie 'Unhide...'.
Żeby zobaczyć zmiany trzeba nacisnąć Ctrl+R albo F5 dla odświeżenia widoku.

Naciskając Ctrl+H w nautilusie, przełączamy widok wyświetlania ukrytych plików. Dla łatwiejszego rozróżnienia do ukrytych plików dodawany jest emblemat.

Do pobrania

Rozszerzenie: hidden-files.py (repo)
Gdzie umieścić, co się z tym robi itd. było już wcześniej opisane w tag: nautilus-python

21 grudnia 2010

Edytowanie plików *.desktop w nautilusie

Proste rozszerzenie typu nautilus-python, które pozwala na edycję plików *.desktop (ikonki na pulpicie do uruchamiania programów). Wprawdzie miałem to jako nautilus-script, ale chciałem to mieć na wierzchu i tylko wówczas, gdy jest potrzebne.

Tak się prezentuje przy zaznaczeniu jednego lub kilku (kosmetyczne różnice) plików typu desktop. Opcja pojawi się nawet, gdy wśród zaznaczonych będą inne typy plików. To jest celowo tak zrobione. Zawsze mnie wkurzało, że jak zaznaczę kilka archiwów z "czymkolwiek" to już nie pojawia się opcja ich rozpakowania.

~/.local/share/nautilus-python/extensions/edit-desktop-files.py

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import gtk
import nautilus

class EditDesktopFiles(nautilus.MenuProvider):

    def __init__(self):
        pass

    def edit_desktop_files(self, menu, files):
        for file in files:
            # http://www.pygtk.org/docs/pygtk/class-gtkmountoperation.html
            gtk.show_uri(None,file.get_uri(), gtk.gdk.CURRENT_TIME)

    def get_file_items(self, window, files):
        # test: czy w ogóle cokolwiek jest zaznaczone
        if len(files) == 0:
            return

        # filtr: tylko pliki *.desktop
        files = [ file for file in files
                    if file.get_mime_type() == 'application/x-desktop' ]

        if len(files) == 0:
            return
        elif len(files) == 1:
            LABEL='Edit %s file' % files[0].get_name()
            TOOLTIP='Edit this desktop file in default editor'
        else:
            LABEL='Edit all desktop files'
            TOOLTIP='Edit all desktop files in default editor'

        NAME='NautilusPython::edit_desktop_files_item'
        ICON='/usr/share/pixmaps/nautilus/colors.png'

        item = nautilus.MenuItem(NAME,LABEL,TOOLTIP,ICON)
        item.connect('activate', self.edit_desktop_files, files)

        return item,

Oczywiście należy pamiętać, o wcześniejszym zainstalowaniu paczki nautilus-python, a po załadowaniu skryptu do katalogu należy zrestartować nautilusa

nautilus -q && sleep 1 && nautilus --no-desktop

1 grudnia 2010

Znajdź mnie nim przepadnę

"To było gdzieś w zakładkach, coś z gnome w nazwie, a w tytule były gwiazdki."
Znasz to? Standardowy manager zakładek firefox'a jest fajny, ale nie potrafi wyszukiwać więcej niż jednego warunku. Na szczęście baza to SQLite i przy odrobinie trudu ładnie się obrabia.

moz_places.sh

W skrypcie trzeba zmienić pierwszy parametr srcdb na swoją bazę. Tworzymy kopię bazy, bo firefox blokuje do niej dostęp, jeśli jest włączony.
Na wyjściu skryptu dostajemy listę postaci:
link | tytuł
Można też ustawić wypisywanie tylko jednego z nich. Uzyskane dane można już dowolnie przeszukiwać, jeśli się tylko wie jak :). Do pobrania moz_places.sh lub obejrzenia:

#!/bin/bash

srcdb=$HOME/.mozilla/firefox/profil.lucas/places.sqlite
db=/dev/shm/places.sqlite # /dev/shm/ to RAM
[ -f $db ] && rm -f $db
cp $srcdb $db || exit 1
# ------------------------------------------------
usage(){
    echo "${0##*/} { b, bookmarks | h, history} [ -u,--url | -t,--title ]"
    exit $1
}
# ------------------------------------------------
get_history(){
    sqlite3 $db <<!
        SELECT $select
        FROM moz_places p, moz_historyvisits h
        WHERE p.hidden=0 AND p.id = h.place_id
        ;
!
}
# ------------------------------------------------
get_bookmarks(){
    sqlite3 $db <<!
        SELECT $select
        FROM moz_places p, moz_bookmarks b
        WHERE p.hidden=0 AND p.id = b.fk
        ;
!
}
# ------------------------------------------------
# wybieramy co wyświetlić: url, tytuł, wszystko
select='p.url , p.title'
[[ $2 ]] && {
    case "$2" in
        -u|--url)   select='p.url' ;;
        -t|--title) select='p.title' ;;
        *)          usage 1 ;;
    esac
}
# ------------------------------------------------
# wybieramy źródło: zakładki, historia
[[ $1 ]] && {
    case "$1" in
        h|history)   get_history ;;
        b|bookmarks) get_bookmarks ;;
        *)          usage 1 ;;
    esac
} || usage

Jak tego używać

Skrypty wymaga podania, z której tablicy w bazie korzystamy (historia, czy zakładki), a drugi parametr jest opcjonalny.

$ moz_places.sh
moz_places.sh { b, bookmarks | h, history} [ -u,--url | -t,--title ]

$ moz_places.sh b # or h
http://www.web.com|Web title
...

$ moz_places.sh b -u # or --url
http://www.web.com
...

$ moz_places.sh b -t # or --title
Web title
...
Szukaj w adresach ftp
$ moz_places.sh b | grep ^ftp
szukaj tytułu zaczynającego się od słowa fedora
$ moz_places.sh b | awk -F'|' '$2 ~/^fedora/ {print $0}'
... również z dużej litery
$ moz_places.sh b | awk -F'|' '$2 ~/^[fF]edora/ {print $0}'
szukaj tytułu zaczynającego się od słowa [fF]edora, ale w adresie strony nie może być słowa fedora
$ moz_places.sh b \
    | awk -F'|' '$2 ~/^[fF]edora/ {print $0}' \
    | awk -F'|' '$1 !~/fedora/ {print $0}'
Na koniec coś głupiego :) Która domena jest Twoim zdaniem najciekawsza?
$ moz_places.sh b \
    | awk -F'/' '{print $3}' \
    | sed 's:^www\.::g' \
    | sort | uniq -cd | sort -n | tail -n 7

Gdyby ktoś chciał pogrzebać w bazie, a ma zerowe doświadczenie proponuję wygodny GUI sqliteman lub konsole:
pomoc sqlite3 $db ".help"
lista tablic sqlite3 $db ".tables"
schemat wybranej tablicy sqlite3 $db ".schema moz_places"