· 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
Money may buy friendship but money can not buy love.


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.0017 sec