Thread overview
Klavyeden veya stdin'den karakter okumak
6 days ago
Ali Çehreli
5 days ago
Salih Dincer
July 21

Merhaba,

Şurada bulduğum bir cevap ve yazdığım InputRange kodum var:
https://forum.dlang.org/post/lamvoipydbejhatcffvm@forum.dlang.org

Sanırım Linux'da bu çalışmayacak çünkü Windows'ta F6 tuşu bazen doğrudan ^Z (ASCII 26, SUB) karakterini terminale gönderirken, Linux/macOS sistemlerinde ^Z genellikle terminalde bir "suspend" (durdurma) sinyali olarak yorumlanır ve çalışan programı arka plana atar (SIGTSTP sinyali gönderir), sonlandırmaz.

Linux'ta bir programın standart girdisini sonlandırmak için genellikle Ctrl + D (ASCII 4, EOT - End of Transmission) kullanılır. Bu, programın stdin.rawRead() çağrısında 0 byte okuduğunu algılamasına neden olur ve bu durumu EOF (End of File) olarak yorumlar.

Bu durumda empty() içinde birkaç satır değiştirmem gerekiyor. Örneğin rawRead() bir değişken üzerinden okutup 0 byte bilgisini alabilirim. Kodu Linux'da deneme fırsatı olan varsa sevinirim.

SDB@79

6 days ago
Bu, olması gerektiğinden çok daha karmaşık bir konudur:

- F6'ya bastığımız ortam, örneğin terminal programı F6'ya özel bir anlam yüklemiş olabilir ve o anlama karşılık gelen karakterleri üretiyor olabilir.

- D (ve C, ve C++, vs.) gibi dillerde klavye diye bir kavram yoktur. O yüzden, platformun sunduğu özel kütüphaneleri kullanmak zorunda kalabiliriz.

- D vs. diller, stdin' karakter akımı olarak kullanırlar. Çoğu durumda da UTF-8 kodlaması kullanıldığından F6'nın nasıl okunacağını ben bilmiyorum.

On 7/20/25 8:22 PM, Salih Dincer wrote:

> Şurada bulduğum bir cevap ve yazdığım InputRange kodum var:
> https://forum.dlang.org/post/lamvoipydbejhatcffvm@forum.dlang.org

Evet, 0x1A ^Z'ye karşılık geliyor çünkü değeri 26 ve ^A 1'den başlayınca 26 ^Z oluyor.

> Sanırım Linux'da bu çalışmayacak çünkü Windows'ta F6 tuşu bazen

"bazen" olması şaşırtıcı ve tabii büyük güçlük doğurur. (?)

> doğrudan
> ^Z (ASCII 26, SUB) karakterini terminale gönderirken, Linux/macOS
> sistemlerinde ^Z genellikle terminalde bir "suspend" (durdurma) sinyali
> olarak yorumlanır ve çalışan programı arka plana atar (SIGTSTP sinyali
> gönderir), sonlandırmaz.
>
> Linux'ta bir programın standart girdisini sonlandırmak için genellikle
> Ctrl + D (ASCII 4, EOT - End of Transmission) kullanılır. Bu, programın
> `stdin.rawRead()` çağrısında 0 byte okuduğunu algılamasına neden olur ve
> bu durumu EOF (End of File) olarak yorumlar.
>
> Bu durumda empty() içinde birkaç satır değiştirmem gerekiyor. Örneğin
> `rawRead()` bir değişken üzerinden okutup 0 byte bilgisini alabilirim.
> Kodu Linux'da deneme fırsatı olan varsa sevinirim.
>
> SDB@79

Evet, Linux'ta denedim ama Emacs'in derleme penceresinde. F6 hiçbir karakter göstermedi.

Bir terminalde (xfce4-terminal imiş) çalıştırınca şunları gördüm: ^[[17~

Ali

5 days ago

On Monday, 21 July 2025 at 20:57:59 UTC, Ali Çehreli wrote:

>
  • D (ve C, ve C++, vs.) gibi dillerde klavye diye bir kavram yoktur. O yüzden, platformun sunduğu özel kütüphaneleri kullanmak zorunda kalabiliriz.

Evet, hocam aslında yapmak istediğim platformdan bağımsız ve klavye ile alakasız arayüz geliştirmek. Dolayısıyla klavye ile kullanabilmek benim için başlangıçta kolaylıktı ve bunu bana Windows verdi.

Zaten farketmişsinizdir; neden basit bir readln() ile okumadığımı! Özellikle D'nin aralıklar ile gücünü kullanarak Walter'ın eski bir sunumundan esinlendiğim bu yapıyı geliştiriyorum ve evet, aslında klavye ile bir alakası olmayacak. Misal bir dosyadan okuyabilir ya da URL post ile...

Teşekkürler, SDB@79