|
AutoLISP 언어 요소 |
색상 |
내장함수와 변경금지 된 심벌 (Built-in function and protected symbles) |
파란색 |
문자열 (strings) |
보라색 |
정수 (Integers) |
녹색 |
실수 (Real numbers) |
청록색 |
주석 (Comments) |
회색 바탕의 보라색 |
괄호 (Parentheses) |
붉은색 |
인식되지 않는 요소(예를 들어 사용자 정의 변수) (Unrecognized items) |
검은색 |
이러한 문맥에 따른 색상의 변화는 LISP 파일 뿐 아니라 DCL 파일, SQL 파일 C 언어 소스 파일 등의 경우에도 적용된다. 이 색상들을 조정하기 위해서는 메뉴에서 Tools>Window Attributes>Syntax Coloring을 선택하면 된다.
함수들을 위한, 문맥에 민감한(Context-Sensitive) 도움말
모든 AutoLISP의 함수를 정확히 기억하여 쓴다는 것은 거의 불가능하다. 물론 자주 쓰는 함수들은 잘 알겠지만, 일년에 한번 쓸까 말까한 함수들이 AutoLISP에도 가득하고, 비록 자주 쓰는 함수더라도 모든 옵션과 입력, 반환값이 무엇인지를 다 아는 것은 힘들다. 이 때 도움말을 적절히 활용하면 무척이나 편리하다.
먼저, 함수명은 알되 자세한 옵션이 잘 생각이 안난다면 그 함수를 에디터에 입력하고 더블클릭으로 선택 한 후
를 누르면 함수에 대한 자세한 해설이 나온다.
그림 10. trans 함수의 활용을 위해 도움말을 찾아본 경우
또, 함수명을 모르고 그 함수가 하는 역할만을 안다면 그냥 F1을 눌러 도움말을 호출하고 적절한 주제를 계속 찾아들어가면 된다. 예를 들어 선택 세트(Selection Set)을 다루는 함수를 알고 싶다면 F1을 눌러 도움말을 불러서 Visual LISP for AutoCAD Release 14 Guide>Using AutoLISP to Manipulate AutoCAD Object>Selection Set Handling을 선택하면 필요한 함수들을 볼 수 있다.
문서편집기 컨텍스트 메뉴
시스템 콘솔과 마찬가지로 오른쪽 마우스 버튼을 클릭하면 컨텍스트 메뉴가 나온다.
여기서 Cut, Copy, Paste는 다 아는 기능이고, Find는 문서 편집기 내에서 원하는 단어나 문장을 찾는 기능이다. 한가지 특이할 만 한 것은 현재 작업중인 문서 뿐 아니라 로드되어있는 모든 문서에 대해서도 찾기를 수행 할 수 있다는 것이다.
Go to Last Edited는 프로그램을 작성하다가 앞에서 정의한 함수 등을 다시 보기 위하여 앞으로 커서를 이동한 경우에 아주 유용한 기능으로 커서를 이동한 후에 편집 작업을 하지 않았다면, 한번에 마지막 편집작업을 하던 곳으로 이동 할 수 있다.
Undo와 Redo는 잘 알테고 나머지 기능은 대부분 디버깅을 위한 기능이므로 디버깅 절에서 설명한다. 이번에는 심벌(Symbol)을 효과적으로 압력하기 위한 Apropos Window에 관한 것들만 알아보자.
완벽한 단어의 단축입력
효율적인 프로그래밍을 위한 방법 중 중요한 것 하나가 함수나 변수의 이름을 잘 정의하는 것이다. 오죽하면 함수나 변수들의 명명법만을 서술한 책이 다 있겠는가. AutoLISP에서도 이런 원칙은 마찬가지로 적용된다. 예를 들어 자동으로 실행되는 명령들이 커멘드 라인에 출력되게 할 지를 결정하는 CMDECHO라는 AutoCAD 내부 변수를 저장하는 사용자 변수를 만든다면
(setq Old_CmdEcho (setvar "CMDECHO"))
와 같이 하는 것이 나중에 프로그램을 디버깅하거나 보수하는 데 매우 유용하다. 하지만 이와 같이 하면 변수명 등이 길어져서 타이핑이 어려운 경우가 많다. 이런 긴 심벌들을 효과적으로 입력 할 수 있게 해주는 기능이 Visual LISP의 에디터에 있다.
다음과 같은 문장을 타이핑하고 가작 마지막 행이 미완성인 상태에서 ALT+/(슬레시)를 눌러보자.
(setq Old_CmdEcho (setvar "CMDECHO"))
(setq Old_CeColor 10)
(setq Old_Elevation 0)
(setq ol ; ←여기서 ALT+/를 눌러보자. 한번 해보고 변하면 또 눌러보자.
어떤 일이 일어나는가? ALT+/를 누를 때마다 ol이라고 되어있던 것이 Old_CmdEcho, Old_CeColor, Old_Elevation 등으로 변화하는 것이 보이는가? 이제 변수명을 아무리 길게 만들어도 오타 없이 프로그램을 작성할 수 있는 자신감이 생길 것이다. 이 기능을 매뉴얼에서는 Complete World by Match 라고 표현하고 있다. 우리말로 굳이 옮기자면 쌍에 의한 단어완성 정도가 될까? 이 기능은 뒤에 말할 Complete Word by Apropos와는 달리 대소문자를 구별하여 단어가 완성된다.
이 기능과 비슷하지만 좀 더 편리한 기능이 Complete Word by Apropos이다. 우리말로 번역하자면 적당한 단어선택에 의한 단어완성 정도가 될까? <그림 13>은 set으로 시작하는 함수 중 적당한 함수를 찾기 위해서 Complete Word by Apropos 기능을 실행한 모습이다. set이라는 단어 옆에 나온 리스트 중에서 적당한 단어를 선택하면 완성된 단어를 만들 수 있다. 이 기능을 호출하기 위한 키는 CTRL+SHIFT+/ 이다. 이 키가 복잡하면 툴바에 있는
버튼을 눌러도 된다. 이 버튼은 Undo와 Redo 버튼 옆에 있다.
이 기능은 AutoLISP의 내장 함수 뿐 아니라 사용자 정의 함수나 사용자 정의 변수, AutoCAD 내장 상수 등도 리스트에 나타내 준다. 하지만 Complete World by Match와는 달리 문서편집기에 이미 써있기만 하면 되는 것은 아니고 메모리 내에 불러져 있어야만 리스트에 나온다. 또 심벌 이름의 대소문자 구별도 전혀 하지 못하고 무조건 대문자 혹은 무조건 소문자로 처리한다. 이 기능을 사용 할 때 노무 적은 수의 글자만을 타이핑하고 완성된 단어를 찾기를 시도했을 경우(예를 들어 "a"만 타이핑하고 기능을 호출했을 경우) 15개 이상의 적절한 단어가 나오면 Apropos Window라는 것이 나오는데 이때는 단어를 선택하는 것만으로는 단어를 완성할 수 없고 리스트에서 선택 후 클립보드로 복사 한 후 다시 문서편집기에 붙이는 복잡한 과정을 거쳐야하니 주의하기 바란다.
커서의 이동과 편집을 위한 단축 키
Visual LISP 문서편집기에는 일반적인 문서편집기에 쓰이는 방향키와 Home, End, Page Up, Page Down 등 일반적인 키들이 모두 쓰이고 여기에 AutoLISP에 적당한 추가적인 키가 몇 가지 쓰이고 있다. 중요한 키들을 표들로 정리해 보았다.
동작 |
키 입력 |
한 단어 옆으로 |
CTRL+방향키 |
문서의 끝으로 |
CTRL+End |
문서의 처음으로 |
CTRL+Home |
쌍을 이루는 왼쪽 괄호로 |
CTRL+[ |
쌍을 이루는 오른쪽 괄호로 |
CTRL+] |
커서의 왼쪽 단어 지우기 |
CTRL+BackSpace |
커서의 오른쪽 단어 지우기 |
SHIFT+BackSpace |
커서가 위치한 행 지우기 |
CTRL+E |
영역 설정하기 |
SHIFT+이동 키 |
영역 복사하기 |
CTRL+C |
영역 잘라내기 |
CTRL+X |
저장 영역 붙이기 |
CTRL+V |
한 단계 들여쓰기 |
TAB |
한 단계 내어쓰기 |
SHIFT+TAB |
현재의 들여쓰기 단계로 커서이동 |
CTRL+ALT+TAB |
영역을 대문자로 전환 |
CTRL+SHIFT+U |
영역을 소분자로 전환 |
CTRL+U |
문서편집에 관한 단축메뉴 호출<그림 12> |
CTRL+E |
북마크의 활용
긴 프로그램을 작성하다 보면 유난히 많이 다시 보아야 하는 곳이 생길 때가 많다. 이럴 때를 위해서 Visual LISP이 제공하는 기능이 북마크 기능이다. 북마크를 다루기 위한 아이콘이 툴바에 있다. 깃발 모양의 아이콘 네개가 그것이다. 북마크가 하나도 설정되어 있지 않을 때는 첫 번째 아이콘을 제외한 다른 아이콘은 비활성화 되어있다. 아이콘은 첫 번째부터 차례로 북마크의 설정, 다음 북마크로 이동, 이전 북마크로 이동, 북마크 없애기다.
북마크의 설정과 활용법은 간단하다. 문서 편집기 내에서 북마크를 만들고 싶은 행에 가서
를 누르면
표시가 줄의 앞에 생겨서 북마크가 되었음을 나타내고,
와
를 눌러 북마크 사이를 이동 할 수 있고 필요 없는 북마크는
를 눌러 없엘 수도 있다.
프로그램의 자동정렬과 문법오류 검사, 로딩 및 실행
이제까지 설명한 모든 것들은 단지 AutoLISP을 보기 좋고 편리하게 작성하기 위한 내용들이었다. 이제는 소스 코드(Source Code)를 일정한 규칙에 따라 보기 좋게 정렬하고, 문법오류((Syntax Error)를 검사하고 이 작성된 프로그램의 전부 혹은 일부를 메모리로 로딩(Loading)하는 실재적인 동작들을 해 보겠다.
자동정렬의 실행(Running the Foramtter)
Visual LISP은 소스코드를 예쁘게 출력할 수 있는 강력한 자동정렬기(Formatter)를 제공한다. 앞에서도 여러 번 말한 바 있지만 보기 좋은 소스는 나중에 다시 수정, 보수하거나 디버깅을 하는데도 매우 편리하다.
자동정렬을 실행하는 것은 매우 쉽다. 먼저 활성화 된 문서편집 창 전체를 자동정렬 하려면
을 누르면 되고 선택된 영역만을 자동정렬 하려면
를 누르면 된다. <그림 15>와 같이 들여쓰기가 엉망으로 되어 있는 소스도 자동정렬을 실행하면 <그림 16>처럼 위계가 분명해 저서 읽기 쉬운 깔끔한 소스로 바꿀 수 있다.
자동 정렬를 실행 할 때 괄호의 개수가 모자르거나 남으면 <그림 17>과 <그림 18> 같이 모자르거나 남는 괄호를 처리할 지를 물어본다. 이때 아니오를 선택하면 자동 정렬이 되지 않는다. 이 기능은 Malformed List 같은 에러를 미리 찾아주는 역할도 한다.
자동정령에 필요한 옵션을들 바꾸기 위해서는 메뉴에서 Tools>Environment Options>AutoLISP Format Options를 선택하면 된다. 여기서 최대 행의 길이, 들여쓰기 간격, 들여쓰기 방식 등을 지정할 수 있다.
문법오류(Syntax Error)의 검검
AutoLISP을 짤 때 생기는 가장 흔한 오류가 괄호가 맞지 않아서 생기는 오류와 오타에 의한 오류지만 이런 오류가 없더라도 문법에 맞지 않는 문장을 작성해서 생기는 오류들도 많이 발생한다. 이런 오류는 문맥에 따른 색상의 변화와 괄호 개수의 점검으로는 찾을 수 없다.
문법오류를 검사하기 위해서는 툴바의
나
를 누르면 된다. 이 두 버튼은 앞에 설명한 자동 정렬의 경우와 마찬가지로 앞의 버튼이 문서편집기에 있는 전체 문장 검사, 뒤의 버튼이 선택영역 검사를 수행한다.
이 기능은 매우 강력해서 기존의 상업화된 AutoLISP 디버깅 툴에서도 검사 못했던 DCL관련 문장들까지 검사를 해 준다. 일반적으로 DCL을 제어하는 명령들은 Action_Tile 함수를 통해 문자열로 전해지기에 검사가 어렵지만 Visual LISP의 문법 검사기는 이런 것까지도 검사해 준다. 다만 이 문법검사 기능은 AutoLISP 문장에만 정용되는 것으로 DCL이나 SQL, C/C++ 소스 등에는 검사를 실행 할 수 없다.
문법 검사에서 오류가 발견되면 시스템 콘솔에 에러 내용이 출력된다. 또 에러가 난 행이 어딘지 알기 위해서는 툴바의
버튼을 누르면 에러난 행이 선택되어 보여지게 된다. 이 버튼은 디버그를 위한 버튼들이 모여있는 곳의 가장 오른편이 있다.
프로그램의 로딩(Roading)과 실행(Running)
Visual LISP의 문서편집기에서 작성한 프로그램을 실행하기 위해서는 프로그램을 로딩해야 한다. 물론, 기존의 AutoLISP에서처럼 소스를 저장한 후에 AutoCAD의 커멘드 라인에서 load 함수를 이용해서 불러들여야 하는 것은 아니고, 툴바의
와
버튼을 이용하면 된다. 앞의 경우와 마찬가지로 문서편집기에 있는 전체 내용을 로드하고 싶으면
버튼을, 선택영역만을 로드하고 싶으면
를 누르면 된다.
이 때 로드된 것이 몇 줄의 명령이라면 직접 실행이 되지만 함수라면 다시 시스템 콘솔에서 그 함수를 실행시켜야 동작이 된다. 예를 들어 문서편집기에서 drawline이라는 함수를 정의했다면 시스템 콘솔에서
_$ (drawline)
이라 입력해야 실행이 된다. 만약 함수명 앞에 "c:"이 붙는 커맨드라인 실행 함수라면, 시스템 콘솔에서
_$ (c:drawline)
라고 입력해서 실행하거나, 시스템 콘솔의 모드(Mode)를 AutoCAD Mode로 바꾸어(시스템 콘솔에서 오른쪽 마우스 버튼을 눌러 나오는 컨텍스트 메뉴에서 AutoCAD Mode를 체크해 주면 된다)
Command: drawline
이렇게 AutoCAD에서 하듯이 명령을 내려주면 실행이 된다.
다음 호에는...
다음호에는 프로그램을 작성하는 것만큼이나 중요한 Visual LISP의 기능인 디버깅(Debugging)과 AutoLISP에는 없는 Visual LISP의 함수들에 대하여 알아보겠다.