ziele_o2k 发表于 2022-7-5 18:41:18

用别名分隔文件

你好
 
我正在编写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例程。
我需要让每个用户都可以应用他的快捷方式。
 
我希望我能很好地解释我的意思。
 
提前感谢!

BIGAL 发表于 2022-7-5 18:56:15

也许是这个
 

(defun C:qw (if (not mylisp3 (load "MYLISP3")))(C:mylisp3)); expects that your calling a defun from within mylisp.

ziele_o2k 发表于 2022-7-5 19:06:22

也许是这样的
我使用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)

BIGAL 发表于 2022-7-5 19:13:58

这与今天的另一篇帖子几乎相同,我的答案是如何捕捉命令错误并运行lisp,您键入aa Autocad says unknown命令,然后它运行查找列表lisp并加载与aa匹配的正确lisp,抱歉,不知道该怎么做。这将是一个反应堆Lisp程序。

ziele_o2k 发表于 2022-7-5 19:17:59

我写了这个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

eldon 发表于 2022-7-5 19:28:32

只是一个无聊的想法-为什么lisps需要别名?
 
你可以用任何你喜欢的命令名来编写lisp,所以让实际lisp的命令变得简单一些,这样你就不需要别名了。

ziele_o2k 发表于 2022-7-5 19:34:24

 
答案在我的第一个帖子里

BIGAL 发表于 2022-7-5 19:47:20

一个叫公司标准的东西浮现在脑海中,一个别名一个命令。所有员工都生活在一个共同的环境中。
页: [1]
查看完整版本: 用别名分隔文件