· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Emacs Editing Fill Paragraph

단락 자동으로 채우기


M-q는 기본적으로 'fill-paragraph'로 연결(bind)되어 있습니다. Major mode에 따라서 다른 함수로 binding되기도 하지만, 기본적으로는 비슷한 command로 연결됩니다. 예를 들어 C 파일을 편집할 때 쓰는 C major mode에서는 M-q가 'c-fill-paragraph'로 연결됩니다. 하지만 기본적인 idea는 같으니 크게 신경쓰지 않아도 됩니다.

fill-paragraph가 하는 역할은 매우 간단합니다. 현재 point(커서)가 위치한 곳의 이 너무 긴 경우, 자동으로 여러 줄로 바꾸어 줍니다.

예를 들어 보겠습니다. 먼저 tmp.txt를 편집합니다. (C-x C-f tmp.txt<RET>) 그리고 다음과 같이 입력합니다. (아래 입력에서 <EOL>은 실제로 입력한 내용이 아니고 그 위치에서 다음 줄을 입력한다는 표시입니다. 또 [1]는 현재 point, 즉 커서가 위치한 곳을 나타냅니다.)

Valen snarled:<EOL>
 There's no need to say, devil.  I am Tanar'ri and you [*]are Bataazu.  There is nothing but death between us.<EOL>

이 때, M-q를 누르게 되면 입력 내용이 다음과 같이 바뀝니다:

Valen snarled: There's no need to say, devil.  I am Tanar'ri and you<EOL>
 [*]are Bataazu.  There is nothing but death between us.<EOL>

위와 같이 자동으로 줄을 맞추어 줄 때, 한 줄이 차지할 수 있는 글자의 갯수는 변수 fill-column에 저장되어 있습니다. 기본값으로 70으로 설정되어 있습니다.

`fill-paragraph' 함수는 원래, 현재 단락(paragraph)에서만 동작합니다. 즉, 연속적으로 두 개의 newline 문자로 구분되지 않는 한 (빈 줄이 하나 이상 오지 않는 이상), 하나의 단락으로 봅니다. 만약 위의 예에서, 입력이 다음과 같았다고 가정해 봅시다:


Valen snarled:<EOL>
<EOL>
 There's no need to say, devil.  I am Tanar'ri and you [*]are Bataazu.  There is nothing but death between us.<EOL>

위의 경우 M-q를 누르면 다음과 같이 변경됩니다:
Valen snarled:<EOL>
<EOL>
 There's no need to say, devil.  I am Tanar'ri and you [*]are Bataazu.<EOL>
 There is nothing but death between us.<EOL>

즉, 첫번째 줄에 있는 "Valen..." 다음에는 두 개의 <EOL>이 있으므로, "Valen..."은 M-q가 작업하는 단락에 포함되지 않습니다.

여기까지는 일반적인 `fill-paragraph' 명령에 대한 것이고, C 코드를 편집할 때 쓰이는 `c-fill-paragraph'에 대해 알아봅시다. 크게 다른 점은 별로 없습니다만, `c-fill-paragraph'는 C나 C++ 코드에서 쓰이는 주석 스타일을 좀 더 잘 처리합니다. (여러분이 신경쓸 것은 없습니다. 왜냐하면 C 언어 코드를 편집할 때에는 자동적으로 M-q가 `c-fill-paragraph'에 연결됩니다.)

아래 코드는 gcc 소스의 일부에서 얻은 것입니다. 편의상 아래 코드에서 <EOL>은 표시하지 않았습니다. 그리고 아래 코드의 주석은 한 줄로 되어 있습니다:

    case ZERO_EXTRACT:
      /* Note that in some cases those types of expressions are altered by optimize_bit_field, and do not survive to get here.  */
      if (XEXP (x, 0) == var
          || (GET_CODE (XEXP (x, 0)) == SUBREG
              && SUBREG_REG (XEXP (x, 0)) == var))

위 코드에서 포인트(커서)를 주석 중간에 위치시키고 M-q를 누른 결과입니다:

    case ZERO_EXTRACT:
      /* Note that in some cases those types of expressions are
         altered by optimize_bit_field, and do not survive to get
         here.  */
      if (XEXP (x, 0) == var
          || (GET_CODE (XEXP (x, 0)) == SUBREG
              && SUBREG_REG (XEXP (x, 0)) == var))

원래 코드가 다음과 같이 되어 있었다고 가정하면 (아래 주석은 두 줄로 되어 있습니다):

    case ZERO_EXTRACT:
      /* Note that in some cases
       * those types of expressions are altered by optimize_bit_field, and do not survive to get here.  */
      if (XEXP (x, 0) == var
          || (GET_CODE (XEXP (x, 0)) == SUBREG
              && SUBREG_REG (XEXP (x, 0)) == var))

이 경우 주석의 중간 부분에서 M-q를 누르면 다음과 같이 바뀝니다:

    case ZERO_EXTRACT:
      /* Note that in some cases those types of expressions are
       * altered by optimize_bit_field, and do not survive to get
       * here.  */
      if (XEXP (x, 0) == var
          || (GET_CODE (XEXP (x, 0)) == SUBREG
              && SUBREG_REG (XEXP (x, 0)) == var))

즉, 주석을 쓰는 스타일을 그대로 준수하여 단락을 채워줍니다! 신기하죠?

글쓴이는, 실제로 C 코드에 주석을 달 때 M-q를 매우 많이 씁니다. 여러분도 M-q를 잘 활용하시기 바랍니다.

끝 -- [http]신성국



ID
Password
Join
Might as well be frank, monsieur. It would take a miracle to get you out of Casablanca.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2005-06-15 15:46:02
Processing time 0.0053 sec