주요 콘텐츠로 건너뛰기

OpenVOS 커널을 변경하는 동안 약 150개의 파일을 수정하는 작업에 직면했습니다. 즉, 소스 제어 시스템에서 예약하고, 저작권을 업데이트하고, 수정 기록 줄을 추가하고, 코드 변경(#include 사전 프로세서 문을 추가하는 것이었습니다.  나는 단순히 손으로이 작업을 시작하면 영원히 걸릴 것이라는 것을 알고 있었다.  그래서 몇 가지 바로 가기를 사용하여 작업을 더 빨리 완료했습니다.

내가 사용한 첫 번째 트릭은 편집하는 데 필요한 모든 파일목록을 만드는 것이었습니다.  소스 제어 시스템을 사용하여 해당 목록을 생성했지만 쉽게 사용할 수 있는 형태는 아니었습니다.  그래서 명령의 출력을 캡처하고 명령 매크로로 마사지하기 위해 에맥 키보드 매크로를 사용했다.  이전에 에맥 키보드 매크로를 사용한 적이 없다면 치료를 받는 것입니다.  당신이 그들을 사용하는 경우, 당신은이 부분을 건너 뛰고 다음 트릭으로 갈 수 있습니다.

emacs 편집기에는 편집 요청을 입력할 때 기록할 수 있는 명령이 있습니다.  OpenVOS 에맥과 GNU 에막 모두에서 명령을 녹음하기 시작하는 명령은 "ESC-(""입니다.  그 후에 입력하는 모든 명령은 실행되고 기록됩니다.  레코딩을 중지할 준비가 되면 "ESC-)"를 입력합니다.   "ESC-m"(OpenVOS emacs) 또는 "^X-e"(GNU emacs)를 입력하여 키보드 매크로를 한 번에 실행할 수 있습니다.  키보드 매크로는 매우 반복적인 파일을 편집하는 데 적합하며, 이는 제가 직면한 경우였습니다.  문자 "a"로 시작하는 POSIX 함수 목록을 사용하여 단순화된 예제는 다음과 같습니다.

목록

파일: 17, 블록: 19

r 2 abort.c

r 1 access.c

r 1 adjtime.c

r 1 aio_cancel.c

r 1 aio_error.c

r 1 aio_fsync.c

r 1 aio_read.c

r 1 aio_return.c

r 1 aio_suspend.c

r 1 aio_write.c

r 2 알람.c

r 1 altzone.c

r 1 asctime.c

r 1 asctime_r.c

r 1 asprintf.c

r 1 assert.c

r 1 atexit.c

각 줄이 다음과 같이 보도록 이 버퍼를 편집해야 했습니다.

픽스업 abort.c

여기서 fixup.cm 여러 작업을 수행하는 명령 매크로 (나중에 이에 대한 자세한 것).  그래서 에막 버퍼에 남아있는 모든 파일의 반복 목록이었다 있도록 처음 몇 줄을 삭제.  첫 번째 줄의 시작 부분에 커서를 입력하여 녹음을 시작하기 위해 "ESC-(")를 입력한 다음 선을 편집하여 처음 두 "단어"를 삭제하고 문자열 "fixup"으로 교체했습니다. 그런 다음 다음 줄의 시작 부분에 커서를 두고 "ESC-)"로 녹음을 종료했습니다.  다음은 내가 입력한 정확한 시퀀스입니다(OpenVOS 에막 키 바인딩사용).

ESC-(ESC-d ESC-d 픽스업 ^N^ESC-)

이제 첫 번째 줄이 편집되고 커서가 2줄의 시작에 있습니다. 모든 것이 확인되었기 때문에 다음 을 입력했습니다.

ESC-99 ESC-m

파일의 나머지 부분을 편집합니다.  버퍼에 99줄 미만이 있으므로 이 매크로는 버퍼의 끝에 부딪칠 때까지 실행된 다음 중지됩니다. 그런 다음 버퍼를 "fixup_all.cm"라고 썼습니다.

다음 단계는 "fixup.cm" 명령 매크로를 작성하는 것이었습니다.  저작권을 업데이트하고 수정 기록을 업데이트한 다음 emac을 입력하여 수동으로 #include 문을 추가할 수 있도록 하기로 결정했습니다.  나는 아직 에막에있는 동안, 나는 커서에 필요한 #include 문을 삽입하는 새로운 키보드 매크로를 만들었습니다 :

ESC-(#include "sample.h" ESC-)

각 파일에 대한 에맥을 입력하고 종료할 것이기 때문에 이 매크로를 영구적으로 저장하고 키에 바인딩해야 했습니다.  Emacs는 현재 키보드 매크로를 영구 매크로로 저장하라는 요청은 "save_macro"이지만 기본 키 바인딩이 없습니다.  한 번 실행하려면

ESC-r save_macro

이 새 매크로와 연결하라는 메시지가 표시됩니다.  매크로를 "add_include_file"이라고 불렀습니다.  그런 다음 start_up.emacs 파일을 편집하여 줄을 포함했습니다.

set_key ^z-i add_include_file

그래서 지금은 에맥에서 종료하고 다시 시작, 그래서 나는 set_key 문이 제대로 작동 할 것이라고 확신 할 수 있도록. 그런 다음 fixup.cm 텍스트를 입력했습니다.  수정 기록을 업데이트하는 가장 쉬운 방법이라고 생각했기 때문에 라인 편집기를 사용했습니다.

& begin_parameters

파일 경로 이름,req

& end_parameters

add_copyright 및 파일 및

& attach_input

!line_edit 및 파일 및 파일 -no_backup -no_verbose

l/끝 수정 기록/

-1

/* 폴 그린에 의해 수정 된 10-05-17 ... * /

.

쓰기

종료

& detach_input

에맥 및 파일 및

및 반환

이 매크로는 저작권 정보를 추가 (또는 업데이트) 우리가 수정 기록 섹션의 끝을 표시하는 데 사용하는 코멘트 직전에 수정 기록 라인을 추가 한 다음 수동으로 %포함 문을 추가 할 수있는 장소를 찾을 수 있도록 emacs를 입력합니다.

이제 "fixup_all.cm"와 "fixup.cm"라는 두 개의 명령 매크로가 있습니다. 전자는 수정해야 하는 각 파일에 대해 후자를 한 번 호출합니다.  그런 다음 "fixup_all"을 입력하여 마라톤 편집 세션을 시작했고 #include 문을 삽입하고 "^Z-i"를 입력하고 파일을 작성하고 종료할 장소를 찾는 것뿐이었습니다.  매크로는 나머지 작업을 수행했습니다.

매크로를 작성하는 데 걸린 시간에도 불구하고 이러한 편집기 및 명령 매크로를 만들어 많은 시간과 노력 (그리고 아마도 몇 오타)을 절약했습니다.  또한 훨씬 더 흥미로운 작업으로 dreary 작업을 설정.

이 정보가 유용하다고 생각합니다. 그게 다야.

© 2024 스트라투스 테크놀로지스.