Di bawah ubuntu 16.04 saya mendapatkan pesan berikut
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged
ketika saya membuka zenity dengan perintah
zenity --text-info --filename=<filename>
Ini tidak terjadi di bawah 14,04. Saya menduga bahwa jawabannya terkait dengan posting ini tetapi posting tersebut tidak menjelaskan bagaimana menerapkan solusi yang diusulkan. Bisakah seseorang tolong jelaskan file mana yang harus saya tambahkan baris yang disarankan?
Anda memperbaiki peringatan ini dengan memberikan GtkDialog induk untuk dijadikan modal. Fungsi yang relevan adalah gtk_window_set_transient_for () (yang mengatur jendela ini untuk selalu berada di atas, atau sementara, untuk yang lain) dan secara opsional gtk_window_set_modal () untuk menjadikannya dialog modal. Inilah yang akhirnya dilakukan oleh berbagai konstruktor GtkDialog.
zenity --help-general
memberi--attach=WINDOW Set the parent window to attach to
tetapi saya tidak yakin bagaimana menggunakannya (apa itu Window?), mungkin itu akan menyelesaikan masalah Anda.WINDOW_ID=$(xprop -name
echo $ TITLE` | grep WM_CLIENT_LEADER | cut -d "#" -f2 | cut -c2-20) `dan saya kemudian mencobazenity --attach=$WINDOW_ID --text-info --filename=<filename>
tetapi sayangnya saya masih mendapat peringatan. Sayang sekali, tetapi suatu hari mungkin berguna untuk mengetahui cara mendapatkan id jendela!NULL
. Namun saya tidak dapatmake install
zenity secara lokal (saya tidak dapat menemukan dokumen atau sesuatu tentang cara mengkonfigurasi instal) jadi saya akhirnya menyerah. Harus menggunakan yang kotor2>/dev/null
.Jawaban:
Abaikan itu.
Ini peringatan , bukan kesalahan. Aplikasi berfungsi, hanya saja tidak diberi kode dengan praktik terbaik dalam pikiran, seperti yang terlihat. Anda harus memodifikasi
zenity
kode sumber untuk mengimplementasikan perbaikan yang dijelaskan dalam pertanyaan Anda yang ditautkan dan kemudian mengompilasinya sendiri, tetapi ... tetap berhasil, jadi mengapa Anda harus repot-repot?Jika Anda hanya ingin menghilangkan output di terminal Anda, Anda bisa dengan mudah mengarahkan ulang STDERR (aliran kesalahan standar, di mana peringatan akan dicetak) ke
/dev/null
(perangkat karakter virtual yang menelan data) dengan menambahkan2> /dev/null
ke akhir perintah, seperti ini:sumber
2> /dev/null
tidak memiliki efek yang diinginkan, peringatan itu masih berlanjut. Saya tahu ini hanya gangguan, tetapi saya ingin sekali dapat menekan peringatan seperti ini.Tampaknya para devt Gtk memutuskan untuk menambahkan peringatan ini yang memengaruhi sejumlah paket. Kita hanya harus menunggu dev Zenity untuk mengejar ketinggalan dan memperbaiki Zenity.
Dengan bash shell (ini bukan yang sesuai dengan POSIX), relatif mudah untuk menekan pesan kesalahan tertentu sambil mengizinkan pesan lain melalui stderr:
Ini tidak mengganggu stdout, sehingga dapat disalurkan atau digunakan dalam substitusi perintah seperti biasa:
sumber
zenity ... 2>/dev/null
bekerja untukku. Satu-satunya masalah yang saya lihat adalah bahwa pesan kesalahan (penting) lainnya juga akan ditekan sehingga lebih baik membuat kesalahan pengambilan entah bagaimana dalam kode Andasumber
Membangun berdasarkan jawaban Dave Rove , jika Anda memiliki banyak permintaan, Anda dapat membersihkan ini dengan membuat fungsi seperti
lalu gunakan seperti ini:
Ini membuat beberapa hal lebih mudah dibaca ketika digabungkan dengan logika lain:
sumber