spiker7221 发表于 2022-7-6 06:22:10

空格键作为enter键

我有一个例程,通过STRCASE等向用户提问。我使用ECHOGET设置默认值。用户可以继续的唯一方法是键入新选项或按ENTER键使用最后一个选项。我是老派的Autocad,我经常使用空格键进行输入。如何编程LISP以使用空格键或ENTER键接受这些默认值?
 
谢谢
迈克

rkmcswain 发表于 2022-7-6 06:26:09

 
你是说(GETSTRING)?
请参阅(getstring)的文档,了解如何在ENTER时允许空间。

BlackBox 发表于 2022-7-6 06:30:44

没有看到你的代码。。。考虑一下这个快速编写的示例:
 

(defun c:FOO (/ option)
(initget "Yes No")
(if (or (/= nil
             (setq option
                  (getkword "\nBow ties are cool, right? <Yes>: "
                  )
             )
         )
         (setq option "Yes")
   )
   (if (= "Yes" option)
   (prompt "\n** Bow ties are cool ** ")
   (prompt "\n** Bow ties ARE cool (even if you don't think so) ** ")
   )
)
(princ)
)

spiker7221 发表于 2022-7-6 06:32:42

我知道如何在“\n”之前添加T…但当我点击空格键时,它只是在命令行中添加了一个空格。我只想让它充当ENTER。
 
(setq choice2 (strcase (Echoget2 2xtxt "\nFraming size: 2x(6), 2x(, 2x(10), 2x(12)? ")))
       (cond

         ((= choice2 "6")
               (setq 2xtxt ""))

         ((= choice2 "8")
               (setq 2xtxt "(2x8)"))

         ((= choice2 "10")
               (setq 2xtxt "(2x10)"))

         ((= choice2 "12")
               (setq 2xtxt "(2x12)"))

       );end cond
 
 

BlackBox 发表于 2022-7-6 06:36:53

 
恕我直言,我不确定您是否会这样做,因为将非Nil“cr”参数添加到GetString函数中会阻止空格键被接受为Enter:
 

(setq foo (getstring ;| do not include cr argument here |; "\nEnter one word, Space bar to Enter: "))

 
 
 
此外,我们无法帮助您,也无法理解您忽略发布的自定义子函数(EchoGet*)的行为。
 
这里有一种可能实现相同结果的方法,只使用内置函数:

(initget "6 8 10 12")
(if (setq choice2 (getkword "\nFraming size: 2x... : "))
(setq 2xtxt (cond ((= "6" choice2) "(2X6)")
                   ((= "8" choice2) "(2X8)")
                   ((= "10" choice2) "(2X10)")
                   (T "(2X12)")
             )
)
)

 
需要更多信息。

neophoible 发表于 2022-7-6 06:38:25

迈克,听起来你没有自己写例行公事。你知道如何编辑LISP吗?我同意这听起来好像你没有真正理解在getstring中使用t。如果例程使用getstring,那么在这之后应该有提示消息或nil,然后是提示。你看过“echoget2”函数吗?它不是LISP函数,而是包含在任何自定义代码中的函数。还有,例程不能使用getkword有什么原因吗?正如BlackBox所说,如果这还不够,你真的需要发布代码,让我们告诉你如何在这里得到你想要的。

neophoible 发表于 2022-7-6 06:42:54

顺便说一句,这里的代码看起来有点奇怪。看起来唯一期望的输入是一个整数,但它被视为一个字符串,甚至对其应用了strcase。这不会改变字符串中的整数。此外,没有显示任何处理与四个允许整数不匹配的输入的内容,尽管我猜想这可能发生在其他地方。如果看不到其余的代码,就很难判断到底发生了什么。

spiker7221 发表于 2022-7-6 06:45:43

我已经有一段时间没有用LISP编写代码了。我现在才重新开始。我正在使用我的老套路的很多老部分,但似乎这些部分引起了问题。每次我在这里,我都在学习新的做事方式。太棒了。这是我以前的ECHOGET子程序。。。
 
(defun Echoget2 (DEFAULT2 MSG2 / TEMP2)
   (setq TEMP2 (getstring T (strcat MSG2 " <<"DEFAULT2">>")))
    (IF (/= "" TEMP2) TEMP2 DEFAULT2)
)
 
你的建议效果很好,我理解为什么。现在我只需要最后一个选择返回到命令行。
 
再次感谢您的专业知识和帮助。
 
谦恭地说,
迈克
 

BlackBox 发表于 2022-7-6 06:50:25

 
::推测:
 
我认为EchoGet2是一个子函数,其中第一个参数(如果非Nil)是先前输入的值,第二个参数是使用的默认提示(当没有输入先验选项时)。
 
伪代码:

(defun EchoGet2 (p d)
(getstring
   (if p
   (strcat d " <" p ">: ")
   d
   )
)
)

 
 
... 这确实引入了空格键产生零的问题,而不是以前的值。也许OP能够为我们提供更多信息,以便我们能够更好地提供帮助。

neophoible 发表于 2022-7-6 06:52:39

BlackBox,我认为实际的输入函数应该看起来更像你展示的。唯一的问题是,OP显然有一个可更改的默认值,该默认值通过他的Echoget和setq处理。用你的方法看起来很容易完成,但如果没有他进一步的投入,我怀疑这是否值得在这一点上付出任何努力。当然,为了使其更加自动添加,默认值应该用“:”括起来,而不是使用括号。但这只是我自己的完美主义态度。
页: [1] 2
查看完整版本: 空格键作为enter键