`getstr` in ncurses egg (Chicken Scheme)



我正在尝试弄清楚如何使用这个鸡蛋的函数getstr(以及mvgetstrmvwgetstr等(。 例如:

(require-extension ncurses)
(let ((stdscr (initscr)) (str (make-string 10)))
(getstr str)
(addstr str)
(getch))

csi告诉我

错误:错误的参数类型 - 不是指针:">

所以我尝试了这个:

(require-extension ncurses)
(let ((stdscr (initscr)) (str (make-string 10)))
(begin      
(getstr (object->pointer str))
(addstr str)
(getch)))) 

这次csi给我另一个错误:

错误:错误的参数类型 - 不是字符串:[panic] 检测到堆栈中损坏的数据 - 执行终止

我认为问题在于字符串的编码(一个函数认为是 ascii 和另一个 utf-8(。我没有使用方案中指针的经验,我只是知道用这个鸡蛋获得字符串的最佳防白痴方法。

最后,我认为这是ncurses蛋的虫子。在这里,他们说这是一个错误,并且是正确的,但是我对最新版本也有同样的问题。

但是,这些函数并不是真正类似于方案的,使用getch重新定义这些函数很简单(可以正常工作(。 例如:

(define (mvgetstr x y)
(move y x)
(let loop ((str ""))
(let ((ch (getch)))
(if (eq? (char->integer ch ) 10) ;10 is the ENTER KEY code
str
(loop (string-append str (string ch)))))))

编辑:另一位用户建议了一种使用此功能的方法和类似方法:

(use ncurses lolevel data-structures)
(define (get-string max)
(let ((buffer (make-string max #null)))
(getnstr (make-locative buffer) max)
(string-translate buffer #null)))
(let ((stdscr (initscr))
(str (get-string 10)))
(addstr str)
(getch)
(write str))

这似乎适用于 Chicken Scheme 的第 5 版:

(import ncurses
(chicken locative)
(chicken string))
(let ((stdscr (initscr)) (str (make-string 10)))
(getstr (make-locative str))
(addstr (string-translate str #null))
(getch)
(endwin))

相关内容

  • 没有找到相关文章

最新更新