用别名分隔文件
你好我正在编写lisp例程包,不仅仅是为了我自己。
我想用LISP的别名定义创建自己的文件(类似于pgp文件)
e、 g.我将lisp函数定义为c:XXX
(defun c:MYlisp_1 ... )
(defun c:MYlisp_2 ... )
(defun c:MYlisp_3 ... )
现在我想用别名制作文件(例如txt)
aa MYlisp_1
ae MYlisp_2
qw MYlisp_3
但我不知道如何开始用lisp翻译成CAD:如果用户输入qw,CAD应该开始执行MYlisp_3例程。
我需要让每个用户都可以应用他的快捷方式。
我希望我能很好地解释我的意思。
提前感谢! 也许是这个
(defun C:qw (if (not mylisp3 (load "MYLISP3")))(C:mylisp3)); expects that your calling a defun from within mylisp.
也许是这样的
我使用lisp从文本文件中读取别名,该文件将返回如下内容:
!list_of_aliases
(("aa" "MYlisp_1") ("ae" "MYlisp_2") ("qw" "MYlisp_3"))
现在,在CAD启动时可能会出现这样的情况:
(setq lst
(mapcar
'(lambda (%)
(strcat "(defun C:" (nth 0 %) "() (C:"(nth 1 %) "))")
)
list_of_aliases
)
)
(setq file (vl-filename-mktemp "aliases.lsp"))
(WriteFile file lst)
;WriteFile is my lisp that write list to file
(load file)
这与今天的另一篇帖子几乎相同,我的答案是如何捕捉命令错误并运行lisp,您键入aa Autocad says unknown命令,然后它运行查找列表lisp并加载与aa匹配的正确lisp,抱歉,不知道该怎么做。这将是一个反应堆Lisp程序。 我写了这个Lisp程序的句子:
(defun LOADalias ( / data r res lst file)
(setq data (cd:SYS_ReadFile nil "J:\\alias.txt"));alias file with path
(mapcar
'(lambda (x1)
(if
(or
(= ";" (substr x1 1 1))
(= "" (substr x1 1 1))
(= "[" (substr x1 1 1))
)
nil
(setq r (cons x1 r))
)
)
data
)
(foreach line r
(setq res (cons (cd:STR_Parse line " " T) res))
)
(setq lst
(mapcar
'(lambda (%)
(strcat "(defun C:" (nth 0 %) "() (C:"(nth 1 %) "))")
)
res
)
)
(setq file (vl-filename-mktemp "aliases.lsp"))
(cd:SYS_WriteFile file lst nil)
(load file)
(princ)
)
它正在工作
Bolow示例。带别名的txt文件
;only spacebar allowed
user_alias1 my_lisp1
user_alias2 my_lisp2
user_alias3 my_lisp3
user_alias4 my_lisp4
user_alias5 my_lisp5
user_alias6 my_lisp6
要运行LOADalias,必须加载附加的lisp库
Cad_包。lsp 只是一个无聊的想法-为什么lisps需要别名?
你可以用任何你喜欢的命令名来编写lisp,所以让实际lisp的命令变得简单一些,这样你就不需要别名了。
答案在我的第一个帖子里
和 一个叫公司标准的东西浮现在脑海中,一个别名一个命令。所有员工都生活在一个共同的环境中。
页:
[1]