[태그:] 리습자동로드

  • 도면 열면 리습이 알아서 — acaddoc.lsp 과 LOADER.lsp으로 ZWCAD 상시 자동 로드

    리습을 다 만들고 나면, 그때부터가 또 일이었다.

    APPLOAD를 열고, 폴더를 뒤져서, 쓰던 리습들을 하나씩 골라 로드한다. ZWCAD를 새로 켤 때마다. 도면을 새로 열 때마다. 손에 익은 명령어 몇 개를 쓰려고 매번 같은 준비 동작을 반복했다. 정작 그리기를 시작하기도 전에. 만들어 둔 도구가 있는데도, 그 도구를 불러오는 일이 매일의 군더더기가 됐다.

    어떤 문제였나

    APPLOAD의 시작 그룹(StartUp Suite)에 등록해두는 방법도 있긴 하다. 그런데 PC를 바꾸거나, ZWCAD를 다시 깔거나, 리습 폴더 구조를 손대면 그 등록이 풀리거나 어긋났다. 그럴 때마다 어디에 뭘 등록했는지 기억을 더듬어야 했다.

    게다가 리습이 한두 개가 아니었다. 출력용, 도곽용, 정리용… 만들다 보니 리습의 수는 늘어났다. 그러다보니 새 리습을 만들 때마다 시작 그룹에 추가하는 걸 잊어버리기 일쑤였다. 분명 만들어 뒀는데 “어 이거 왜 안 되지” 하고 보면 로드를 안 한 거였다.

    결국 문제는 하나였다. 어떤 리습을 띄울지가 내 머릿속에만 있고, 그걸 매번 손으로 다시 시키고 있다는 사실.

    어떻게 풀었나

    CAD에는 약속된 파일 이름이 하나 있다. acaddoc.lsp. 도면이 열릴 때마다 ZWCAD가 ‘지원 파일 검색 경로’를 훑어서 이 이름의 파일을 찾고, 있으면 알아서 읽어 들인다. 내가 부르지 않아도 된다. 도면을 여는 것 자체가 신호가 된다.

    여기에 한 겹을 더 뒀다. acaddoc.lsp 안에는 딱 한 줄만 넣었다.

    (if (findfile "LOADER.lsp") (load (findfile "LOADER.lsp")))
    

    “검색 경로에서 LOADER.lsp를 찾고, 있으면 로드해라”는 뜻이다. 실제 일은 전부 LOADER.lsp가 한다.

    그리고 LOADER.lsp는 목록을 손으로 적는 방식이 아니다. 자기가 들어 있는 폴더를 스스로 들여다보고, 그 안의 .lsp 파일을 전부 찾아 로드한다. 자기 자신과 acaddoc.lsp만 빼고. 그래서 어떤 리습을 띄울지 어딘가에 따로 적어둘 필요가 없다. 폴더에 파일이 있으면 로드되고, 없으면 안 한다. 목록이 곧 폴더다.

    굳이 둘로 나눈 데는 이유가 있다. acaddoc.lsp는 CAD가 인식하는 고정된 이름이라, 한 번 자리만 잡아두면 다시 건드릴 일이 없는 뼈대다. 거기에 로직을 다 욱여넣는 대신, 실제로 손볼 가능성이 있는 부분은 전부 LOADER.lsp로 빼뒀다. 뼈대와 내용물을 분리한 셈이다. (if (findfile ...))로 감싼 것도 같은 이유다 — LOADER.lsp가 없으면 조용히 넘어가고, 에러를 내지 않는다.

    신경 쓴 건 하나 더 있다. 리습 하나가 깨져 있으면 로드 전체가 멈춰버리는 게 제일 곤란하다. 그래서 파일마다 로드를 따로 감싸서, 하나가 실패해도 나머지는 계속 올라가게 했다. 명령창에는 [OK], [오류], 못 찾은 파일은 [??]로 한 줄씩 찍힌다. 어떤 리습이 말썽인지 도면을 여는 순간 바로 보인다.

    어떻게 달라졌나

    이제 ZWCAD에서 도면을 열면, 쓰던 리습이 전부 올라온 채로 시작한다. APPLOAD를 열 일이 없다. 폴더를 뒤질 일도 없다.

    새 리습을 만들면, 그 폴더에 파일을 넣는 게 전부다. 목록을 고칠 일도, 어딘가에 등록할 일도 없다. 다음에 도면을 열 때부터 그 리습도 같이 따라온다. 도구를 불러오는 일을 더는 기억하지 않아도 된다는 게, 생각보다 컸다.

    사용 환경

    • 개발·검증 환경: Windows 10/11, ZWCAD 2023
    • 작성 언어: AutoLISP
    • 전제: 리습 파일들을 모아둔 폴더가 ZWCAD ‘지원 파일 검색 경로’에 등록되어 있어야 한다.
    • 참고: acaddoc.lsp는 CAD 공통 메커니즘이지만, 이 글의 설정은 ZWCAD 2023 기준으로만 검증했다. AutoCAD 호환은 확인하지 않았다.

    어떻게 쓰나

    먼저 리습들을 한 폴더에 모은다. 예를 들어 C:\CAD\LISP 같은 폴더를 하나 만들고, 쓰는 리습과 이번 글의 두 파일(acaddoc.lsp, LOADER.lsp)을 거기에 같이 둔다.

    그다음 그 폴더를 ZWCAD가 찾을 수 있게 등록한다.

    1. ZWCAD에서 OP(옵션)를 실행한다.
    2. ‘파일’ 탭 → ‘지원 파일 검색 경로’를 펼친다.
    3. ‘추가’ → ‘찾아보기’로 위 폴더를 선택하고 확인한다.
    4. (권장) 같은 ‘파일’ 탭의 ‘신뢰할 수 있는 위치’에도 그 폴더를 추가한다. 보안 경고 없이 자동 로드되게 하기 위해서다.

    이제 끝이다. LOADER.lsp를 열어 뭔가를 적을 필요가 없다. 같은 폴더에 둔 리습이 곧 로드 대상이다. ZWCAD를 새로 켜거나 도면을 새로 열면, 명령창에 [OK]로 시작하는 로드 메시지가 한 줄씩 뜬다. 그게 보이면 성공이다.

    앞으로 새 리습이 생기면 그 폴더에 파일만 넣으면 된다. 빼고 싶으면 폴더에서 꺼내면 된다. 자동 로드 목록을 관리한다는 감각 자체가 없어진다.

    아직 안 되는 것

    acaddoc.lsp는 검색 경로에서 처음 발견된 하나만 로드된다. 만약 다른 프로그램이나 설정이 이미 다른 acaddoc.lsp를 쓰고 있다면 둘이 충돌할 수 있다. 그럴 땐 기존 파일 안에 LOADER.lsp를 불러오는 한 줄을 합쳐 넣는 식으로 풀어야 한다.

    폴더를 통째로 읽는 방식이라 생기는 한계도 있다. 그 폴더의 .lsp는 가리지 않고 전부 로드한다. 그래서 자동 로드를 원치 않는 리습은 이 폴더에 두면 안 된다 — 테스트용이나 미완성 리습은 다른 곳에 둬야 한다. 로드 순서도 파일 이름 순서를 따르기 때문에, 리습끼리 로드 순서를 타는 의존 관계가 있으면 의도와 어긋날 수 있다. 그럴 땐 파일 이름 앞에 숫자를 붙여 순서를 잡아주면 된다.

    그리고 이건 ‘상시 로드’에 맞춘 구조다. 개발 중에 리습을 고쳐가며 빠르게 테스트하는 용도라면, 단축키로 즉시 로드하는 AutoHotkey 방식이 더 맞는다. 둘은 역할이 다르다 — 만드는 단계와 쓰는 단계.

    받아 가기

    파일: acaddoc.lsp, LOADER.lsp (구글 드라이브 링크)

    LOADER.lsp는 폴더 안의 .lsp를 자동으로 스캔해 로드하는 로더다. 안을 열어 고칠 일은 없다. 그냥 acaddoc.lsp와 함께 리습 폴더에 두기만 하면 된다.

    써보다가 막히는 곳이 있거나 “내 환경에선 이게 안 된다” 싶은 게 생기면, 댓글로 남겨주시면 좋겠다. 같은 길을 먼저 지나온 사람으로서, 아는 선에서 같이 들여다보겠다.

    짧은 회고

    좋은 자동화는 일을 대신 해주는 게 아니라, 기억해야 할 것을 하나 줄여준다.

    이용 조건 — 개인·비영리 목적 자유 사용, 출처(Talkative Archi) 표기 시 수정 가능. 무단 재배포·상업적 판매 금지. 무보증이며 사용에 따른 모든 결과는 본인 책임입니다. (자세히)