شرتکات فوکوس روی پنجره ایمکس

خوب، امروز پست شاهین در مورد استفاده از ایمکس به عنوان ترمینال رو دیدم. یه مدت خودم هم این فکر رو تو سرم داشتم، ولی تنبلی نمیذاره کاری بکنیم ;)‏

خوب، این پست رو میخونم. همه جا تا multi-term خوب و خوش پیش میره. ولی وقتی به تنظیمات i3 میرسم، یه چیز جالب یادم میفته: دسکتاپ من i3 نیست! چاره چیه؟
باید پنجره ایمکس رو طوری بکنم که با یه شرتکات بیاد و بره. اوپن باکس به هیچ وجه تو مدیریت پنجره‌ها از طریق خط فرمان خوب نیست. پس باید یه راه دیگه پیدا کنم. با یه سرچ، به یه ابزار داخلی X میرسم: xdotool. کمی تو راهنماش میچرخم و چیزهایی رو که لازم هستن پیدا میکنم. چیزایی مثل مینیمایز کردن، بالا آوردن و گرفتن آی‌دی پنجره. خوب، فقط مونده این‌ها رو ترکیب بکنیم. یه اسکریپت کوتاه می‌نویسیم:
‎#! /bin/bash

id="$(xdotool search –name –limit 1 emacs@$HOST)"‎
active="$(xdotool getactivewindow)"‎

if [ "$id" = "" ]; then
zenity –error –title "Error" –text "No emacs is running\!"‎
exit 1
fi

if [ $id != "$active" ]; then
xdotool windowmap $id
xdotool windowfocus $id
else
xdotool windowminimize $id
fi

اول بگم که اگه بخواین این رو کپی کنین، یه سری کاراکتر برای درست نشون دادن این کد گذاشتم. پس اگه بخواین کپیش کنین، اول چک کنین ببینین کاراکتر اضافی دارین یا نه.
خوب، میشه گفت هرکسی با یه نگاه میتونه بگه این اسکریپت چیکار میکنه. ولی به هر حال توضیح میدم. اولین سطر که میگیم با بش اجرا کن. بعد، آی‌دی پنجره‌ای رو که اسمش emacs@HOSTNAME هست، میگیرم (HOSTNAME همون اسم کامپیوتره منه) که همون پنجره ایمکسه و میذارم تو متغیر id. بعد، آی‌دی پنجره فعال رو میگیرم و اونو هم میندازم تو متغیر active. حالا چک میکنم ببینم اصلا پنجره ایمکسی هست یا نه. اگه نباشه با zenity یه ارور میدم و میزنم بیرون. حالا یه if دیگه میذارم که ببینم پنجره فعال همون ایمکسه یا نه. اگه باشه، مینیمایزش میکنم و اگه نباشه، میارمش بالا و روش فوکوس میکنم.
خوب، حالا این رو تو یه فایل میریزم و یه شرتکات دلخواه براش تعیین میکنم و تمام.
ولی من شخصا زیاد از ترمینال ایمکس خوشم نیومد. بعضی شرتکات‌ها رو ساپورت نمیکنه (که نباید هم بکنه. به هر حال شرتکات‌های خودشه دیگه!) و بعضی کارهای دیگه هم نمیشن.
ولی به هر حال این کد رو نگه میدارم تا شاید یه روز برای برنامه دیگه‌ای، مثل GoldenDict، ازش استفاده بکنم 😉

چند کار بعد از نصب آرچ

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

نصب ntfs-3g

توضیح خاصی نداره. برای مونت کردن پارتیشن‌های ntfs باید نصب باشه.

حل مشکل دیر لود شدن ایمکس

بعد از کمی جستجو درمورد این مشکل، فهمیدم که مشکل از فایل /etc/hosts هست. باید این سطر رو بهش اضافه میکردم:

127.0.0.1       HOSTNAME              HOSTNAME

که به جای هر دو HOSTNAME باید اسم کامپیوترتون رو بذارین. اگه مثلا خودتون سیستم رو کانفیگ نکردین و نمیدونین اسم کامپیوتر چیه، از دستور hostname استفاده بکنین.

درست کردن ~/.xinitrc برای باز کردن دسکتاپی که من میخوام، نه اونی که از قبل تایین شده

برای این کار، توی این فایل بنویسین:

if [ $# -eq 0 ]; then
exec openbox-session
else
exec «$1»
fi

که البته میتونین به جای openbox-session از هر دسکتاپی که بخواین، به عنوان دسکتاپ پیش‌فرض استفاده کنین.

Psi برای استفاده از گوگل تاک

بعد از مدت‌ها تلاش برای استفاده از گوگل تاک توی پیجین، دیگه ناامید شدم و رفتم سمت Psi. برای یادگرفتنش هم از این مطلب استفاده کردم.

ویرایش:

حل مشکل استفاده از NetworkManager

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

sudo systemctl enable NetworkManager.service

مشکل فایل‌های بکاپ ایمکس

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

~/.commands

امروز میخواستم یکی از این اسکریپت‌ها رو ادیت کنم که دیدم باید فایل بکاپش رو که ایمکس به این شکل ایجاد میکنه پاک کنم که وقتی کامند رو میزنم و بعد از کلید Tab برای کامل کردن خودکارش استفاده میکنم، فاصله رو هم خودکار ایجاد کنه:

filename~

(کمی نامفهموم بود، خودتون یه بار امتحان بکنین!)
حالا چطور میتونم کاری بکنم که این فایل‌های بکاپ ایمکس به یه دایرکتوری برن که هم اون فایل‌ها رو از دست ندم و هم به دایرکتوری یه فایل جدید اضافه نشه؟ (باز نامفهموم بود! به طور خلاصه میخوام اون فایل بکاپ ایمکس رو ببرم یه جای دیگه) خیلی ساده! میتونیم این تابع رو به zshrc (یا اگه از بش استقاده میکنین، bashrc) اضافه بکنیم:

function emacs() {
if [ ! -d ~/.emacs-bacs ]; then
mkdir ~/.emacs-bacs
fi
/usr/bin/emacs -nw «$*»; mv «$*»\~ ~/.emacs-bacs &> /dev/null
}

به همین سادگی! الان یه تب باز کنین و یه فایل رو ادیت بکنین. میبینین که فایل بکاپی وجود نداره! حالا این دایرکتوری رو چک بکنین:

~/.emacs-bacs

میبینین فایل بکاپتون به اونجا رفته! به همین سادگی مشکلمون حل شد!