On Sat, 2008-02-02 at 14:57 +0200, Kostas Papadimas wrote: > Στις 02-02-2008, ημέρα Σαβ, και ώρα 12:40 +0200, ο/η Tsabolov Sergey > έγραψε: > > http://www.techteam.gr/index.php?showtopic=118719 > > > > Δεν καταλαβαίνω. > 1)Αν όντως υπάρχει πρόβλημα ΠΟΥ ΕΙΝΑΙ ΤΟ ΕΠΙΣΗΜΟ ΒUG REPORT? > 2)OK το να προτείνει κάποιος script είναι θεμιτό, αλλά ποιός αφελής > χρήστης εκτελεί αυτά scripts? > > Αν και οι προθέσεις αυτού του χρήστη είναι αγνές, το γεγονός ότι δεν > έχει υποβάλλει bug report (η δεν έχει link σε αυτό αν υπάρχει ήδη) είναι > επιεικώς ανήθικο .. >
Τι κάνει πραγματικά ο Ναυτίλος όταν επιλέγουμε αποπροσάρτηση ή εξαγωγή; Ο πηγαίος κώδικας του Ναυτίλου βρίκεται στο http://svn.gnome.org/viewvc/nautilus/trunk/ Πως εντοπίζουμε που πρέπει να κοιτάξουμε μέσα σε τόσο πηγαίο κώδικα; Ξεκινούμε από το μήνυμα που εμφανίζεται κατά την αποπροσάρτηση. Σε αγγλικό GNOME είναι "_Unmount Volume" ενώ σε ελληνικό είναι "Αποπρο_σάρτηση τόμου" (ο επόμενος χαρακτήτας μετά το _ είναι ο χαρακτήτας συντόμευσης). Εντοπίζουμε την ελληνική μετάφραση μέσα στον πηγαίο κώδικα· είναι στον υποκατάλογο po/, αρχείο el.po. Δηλαδή, http://svn.gnome.org/viewvc/nautilus/trunk/po/el.po?view=annotate Είναι στη σειρά 3618. Βλέπουμε και ότι το συγκεκριμένο μήνυμα το μετέφρασε ο Νίκος Χαρωνιτάκης. Στα σχόλια του μηνύματος αναφέρει #: ../src/file-manager/fm-directory-view.c:6266 3615 #: ../src/file-manager/fm-directory-view.c:6282 3616 #: ../src/file-manager/fm-tree-view.c:753 Δηλαδή μπορούμε να προχωρήσουμε στα αρχεία αυτά (+γραμμή) να δούμε τι ακριβώς γίνεται. Η απάντηση βρίσκεται στο fm-tree-view.c, http://svn.gnome.org/viewvc/nautilus/trunk/src/file-manager/fm-tree-view.c?view=annotate Στη γραμμή 753 λέει gtk_label_set_text (GTK_LABEL (GTK_BIN (GTK_MENU_ITEM (view->details->popup_unmount))->child), unmount_is_eject? _("E_ject"):_("_Unmount Volume")); Ίσως είναι ακαταλαβίστικο, η ουσία βρίσκεται στο unmount_is_eject? _("E_ject"):_("_Unmount Volume") που είναι κάπως ισοδύναμο με if (unmount_is_eject) return _("E_ject") else return _("_Unmount Volume") Δηλαδή το αν θα κάνει αποπροσάρτητη ή εξαγωγή το καθορίζει η μεταβλητή unmount_is_eject. Η μεταβλητή αυτή παίρνει τιμή στις παραπάνω γραμμές: [747] show_unmount = g_mount_can_unmount (mount) || g_mount_can_eject (mount); /* TODO: show both unmount and eject if there are more than one volume for the drive */ unmount_is_eject = g_mount_can_eject (mount); Δηλαδή αν θα εμφανίζεται η επιλογή "Αποπροσάρτηση τόμου" γίνεται με έλεγχο αν οι συσκευές έχουν νόημα για αποπροσάρτηση. Τώρα, αν η αποπροσάρτηση θα έχει την έννοια της εξαγωγής (δηλαδή ο χρήστης βλέπει πάντα Αποπροσάρτηση, αλλά στις κατάλληλες φορές η αποπροσάρτηση θα είναι η λειτουργία της Εξαγωγής), το καθορίζει η συνάρτηση g_mount_can_eject(). Οι συναρτήσεις με όνομα g_xxxxxxx() προέρχονται από τη βιβλιοθήκη GLib, http://svn.gnome.org/viewvc/glib/trunk/ και η συγκεκριμένη συνάρτηση προέρχεται από το αρχείο http://svn.gnome.org/viewvc/glib/trunk/gio/gmount.c?view=annotate Θα αφήσουμε για τώρα τον τρόπο καθορισμού για το αν κάποια συσκευή μπορεί να αποπροσαρτηστεί ή όχι. Όπως ειναι τώρα, δεν υπάρχει ένδειξη στον τελικό χρήστη αν θα γίνει εξαγωγή ή σκέτη αποπροσάρτηση. Κοιτώντας στο αρχικό αρχείο για την εντολή που κάνει πραγματικά την αποπροσάρτηση/εξαγωγή, βλέπουμε ότι είναι η nautilus_file_operations_unmount_mount(). Που θα βρούμε την εντολή αυτή σε όλο τον κώδικα του Ναυτίλου; Δοκιμάζουμε με Google και βρίσκουμε http://mail.gnome.org/archives/svn-commits-list/2008-January/msg04806.html Εδώ γίνονται μια σειρά από βήματα αναζήτησης που οδηγούν τελικά στο αρχείο http://svn.gnome.org/viewvc/glib/trunk/gio/gunixvolume.c?view=annotate και στη γραμμή 417, [417] char *argv[] = {"eject", NULL, NULL}; argv[1] = unix_volume->device_path; Δηλαδή το σύστημα καλεί την εντολή "eject" με παράμετρο τη συσκευή που θέλουμε να αποπροσαρτήσουμε. Αν θέλουμε να δοκιμάσουμε με την εντολή sdparm, αρκεί να αντικαταστήσουμε με [417] char *argv[] = {"sdparm", "--command=stop", NULL, NULL}; argv[2] = unix_volume->device_path; Η εντολή sdparm λειτουργεί για όλες της συσκευές; Θα ήταν καλύτερη να έχουμε "unmount", "eject" αλλά και "poweroff"; Είναι καλό να γίνει αναφορά σφάλματος στο Bugzilla του GNOME, στο έργο glib, συστατικό gio : http://bugzilla.gnome.org/browse.cgi?product=glib Θέλει να το αναλάβει κάποιος; Σίμος -- Ubuntu-gr mailing list Ubuntu-gr@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-gr