[bashrc] bul , aç , bulaç

Başlatan mhmtkrktr, 15 Ekim 2018 - 14:27:26

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

mhmtkrktr

question_selection()
{
  ANSW=
    [[ "$1" -gt 99 ]] && STEP=3 || \
{ [[ "$1" -le 9 ]] && STEP=1 || STEP=2 ; }
     
while IFS= read -p "$ANSW" -r -n "$STEP" ANSW; do

    [[ "$ANSW" == +([0-9]) ]] && {
[[ "$ANSW" -gt "$1" || "$ANSW" -le 0 ]] && \
    { unset_variables ; echo ; exec "$BASH" ; } ; } || \
        [[ $(tr -d '[:punct:][:alpha:]' <<<"$ANSW") ]] || \
{ unset_variables ; echo ; exec "$BASH" ; }

    break
done
  }
find_content()
{
  DEMAND="/usr /etc /opt /run /boot /media /bin /home/$(whoami)"
  EXCLUDED='.mo$\|.qm$\|/Trash/\|/udev/\|/journal/\|/locales/\|/man/\|/.cache/\|/.git/'

  [[ "$3" ]] && EX=$(sed 's/^\.//' <<<"$3")

  [[ "$2" ]] || exec "$BASH"
 
    if [[ "$4" ]]; then

if [[ "$4" == +([0-9]) ]]; then

    [[ "${4:0:2}" -gt 30 ]] && MTIME=30 || MTIME="${4:0:2}"

    PRINT=$(find $(echo "$DEMAND") \
    -iname "*${2}*.${EX}*" -mtime -$MTIME 2>/dev/null | \
    grep -v '.qm$\|/Trash/')

else
    PRINT=$(find $(echo "$DEMAND") \
    -iname "*${2}*.${EX}*" 2>/dev/null | \
    grep -v '.qm$\|/Trash/' | grep "$4")
fi


    elif [[ "$EX" ]]; then

if [[ "$EX" == +([0-9]) ]]; then

    [[ "${EX:0:2}" -gt 30 ]] && MTIME=30 || MTIME="${EX:0:2}"
   
    PRINT=$(find $(echo "$DEMAND") \
    -iname "*${2}*" -mtime -$MTIME 2>/dev/null | \
    grep -v '.qm$\|/Trash/')
   
else
    PRINT=$(find $(echo "$DEMAND") \
    -iname "*${2}*.${EX}*" 2>/dev/null | \
    grep -v '.qm$\|/Trash/')
fi

    elif [[ "$2" == +([0-9]) ]]; then

    [[ "${2:0:2}" -gt 30 ]] && MTIME=30 || MTIME="${2:0:2}"
   
    PRINT=$(find $(echo "$DEMAND") \
    -type f -mtime -$MTIME 2>/dev/null | \
    grep -v "${EXCLUDED}")
   
    elif [[ "${2: -1}" == - ]]; then

  PRINT=$(find $(echo "$DEMAND") \
  -iname "*${2/-*}*" 2>/dev/null | \
  grep -v "${EXCLUDED}")

    elif [[ "$2" ]]; then

  PRINT=$(find $(echo "$DEMAND") \
  -iname "*${2}" 2>/dev/null | \
  grep -v "${EXCLUDED}")
    fi
   
    if [[ "$1" == 'bul' && "$PRINT" ]]; then

awk '{print "\033[1;36m" $1 " " "\033[1;33m" \
$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14 "\033[0m"}' \
<<< $(sed 's/^/\ <o> /g' <<<"${PRINT}")


    elif [[ "$1" == 'bulac' && "$PRINT" ]]; then

LINNUM=$(wc -l <<<"$PRINT")

if [[ "${LINNUM}" -gt 1 ]]; then
    SEQUENT=$(nl -nln -w1 <<<"$PRINT"| sed 's/^/\ <: /g;s/\t/ -> /')
   
    awk '{print "\033[0;32m" $1 " " "\033[1;36m" \
    $2 " ""\033[0;32m" $3 " ""\033[0;35m" \
    $4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14 \
    "\033[0m"}' <<<"$SEQUENT"
   
    echo -ne "\n --> Sıra Numarası : "
        question_selection "$LINNUM"
       
        if [[ $ANSW ]]; then echo
           open_content $(grep "${ANSW} ->" <<<"${SEQUENT}")
    fi

    elif [[ ${LINNUM} -eq 1 ]]; then
        open_content "${PRINT}"

    else
        exec "$BASH"
    fi
    fi
  }

open_content()
{
xterm_suitable()
{
    if file -b --mime-type "$1" | \
    grep -q 'text\|empty\|xml\|html\|json\|java\|shellscript\|theme\|css';
    then echo 1; else echo 0 ; fi
  }
xterm_editor()
{
    case "$2" in
esudo ) sudo "$3" "$1" ;;
hsudo ) "$3" "$1" ;;
    esac
  }
xterm_screen()
{
    [[ $(xterm_suitable "$1") -eq 1 ]] && {

type "$3" &>/dev/null && {
    xterm_editor "$1" "$2" "$3" ; } || {
       
    for i in {"vim","lime","nano"}
do
    if type "$i" &>/dev/null; then break ; fi
done
    xterm_editor "$1" "$2" "$i"
        }   
     }
  }
select_editor()
{
    if [[ "$DESKTOP_SESSION" ]]; then

case "$DAPP" in  vim|lime|nano )
xterm_screen "$1" "$2" "$DAPP" ;;
    * )
if type gio &>/dev/null || type "$DAPP" &>/dev/null; then

    case "$2" in
esudo )
    if type "$DAPP" &>/dev/null; then
sudo -bH nohup &>/dev/null "$DAPP" "$1"
    else
sudo -bH nohup &>/dev/null gio open "$1"
    fi ;;
hsudo )
    if type "$DAPP" &>/dev/null; then
nohup &>/dev/null "$DAPP" "$1"
    else
nohup &>/dev/null gio open "$1"
    fi ;;
    esac

else
    xterm_screen "$1" "$2" "$DAPP"
fi
;;
    esac

    else
xterm_screen "$1" "$2" "$DAPP"
    fi
  }
trip_condition()
{

    if [[ $(stat -c "%u" "$1") -eq 0 ]]; then
select_editor "$1" "esudo"

    else
select_editor "$1" "hsudo"
    fi
  }
chk_mo_files()
{
    type xsel &>/dev/null && xsel -c
   
    EXTENSION=$(basename "$1"|rev|cut -d. -f1|rev)
   
    if [[ "$EXTENSION" == mo ]]; then
        NM=$(basename "$1")
        PO="/tmp/${NM/.*}.po"
       
        msgunfmt "$1" -o "$PO"
        trip_condition "$PO"

    else
    trip_condition "$1"
    fi
  }

  FILE=$(cut -d/ -f2- <<<"${@}" |sed 's/^/\//')

    if [[ -f "$FILE" || -d "$FILE" ]]; then
chk_mo_files "$FILE"

    else
type xsel &>/dev/null && \
    XSEL=$(xsel -o | cut -d/ -f2- | sed 's/^/\//;s/ [ ]*$//')

if [[ $XSEL ]]; then
    chk_mo_files "$XSEL"
fi
    fi
  }
unset_variables()
{
    unset EX PRINT DEMAND EXCLUDED LINNUM SEQUENT ANSW
    unset STEP EXTENSION NM PO FILE XSEL DAPP RANK
  }
find_open_content()
{
    DAPP=$(sed 's/[[:graph:]]-[[:graph:]]//g;s/$/ /' \
<<<"$@" | grep -Po '(?<=\-).+?(?= )')

    RANK=$(sed "s/ -${DAPP}//" <<<"$@")

    if [[ $1 == 'bul' ]]; then
    find_content $RANK

    elif [[ $1 == 'bulac' ]]; then
    find_content $RANK

    elif [[ $1 == 'open' ]]; then
    open_content $RANK
    fi

    unset_variables
  }

alias bulaç="find_open_content bulac $@"
alias bul="find_open_content bul $@"
alias aç="find_open_content open $@"


Terminal üzerinden dosya\dizin arama ve bulunanlar içinde seçim yapıp dosya\dizini ilgili uygulama ile kolayca açmak için yazıldı.

bul : Aranan özellikte ki bölümleri sadece görüntüler. Listelenen herhangi bir dosyayı açmak için ayrıca [aç] komutu uygulanabilir.
Not: bağımlılık değil fakat xsel paketi kurulu ise [bul] ve [aç] arasında ki bağlantıyı kolaylaştıracaktır.
Xsel kullanımı : Herhangi bir dosya yolunu fare ile seç --> [aç] komutunu ver --> Enter .
Dosya yolu kopyala yapıştır yapmaya gerek olmaksızın [aç] komutuna gizli olarak eklenecektir.

: Komuta eklenen dosyayı açar.

* Seçilen dosya\dizin düzenleme için yönetici gereksinimi duyuyorsa, bölüm sudo ile açılacak, kullanıcıya ait ise normal açılacaktır. İşin özü dosya\dizin her zaman içeriği düzenlenebilir şekilde açılacaktır. ( bu aynı zamanda dikkatli olmayı da gerektiren bir durum ! )

* Açma işlemi TTY üzerinden yapılmışsa terminal editörleri ile, masaüstü ortamında yapılmışsa (gio paketinin bulunduğu ortamlarda (gnome vb)) dosya\dizin için varsayılan uygulama ne ise, onunla açılacaktır. örn: jpg uzantısını açan varsayılan uygulama ??
xdg-mime query default image/jpg | cut -d. -f1

* Dosya açma işlemi varsayılan uygulamanın dışında elle de seçilebilir. Bunun için [aç] komutuna ilave olarak (-uygulama_adı) girilebilir. Bu durumda girilen yol ismi, yazılan uygulama ile açılır.  -uygulama_adı 'nın komutun neresine girildiği fark etmez ancak başında mutlaka tek - (tire) işareti olmak zorunda.
örn: aç /resim.svg -gimp veya aç -gimp /resim.svg

* Uygulama seçimi terminal editörleri için de geçerlidir. Fakat sadece text içerikli dosyaları açar.
örn: aç -nano /dosya_yolu
* Açmak için .mo (dil) dosyası seçilmiş ise, dosya öncelikle tmp dizinine .po dosyası olarak dönüştürülür ve metin editörü ile açılır. Bu yolla düzenleme yapmak isteyen olursa, ilgili dosya yolu /tmp/dosya_adı.po şeklinde. Tabii dosyayı farklı kaydet demekte bi seçenek . ;-)

bulaç : Bul ve Aç komutlarının bütünleşmiş hali. Bul komutundan farklı olarak, bulunanları numaralandırarak listeler ve ilgili dosya için numara isteği açar. (vazgeçmek için Enter tuşu kullanılabilir.)
Diğer bir fark ise aç komutunda olduğu gibi [aç]ma bölümün de kullanılmak üzere özel uygulama adı girilebilir.

Bul ve bulaç komutunun dosya arama şekli temel olarak aynı. Örneklemeyi sadece bulaç üzerinden yaparsam, bulaç ile örnek kalıplar şu şekilde olabilir:
Not : uygulama adı dışında hiçbir bölüm tam olarak yazılmak zorunda değil. Akılda olduğu kadar, her bölüm için birkaç karakter yeterli olur.
Not: arama süresi her arama türü için aynıdır.
Not: seçmeli uygulama adı hiçbiri için girilmeyebilir.

*
bulaç [<aranan dosya adı>] [<dosya uzantısı>] [<dosya yolunda bulunan aramayı daraltacak herhangi bir kelime>] [<-seçmeli uygulama adı>]

* dosya değişim zamanına göre arama 1 ile 30 gün arası. Son değiştirilme zamanı baz alınır
bulaç [<aranan dosya adı>] [<dosya uzantısı>] [<son değiştirlime süresi>] [<-seçmeli uygulama adı>]

*
bulaç [<aranan dosya adı>] [<dosya uzantısı>] [<son değiştirilme süresi> veya <dosya yolunda bulunan aramayı daraltacak herhangi bir kelime>]

* 3. kriter olmadan arama (daha geniş ve daha karmaşık sonuç çıkartır)
bulaç [<aranan dosya adı>] [<dosya uzantısı>] [<-seçmeli uygulama adı>]

* Uzantı kriteri kaldırılır. Onun yerine son değiştirme zamanı eklenir.
bulaç [<aranan dosya adı>] [<son değiştirilme süresi>] [<-seçmeli uygulama adı>]

*aranan dosya adı(-) nın sonuna tire koyulur. Sadece dosya adı baz alınır (uygun olan en kapsamlı sonucu çıkartır)
bulaç [<aranan dosya adı->] [<-seçmeli uygulama adı>]

*aranan dosya adı nın sonuna ki tire kaldırılır. Bu adı içeren değil, sadece bu adla biten sonuçlar listelenir. Dizin bulmak için daha kullanışlı.
bulaç [<aranan dosya adı>] [<-seçmeli uygulama adı>]

* Girilen zaman içinde (1...30 gün) değişikliğe uğramış dosyalar listelenir. Kullanıcıyı çok ilgilendirmeyecek bölümler liste de bulunmaz.
bulaç [<son değiştirilme süresi>] [<-seçmeli uygulama adı>]

Not: Uygulama adı dışında aynı kalıplar bul komutu için de geçerli.




mhmtkrktr

 
    ^ Kod yenilendi

* İsim yada dosya yolunda, tire veya boşluk olan bölümlerde görüntüleme ve açma sorunu oluşuyormuş. Düzeltildi.
* Sıra numarası seçim bölümü sadece nümerik tuşları kabul edecek, boş girişler, alfabetik veya sembolik karakterlerde çıkış yapacak şekilde düzeltildi.
* Hatalı arama vb durumlarda terminal kapanıyormuş. Düzeltildi.
* Arama sıralaması yanlış girilmiş ise tekrar aynı bölüm, düzgün girilse de sonuç vermiyormuş. Düzeltildi
* Terminal editörleri için, açabileceği içerik arttırıldı.
* Arama işlemine boot bölümü dahil edildi.
* Özellikle boşluklu dosya yolları için xsel seçimini kolaylaştırmak adına, sadece dosya yolunu seçmek yerine tüm satırı seçebilme özelliği eklendi.


mhmtkrktr