Emacs’de jedi ve python Kipi Kullanımı

gnu-emacs-jedi-and-auto-completion-mode

Jedi Kurulumu

Öncelikle Jedi kütüphanesini kurmalıyız işletim sistemimize. Kurulum için birçok yöntem izlenebilir:

pip install jedi

veya

apt-get install python-jedi

veya git ile /usr/share/pyshared altına indirebiliriz kütüphaneyi
git clone https://github.com/davidhalter/jedi.git

Ardından Epc kütüphanesini kurmalıyız. Şu anda Debian dağıtımları içerisinde yok bildiğim kadarı ile o yüzden pip aracılığı ile kuruyoruz:

pip install epc

Bu kurulumun ardından Jedi’yi emacs ile kullanılabilir duruma getirmemiz için Emacs’e emacs-jedi paketini yüklememiz lazım bunun için de birçok yöntem var:

el-get paket yöneticisi ile kendiliğinden kurulum gerçekleştirebiliriz.

git ile emacs-jedi kurulumu gerçekleştirebiliriz. Yalnız paket bağımlılıklarına dikkat etmemiz gerekecek bu yöntemde çünkü Jedi’nin nin düzgün çalışabilmesi için auto-complate ve ve epc gibi bağımlılıkları tek tek el ile kurmalıyız. Tabi bu paketlerin de bağımlılıkları olacak.

veya Emacs içerisinde mevcut olan Emacs paket yöneticisini kullanabiliriz. Öncelilkle elpa deposunda aradığımız paketler olmadığı için marmalade deposunu ekleyeceğiz paket yöneticisine:

M-x customize-variable değer olarak package-archives giriyoruz. Ve açılan pencerede yeni bir değer girebilmek için INS üzerine gelip enter tuşuna tıklıyoruz. Url or directory name bölümüne http://marmalade-repo.org/packages/ ekliyoruz ve depomuza bir isim veriyoruz ve ardından State üzerine geliyoruz ve enter tuşuna basıyoruz. Emacs bizim önümüze seçenekleri sunuyor ister güncel oturum için, istersek gelecek oturumlar için kaydedebiliriz.

M-x list-packages ile paket dizelgesini açıyoruz ve orada jedi üzerine gelerek kurulum için işaretleyoruz i tuşlayarak ve ardından x tuşluyoruz işlemimizi gerçekleştirmek için.

Kurulum işlemi bu kadar.

Jedi’yi Etkinleştirmek

C-x C-f ile bir python dosyası oluşturuyoruz ve bu dosya içerisinde M-x jedi:setup ardından kendiliğinden tamamlama kipini etkin kılmak için M-x auto-complete-mode ve son olarak Jedi kipini etkinleştirmek için M-x jedi-mode komutlarını veriyoruz.

Kullanabileceğimiz komutlar hakkında daha fazla bilgi almak için C-h a komutunu kullanabiliriz.

İstersek aşağıdaki kodları ~/ dizini altındaki .emacs dosyamıza ekleyerek Jedi’nin .py uzantılı bir dosya açtığımızda kendiliğinden çalışmasını sağlayabiliriz:

(add-hook 'python-mode-hook 'jedi:setup)

Bu kodları eklediğimizde sadece kendiliğinden tamamlama kipini etkinleştirmemiz yeterli olacaktır M-x auto-complete-mode komutu ile.
İstersek kendiliğinden tamamlama kipinin de açılışta başlatılmasını sağlayabiliriz aşağıdaki lisp kodlarını ayar dosyamıza ekleyerek:

(add-to-list 'load-path "~/.emacs.d/elpa/auto-complete-1.4")
(require 'auto-complete-config)
(ac-config-default)

Eğer kullanırken her defasında M-x ile bir komut çalıştırmak istemiyorsak, örneğin import ile bir modül ekledik ve eklediğimiz modülün yerini bulup o modülü açmak istiyoruz. Şu durumda yapmamız gereken M-x jedi:goto-definition komutunu vermek. Ama istersek Jedi ile kullanılan bir takım komutlara kısayol ekleyebiliriz. Varsayılan Jedi’de tanımlı varsayılan kısayolları kullanabilmek için aşağıdaki lisp kodlarını .emacs dosyamıza eklememiz yeterli olacaktır:

(setq jedi:setup-keys t)

Şimdi kullandığımız kodun bağımlı olduğu yere ulaşmak için C-. komutunu vermemiz yeniden çalıştığımız alana geri dönmek için de C-, komutunu vermemiz yeterli olacaktır.

Kullandığımız kodun belgelendirmesini açmak için C-c d komutunu kullanabiliriz.

Bir modül çağırdıktan sonra o modül içerisinden bir fonksiyon çağırırken (örneğin prj isimli bir modülümüz olsun, biz modülü import prj ile tasarımıza ekledik ve bu modül içerisinden deneme isimli fonksiyonu çağıracağız prj.deneme() şeklinde) modül isminin ardından “.” koyduktan sonra  C-<TAB> komutu ile kullanabileceğimiz fonksiyonların dizelgesini görebiliriz.

python-mode Komutları

Öncelikle eğer kurulu değil ise sisteminize python-mode u kurmalısınız aşağıdaki komutları kullanabilmek için.

C-c ! = Python yorumlayıcısını açar.
C-c C-c = Etkin ara bellekteki python kodlarını çalıştırır.
C-c C-w = Python hata ayıklayıcısını çalıştırır.

C-c C-r veya C-c > = Seçilen bölgeyi sağa kaydırır.
C-c C-l veya C-c < = Seçilen bölgeyi sola kaydırır.
Bu iki işlem tanımlı olan girintileme ayarlarına dikkat edilerek seçilen bölgeyi 4 karakter kaydırır.

M-x linum-mode = Satırları numaralandırır.

linum-mode-numbering-lines-gnu-emacs

M-; = Seçilen bölgeye yorum ekler ve seçilen bölgeden yorumu kaldırır.
C-x C-t = İmlecin bulunduğu satır ile bir üstteki satırın yerini değiştirir.

Şimdi kullanacak olduğumuz iki komutun önceden belirlenmiş bir kısayolu yok. Kısayolu olmadan da M-x ile çalıştırıp kullanılabilir ama kolaylık olması ve hızlı kullanım açısından kısayol eklemek daha uygun olur. Şimdi ağağıdaki lisp kodlarını ~/.emacs dosyamıza ekleyelim:


(defun move-region (start end n)
  "Move the current region up or down by N lines."
  (interactive "r\np")
  (let ((line-text (delete-and-extract-region start end)))
    (forward-line n)
    (let ((start (point)))
      (insert line-text)
      (setq deactivate-mark nil)
      (set-mark start))))

(defun move-region-up (start end n)
  "Move the current line up by N lines."
  (interactive "r\np")
  (move-region start end (if (null n) -1 (- n))))

(defun move-region-down (start end n)
  "Move the current line down by N lines."
  (interactive "r\np")
  (move-region start end (if (null n) 1 n)))

;;
(defun move-line-region-up (&optional start end n)
  (interactive "r\np")
  (if (use-region-p) (move-region-up start end n) (move-line-up n)))

(defun move-line-region-down (&optional start end n)
  (interactive "r\np")
  (if (use-region-p) (move-region-down start end n) (move-line-down n)))

(global-set-key (kbd "M-p") 'move-line-region-up)
(global-set-key (kbd "M-n") 'move-line-region-down)

Emacs’i tekrar açıp kapatabiliriz eklediklerimizin etkinleştirilmesi için ya da sonradan eklediğimiz bölgeyi seçerek M-x eval-region komutu ile çalıştırarak etkinleştirebiliriz.

M-p = Seçilen bölgeyi bir üst satıra taşır.
M-n = Seçilen bölgeyi bir alt satıra taşır.

Ayrıntılı bilgi için:

http://jedi.jedidjah.ch/en/latest/

http://tkf.github.io/emacs-jedi/latest/

http://auto-complete.org/doc/manual.html

http://www.jesshamrick.com/2012/09/18/emacs-as-a-python-ide/