February 17, 2010

Emacs Turkish mode

This is for people trying to type Turkish documents on a U.S. keyboard using Emacs. The program provides a turkish-mode in which the correct Turkish accents are added to the ascii version of the last word typed each time the user hits space. The latest version is available here.

It was inspired by Gökhan Tür's deasciifier:
http://www.hlst.sabanciuniv.edu/TL/deascii.html

The program uses decision lists (included at the end of this file) which was created based on 1 million words of Turkish news text using the GPA algorithm. For more information on GPA see the Greedy prepend algorithm for decision list induction.

To activate the program first load this file into emacs:
M-x load-file ENTER turkish.el ENTER
Then turn on the turkish mode:
M-x turkish-mode

When Turkish mode is enabled, the space, tab, and enter keys correct the previous word by adding Turkish accents. For corrections use C-t to toggle the accent of the character under the cursor.

36 comments:

  1. Bu modda Enter tusu calismiyorsa:

    (if (= ?\r last-input-event)

    satirini

    (if (= ?\r last-command-event)

    ile degistirin.

    ReplyDelete
  2. Bu mod Emacs 23'te calismiyor maalesef. Sanirim emacs'te yapilan unicode degisiklikler buna sebep oldu.

    turkish-char-alist'in birinci ve ucuncu sutunlarini degistirince bazi karakterler icin sorun cozuluyor (ascii kodu olanlar icin - ü, ç ve ö gibi) ama digerleri icin farklı karakterler geliyor.

    Bunu düzeltmenin bir yolu var mı acaba?

    ReplyDelete
  3. Yukarida bahsi gecen iki problem de duzeltildi. En son version (2.5) post'taki linkten indirilebilir. Simdi bir de biri bunu browser extension'a cevirse de bu comment'ler duzgun ciksa :)

    ReplyDelete
  4. Tekrar teşekkürler hocam. Dün benim de aklımdan geçiyordu bunu
    Firefox'a nasıl entegre ederiz diye. Emacs Lisp kodunu biraz daha
    inceleyeyim, belki Jetpack ile Firefox'a kolayca entegre etmek mümkün
    olabilir [1].

    Not: Bu yazıdaki Türkçeye özgü harfler turkish-mode ile otomatik
    olarak üretilmiştir ;-)

    1- https://jetpack.mozillalabs.com/

    ReplyDelete
  5. Güncelleme için teşekkürler. Google Chrome'un Edit in Emacs eklentisi ile çok
    güzel çalışıyor. .emacs dosyama şu satırı ekledim:

    (add-hook 'edit-server-text-mode-hook 'turkish-mode)

    Native bir eklenti yapılana kadar bu oldukça iyi bir çözüm gibi duruyor.

    ReplyDelete
  6. Bu eklentinin bir güzel yanı da emacs'ta yazmayı unutup, doğrudan tarayıcıda yazarsak, edit tuşuna bastığımızda şu ana kadar yazdığımız metni de emacs'e göndermesi. Bu şekilde turkish-mode'daki turkish-correct-region ile önceden yazdığımız metni göndermeden önce Türkçe'ye uygun hale getirebiliyoruz. Aslında moda basit bir turkish-correct-buffer da eklenebilir.

    ReplyDelete
  7. Browser'a entegrasyon yerine browser'dan emacs'ın çağırılabileceği hiç aklıma gelmemişti. Firefox için de araştırdım ve aşağıdaki kaynakları buldum:

    * mozex
    * conkeror
    * It's all text

    Bu yorumu son linkteki "It's all text" eklentisini kullanarak Firefox'tan açtığım Emacs ile yazıyorum. MacOS biraz uğraştırdı. Emacs olarak emacsformacosx kullandım. Ayarlarda uygulama olarak "/Applications/Emacs.app/Contents/MacOS/Emacs" kullanmasını söyledim. Bu arada Emacs'ın eski versionlarını test etmedim, hala çalışması lazım programın ama birşeylerin bozulduğunu farkederseniz lütfen haber verin.

    ReplyDelete
  8. (defun turkish-correct-buffer ()
    "Adds necessary accents to the words in the whole buffer."
    (interactive)
    (turkish-correct-region (point-min) (point-max))
    )

    Tüm bufferi düzeltmek için bu fonksiyonu kullanılabilirsiniz.

    ReplyDelete
  9. turkish-correct-buffer 2.6 versionunda eklendi, link update edildi.

    ReplyDelete
  10. Son yapilan degisikligi geri almak icin (daha dogrusu son sozcugu asciiye donusturmek icin) bunu kullanabilirsiniz.

    (defun turkish-asciify-last-word ()
    "Asciifies the last word, so that one can undo the last correction without losing place"
    (interactive)
    (save-excursion
    (let ((p (point)))
    (turkish-backward-word)
    (turkish-asciify-region (point) p))))


    Keybindinglere de

    ("\C-c\C-t" . turkish-asciify-last-word)

    satirini ekledim, bu sayede C-c C-t ile son kelime asciiye donusturulebiliyor, yaziya kalindigi yerden devam edilebiliyor.

    ReplyDelete
  11. Yukarıdakine benzer bir komutu (turkish-toggle-last-word) son version'a (2.6) ekledim. Tekrar tekrar basıldığında ascii ile türkçe kelime arasında gidip geliyor. Key binding olarak M-t seçtim: Standart emacs'te C-t ve M-t transpose-chars ve transpose-words komutlarını (hiç kullanmama gerek kalmadı bugüne kadar) biz turkish-toggle-accent ve turkish-toggle-last-word ile değiştirmiş olduk. Son olarak 2.5'te yaptığım eklemeler bazı eski version'larda çalışmasını bozmuş turkish.el'in, 2.6'daki düzeltmelerle 21, 22, ve 23 çalışıyor durumda olmalı.

    ReplyDelete
  12. Bu son komut çok kullanışlı oldu, teşekkür ederim. turkish-correct-buffer yanlışlıkla silinmiş ama sanırım.

    ReplyDelete
  13. Haklısın. turkish-correct-buffer ve turkish-asciify-buffer eklendi (v2.7).

    ReplyDelete
  14. > Şimdi bir de biri bunu browser
    > extension'a çevirse de bu comment'ler
    > düzgün çıksa :)

    Firefox add-on eklendi: https://addons.mozilla.org/en-US/firefox/addon/204311/. Bu yazıyı hiç Türkçe harf kullanmadan yazıyorum ve birazdan sağ tuşla tıklayıp Türkçe harfli hale çevirmeye çalışacağım. Bakalım nasıl olacak hep birlikte göreceğiz.

    ReplyDelete
  15. Mustafa Emre Acer'in yaptığı Chrome extension da fırından yeni çıktı: https://chrome.google.com/extensions/detail/nhfdmlgglfmcdheoabgklabmgjklgofk

    ReplyDelete
  16. Benim Python implementasyonunun web arayüzünü de hazırladım: http://turkceyap.appspot.com/

    ReplyDelete
  17. Firefox add-on halinin 0.2 versiyonu çıktı, buraya yazıyorum çünkü henüz otomatik güncelleme özelliği yok, elle güncellemek gerekiyor aşağıdaki adrese giderek. Bu sürümle özgün turkish-mode'a biraz daha yaklaşmış durumda, mesela: Cümle içinde yok kullanınca sorun yok artık. Yani iyi oldu gibi, olmuş gibi: https://addons.mozilla.org/en-US/firefox/addon/204311/

    ReplyDelete
  18. Arkadaşlar, Python versiyonunu kullanarak bir Adium plugin'i yaptım. Eğer Mac & Adium kullananınız varsa, ilginizi çekebilir.

    ReplyDelete
  19. Selamlar,
    Sabancinin sitesi calismiyor oldugundan, google aramalarimda sayfanizi buldum, tum thread'i ve sonudaki mozzilla application'i bilmeden teker teker okudum, pek program yaziciligindan anlamiyorum, ama super bir olay, ikinize de cok tesekkurler, harika bir application olmus

    ReplyDelete
  20. > Arkadaşlar, Python versiyonunu
    > kullanarak bir Adium plugin'i yaptım.
    > Eğer Mac & Adium kullananınız varsa,
    > ilginizi çekebilir.

    Adresi var mi download etmek için?

    ReplyDelete
  21. Son derece yararli bir calisma. Latex dokumanlari hazirlarken de ise yariyor, oldugu gibi kullanilsa bile. Ama belki Latex icin biraz daha uyarlanabilir. Cok tesekkurler.

    ReplyDelete
  22. Perl sürümü de çıkmış. Firefox add-on'un da 0.2.1 sürümü çıktı.

    ReplyDelete
  23. Bunun Mac'te calisan versiyonuna nasil ulasabilirim?

    ReplyDelete
  24. This comment has been removed by a blog administrator.

    ReplyDelete
  25. Firefox 4.0 ve üzeri için uyumlu olan Turkish Deasciifier add-on yayımlandı: https://addons.mozilla.org/en-US/firefox/addon/turkish-deasciifier/. Daha detaylı bilgi için: http://goo.gl/BY3DW

    ReplyDelete
  26. AnonymousJuly 11, 2013

    Emacs ve Firefox'ta artık gerçekten mutluyum. Sağolun.

    ReplyDelete
  27. Emacs son versiyonu 25 te calismiyor lutfen duzeltirmisiniz cok tesekkurler.

    ReplyDelete
  28. Emacs son versiyonu 25'te calismiyor duzeltirmisiniz lutfen. Cok tesekkurler.

    ReplyDelete
  29. Emre Guneyler,

    Deniz Yuret hoca buna mudahale eder mi bilmiyorum ama https://github.com/emres/turkish-mode adresine gidip bir 'issue' acarsaniz, baska bir deyisle https://github.com/emres/turkish-mode/issues adresine gidip 'New Issue' dugmesine basip, tam olarak hangi Emacs surumunu kullandiginizi belirtirseniz (M-x emacs-version), belki yakin zamanda ilgilenip cozmeye calisabilirim. Hatta bunu halledebilirsem (yani hem Emacs 24.x hem de son surum Emacs 25.x serisinde duzgun calisir hale getirme isini halledebilirsem), ELBA ya da MELPA gibi bir depoya koyup 'M-x package-install' ile kurulabilir hale getirme planim var.

    ReplyDelete
  30. MELPA'ya eklendi: https://melpa.org/#/turkish. Emacs versiyon 24.5.1 ile çalışıyor. Yeni stabil sürüm çıktığında deneyip hata bildiriminde bulunursanız, vakit ve fırsat oldukça ben ilgilenmeye çalışırım (eğer Deniz Yüret hoca ya da başkası daha önce davranmazsa). Hata bildirimi için şu adresi kullanabilirsiniz: https://github.com/emres/turkish-mode (eğer nasıl hata bildirimi açacağınızı bilmiyorsanız belirtin, onu da açıklarım).

    ReplyDelete
  31. Merhaba,

    https://deasciifier.com/

    Burdaki web sitenize mobil cihazlar üzerinden Firefox tarayıcısı ile giriş yapınca, "Yazarken çevir" özelliği çalışmamaktadır. Bu sorunu nasıl çözebiliriz ?

    Teşekkürler..

    ReplyDelete
  32. Sitenin yazarina basvurmanizi tavsiye ederim.

    ReplyDelete
  33. This comment has been removed by a blog administrator.

    ReplyDelete