ورود

View Full Version : سوال: ایجاد پلاگین برای اکلیپس !؟



dasssnj
دوشنبه 26 آبان 1393, 15:22 عصر
سلام دوستان.

من کیبوردم چند تا از کاراکتر هایی که توی برنامه نویسی لازم دارم نداره و مجبورم با نگه داشتن کلید ALT و نوشتن کد اون کاراکتر ، تایپش کنم . می خوام یه پلاگین اکلیپس بنویسم که برام این کار را بکنه . یعنی یه دکمه به تولبار یا هر جای دیگه ای از اکلیپس اضافه کنه و با فشردن اون ، کاراکتر مورد نظر تایپ بشه . یا با فشردن چند کلید ترکیبی بشه این کار را کرد .

کسی بلده که چطور میشه در پلاگین به ادیتور اکلیپس دسترسی داشت ؟
یا اینکه همچین پلاگینی وجود داره که نخوام خودم بنویسمش ؟


(توی گوگل سرچ شده و سایت های انگلیسی هم مشاهده شده . از دادن لینک سرچ گوگل خودداری کنید:لبخند:)

محمد فدوی
سه شنبه 27 آبان 1393, 20:21 عصر
سلام. در این مورد شاید نوشتن یه MACRO هم بهت کمک کنه. البته بهرحال نتیجه ش بازم میشه یه سری کلید ترکیبی! که خودت میگی با فشردن ALT میتونی اون کاراکترهارو بنویسی.
برای Eclipse پلاگین های مشابه Character Map هم هست که بازم به نظر من سرعت تایپ رو کاهش میده نسبت به کلیدهای ترکیبی صفحه کلید.

بهرحال دقیقا چیزی که شما میخوای رو من توی هیچ پلاگینی ندیدم. با یکم مطالعه میتونی طریقه ی نوشتن پلاگین برای Eclipse رو یاد بگیری. اما من بعید میدونم اضافه کردن یه دکمه به نوار ابزار مثلا برای کاراکتر نقل قول دوگانه (Double Quotation) سریعتر از استفاده از ALT با یک کلید دیگه باشه. شاید اگه خیلی کار گیره, کیبوردهایی که تخصصا برای تایپیستا طراحی میشه به دردت بخوره.

dasssnj
چهارشنبه 28 آبان 1393, 05:25 صبح
نه نگه داشتن ALT هم سخته . مثلا برای اسلش باید ALT را نگه دارم و عدد 92 را تایپ کنم . اگه این ، یه کلید ترکیبی ساده تر بشه بهتره .
نمیشه برنامه ای خودم با جاوا بنویسم که توی پس زمینه فعال باشه و با مثلا فشردن ALT+F1 تایپ شدن این کاراکتر اسلش را شبیه سازی کنه ؟

vahid-p
چهارشنبه 28 آبان 1393, 22:32 عصر
نمیشه برنامه ای خودم با جاوا بنویسم که توی پس زمینه فعال باشه و با مثلا فشردن ALT+F1 تایپ شدن این کاراکتر اسلش را شبیه سازی کنه ؟
کار نشد نداره.
به نظرم تصمیم به انجامش بگیری، از اونجایی که زیاد سخت به نظر نمیاد، میشه انجامش داد.

اگر موافق باشی، خود من هم دوست دارم همکاری کنم، فقط موندم قول بدم، بعد این درسا نذاره وقت بذارم. ( والا چیه این درسا. اینا به درد ارشد و دکترا میخوره، مهندس باید بتونه یه محصولی رو تولید کنه )
پیشنهاد من اینه یک تاپیک ایجاد کنی و هر چی میدونیم و نوشتیم رو اشتراک بذاریم و حتما در جهت جلو بردن پروژه باشه. با عنوان مثلا "پروژه ساخت پلاگین ... برای اکلیپس". ولی خب ممکنه زیاد زمان ببره به خاطر اینکه تا یکی بنویسه، یکی بخونه، بعد وقت بشه تغییری ایجاد بشه و ادامه داده بشه. ولی اگر به سرانجام برسه، خیلی ارزش داره. هم پلاگین نوشتن ( که شخصا خیلی دوست دارم یاد بگیرم ) رو یاد میگیریم و هم یه کاری انجام دادیم که میشه ارائه کرد ( بگو هیچکی هم استفاده نکنه در اولین کار ). همچنین توسعه دادن رو هم یاد میگیریم، و همیشه دنبال نوشتن یک پروژه ( اکثرا تکراری ) از صفر نخواهیم بود.

فقط اولش باید از یکی از بچه های باتجربه بپرسیم، مقیاس کار چیه و از طریق یک تاپیک شدنیه یا نه، با دید بازتری وارد بشیم.

dasssnj
پنج شنبه 29 آبان 1393, 05:43 صبح
بهتره یه تاپیک داشته باشیم به عنوان " برنامه های اپن سورس ما " و هر کس هر چی ساخته با سورس بزاره . چون دیدن سورس خیلی به یادگیری کمک می کنه .

اون تاپیکی هم که گفتی مشکلی نیست ، اما خودت فکر می کنی کسی همکاری کنه ؟ به هرحال من موافقم ، خودت پروژه را شروع کن ، من تا آخرین توانم به جلو بردنش کمک می کنم .:تشویق:

محمد فدوی
پنج شنبه 29 آبان 1393, 15:26 عصر
برای اینکار حتما باید از APIهای ویندوز استفاده کنی تا کامپوننت فکوس شده رو پیدا کنی و کاراکتر مورد نظر رو بش اضافه کنی. پس حتما به JNI / JNA نیاز داری. ولی به نظرم برنامه از پیش نوشته شده با این هدف وجود داشته باشه.

vahid-p
پنج شنبه 29 آبان 1393, 16:26 عصر
برای اینکار حتما باید از APIهای ویندوز استفاده کنی تا کامپوننت فکوس شده رو پیدا کنی و کاراکتر مورد نظر رو بش اضافه کنی. پس حتما به JNI / JNA نیاز داری. ولی به نظرم برنامه از پیش نوشته شده با این هدف وجود داشته باشه.




مگه اکلیپس از کامپوننت های جاوا استفاده نمیکنه؟ پس چطور نمیتونیم از این طریق کامپوننت فکوس شده رو با توابع خود جاوا پیدا کنیم؟
مثلا باید TextEditor محیط Eclipse رو بتونیم بدست بیاریم و بگیم textEditor.hasFocus و بقیه کارها رو انجام بدیم؟!

بخواد با JNA یا JNI باشه کار سخت میشه! دقیقا نیاز API های ویندوز رو اینجا درک نمیکنم. Eclipse Plug-in Development Enviroment (https://eclipse.org/pde/) ابزارهای لازم رو نداره؟ (نسخه Eclipse for RCP and RAP Developers (http://www.eclipse.org/downloads/packages/eclipse-rcp-and-rap-developers/lunasr1) )


اون تاپیکی هم که گفتی مشکلی نیست ، اما خودت فکر می کنی کسی همکاری کنه ؟ به هرحال من موافقم ، خودت پروژه را شروع کن ، من تا آخرین توانم به جلو بردنش کمک می کنم .
البته چون پیشنهاد این پلاگین رو خودتون دادید و گفتم که نمیتونم قول محکم بدم به خاطر درس و دانشگاه، انتظار داشتم خودتون راه بندازیدش ( البته پس از اینکه افراد متخصص مثل دوست عزیز محمد فدوی و دیگر دوستان ابعاد رو پیش بینی کنن ) ولی خب من تا جایی که بتونم همکاری کنم. بله انتظار نداریم از اول پروژه تا آخرش هر کی اومد بتونه کمک کنه. اصلا هدف این نبود و شدنی هم نیست. هدف این بود که مثلا دو یا سه نفر اینو انجام بدن، بقیه روند یه کار رو از اول بتونن ببینند و در جریان باشن تا نتیجه نهایی.( اگر به نتیجه نرسید هم حذف بشه تاپیک )
یه جورایی یه کار گروهی در بستر فروم که به نظرم انگیزه میده و آموزش مفیدی خواهد بود. همش اگر داره، چون از انجام شدن حتمیش مطمئن نیستم!

dasssnj
پنج شنبه 29 آبان 1393, 17:17 عصر
البته چون پیشنهاد این پلاگین رو خودتون دادید و گفتم که نمیتونم قول محکم بدم به خاطر درس و دانشگاه، انتظار داشتم خودتون راه بندازیدش ( البته پس از اینکه افراد متخصص مثل دوست عزیز محمد فدوی و دیگر دوستان ابعاد رو پیش بینی کنن ) ولی خب من تا جایی که بتونم همکاری کنم. بله انتظار نداریم از اول پروژه تا آخرش هر کی اومد بتونه کمک کنه. اصلا هدف این نبود و شدنی هم نیست. هدف این بود که مثلا دو یا سه نفر اینو انجام بدن، بقیه روند یه کار رو از اول بتونن ببینند و در جریان باشن تا نتیجه نهایی.( اگر به نتیجه نرسید هم حذف بشه تاپیک )
یه جورایی یه کار گروهی در بستر فروم که به نظرم انگیزه میده و آموزش مفیدی خواهد بود. همش اگر داره، چون از انجام شدن حتمیش مطمئن نیستم!

اهان ....
خب حالا یکمی به پلاگین رو می رم اگه نشد یه فکری براش می کنیم.

dasssnj
پنج شنبه 29 آبان 1393, 17:20 عصر
برای اینکار حتما باید از APIهای ویندوز استفاده کنی تا کامپوننت فکوس شده رو پیدا کنی و کاراکتر مورد نظر رو بش اضافه کنی. پس حتما به JNI / JNA نیاز داری. ولی به نظرم برنامه از پیش نوشته شده با این هدف وجود داشته باشه.

اصن احتیاجی به این کار نیست .
من الان دارم یه کیبورد مجازی با جاوا می نویسم و تقریبا تکمیله و بدون اون چیزی که شما می گید ، توی اکلیپس تایپ می کنه .

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

محمد فدوی
پنج شنبه 29 آبان 1393, 22:51 عصر
مگه اکلیپس از کامپوننت های جاوا استفاده نمیکنه؟ پس چطور نمیتونیم از این طریق کامپوننت فکوس شده رو با توابع خود جاوا پیدا کنیم؟
اکلیپس از SWT استفاده میکنه. توی SWT در نهایت از کامپوننت های Native استفاده میشه و واسه همین میشه با توابع سیستمی بشون دسترسی پیدا کرد.
حرف dasssnj این بود که یه برنامه Stand Alone جداگونه برای اینکار بنویسه نه یه پلاگین برای اکلیپس.

فقط نمی دونم اون برنامه ای که می خوام بسازمو چجوری ببرمش توی پس زمینه و با فشردن کلید ترکیبی تایپ کنم .
برای تایپ کردن اگه نمیخوای از JNI/JNA/BridJ استفاده کنی, شاید کلاس Robot تاحدودی بت کمک کنه. البته من پیشنهادم همون APIهاست.

dasssnj
جمعه 30 آبان 1393, 05:16 صبح
برای تایپ کردن اگه نمیخوای از JNI/JNA/BridJ استفاده کنی, شاید کلاس Robot تاحدودی بت کمک کنه. البته من پیشنهادم همون APIهاست.

تا الان هم داشتم از Robot برای کیبورد مجازی ام استفاده می کردم .

من کاری که کردم این بوده که برنامه را غیر قابل focus کردم و با فشردن هر کلید ، کاراکترش را تایپ کردم . اینجوری وقتی برنامه باز باشه ولی focus نداشته باشه ، فوکوس دست کی می افته ؟ همن برنامه ای که باید توی اون تایپ کنیم.

اما وقتی برنامه focus نداره ، به فشردن کلید های ترکیبی که می خوام ، عکس العملی نشون نمیده ....

فکر کنم باید از JNativeHook استفاده کنم

ahmad.mo74
جمعه 30 آبان 1393, 09:08 صبح
سلام، آقای فدوی کاملا درست میگن، اگر این برنامه ای که میخواید بنویسید یه چیز جدا از اکلیپس باشه شما هیچ کنترلی روی فوکوس برنامه ها نداری و مجبوری یجوری کنترلش کنی، که به نظرم JNA بهترین گزینست.

اما اگر این چیزی مینویسید قراره به عنوان یک پلاگین تو اکلیپس نصب بشه، اونوقت حرف آقای vahid-p درسته و احتمالا اصلا درگیر فوکوس و این حرفا نمیشیم و احتمالا api هایی که خود اکلیپس برای اینکار داره خیلی کمک کننده باشه.

من که اصلا تجربه همچین کاری نداشتم (پلاگین نوشتن برای اکلیپس یا ...) و به نظرم خوبه که اینکار انجام بشه تا ما هم یه چیزی یاد بگیریم...

کمکی هم خواستید روی من حساب کنید :)

dasssnj
جمعه 30 آبان 1393, 09:26 صبح
نوشتمش .............

با اجرای برنامه یه آیکن توی Tray ایجاد میشه که باهاش برنامه را می تونید ببندید.
با فشردن کلید F9 کلید \ تایپ میشه .

تستش کنید و نطر تونو بگید .

Download (http://cld.persiangig.com/download/7s356bw5PY/Virtual%20Key%20Typer.rar/dl)

ahmad.mo74
جمعه 30 آبان 1393, 11:02 صبح
خیلی خوب بود، jNativeHook هم زیرش داره از JNI استفاده میکنه دیگه...

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

محمد فدوی
جمعه 30 آبان 1393, 14:54 عصر
برنامه ی جالبیه. یکم کاملترش کن و توی Github منتشرش کن.

vahid-p
جمعه 30 آبان 1393, 18:09 عصر
خیلی خوب بود و دقیقا چیزی که میخواستید رو انجام میده. ( قشنگ هم بود ، مخصوصا آیکنش )

الان دقیقا مشکلتون رو حل میکنه، فقط جالب تر میشه گسترش بدی همانطور که دوستان گفتن.

مثلا بشه برای همه کلیدها تعیین کرد، و همچنین مثلا اگر بشه مشخص کنیم تو چه برنامه هایی کار کنه چیا نه.
مثلا بگیم اگر تو editor بودیم F9 نقش / رو داشته باشه. اگر تو محیط های دیگه بودیم، همون F9 بمونه.

dasssnj
شنبه 01 آذر 1393, 04:49 صبح
خیلی خوب بود، jNativeHook هم زیرش داره از JNI استفاده میکنه دیگه...

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

اینم میشه ، ولی Robot با خیلی از کاراکتر ها مشکل داره ، چجوری ساپورت شدن کاراکتر توسط Robot را تشخیص بدیم ؟

dasssnj
شنبه 01 آذر 1393, 04:50 صبح
برنامه ی جالبیه. یکم کاملترش کن و توی Github منتشرش کن.
تا یادم میاد Github پولی بود و به Master Card و ..... نیاز داشت .
اینطور نیست ؟؟؟

dasssnj
شنبه 01 آذر 1393, 04:52 صبح
خیلی خوب بود و دقیقا چیزی که میخواستید رو انجام میده. ( قشنگ هم بود ، مخصوصا آیکنش )

الان دقیقا مشکلتون رو حل میکنه، فقط جالب تر میشه گسترش بدی همانطور که دوستان گفتن.

مثلا بشه برای همه کلیدها تعیین کرد، و همچنین مثلا اگر بشه مشخص کنیم تو چه برنامه هایی کار کنه چیا نه.
مثلا بگیم اگر تو editor بودیم F9 نقش / رو داشته باشه. اگر تو محیط های دیگه بودیم، همون F9 بمونه.

برای این کار هم نیازه که با JNA کار کنیم ؟ چجوری برنامه ی focus دار را پیدا کنیم ؟

dasssnj
شنبه 01 آذر 1393, 04:55 صبح
من یه جورایی هم گولتون زدما ....
اگه نگاه کنید در عمل کلید F9 هیچ کاری نمی کنه و چیزی تایپ نمی کنه . اگه کلیدی را می گذاشتم که کارایی داشت ، هم کاراکتر اون تایپ می شد و هم از من . :لبخند:
برای استفاده ار کلید ترکیبی هم نتونستم کاری کنم .

کد را نگاه کنید ببینید می تونید درستش کنید ...

vahid-p
شنبه 01 آذر 1393, 21:26 عصر
اگه نگاه کنید در عمل کلید F9 هیچ کاری نمی کنه و چیزی تایپ نمی کنه . اگه کلیدی را می گذاشتم که کارایی داشت ، هم کاراکتر اون تایپ می شد و هم از من . :لبخند:
دقیقا. من اومدم یه Options هم درست کنم که برای هر کلیدی خواستیم اضافه کنیم، ولی این مشکل وجود داره.

حالا ببینیم میشه راهی پیدا کرد یا خیر.

ahmad.mo74
یک شنبه 02 آذر 1393, 16:19 عصر
سلام، باید تو برنامت کاربر رو محدود کنی،
مثلا من بیام بگم که کلید A زده شد کاراکتر b چاپ بشه! پس خود a چی؟
پس باید تا حد ممکن کاربر رو محدود کنی و فقط اجازه استفاده از کلید هایی که چیزی چاپ نمیکنن رو بهش بدی مثل همین F9 یا ...
یا مثلا یه سری شورت کات هایی که تو اکثر ادیتور ها استفاده میشه هم نباید به کاربر اجازه اضافه کردن شورت کات جدید بهشون رو داد، مثل ctrl-A ، ctrl-S ، ctrl-Z و...

به نظر من نیازی به اینکه کلیدی رو غیر فعال کنی نیست...

محمد فدوی
یک شنبه 02 آذر 1393, 16:38 عصر
یه راه اینه که یه غلاب (Hook) سیستمی بگیری و دیگه میتونی حتی Ctrl+Z رو هم دستت داشته باشی... اما اینکار هم سخته و هم وابسته به پلتفرم.
بهتره برنامه ت رو جوری تغییر بدی که فقط موقعی میانبرهاش فعال باشه که Caps Lock روشنه. در اینصورت حداقل خیلی راحت میشه میانبرها رو غیر فعال کرد. مثلا وقتی Caps Lock روشنه ترکیب Ctrl+F9 باعث تایپ شدن "/" بشه. حتی میتونی از این برچسبای آماده که هست بگیری و روی F9 برچسب "/" رو هم بچسبونی!

vahid-p
یک شنبه 02 آذر 1393, 20:49 عصر
بخواد اینقدر کلید ترکیب کنی که خیلی سخت میشه. باید دنبال راه بهتری بود.
شاید روش ahmad.mo74 (http://barnamenevis.org/member.php?337969-ahmad-mo74) راه حل باشه. ولی اونوقت ممکنه حتی بعضی از همین کلید ها در یه برنامه یه کاربردی داشته باشه! چه میشه کرد؟

dasssnj
چهارشنبه 05 آذر 1393, 02:28 صبح
یه چند روزی مجبورم پروژه را بیخیال بشم .:گریه:
اگه بعدش فرصت کردم روی حرفاتون فکر می کنم تا ببینیم بالاخره چی میشه .... :متفکر:

vahid-p
چهارشنبه 05 آذر 1393, 17:34 عصر
راحت باش. کارهایی که قبلا کمتر انجام شده، معمولا زمان بره و به مرور میشه انجامش داد.
من الان پلاگین رو دارم برای Netbeans مینویسم، ولی باز همین مشکلو داره که اگر از کلید هایی استفاده کنی که خودش یه حرف رو تایپ میکنه در حالت عادی، هم کاراکتر شما نوشته میشه هم اون کاراکتر.

الان دنبال راهیم که بتونم KeyListener مربوط به Editor اش رو غیرفعال کنم و کلا یه Listener جدید براش بنویسم. البته اونم مشکلاتی رو داره که باید بقیه کلید ها رو هم هندل کرد و شاید تو برنامه اشکال ایجاد کنه.

vahid-p
چهارشنبه 05 آذر 1393, 21:46 عصر
خب یه راه واسش پیدا کردم.
از KeyMap استفاده کنیم. اینطوری میتونیم هر کلیدی یا هر ترکیبی از کلیدها رو چه اونایی که نمایش حروفی دارن چه نه رو دستکاری کنیم.