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

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

خوب، این پست رو میخونم. همه جا تا 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، ازش استفاده بکنم 😉

Advertisements

یه گیگ‌بازی کوچولو: دانلود ده تا فایل پی‌دی‌اف از «ستاد سلام »

دیروز، کسی از گوگل پلاس، که یادم نیست کی بود، این لینک رو از ستاد سلام شیر کرده بود. درمورد چیزایی مثل حقوق زنان هست. می‌خواستم تمام فایل‌های پی‌دی‌اف رو دانلود بکنم، ولی در شأن یه گیک نیست که تک به تک بشینه فایل‌ها رو دانلود بکنه 😉 پس یکی دو خط کد می‌زنیم.
اول، باید یه فایل اچ‌تی‌ام‌ال از اون صفحه ستاد سلام بگیرم:
wget "http://www.setadsalam.net/paper-tools/trakt-nevisi" -O trakt_nevisi.html

حالا، باید لینک‌ها رو از فایل جدا کنیم و بذاریم تو یه فایل دیگه:
cat trakt_nevisi.html | grep -Po ‹href="(.*?)\.pdf"› | cut -d\" -f2 | uniq | sed "s|^|http://www.setadsalam.net|g" | tee URLs

خلاصه این کد اینه که اول با grep و cut آدرس‌ها رو از فایل جدا می‌کنیم، بعد چون هر آدرس یه بار هم تکرار شده، تکراری‌ها رو حذف می‌کنیم و بعد، به خاطر این که اولشون اسلش (/) هست و نه آدرس سایت، آدرس ستاد سلام رو هم به اولش اضافه می‌کنیم. بعدش هم با tee آدرس‌ها رو تو فایل URLs میذاریم.
خوب، حالا فقط دانلودشون مونده:
wget -i URLs
با آپشن ‎-i به wget میفهمونیم که باید آدرس‌ها رو از فایل URLs بگیره.
حالا برای اطمینان، تعداد فایل‌ها رو بررسی می‌کنیم:
‎ $ ls *.pdf | wc -l
‎10
خوب، ده تا کلیک صرفه‌جویی شد 😉

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

بیشترین زبان‌ها در Subscene

Subscene یه سایت خوب برای دانلود زیرنویس هست. به هر زبانی میشه توش زیرنویس پیدا کرد و من معمولا زیرنویس‌هام رو از اونجا دانلود میکنم، چه انگلیسی چه فارسی.
ولی امروز سوالی برام پیش اومد. چقدر زیرنویس فارسی بین این زیرنویس‌ها هست؟ برای گرفتن جواب اول باید یه مقدار اطلاعات از این سایت بگیریم.  چطور؟ خوب، قسمت browse سایت Subscene میتونه کمک کنه. پس با کمک یه حلقه for صد صفحه از این قسمت دانلود میکنیم (حداکثر مقدار):

for ((i=1;i<101;i++)); do usewithtor axel «https://subscene.com/browse/latest/all/${i}» -o ${i}.html; done

به خاطر این که دانشمندهای کشور فهمیدن که این سایت برای ما خوب نیست، فیلترش کردن. برای همین مجبوریم از تور (یا وی‌پی‌ان یا هر روش دیگه‌ای برای رد کردن فیلتر) استفاده کنیم. برای همین usewithtor رو میذارم که axel با تور اجرا بشه.
خوب حالا صد صفحه HTML داریم. چطور ازشون استفاده بکنیم؟ به سادگی:

cat ../*.html | grep ‹<span>› -A1 | egrep -v «<|–» | tr -d «\t» > result

حالا زبان‌ها رو توی فایل result داریم. چطور رتبه‌بندیشون بکنیم؟ با این یک خط کد:

cat result | sort | uniq -c | tr -s » » | sed «s/ //» | sort -V > result2

حالا تعداد زبان‌های استفاده شده رو هم داریم. به صورت مرتب شده. نتیجه من توی فایل result2 اینه (ممکنه اگه الان شما این کار رو بکنین، نتیجه شما با مال من فرق بکن. چون تا الان مطمئنا زیرنویس‌هایی به Subscene اضافه شدن):

1 Bulgarian
1 Chinese BG code
1 Croatian
1 Czech
1 Estonian
1 Turkish
2 Hungarian
3 Bengali
5 Finnish
5 Korean
5 Lithuanian
5 Russian
5 Thai
7 Serbian
8 Japanese
8 Sinhala
8 Spanish
10 Portuguese
12 Greek
13 Norwegian
16 Romanian
17 Dutch
21 Italian
27 German
35 Malay
35 Swedish
39 Hebrew
46 French
51 Danish
91 Vietnamese
196 Arabic
200 Farsi/Persian
235 Indonesian
537 English

تعجب کردین؟ فارسی رتبه سوم رو داره!
البته میدونم که آمار کل زیرنویس‌های سابسین با جدیدترین‌هاش خیلی فرق داره. ولی به هر حال، آمار جالبی به نظر میاد!

ثانیه‌های مانده تا شروع مدرسه‌ها!

هاها! ایده باحالیه! این اسکریپت میاد ثانیه‌هایی رو که تا اول مهر سال ۱۳۹۱ ساعت ۸ صبح مونده، حساب میکنه. روش کارش هم خیلی سادست!

#! /bin/bash

theday=»`date -d «Sat Sep 22 08:00:00 2012» «+%s»`»

while :; do
echo -en «\r`echo $theday – \`date ‹+%s’\` | bc`»
done

اول میاد حساب میکنه از 1970-01-01 00:00:00 تا شروع مدرسه‌ها چند ثانیه هست. بعد میاد از همون وقت تا الان رو حساب میکنه که باز ببینه چند ثانیه هستن. بعد با عدد قبلی منها میشن و نتیجه میشه ثانیه‌های مونده تا شروع مدرسه‌ها!

ادیت:

میتونین از این لینک ببینین چند ثانیه مونده تا شروع مدرسه‌ها. (البته به صورت موقت کار میکنه)

اسکریپت‌هایی که بیشتر استفاده میکنم

اگه مطالب منو توی پرشیاتوت دنبال کرده باشین، احتمالا میدونین که من اسکریپت‌های خودم رو که بیشتر از بقیه استفاده میکنم، میریزم به دایرکتوری ~/.commands . الان میخوام براتون بعضی از این اسکریپت‌ها رو بگم که چیکار میکنن.

battery

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

calc

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

checkhosts

یکی از روش‌های هک اینه که از فایل hosts مثلا صفحه فیس بوک رو به یه صفحه تقلبی میبرن و رمز رو میگیرن. با این اسکریپت من چک میکنم که فایل /etc/hosts تغییر کرده یا نه.

complsound

این اسکریپت که در واقع میتونستم یه alias توی bashrc هم بکنمش، میاد این فایل رو با mplayer اجرا میکنه:

/usr/share/sounds/freedesktop/stereo/complete.oga

درواقع این یه صدای دینگ هست.

converttoutf8

از این اسکریپت برای تبدیل زیرنویس‌های فارسی به utf-8 استفاده میکنم.

cpusage

مقدار استفاده از cpu رو نشون میده.

cputemp

گرمای cpu رو مینویسه.

dllist

لیست دانلودهام رو مینویسه.

dlmaker

دانلودهام رو مرتب میکنه.

downloader

دانلودهام رو شروع میکنه.

enabletouchpad

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

filter

سایت‌ها رو فیلتر میکنه (نه اینکه فیلترینگ خیلی کمه!) از طریق فایل /etc/hosts

finder

بین کامندهام سرچ میکنه.

fontconfig

وقتی یه فونت به ~/.fonts اضافه میکنم، کانفیگش میکنه.

killdler

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

killer

براساس اسم پروسس، بینشون سرچ میکنه و kill میکنتشون.

morethan0cpusage

پروسس‌هایی که بیشتر از 0 از cpu استفاده میکنن رو لیست میکنه.

ogv2avi

فرمت ogv رو به avi تبدیل میکنه.

osfinder

برنامه‌های اوپن سورس یه دایرکتوری رو لیست میکنه.

rbp

وقتی یه پروسس بسته شد، این میفهمه و یه پروسس دیگه (که هر دو رو بهش داده بودیم) رو اجرا میکنه.

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

امروز یه چیزی به ذهنم رسید. اینکه ببینم از۵۰۰ تا کامند توی هیستوری، کدومشون استفاده بیشتری داشتن؟

خوب، اول تمام تاریخچه رو میریزم به یه فایل:

history > history

بعد این کامند(ها) رو میزنم:

afterpc@apcubuntu 05:10:16 PM  ~ $ cat history | awk ‹{ print $2 }› | sort | uniq -c | tr -s ‹ ‹ | sed «s/ //» | grep [0-9][0-9]› ‹ | sort | tac

اول بگم چی میگذره اینجا. cat، فایل history رو میخونه و میده به awk. اونم دومین کلمه که میشه همون کامندمون. بعد sort به ترتیب حروف الفبا مرتب میکنه و اونیکی میگه که هر کلمه چند بار تکرار شده. بعد tr همه اسپیس‌ها که دو بار یا بیشتر کنار هم اومدن پاک میکنه و فقط یکی میذاره و اون sed میاد اون یدونه رو هم پاک میکنه. بعد با grep دورقمی‌ها رو جدا میکنم و دوباره با sort مرتب میکنم و با tac برعکس میکنم که بیشترها بالا باشن.
و نتیجه:

79 c
76 ls
38 sudo
23 rm
21 downloader
18 emacs
18 cat
14 echo
11 man

واو! جالبه! c که درواقع یه alias (اسم مستعار) clear هست، بیشتر از همه استفاده شده! ls هم با سه تا تفاوت! بعدی sudo هست. بعدش rm! زیادی پاک میکنم انگار! اوه! اسکریپتی که با اون دانلودام رو شروع میکنم رتبه پنجمه! بعدش ایمکس و cat و echo. بین پونصد کامند، یازده‌تاش هم man هست. زیادی دوست دارم یاد بگیرم یا فقط سرسری یه نگاه میندازم میرم؟ 🙂