برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی

برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی و

برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی

برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی و

داده هایی در مورد برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی و

تبلیغات
آخرین نظرات

۳۲ مطلب با موضوع «لینوکس» ثبت شده است

اموزش gtk

ShahBaz | يكشنبه, ۱۴ شهریور ۱۳۹۵، ۱۲:۳۰ ب.ظ
اموزش برنامه نویسی با gtk

کار رو با یک مثال ساده شروع می کنم در این مثال مطالبی مطرح میشه که در بیشتر برنامه ها یی که بعدا می نویسیم استفاده می شه
مثال اول
کد پی‌اچ‌پی:
#include <gtk/gtk.h>
int main(int argc char *argv[] ) {
GtkWidget  *window ;
gtk_init( &argc , &argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_show(window);
gtk_main();
Return 
0;



خط اول : همه برنامه هایی که از gtk استفاده می کنند شامل این خط می شوند که این سرفایل شامل تعریف متغییر ها توابع و ساختار ها و غیره می شه و باید در برنامه های خود انرا بگنجانیم .
خط چهارم : در این خط ما تابع gtk_init را فراخوانی کردیم که این خط هم در تمام برنامه ها استفاده می شه و برخی چیزها رو برای ما تنظیم می کنه مثل مقدار پایه و رنگ که نتیجه فراخوانی این تابع است و بطور کلی این کتابخانه رو بصورت خودکار برای ما مقداردهی اولیه می کنه.
خط پنجم و ششم : در این خطوط ما یک پنجره برای برنامه خود ایجاد کردیم که درصورتی که ما سایز انرا مشخص نکنیم بصورت پیش فرض 200 در 200 در نظر گرفته می شود زیاد نگران نحوه ایجادش و کدهاش نباشید به زودی همه انها را خواهید اموخت.
خط ششم : می گوید که ما widget خود را تنظیم کردیم و ویژگی های لازم را تنظیم کردیم و حال می خواهیم که انرا برای ما نشان دهد (widget یک شی هست مثلا یک دکمه یا یک تکست باکس)
خط هفتم : تابع gtk_main را فراخوانی می کنیم که ان نیز در تمام برنامه هایی که از gtk استفاده می کنیم باید در کد های ما قرار داشته باشه . وقتی برنامه به این نقطه می رسد gtk به حالت خواب میره و منتظر رویداد x می شه ( مثل کلیک موس یا فشار یک دکمه ) در واقع یک حلقه رو ایجاد می کنه که مدام اجرا میشه تا اینکه یک رویداد اتفاق بیفته و در برابر ان عکس العمل انجام بده .
انچه که از این مثال فهمیدیم
قالب کلی یک برنامه که از gtk استفاده می کند در اکثر موارد به شکل زیر می باشد

کد پی‌اچ‌پی:
#include <gtk/gtk.h>
int main(int argcchar &argv[]){
gtk_init(&argc,&argv);
 
gtk_main();
return 
0;


برای کامپایل برنامه در لینوکس می تونید از دستور زیر استفاده کنید
g++ `pkg-config --cflags --libs gtk+-2.0` -o name.cpp nameout
که بجای name.cpp مسیر جایی رو که در انجا برنامه رو ذخیره کردید می دید و nameout هم نامی هست که می خواهید برنامه کامپایل شده داشته باشه.
اگه تو ویندوز کد می نویسید می تونید دستوراتی که تو مقاله ای که تو سایت نوشتم بخونید
مقاله نحوه نصب gtk در ویندوز و پیکربندی ان برای کامپایل برنامه ها با ویژوال سی پلاس پلاس

اگه همه کار ها رو درست انجام داده باشید باید زمانی که برنامه خود را اجرا می کنید مثل شکل پایین باشه

[عکس: 11.png]

منبع

مثال دوم
در مثال قبل شما ساختار کلی یک برنامه رو که از gtk استفاده می کرد دیدید در این مثال من می خوام نحوه ایجاد یک widget رو به شما اموزش بدم
Widget چیه گفتم که منظور از widget یک شی هست و gtk در واقع کتابخانه ای که شامل یک سری widget ها مثل label یا button و ... هست که ما از اونها استفاده می کنیم برای ایجاد یک رابط گرافیکی و اما مثال
کد پی‌اچ‌پی:
#include <gtk/gtk.h>
int main(int argc char *argv[]){
gtk_init(&argc,&argv);
GtkWidget  *window;
GtkWidget  *button;
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
button=gtk_button_new();
gtk_container_add(GTK_CONTAINER(window),button);
gtk_widget_show(window);
gtk_widget_show(button);
gtk_main();
return 
0;


با اجرای این برنامه شما یک پنجره و دکمه که در اون وجود داره رو می بینید

حال توضیح کد بالا : برخی از قسمت ها باید برای شما اشنا باشه چون اونها رو در مثال اول هم بکار بردیم و گفتیم که توابعی مثل gtk_init و gtk_main توابعی هستن که در تمام برنامه ها باید وجود داشته باشند حال توضیح قسمت های دیگر کد
ما برای ایجاد هر یکwidget ( در مثال بالا یک دکمه ) سه خط کد باید به برنامه خود اضافه کنیم ان سه خط اینها هستن
کد پی‌اچ‌پی:
GtkWidget name ;
name=gtk_namebase_new();
gtk_widget_show(name); 

این سه خط رو ما در اکثر موارد برای ایجاد widget دلخواه خود به کد هامون اضافه می کنیم
در خط اول ما یک اشاره گر از نوع gtk تعریف می کنیم که name در واقع نام اون اشاره گر هست در خط دوم ما برای اشاره گر خود تخصیص حافظه می کنیم و با استفاده از تابعی که در بالا اشاره شد اون widget که می خواهیم می سازیم در خط بعدش هم می گیم اون widget که ساختیم به ما نشون بده همین!! در کد بالا namebase اون نوع widget هست که می خواهیم بسازیم البته در مورد تابع gtk_namebase_new() باید گفت که این تابع یک الگوی عام هست و برای برخی widget ها کمی شکلش فرق می کنه که برای اطلاعات بیشتر می تونید به راهنمای کتابخانه مراجعه کنید یا اینکه صبر کنید تا من در پست های بعدی بگم خوب برای دست گرمی ما برای ایجاد یک label از کدهای زیر استفاده می کنیم
کد پی‌اچ‌پی:
GtkWidget Label1 ;
Label1=gtk_label_new();
gtk_widget_show(Label1); 

بر طبق مطالبی که در بالا ذکر کردم ما در مثال دوم 2 widget ساختیم یکی پنجره و یک دکمه که کدهاشون این بود
کد پی‌اچ‌پی:
GtkWidget  *button;
button=gtk_button_new();
gtk_widget_show(button); 

اگه بخوایم بر روی دکمه ای که ایجاد می کنیم مطلبی نوشته باشد می تونیم از تابع gtk_button_new_with_label(“string”) استفاده کنیم که بر این اساس کد های بالا بدین شکل میشه
کد پی‌اچ‌پی:
GtkWidget  *button;
button=gtk_button_new_with_label(“Welcome”);
gtk_widget_show(button); 


که یک دکمه ایجاد میکنه که روی ان عبارت Welcome نوشته شده . نگران این توابع نباشید من تک تک این widget ها رو با ویژگی ها و توابع انها بیان خواهم کرد من فقط می خوام شما شکل کلی کدها رو یاد بگیرید اینطوری کار راحت تر میشه .
خوب widget دیگر ما یک پنجره بود
کد پی‌اچ‌پی:
GtkWidget  *window;
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_show(window); 

که کد های بالا برای ایجاد اون بود در مورد پارامتر تابع gtk_window_new() باید بگم که تنها دو مقدار براش وجود داره عبارت GTK_WINDOW_TOPLEVEL برای ایجاد یک پنجره ساده و عبارت GTK_WINDOW_POPUP برای ایجاد یک پنجره پاپاپ .
خوب از توابع دیگه ای که برای تنظیم پنجره بکار میره می شه به توابع زیر اشاره کرد
کد پی‌اچ‌پی:
gtk_window_set_title(GTK_WINDOW(name),”string”  ); 

که برای تنظیم عنوان پنجره استفاده می شه و name نام اشاره گری هست که به پنجره اشاره می کنه و string هم عنوان پنجره میشه مثلا برای مثال دو میشه این

کد پی‌اچ‌پی:
gtk_window_set_title(GTK_WINDOW(window),”Welcome  ”); 

و با استفاده از تابع زیر هم می تونید خاصیت resize پنجره رو فعال یا غیر فعال کنید
کد پی‌اچ‌پی:
gtk_window_set_resizable(GTK_WINDOW(name),Boolean)  ; 

که مثلا اگه بخوایم در پنجره مثال دوم ما خاصیت resize غیر فعال بشه کد ما میشه این
کد پی‌اچ‌پی:
gtk_window_set_resizable(GTK_WINDOW(window),FALSE)  ; 

برای تعیین اندازه پنجره هم می تونید از تابع زیر استفاده کنید
کد پی‌اچ‌پی:
gtk_widget_set_size_request(GTK_WIDGET(name),width  ,hight); 

خوب برگردیم به مثال دوم در اونجا یه خط کد هست که هنوز توضیح ندادم
کد پی‌اچ‌پی:
gtk_container_add(GTK_CONTAINER(window),button); 

خوب با استفاده از این تابع به gtk می گیم که دکمه ما رو در درون پنجره قرار بده . این تابع تنها می تونه یک widget رو در پنجره قرار بده و اگه شما دوتا دکمه داشته باشید این تابع دیگه جواب گو نیست و باید از روشی به نام بسته بندی کردن widget استفاده کنیم که در پست بعدی به بیان اون می پردازم .

منبع

وقتی که ما یک برنامه کاربردی ایجاد می کنیم عمدتا بیش از یک widget رو در پنجره خود قرار می دیم .ما در مثال دوم یک دکمه رو در پنجره خود قرار دادیم که این کار رو با استفاده از تابع gtk_container_add() انجام دادیم که کار این تابع این هست که یک widget رو برای ما در پنجره قرار بده ولی حال اگه بخوایم بیش از یک widget رو در پنجره قرار بدیم باید چکار کنیم ؟ برای این کار ما از روش بسته بندی widget ها استفاده می کنیم . بسته بندی widget ها رو به دو طریق میشه انجام داد استفاده از جدول یا استفاده از جعبه .
که در این پست روش بسته بندی با استفاده از جدول رو اموزش می دم و روش بسته بندی با استفاده از جعبه ها رو در پست اینده اموزش می دم .
بسته بندی با استفاده از جدول ها
برای استفاده از این روش ابتدا ما یک جدول ایجاد می کنیم بعد هر یک از widget ها رو در خانه های اون قرار می دیم . برای رسم یک جدول از تابع زیر استفاده می کنیم
کد پی‌اچ‌پی:
gtk_table_new(rows columns Boolean); 


که پارامتر اول تعداد سطر های جدول پارامتر دوم تعداد ستون های جدول و پارامتر سوم اگر TRUE باشه جدول خاصیت resize پیدا می کنه و اندازه خونه های جدول برابر با اندازه بزرگترین widget می شه و اگر FALSE باشه دیگه این امکان وجود نخواهد داشت .
نکته ای که اینجا وجود داره نحوه شماره گذاری سطر ها و ستون ها در جدول هست که از صفر شروع می شه مثلا برای یک جدول 2 در 2 شماره سطر و ستون ها بدین شکل خواهد بود
[عکس: 22.bmp]
خوب هون طور که گفته بودم برای ایجاد هر widget به سه خط کد احتیاج داریم الان برای ایجاد یک جدول کدها مون می شه این
کد پی‌اچ‌پی:
GtkWidget  *table1;
table1=gtk_table_new(,,FALSE) ;
gtk_widget_show(table1); 
خوب حالا برای اینکه widget های خودمون رو در خانه های جدول قرار بدیم از تابع زیر استفاده می کنیم
کد پی‌اچ‌پی:
gtk_table_attach_defaults(GTK_TABLE(name) , widget name left_attach right_attach top_attach bottom_attach ) ; 
که به جای name نام جدول به جای widget name هم نام اون widget که می خوام در جدول قرار بدیم و پارامتر های دیگه اون هم مشخصات اون سلولی از جدول هست که می خوایم widgt رو توش قرار بدیم
استفاده از جدول برای قرار دادن widget ها کمی مشکل هست نه از جهت کد بلکه تنظیم مکان قرار گرفتن widget ها در خانه های ان به همین علت من زیاد به اون نمی پردازم فکر کنم در همین حد هم کافی باشه این هم یک مثال از کاربرد اون
کد پی‌اچ‌پی:
#include <gtk/gtk.h>
int main(int argc char *argv[]){
gtk_init(&argc,&argv);
GtkWidget *window ;
GtkWidget *table ;
GtkWidget *button1;
GtkWidget *button2;
windowgtk_window_new(GTK_WINDOW_TOPLEVEL);
table=gtk_table_new(1,2,FALSE);
gtk_container_add(GTK_CONTAINER(window),table);
button1=gtk_button_new_with_label(“BUTTON 1”);
button2=gtk_button_new_with_label(“BUTTON 2”);
gtk_table_attach_defaults(GTK_TABLE(table),button1  ,0,1,0,1);
  
gtk_table_attach_defaults(GTK_TABLE(table),button2  ,1,2,0,1);
 
gtk_widget_show(window);
gtk_widget_show(table);
gtk_widget_show(button1);
gtk_widget_show(button2);
gtk_main();
return 
0;


توجه کنید که شما اول باید با استفاده از تابع gtk_container_add جدول را در پنجره قرار دهید سپس هر یک از دکمه ها را در جدول
در ضمن بجای این چهار خط کد
کد پی‌اچ‌پی:
gtk_widget_show(window);
gtk_widget_show(table);
gtk_widget_show(button1);
gtk_widget_show(button2); 
می تونید از تابع زیر استفاده کنید که همون کار رو انجام میده
کد پی‌اچ‌پی:
gtk_widget_show_all(window);

روش دوم بسته بندی widget ها با استفاده از جعبه ها :
این روش پرکاربردترین روش بسته بندی هست که به دو شکل افقی یا عمودی صورت می گیره که برای قرار دادن اونها از چپ به راست یا برعکسش از جعبه افقی که با تابع gtk_hbox_new() ایجاد میشه و برای قرار دادن اونها در پنجره از بالا به پایین یا برعکسش از جعبه عمودی که با تابع gtk_vbox_new() ایجاد میشه انجام میشه . و برای قرار دادن widget ها در جعبه ها هم از توابع gtk_box_pack_start() برای قرار دادن widget ها از چپ به راست در جعبه افقی و از بالا به پایین در جعبه عمودی یا gtk_box_pack_end() برای قرار دادن widget ها از راست به چپ در جعبه افقی و از پایین به بالا در جعبه عمودی استفاده می کنیم . کار با جعبه ها کمی پیچیده هست و اپشن های فراوانی داره که من سعی می کنم تا اونجایی که خودم فهمیدم و بلدم اینجا بنویسم .
خوب برای ایجاد جعبه افقی از تابع زیر استفاده می کنیم

کد پی‌اچ‌پی:
gtk_hbox_new(Boolean int) ; 


که ارگومان اول بررسی می کنه که ایا سایز هر شی که در اون قرار می گیره یکسان باشه یا نه منظور از سایز در جعبه افقی پهنای هر widget می باشد و ارگومان بعدی میزان فاصله بین دو شی هست که در اون قرار می گیره .
همون طور که گفتم برای ایجاد هر شی نیاز به سه خط کد هست پس شکل کامل کدش میشه این
کد پی‌اچ‌پی:
GtkWidget *hbox ;
hbox=gtk_hbox_new(TRUE 5);
gtk_widget_show(hbox); 

خوب برای ایجاد یک جعبه عمودی هم از تابع زیر استفاده می کنیم
کد پی‌اچ‌پی:
gtk_vbox_new(Boolean int ); 
که ارگومان اول بررسی می کنه که ایا whdget هایی که در اون قرار می گیرند ارتفاع یکسانی داشته باشند یا خیر و ارگومان بعدی هم فاصله بین دو widget رو تنظیم می کنه .

خوب به توابعی می پردازیم که برای قرار دادن اشیا در جعبه ها استفاده می شن من فقط تابع gtk_box_pach_start رو می گم چون رایج تر هست خوب این تابع هم بشکل زیر هست
کد پی‌اچ‌پی:
gtk_box_pack_start (GTK_BOX(name) , widget name Boolean expand Boolean fill int padding ) ; 


ارگومان اول نام جعبه ما ارگومان دوم نام عنصری که می خوایم تو جعبه بزاریم ارگومان سوم می گه که ایا اون عناصر تمام فضای اضافی جعبه رو پر کنن یا نه فضای خالی وجود داشته باشه ( توضیحات بیشتر در مثال ها ) ارگومان چهارم می گه که فضای اضافی به سایز اشیا اختصاص داده بشه (TRUE ) یا به جعبه اختصاص داده شه و در اطراف هر شی پراکنده شود ( FALSE ) این گزینه زمانی کار می کنه که ارگومان سوم به TRUE ست بشه و ارگومان اخر هم یه مقدار فضای خالی در اطراف هر شی ایجاد می کنه . اوه تموم شد!!!!
اگه چیزی نفهمیدید نگران نباشید با شکل و مثال متوجه می شید
[عکس: packbox1.png]
در شکل بالا در نیمه اول ما جعبه های افقی رو ایجاد کردیم با این خصوصیات اول اینکه اشیا دارای سایز یکسان نباشند و دیگه اینکه بینشون فاصله نباشه . gtk_hbox_new(FALSE , 0 )
خوب حالا به کدی که برای قرار دادن هر شی در اون جعبه در ردیف اول استفاده کردیم توجه کنید
کد پی‌اچ‌پی:
gtk_box_pack_start (GTK_BOX(hbox) , buttonFALSEFALSE0) ; 

خوب در این کد ما ارگومان سوم رو False کردیم یعنی گفتیم که فضای اضافی به جعبه اختصاص داده بشه و ارگومان چهارم روهم False کردیم و گفتیم که این فضای خالی باقی مانده برای جعبه باشه .
در ردیف پایین ترش ما از کد زیر استفاده کردیم
کد پی‌اچ‌پی:
gtk_box_pack_start (GTK_BOX(hbox) , buttonTRUEFALSE0) ; 

در این کد ما ارگومان سوم را به TRUE ست کردیم یعنی گفتیم که فضای خالی باقیمانده به اشیا اختصاص داده بشه بدین شکل که فضای خالی باقی مانده جعبه بر تعداد اشیا تقسیم می شه و هر شی در وسط سهم خودش قرار می گیره مشاهده می کنید که در اطراف هر شی یک فضای خالی ایجاد شده .
کد ردیف پایین ترش بدین شکل هست
gtk_box_pack_start (GTK_BOX(hbox) , button, TRUE, TRUE, 0
کد پی‌اچ‌پی:
) ; 

ما ارگومان چهارم رو به TRUE ست کردیم این یعنی چی یعنی اینکه بر طبق ارگومان سوم فضای خالی به شی تخصیص داده شده حالا بر طبق ارگومان چهارم این فضایی که به هر شی تخصیص داده شده جزیی از سایز اون شی بشه که در شکل مشاهده می کنید که دیگه فضای خالی وجود نداره و اندازه اشیا بزرگ تر شده .

خوب در ادامه ما اومدیم یک جعبه ایجاد کردیم با خصوصیات زیر که اشیا سایز یکسانی داشته باشن و بینشون فاصله نباشه . gtk_hbox_new(TRUE , 0)
خوب در ردیف اول برای قرار دادن اشیا در اون کد زیر رو بکار بستیم

کد پی‌اچ‌پی:
gtk_box_pack_start (GTK_BOX(hbox) , buttonTRUEFALSE0) ; 


یعنی این که فضای خالی به اشیا داده بشه ولی به سایز اشیا اضافه نشه همون طور که می بینید در این صورت دیگه اشیا دارای اندازه های یکسانی نمی شن و ارگومان اول جعبه ما از کار میفته .
در ردیف بعدی کد زیر رو بکار بستیم

کد پی‌اچ‌پی:
gtk_box_pack_start (GTK_BOX(hbox) , buttonTRUETRUE0) ; 


یعنی اینکه فضای خالی به اشیا اختصاص داده بشه و فضای اختصاص داده شده جزیی از اندازه اون شی بشه در اینجا چون ارگومان اول جعبه ما به TRUE ست شده این فضا طوری بین اشیا توزیع می شه که همه دارای سایز یکسانی شن .
خوب دیگه فکر کنم در مورد این روش بسته بندی دیگه توضیح کافی باشه . امیدوارم مطلب رو فهمیده باشید !!!

منبع

اموزش gtk قسمت پنجم :
دیدم برای بسته بندی با جعبه مثال نزدم اینم مثال
مثال :
کد پی‌اچ‌پی:
#include <gtk/gtk.h>
int main(int argc char *argv[]){
gtk_init(&argc,&argv);
GtkWidget *window ;
GtkWidget *hbox ;
GtkWidget *button1;
GtkWidget *button2;
windowgtk_window_new(GTK_WINDOW_TOPLEVEL);
hbox=gtk_hbox_new(TRUE 0);
gtk_container_add(GTK_CONTAINER(window),hbox);
button1=gtk_button_new_with_label(“BUTTON 1”);
button2=gtk_button_new_with_label(“BUTTON 2”);
gtk_box_pack_start (GTK_BOX(hbox) , button1TRUETRUE0) ;
gtk_box_pack_start (GTK_BOX(hbox) , button2TRUETRUE0) ;
 
gtk_widget_show(window);
gtk_widget_show(hbox);
gtk_widget_show(button1);
gtk_widget_show(button2);
gtk_main();
return 
0;



حالا برای اینکه نکته ای رو هم گفته باشم این رو از من داشته باشید برای مخفی کردن یک widget در پنجره می تونید به جای استفاده از تابع gtk_widget_show(widget) از تابع gtk_widget_hide(widgt) استفاده کنید .
نکته ای دیگه اینکه وقتی شما دارید راهنمای gtk رو می خونید با انواعی رو به رو می شید مثل gint یا gchar اینها چی هستن اینها همان انواع معروف int یا char هستن که برای افزایش قابلیت حمل پذیری برنامه ها و برای اینکه بر روی انواع توزیع ها با معماری های مختلف قابل اجرا باشند بدین شکل دوباره تعریف شده اند و مال کتابخانه glib هستن که اون کتابخانه رو هم چون زیر مجموعه این gtk هستن در اینده ای نزدیک معرفی می کنم .

منبع
[عکس: www.Mojsazan.com.gif]

رویداد ها
مثال
کد پی‌اچ‌پی:
#include <gtk/gtk.h>
void hello(GtkWidget *widget gpointer data ){
g_print("WELLCOME TO MY PROGRAM");
}
 
int main(int argc char *argv[]){
gtk_init(&argc,&argv);
GtkWidget *window ;
GtkWidget *hbox ;
GtkWidget *button1;
GtkWidget *button2;
windowgtk_window_new(GTK_WINDOW_TOPLEVEL);
hbox=gtk_hbox_new(TRUE 0);
gtk_container_add(GTK_CONTAINER(window),hbox);
button1=gtk_button_new_with_label("BUTTON 1");
button2=gtk_button_new_with_label("BUTTON 2");
gtk_box_pack_start (GTK_BOX(hbox) , button1TRUETRUE0) ;
gtk_box_pack_start (GTK_BOX(hbox) , button2TRUETRUE0) ;
g_signal_connectG_OBJECT(button1) , "clicked" G_CALLBACK(hello),NULL) ;
g_signal_connect_swapped(G_OBJECT(button1),"clicke  d"  ,G_CALLBACK(gtk_widget_show) , G_OBJECT(button2));
gtk_widget_show(window);
gtk_widget_show(hbox);
gtk_widget_show(button1);
 
gtk_main();
return 
0;


قبل از بررسی مثال یه سری مطالب هست که باید گفته شه .
سیگنال و callback
هر دکمه ای که فشار داده میشه هر کلیک و امثال این رویداد ها یک سیگنال ایجاد میشه و تابع ای که به این سیگنال جواب میده یا به عبارتی مخاطب این سیگنال هست می گن callback این توضیح عامیانه و سادش هست .
برای اینکه برای یک widget تولید سیگنال کنیم توابع زیادی وجود داره که پرکاربرد ترین و عام ترین تابع برای این کار تابع زیر می باشد


اول دکمه 1 رو فشار بدید متنی در کنسول چاپ میشه دکمه دو رو فشار بدید از این لحظه به بعد هر چی دکمه یک رو فشار بدید دیگه کار نمی کنه .
کد پی‌اچ‌پی:
#define             g_signal_handlers_disconnect_by_func (object,func,data); 

این هم کار تابع قبلی رو انجام می ده فقط ارگومان هاش فرق داره که ارگومان دوم نام تابعی هست که مخاطب سیگنال ایجاد شده هست مثلا

کد پی‌اچ‌پی:
g_signal_handlers_disconnect_by_func (object hello NULL); 


توابع دیگه ای هم وجود داره که زیاد کاربردی نیستن اونها رو دیگه خودتون برید تو راهنمای کتابخانه ببینید .
اخرین مطلبی که در این مبحث به اون اشاره می کنم اینه

• button_press_event
• button_release_event
• scroll_event
• motion_notify_event
• delete_event
• destroy_event
• expose_event
• key_press_event
• key_release_event
• enter_notify_event
• leave_notify_event
• configure_event
• focus_in_event
• focus_out_event
• map_event
• unmap_event
• property_notify_event
• selection_clear_event
• selection_request_event
• selection_notify_event
• proximity_in_event
• proximity_out_event
• visibility_notify_event
• client_event
• no_expose_event
• window_state_event


اگه تابع callback ما شامل این رویداد ها باشه برای ایجاد سیگنال برای انها از تابع g_signal_connect استفاده می کنیم و شکل تابع callback هم بصورت زیر میشه
کد پی‌اچ‌پی:
gint callback_funcGtkWidget *widgetGdkEvent  *eventgpointer   callback_data ); 


که پارامتر اول نام ان widget هست که براش این سیگنال رو ایجاد کردیم و پارامتر اخر هم اطلاعاتی هست که می خوایم به تابع ارسال کنیم اما پارامتر دوم مقدارش می تونه یکی از موارد زیر باشه این که کدوم به کدوم هست رو وقتی که دارم تک تک widget ها رو بررسی می کنم می گم
GDK_NOTHING
GDK_DELETE
GDK_DESTROY
GDK_EXPOSE
GDK_MOTION_NOTIFY
GDK_BUTTON_PRESS
GDK_2BUTTON_PRESS
GDK_3BUTTON_PRESS
GDK_BUTTON_RELEASE
GDK_KEY_PRESS
GDK_KEY_RELEASE
GDK_ENTER_NOTIFY
GDK_LEAVE_NOTIFY
GDK_FOCUS_CHANGE
GDK_CONFIGURE
GDK_MAP
GDK_UNMAP
GDK_PROPERTY_NOTIFY
GDK_SELECTION_CLEAR
GDK_SELECTION_REQUEST
GDK_SELECTION_NOTIFY
GDK_PROXIMITY_IN
GDK_PROXIMITY_OUT
GDK_DRAG_ENTER
GDK_DRAG_LEAVE
GDK_DRAG_MOTION
GDK_DRAG_STATUS
GDK_DROP_START
GDK_DROP_FINISHED
GDK_CLIENT_EVENT
GDK_VISIBILITY_NOTIFY
GDK_NO_EXPOSE
GDK_SCROLL
GDK_WINDOW_STATE
GDK_SETTING
کد پی‌اچ‌پی:
مثلا برای رویداد button_press_event شکل تابع سیگنال می شه

g_signal_connect 
(G_OBJECT (button), "button_press_event",
                  
G_CALLBACK (button_press_callback), NULL); 


و شکل تابع callback می شه
کد پی‌اچ‌پی:
static gint button_press_callbackGtkWidget      *widget,
                                   
GdkEventButton *event,
                                   
gpointer        data ); 

یکی نیست به من کمک کنه تکی ادم خسته می شه ؟ در ضمن فکر کنم زیاد اینجا gtk طرفدار نداره

منبع

مثال:

کد پی‌اچ‌پی:
#include <gtk/gtk.h>
 
void helloGtkWidget *widget,
            
gpointer   data )
{
    
g_print ("Hello World\n");
}
 
gint delete_eventGtkWidget *widget,
                   
GdkEvent  *event,
           
gpointer   data )
{
   
    
g_print ("delete event occurred\n");
   
    return 
TRUE;
}
 
void destroyGtkWidget *widget,
              
gpointer   data )
{
g_print("destroy event occurred");
    
gtk_main_quit ();
}
 
int mainint   argc,
          
char *argv[] )
{
     
    
GtkWidget *window;
    
GtkWidget *button;
    
gtk_init (&argc, &argv);
    
window gtk_window_new (GTK_WINDOW_TOPLEVEL);
    
g_signal_connect (G_OBJECT (window), "delete_event",
              
G_CALLBACK (delete_event), NULL);
    
g_signal_connect (G_OBJECT (window), "destroy",
              
G_CALLBACK (destroy), NULL);
    
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
    
    
button gtk_button_new_with_label ("Hello World");
     
    
g_signal_connect (G_OBJECT (button), "clicked",
              
G_CALLBACK (hello), NULL);
 
    
g_signal_connect_swapped (G_OBJECT (button), "clicked",
                  
G_CALLBACK (gtk_widget_destroy),
                              
G_OBJECT (window));
     
        
gtk_container_add (GTK_CONTAINER (window), button);
     
    
gtk_widget_show (button);
    
gtk_widget_show (window);
    
gtk_main ();
    return 
0;


خوب این هم یک مثال کامل برای رویداد ها بیشتر قسمت های این مثال برای شما باید اشنا باشه و اما سایر قسمت ها

کد پی‌اچ‌پی:
gtk_widget_destroy(widget); 

این تابع برای حذف یک widget بکار میره ولی اگه widget ما یک پنجره باشه برای اجرای کاملش به یک تابع مثل شکل زیر نیاز داره
کد پی‌اچ‌پی:
void destroyGtkWidget *widget,
              
gpointer   data )
{
    
gtk_main_quit ();


چون تابع ما تنها می تونه اون widget رو حذف کنه ولی نمی تونه حلقه gtk_main رو به پایان برسونه وقتی این تابع اجرای میشه مقداری رو بر می گردونه که بر اساس ان تابع destroy وارد عمل میشه برای امتحان هم که شده شما تابع destroy رو از برنامه حذف کنید مشاهده می کنید که با اجرای برنامه و کلیک دکمه ظاهرا پنچره حذف و برنامه خاتمه می یابد ولی پنجره کنسول هنوز باز هست و اماده دریافت اطلاعات هست علتش هم این هست که ما هنوز از حلقه gtk_main خارج نشدیم از تابع زیر برای خروج از حلقه استفاده می کنیم
کد پی‌اچ‌پی:
gtk_main_quit (); 
خوب تابع دیگه ای که تو برنامه داریم
کد پی‌اچ‌پی:
gint delete_eventGtkWidget *widget,
                   
GdkEvent  *event,
           
gpointer   data )
{
   
    
g_print ("delete event occurred\n");
   
    return 
TRUE;



که چون ما از رویداد delete_event استفاده کردیم به همین علت تابع callback ما به شکل بالا هست و مقدار بازگشتی این تابع TRUE یا FALSE هست که اگه TRUE باشه دیگه تابع destroy اجرا نمی شه اما اگه FALSE باشه موجب اجرای تابع destroy و خروج از برنامه میشه تابع delete_event هنگامی فراخوانی میشه که شما دکمه close برنامه رو فشار بدید توجه داشته باشید که تابع destroy یا زمانی که شما دکمه موجود در برنامه رو فشار بدید و یا زمانی که شما دکمه close برنامه رو فشار بدید اجرا میشه با این مثال قضیه رویداد ها تموم شد هر widget رویداد های خاص خودش رو داره و شما هم می تونید خودتون یک widget یا یک رویداد جدید بسازید که در اینده اون ها رو هم توضیح می دم .

منبع

http://barnamenevis.org/showthread.php?71880-%D8%A7%D9%85%D9%88%D8%B2%D8%B4-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A8%D8%A7-gtk
اموزش جی تی کا

برنامه glad رابط گرافیکی در گنوم
https://glade.gnome.org/

http://anjuta.org/

http://amirkouhkan.ir/%d8%af%d8%a7%d9%86%d9%84%d9%88%d8%af-%da%a9%d8%aa%d8%a7%d8%a8-%d8%a2%d9%85%d9%88%d8%b2%d8%b4-gtk-%d8%a8%d9%87-%d8%b2%d8%a8%d8%a7%d9%86-%d8%a7%d9%86%da%af%d9%84%db%8c%d8%b3%db%8c/#comment-8


  • ShahBaz

.appimage

ShahBaz | جمعه, ۱۲ شهریور ۱۳۹۵، ۰۷:۴۰ ب.ظ

Yes, Linux; the Linux packages is distributed as an .appimage for 32-bit and 64-bit distributions, and should run across all major Linux distributions without any issues. The team currently have no plan to provide a native .deb (or .rpm) installer.


AppImages can be downloaded and run without installation or the need for root rights.

Making it executable

You can make the appImage executable as follows:

chmod a+x exampleName.AppImage

Executing it

You can execute an appImage as follows:

./exampleName.AppImage

http://appimage.org/

  • ShahBaz

کنترل موس در ترمینال لینوکس

ShahBaz | دوشنبه, ۱ شهریور ۱۳۹۵، ۰۴:۳۳ ب.ظ

Xdotool – Mouse

Xdotool – Mouse

The xdotool is a utility used from the terminal or in a script to manually perform keyboard and mouse input (see the Xdotool – Keyboard article). The commands can also be used to make a script of many xdotool commands to create large tasks. Later articles will cover the xdotool ability to control window and desktop manipulation.

The syntax for xdotool depends on the command being used. Let’s start with sending mouse movements to a window by using the ‘mousemove’ command. The syntax is as follows:

mousemove [options] x y

There are five options available for mousemove which are:

· –window window_id – for mouse movement. The window you specify will be the one used as a relative point for movement
· –screen screen_number – specifies the screen number, screen 0 is your first monitor
· –polar – uses polar coordinates by specifying ‘x’ between 0-360 degrees and ‘y’ as the distance from the center. Based off the specified window by its id
· –clearmodifiers – clears all modifiers such as Shift, CTRL and such keyboard keys as well as a mouse button being pressed manually
· –sync – causes the mousemove command to be sent, but the cursor does not move until the mouse is physically moved. Once moved, the cursor will go to the position specified

NOTE: To find the window_id see the previous article: Xdotool – Keyboard.

If I had a text editor open which had the window id of 46137499 and I wished to move the mouse cursor to the upper left corner of the window I would perform the following command:

xdotool mousemove –window 46137499 0 0

If I wanted to move the cursor to the top left corner of the whole screen, I would do the following:

xdotool mousemove 0 0

NOTE: When no window is specified, the desktop is assumed as the window.

If I wished to use polar coordinates up is 0 or 360 degrees, right is 90, down is 180 and left is 270 degrees. The ‘y’ coordinate is the number of pixels from the center of the window. In the following example, the cursor will be placed 45 degrees and 300 pixels from the center of the desktop:

xdotool mousemove –polar 45 300

NOTE: The cursor is placed in the upper right part of the screen. Any pixel value greater than what would cause the cursor to be off the screen will only place the cursor at the edge of the screen.

There exists another mousemove command which restores the cursor back to where it was before you performed the previous mousemove:

mousemove [options] restore

The options are the same as the mousemove, except –window and –polar do not work. The restore command needs to be used in the same xdotool command as follows:

xdotool mousemove 1000 1000 mousemove restore

NOTE: Multiple commands can be chained together in xdotool command as shown. All the commands can be mixed such as keyboard, mouse, window and desktop commands.

The third mousemove command is:

mousemove_relative [options] x y

This command moves the cursor relative to its current position. The options are as follows:

· –polar – uses polar coordinates by specifying ‘x’ between 0-360 degrees and ‘y’ as the distance from the center, based off the specified window by its id
· –clearmodifiers – clears all modifiers such as Shift, CTRL and such keyboard keys as well as a mouse button being pressed manually
· –sync – causes the mousemove command to be sent, but the cursor does not move until the mouse is physically moved. Once moved, the cursor will go to the position specified

Here, we can move the cursor to the center of the screen and then use the relative command to move it down (180 degrees) and a distance of 50 pixels:

xdotool mousemove –polar 0 0 mousemove_relative –polar 180 50

Another mouse command is the ‘click’ command. Here, we can cause the cursor to perform a mouse click as if the user did physically click a button on the mouse. The syntax is:

click [options] button

The options are as follows:

· –window window_id – for mouse movement, the window you specify will be the one used as a relative point for movement
· –clearmodifiers – clears all modifiers such as Shift, CTRL and such keyboard keys as well as a mouse button being pressed manually
· –repeat – specifies the number of times to click. The default is one which is a single click, specify 2 for a double click
· –delay milliseconds – the number of milliseconds to delay between clicks. The option is only used when the repeat option is used with a value greater than 1

The buttons are numeric from left to right on the mouse or the opposite way if it is as left-handed mouse. For a right-handed mouse, button 1 is the far leftmost, the center button is button 2 if there is one, and the right button would either be 2 or 3 depending if a middle button existed.

NOTE: With some systems, button 4 can be for the middle button up and 5 for the middle button down.

For example, let us use a text editor with a window id of 46137499. We will move the cursor to the top left corner of the window and left click to select it (focus). The cursor is then moved down 10 pixels and right 100 pixels relative to the current position. At this point we will cause the wheel to scroll down 10 times:

xdotool mousemove –window 46137499 0 0 click 1 mousemove_relative 10 110 click –repeat 10 5

The following two commands are similar and work together. The commands are:

mousedown [options] button
mouseup [options] button

Here it is possible to perform drag-and-drop procedures on systems which support it. Place the cursor in a position. Use the mousedown command with the proper button, move the mouse again and use the mouseup command to drop what has been dragged.

For example, let us click on the text editor window and select it with the left mouse button. The mousedown command is used to be able to drag it. The mouse is moved to the desktop coordinates of 10 10. Now the mouseup command is given to drop the window.

xdotool mousemove –window 46137499 0 0 click 1; xdotool mousedown 1; xdotool mousemove 10 10; xdotool mouseup 1

NOTE: In this case, chaining the commands does not work and each command must be seprarate. Chained commands must be experimented with before using in a script.

The next command is the ‘getmouselocation’ which is shown in Figure 1. Here you can see the Terminal executing the ‘getmouselocation’ command while the mouse is on the text editor window. The output for get mouse location is: x:1170 y:19 screen:0 window:46137499.

NOTE: This is another way to get the window id.

xDoTool - Mouse Figure 1.jpg
FIGURE 1

The getmouselocation has no input, but can accept the –shell option. The –shell option places the four location items in a column rather than a row. The items can be used in a shell script to provide information for variables to use in the scripts.

The next command is the ‘behave_screen_edge’. The syntax is as follows:

behave_screen_edge [options] WHERE COMMAND

This command allows you to specify an edge of a screen which will cause an action to be performed when the mouse hits the specified edge. The command seems to work best when the current window is maximized or touches the edge of the screen that is the “hot spot”.

The options are as follows:

· delay milliseconds – specifies the number of milliseconds which the cursor must be at the WHERE to trigger event
· quiesce milliseconds – delay before next trigger can occur (default 0)

The WHERE options are as follows:

· left
· top-left
· top
· top-right
· right
· bottom-left
· bottom
· bottom-right

A simple command is to execute the gedit text editor command when the cursor touches the left side of the screen:

xdotool behave_screen_edge –quiesce 750 left exec gedit

Try a few of these and my next article will cover the Window commands.

This entry passed through the Full-Text RSS service — if this is your content and you’re reading it on someone else’s site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers.

Linux.org

  • ShahBaz

استفاده از تور در لینوکس

ShahBaz | دوشنبه, ۴ مرداد ۱۳۹۵، ۰۲:۲۶ ب.ظ

آموزش استفاده از تور در لینوکس

در این تاپیک قصد دارم تور رو به دوستان تازه کار به روش خودم آموزش بدم.
Ubuntu 14.04 LTS Unity
tor-browser-linux64-3.6.5_en-US.tar.xz


گام 1:
در مرحله اول نیازه که تور رو دانلود کنیم و برای این کار باید از سایت خودش برای دانلود نسخه گنو/لینوکسی اقدام کنیم.

https://www.torproject.org/download/download.html.en

گام 2:
بعد از دانلود فایل؛ روی اون راست کلیک کنید و روی گزینه Exract Here کلیک کنید تا فایل ما از حالت فشرده در بیاد.
گام 3:
سپس به داخل فولدر ایجاد شده رفته و روی start-tor-browser راست کلیک میکنیم و Properties را میزنیم و سپس به تب بالایی Permissions رفته و تیک Exicute رو فعال میکنیم و در آخر Close را میزنیم.
گام 4:
در بالای همان پنجره کنار ضربدر روی Edit کلیک کرده و Preferences را میزنیم. روی تب Behavior کلیک کرده و در قسمت Excutbable Text Files تیک Ask each Time را فعال میکنیم.
و سپس Close را میزنیم.
گام 5:
روی start-tor-browser دابل کلیک کرده و Run را انتخاب میکنیم. بعد از باز شدن برنامه Connect میکنیم. در بار اول ممکن است کمی طول بکشد ولی بعد از چند بار استفاده سریعتر به سرور خود وصل میشود و در مواقعی که تور ف-ی-ل-ت-ر شده باشد میتوانید با Configure امتحان کنید و در جواب سوال ها به ترتیب No بعد Yes بعد Yes و سپس obfs3 را انتخاب و connect میکنیم. بعد از وصل شدن به سرور مرورگر خود تور باز میشود و میتوانید از آن استفاده کنید ولی به دلایلی تور از Flash و Addons پشتیبانی نمیکند پس برای این مشکل تا ادامه آموزش با ما باشید.

گام 6:
در مرورگر باز شده به مسیر زیر رفته
Edit=> Preferences=> Advanced=> Network=> Setting
همان طور که میبینید در قسمت Manual Proxy Configurations پروکسی SOCKS Host روی

IP: 127.0.0.1::9150

تنظیم شده است. شما میتوانید این IP را در مرورگر های دیگر مثل FireFox به همین آدرس تنظیم کنید.
اگر خواستید میتوانید کل سیستم را از تونل رد کنید و راحت به گشت و گذار بپردازید؛ به روش زیر عمل کنید:
گام 7:
در سیستم خود به قسمت زیر بروید:
System Settings=> Network=> Network proxy
در این قسمت Method را روی Manual قرار دهید و Socks Host را تنظیم کنید.این IP باید با IP ای که بر روی مرورگر تور بود یکی باشد و در اینجا

127.0.0.1:9150

است. سپس روی Apply system wide کلیک کرده و رمز خود را وارد کنید و اینتر را بزنید:
به دنیای دیجیتال خوش آمدید

تنها بدی Apply system wide اینه که نمیشه در Terminal با دانلود منیجر Wget و aria2c و... دانلود کرد.

برای عبور دادن ترمینال از شبکه‌ی تور :

sudo apt-get installl proxychains

بعد از نصب :

sudo nano /etc/proxychains.conf

و باید

socks5  127.0.0.1 9050

رو به آخرش اضافه کنید

حالا مثلا برای دانلود :

proxychains wget ...

http://forum.ubuntu.ir/index.php/topic,99912.15.html

http://ubuntuguide.org/wiki/Tor#Privoxy

Privoxy

  • I use the Privoxy proxy to tunnel http traffic through Tor. Install the Privoxy http proxy:
sudo apt-get install privoxy
  • Applications can be set to send their http traffic to Privoxy over port 8118; Privoxy will then in turn forward the http traffic to Tor over port 9050. (Use an IP address other than 127.0.0.1 if Privoxy and/or Tor are not on the local machine. Use localhost instead of 127.0.0.1 if using IPv6 addressing on your systems).

Note: For some older versions of Privoxy, users have reported better success designating the address of the host computer as 127.0.0.1 instead of localhost in the configuration settings.

  • Edit configuration files.
  • In the configuration file Privoxy is configured by default to listen on port 127.0.0.1:8118. See Firewall considerations. Edit the Privoxy configuration file (use the gedit text editor instead of kate if using Ubuntu instead of Kubuntu):
sudo kate /etc/privoxy/config
Add the lines
forward-socks5 / 127.0.0.1:9050 .
forward-socks4a / 127.0.0.1:9050 .

Note: socks5 allows more authentication choices, UDP for external DNS resolution, and accommodates IPv6. (By including both lines, socks4a is used as a fallback if a program does not support socks5.)

  • Restart Privoxy:
sudo /etc/init.d/privoxy restart
or
sudo service privoxy restart

 =======================================

روش دوم:

export http_proxy=http://110.77.141.82:3128/
export https_proxy=http://110.77.141.82:3128/

unset http_proxy;
unset ftp_proxy;

================================

  • ShahBaz

تغییر تم ایکلیپس

ShahBaz | شنبه, ۲ مرداد ۱۳۹۵، ۰۷:۱۸ ب.ظ

windows-preferences-appearance-

theme

dark

============================

یا

https://rogerdudler.github.io/eclipse-ui-themes/

Installation

Download the ZIP package and extract it into your eclipse dropins folder:

https://github.com/downloads/rogerdudler/eclipse-ui-themes/com.github.eclipsecolortheme.themes_1.0.0.201207121019.zip

Restart Eclipse and go to Preferences > General > Appearance and choose Dark Juno

=================================

سلام
اوبونتو که ایران رو تحریم نکرده.به نظر میاد ایکلیپس داره جیگول بازی درمیاره (تحریم کرده).
هدف من استفاده از یک تم زمینه مشکی بود. تم زمینه مشکی همراه ایکلیپس هست اما به صورت پیشفرض نیست.
برای فعال کردن اون به صورت زیر عمل میکنیم:
1- منوی windows 
2-preferences
3-appearance
4-قسمت theme
5- انتخاب تم dark
ضمنا میتوانید از قسمت color and font theme رنگ و فونت تم رو هم عوض کنید.

غیر از این تم های پیش فرض میتونید از تم هایی که در نت به اشتراک گذاشته شده اند نیز استفاده کنید مثل:
https://rogerdudler.github.io/eclipse-ui-themes/
این تم زمینه مشکی هست.
بعد از دانلود و اکسترکت پوشه باید اون رو به پوشه dropins ایکلیپس منتقل کنید. پوشه ذکر شده در کامپیوتر من در مسیر

/home/elinux/opt/eclipse/dropins

هست.
بعد از انتقال پوشه ایکلیپس رو باز کنید و از مسیر زیر اقدام به فعال کردن تم کنید.

Preferences > General > Appearance and choose Dark Juno


*من زیاد از این تم ها خوشم نیومد و تصمیم گرفتم همون تم پیش فرض رو فعال کنم. فقط اندازه فونت ها رو بزرگتر کردم. به نظرم تم moonrise ui theme که در مارکت ایکلیپس معرفی شده بهتر از این تم ها باشه ولی تا حالا که نتونستم اون رو نصب کنم.

ضمنا برای نصب افزونه ها هم اگر به صورت افلاین تونستید اونها رو از سایت های دیگه دانلود کنید. کافی هست از مسیر

help / install new softeare

دکمه add
و سپس در پنجره جدید دکمه local رو بزنید و مسیر افزونه رو بدید.

در نهایت من هنوز هم نمیتونم به صورت مستقیم از داخل خود برنامه ایکلیپس افزونه ها و تم ها رو دانلود و نصب کنم. ممنون میشم یکی بیاد راه حلش رو کامل توضیح بده.
من در حال حاضر فقط تونستم مرورگر تور رو راه بندازم.
 نمیدونم چطوری باید کل ترافیک سیستم یا برنامه ایکلیپس رو از تور رد کنم.

  • ShahBaz

تنظیم پراکسی در اوبونتو

ShahBaz | شنبه, ۲ مرداد ۱۳۹۵، ۰۵:۴۲ ب.ظ

You need to specify this proxies and apply them system wide. Just collect the IP and Ports for your HTTP and HTTPS proxies and do this with the system proxy setting GUI. Search for Network Proxy in dash.

Try user_name:password@Proxy_IP for the authentication. This seems to be the way to configure it in the configuration file. source

Ubuntu Main

Search the dash Initial view Proxy settings Input proxies here user:password@ip

Mate IN mate there's a checkbox for this if you click on details System-> Preferences-> Internet and Network-> Network Proxy enter image description here

  • ShahBaz

نصب فلش پلیر در اوبونتو

ShahBaz | سه شنبه, ۲۲ تیر ۱۳۹۵، ۰۷:۵۹ ق.ظ
نصب فلش پلیر

نصب فلش پلیر در مرورگر فایرفاکس

همانطور که می دانید مرورگر کروم از پلاگین فلش پلیر به‌ صورت داخلی و تحت نام Pepper Flash پشتیبانی می‌کند که از آخرین نسخه‌ی Flash در آن مرورگر می‌توان استفاده کرد. اما از Flash Player نسخه‌ی ۱۱ دیگر نسخه‌ی جدیدی برای گنو/لینوکس توسط Adobe ارائه نشد؛ با این‌ وجود نسخه‌های جدیدی با رفع باگ‌های امنیتی منتشر می‌شود. برای کسانی که مایل به استفاده از جدیدترین نسخه‌ی Flash در مرورگر Firefox هستند، می توانند از ابزار Fresh Player Plugin بهره ببرند که با استفاده از Pepper Flash آن را به‌عنوان پلاگینی جداگانه به Firefox آورده است.

 

نصب فلش پلیر

 

 

نحوه‌ی راه اندازی و کار با آن نیز بسیار ساده است و کار به این شکل است که محیط Firefox را برای اجرای پلاگین فلش Pepper بهبود می‌بخشد. این Plug-in بر روی مرورگرهای با پشتیبانی از NPAPI کار می‌کند.

 

نصب فلش پلیر در اوبونتو:

برای نصب آن در اوبونتو می‌توانید از PPA زیر استفاده کنید:

sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install freshplayerplugin

 

نصب فلش پلیر در آرچ:

برای نصب در آرچ از طریق AUR دستور زیر را اجرا کنید:

yaourt -S freshplayerplugin

نکته قابل توجه : اینکه برای نصب و اجرا در این قسمت نیاز است که Pepper Flash کروم برای کرومیوم نصب باشد .

  • ShahBaz

7 جایگزین نوت پد ++ در لینوکس

ShahBaz | دوشنبه, ۲۱ تیر ۱۳۹۵، ۱۰:۳۳ ب.ظ

Notepadqq

Notepadqq best alternative to Notepad++ in Linux

The first one on the list is Notepadqq and the reasons are obvious. Notepadqq is exact replica of Notepad++, at least in terms of looks. It is free and open source. In Ubuntu and Linux Mint, you can install Notepadqq using the its official PPA. Open a terminal and use the following command:

sudo add-apt-repository ppa:notepadqq-team/notepadqq
sudo apt-get update
sudo apt-get install notepadqq

You can get the source code for other Linux distributions:

Get Notepadqq Source Code

SciTE

SciTE Notepad++ alternative

SciTE is a cross platform, open source text editor that comes with a number of plugins/add-ons. GUI may not look as good as the next generation text editors such as Atom but it has features enough to make you use it. It has been in the Linux world for quite sometime and has a fan following of its own.

Suggested Read  Ten Blogs Every Ubuntu User Must Follow

Most of the Linux distributions have SciTE included in their repository. In Ubuntu and Linux Mint, you can install it using the command below:

sudo apt-get install scite

For other Linux distributions, you can get the source code here:

Get SciTE Source Code

Geany

geany text editor ubuntu

Alright! Geany is not merely a text editor, it is (almost) an IDE. A free and open source product, Geany is available for all desktop platforms such as Windows, Linux, OS X, BSD etc. A quick list of features are as following:

  • Syntax highlighting
  • Code folding
  • Symbol name auto-completion
  • Construct completion
  • Auto closing of XML and HTML tags
  • Many supported filetypes including C, Java, PHP, HTML, Python, Perl etc
  • Code navigation
  • Compile and execute your code
  • Project management
  • Plugins

Like SciTE, Geany too is available in default repository of major Linux distributions. In Ubuntu and Linux Mint, you can install it using the following command:

sudo apt-get install geany scite

You can get the source code for Geany from the link below:

Get Geany Source Code

Sublime Text

Sublime Text editor

Sublime Text is perhaps one of the few non-free and non-open source products that are widely popular in Linux world. Despite of opaque and slow development, Sublime Text has been the preferred text editor for programmers for a long time. Feature rich, extremely cool looks and tons of plugins make Sublime Text a hot favorite for many. Its features can be summarized as following:

  • Goto Anything
  • Multiple Selections
  • Command Palette
  • Distraction Free Mode
  • Split Editing
  • Instant Project Switch
  • Plugins
  • Customization

Current stable version Sublime Text 2 can be easily installed using this unofficial PPA in Ubuntu and Linux Mint:

sudo add-apt-repository ppa:webupd8team/sublime-text-2
sudo apt-get update
sudo apt-get install sublime-text

Lime Text

LimeText editor Linux

The name might give it away. Lime Text is actually related to Sublime Text. It is a free and open source clone of Sublime Text. Frustrated with slow development with hardly any insights on the upcoming Sublime Text 3 (it’s in beta for nearly three years now), Frederic decided to take the matter in his own code and thus Lime Text was born. Almost identical in looks, Lime Text also mimics Sublime Text in terms of feature.

Suggested Read  New Features In Ubuntu 16.04

You can get the source code of Lime Text from the link below:

Get Lime Text Source Code

Kate

Kate Text Editor

KDE users must be aware of Kate which is the default text editor in KDE desktop environment. Kate is a powerful and feature rich text editor and was declared the best text editor for Linux by Life Hacker few years back. A quick glance at its feature is as following:

  • MDI, window splitting, window tabbing
  • Spell checking
  • Shell integration
  • Syntax highlighting and bracket matching
  • Regular expression support
  • Code and text folding
  • Infinite undo/redo support
  • Block selection mode
  • Auto indentation
  • Auto completion
  • Plugin support
  • Customizable shortcuts

In Ubuntu and Linux Mint, you can install Kate using the following command:

sudo apt-get install kate

It should be in the repositories of other Linux distributions. You can also download the source code from the link below:

Get Kate Source Code

Atom

Atom Text Editor GUI

Atom is the latest sensation in programming world. A cross platform, open source text editor from GitHub, Atom has just seen the first stable release but it already has over 300,000 monthly active users. Termed as the “hackable text editor for 21st century”, Atom has a lot of interesting new features apart from an uber cool GUI. You can install Atom in Ubuntu or Fedora by downloading the respective binaries. You can also get its source code.

Atom .deb Atom .rpm Atom Source Code

Which is the best?

  • ShahBaz