مشکل کار نکردن کلیدهای media برای بعضی برنامه‌ها

نمی‌دونم چرا ولی بعضی برنامه‌ها خودشون رو درست روی کلید‌های مدیای کیبورد رجیستر نمی‌کردن. یکم این موضوع عذاب آور بود کمی بررسی کردم دیدم بیشتر موزیک پلیرها توی dbus تعدادی متود برای خودشون اضافه می‌کنن که از طریق اون متودها میشه اون مدیا پلیر رو کنترل کرد، نکته خوبش این بود که همه شون از یه استاندارد استفاده می‌کردن برای همین تونستم خیلی راحت یه اسکریپت کوچیک برای حل این مشکل بنویسم:

این اسکریپت یه ارگومان می‌گیره که عملیاتی که می‌خواید انجام بشه رو مشخص می‌کنه (play, pause, next) سپس دستور انجام این عملیات رو به مدیاپلیرهایی که ازشون ساپورت می‌کنه می‌فرسته. اینجوری می‌تونین مستقیما از این اسکریپت استفاده کنید:

برای استفاده کافیه این اسکریپت رو جایی ذخیره کنید سپس وارد قسمت تنظیمات شورت‌کات‌های کیبورد دسکتاپتون بشید و برای کلیدهای مدیا این اسکریپت با آرگومان مربوطه صدا بزنید.

مثلا من توی xfce اینجوری تنظیمات رو اعمال کردم:
xfce4-keyboard-shortcuts

این اسکریپت الان از deadbeef clementine rhythmbox vlc quodlibet پشتیبانی می‌کنه. احتمالا برای این که پشتیبانی از یه پلیر دیگه رو اضافه کنید فقط کافیه اسم اون رو توی این خط اضافه کنید. (بعضی مدیا پلیرها لازمه قبلش پلاگینی به اسم dbus یا mpris رو فعال کنید.)

یک رابط کاربری خوب برای مفسر پایتون

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

ولی باید قبول کنیم مفسر پایتون رابط کاربری بد و مزخرفی داره، ipython رو تست کردم ولی خیلی دوست نداشم، به نظرم زیادی بود، دنبال یک چیز ساده‌تر بودم

چند روز پیش چشمم به یک چیزی به اسم bpython خورد، یک رابط کاربری خیلی خوبی برای مفسر پایتون ایجاد کرده بود، نکته مثبتش هم این بود که حس و حال مفسر پایتون رو حفط می‌کرد. فقط امکاناتی که کم داشت رو بهش اضافه کرده بود

اینجا چندتا عکس از این برنامه گذاشتم، این برنامه توی ترمینال اجرا شده

حین کد زدن یه سری کلمات کلیدی رو پیشنهاد می‌ده که برای اوتوکامپلیشن می‌تونید با tab بینشون سوئیچ کنید
bpython-autocomplete
داکیومنت‌های کد رو به این صورت نشون میده
bpython-docs
اینجا من یک کلاس ساده پایتون نوشتم، همینطور که می‌بینید وقتی می‌خام از یکی از توابع اون کلاس استفاده کنم راهنماشو نشون می‌ده (به سینتکس هایلایتینگ زیبا در bpython هم توجه کنید)
bpython-mydocs
ارورها رو هم اینجور نشون می‌ده
bpython-error
اینجا هم یک حلقه for نوشتم
bpython-for

امکان دیگه هم که داره و خیلی خوشم اومد اینه که با ctrl+s می‌تونید کلیه دستوراتی که زدید به همراه خروجی‌هاشون توی یک فایل ذخیره کنید، مثلا دستور بالا (حلقه for) رو توی یه فایل ذخیره کردم:

برای نصب bpython پکیج bpython یا bpython3 رو از پکیح منیجر نصب کنید. یا این که از طریق pip پکیج bpython رو نصب کنید.

ارسال خروجی یک دستور به کلیپ‌بورد

xclip رو نصب کنید و به این صورت از اون استفاده کنید:

حالا خروجی برنامه توی کلیپ‌بورد شما قرار داره می‌تونید اون رو توی برنامه‌های دیگه پیست کنید.

برای این که راحت‌تر باشید می‌تونید یک alias براش بسازید مثل این (این خط رو توی فایل bashrc تون اضافه کنید)

و از این به بعد به این صورت ازش استفاده کنید:

خیلی کار پیچیده‌ای نیست به نظرم توضیح بیشتری لازم نداره.

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

چند خط کد پایتون داخل اسکریپت shell

برای کاری چند خط shell script نوشته بودم که توی قسمتیش می‌خواستم یک فایل generate کنم، این کار با پایتون خیلی خوشدست‌تر بود و اگه می‌شد چند خط پایتون توی این اسکریپت شل اضافه کنم زندگی به مراتب ساده‌تر می‌شد.

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

توی این مثال من یکی از ماژول‌های پایتون رو ایمپورت کردم و یک حلقه for هم نوشتم:

اگه بخواین می‌تونین توی شل اسکریپتتون یک متغیر تعریف کنید و توی اسکریپت پایتون بهش دسترسی داشته باشید:

فقط دقت کنید برای تعریف کردن متغیرهاتون باید حتما از کلمه کلیدی export استفاده کنید.

نکته‌ای که در مورد کلمه کلیدی EOF هست اینه که این کلمه شروع و پایان کد پایتون رو مشخص می‌کنه ولی لزوما نباید EOF باشه و شما می‌تونید هر کلمه کلیدی که دوست دارید استفاده کنید، فقط باید دقت کنید قطعه کدتون باید با همون کلمه کلیدی که شروع کردید بسته بشه.

حلقه while true در shell

بعضی وقت‌ها پیش میاد که دوست دارم توی بش یک دستوری مرتب اجرا بشه و تا زمانی که خروجی مورد نظرم رو بگیرم به اجرا کردن این دستور ادامه بده. برای این کار می‌شه یه حلقه while نوشت که مرتب دستور مورد نظر رو اجرا کنه فقط کافیه به جای while true بنویسید while : (دو نقطه هم هست) یک چیزی مثل این:

این قسمت sleep 1 رو بزارید چون برای بعضی دستورها وقتی ctrl+c می‌زنم اگه این sleep 1 نباشه حلقه متوقف نمی‌شه.

دستور بالا به صورت یک خطی میشه این:

توضیح این که شما می‌تونید از دستور break هم برای خروج از حلقه استفاده کنید. توی این قسمت یک مثال خیلی ساده از break رو اوردم، توی مثال اگه زمان ثانیه شمار سیستم مضربی از ۱۰ باشه دستور break اجرا می‌شه و برنامه از حلقه خارج می‌شه:

البته راه ساده‌تر از while دستور watch هست که همین کار رو می‌کنه و لازم نیست حلقه بنویسید ولی من با این وجود به نوشتن حلقه علاقه بیشتری دارم 🙂