어지간한 중급 이상 수준의 기능을 갖춘 텍스트 에디터나 워드 프로세서들은 일명 ‘칼럼 블록’ 기능을 제공한다. 아래아한글은 도스 시절부터 ‘구역’이라고 하여 동일 기능을 제공했으며, 단축키는 F4였다. 일반 블록의 단축키는 F3이고 말이다. 마우스로는 그냥 드래그는 일반 블록이고 Alt+드래그가 칼럼 블록으로 통용되고 있다. 칼럼 블록을 만드는 키보드 단축키가 통일되어 있는지는 잘 모르겠다.

칼럼 블록이 일반 블록의 복붙 동작과는 어떤 차이가 있으며 얼마나 유용한지 일일이 구차하게 설명하지는 않겠다. 칼럼 블록은 불연속적인 여러 줄들의 일부를 통째로 선택할 수 있을 뿐만 아니라, 붙이는 동작도 여러 줄에다가 내용을 끼워 넣는 식으로 달라진다. <날개셋> 편집기는 전문적인 에디터를 표방하면서 개발되고 있지는 않기 때문에, 현재 (아쉽게도) 칼럼 블록을 지원하지는 않는다.

그런데 칼럼 블록을 구현할 때 현실적으로 부딪히는 문제가 있다. ‘붙이기’를 할 때 클립보드의 내용이 일반 블록인지 아니면 칼럼 블록인지를 어떻게 판별할 거냐는 것이다.
제일 간단한 방법은 응용 프로그램이 별도의 플래그를 갖고 있는 것이다. 클립보드에다가는 일반 블록처럼 텍스트만 복사해 놓으나, 이 블록이 칼럼 블록이라면 플래그를 켠다. 그래서 붙이기를 할 때 플래그가 켜져 있으면 칼럼 형태로 붙인다.

윈도우 탐색기가 파일을 클립보드에다 복사(Copy)한 것인지 오린(Cut) 것인지 판별할 때도 내부적으로 이런 자체 플래그를 쓴다. 파일은 오려 놓는다고 해서 실제로 파일을 지워 버릴 수는 없으므로, 자체적인 표식밖에는 구분할 방법이 없으니 말이다. 파일의 오리기는 텍스트의 오리기와 다르다. 더 나아가면, 엑셀 같은 스프레드 시트의 오리기도 마찬가지임.

하지만 이 방법을 쓸 경우, 칼럼 블록을 복사해 놓고는 다른 응용 프로그램에서 텍스트를 또 복사했을 때, 그 텍스트도 칼럼 형태로 붙여진다는 문제가 있다. 국산 에디터인 AcroEdit, 그리고 유명한 개발 IDE인 Source Insight가 칼럼 블록을 이런 식으로 구현했고 저런 동작을 보이는 것을 확인했다.
내부 플래그 방식으로 칼럼 블록을 구현했다면, 클립보드 내용이 외부에서 바뀌었을 때 내부 칼럼 플래그를 끄는 기능도 구현해야 할 것이다.

이런 방식 말고, 클립보드 차원에서 아예 자신만이 인식 가능한 별도의 포맷을 등록하는 방법도 있다. 칼럼 블록은 그 포맷으로 복사한 후, 붙이기를 할 때 그 지정 포맷이 존재하면 일반 형식이 아닌 칼럼 형식으로 붙여 넣는 것이다.
물론, 칼럼 블록을 복사하더라도, 다른 프로그램이 내용을 일반 블록 형태로 붙여넣을 수도 있게 일반 텍스트 형식으로도 복사는 해 놓는다.

국산 에디터인 EditPlus, 그리고 MS 비주얼 스튜디오 IDE는 이렇게 칼럼 블록은 별도의 클립보드 포맷을 써서 복사해 놓는 것을 확인했다. 이렇게 하면 칼럼 블록을 오로지 자기 프로그램에서 생성한 클립보드 데이터를 통해서만 인식할 수 있기 때문에 앞서 언급했던 오동작이 발생할 여지가 없다.

EditPlus의 식별자는 “EditPlus Column Selection”이요,
비주얼 스튜디오의 식별자는 “MSDEVColumnSelect”이다. 다른 프로그램들은 어떨지 모르겠다.
워드 프로세서들은 어차피 자기네 고유 포맷을 쓰는 게 관행이기 때문에 칼럼 블록만을 위한 고유 포맷을 만들지는 않는 듯하다. (아래아한글과 MS 워드의 경우)

개인적은 생각은, CF_TEXT 같은 것처럼 칼럼 블록을 위한 텍스트도 운영체제 차원에서 표준 클립보드 포맷을 도입하면 좋지 않을까 싶다. 내부적으로 전세계의 수많은 텍스트 에디터들이 자신만의 고유 포맷으로 칼럼 블록을 표현하고 있을지 알 수 없는 노릇이기 때문이다. 그게 제정되면 칼럼 블록도 에디터들마다 공유가 가능할 것이다.

Posted by 사무엘

2011/07/10 08:08 2011/07/10 08:08
, ,
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/538

Trackback URL : http://moogi.new21.org/tc/trackback/538

Comments List

  1. 아라크넹 2011/07/10 19:34 # M/D Reply Permalink

    Vim에도 비슷한 기능이 있는데(blockwise visual, Ctrl-V를 누르면 볼 수 있음) Vim의 경우 클립보드를 바로 노출시키는 게 아니라 레지스터라는 좀 더 일반적인 방법으로 관리를 하기 때문에 해당 레지스터가 blockwise인지 linewise인지 characterwise인지 저장하는 플래그가 있습니다(코드는 안 봤지만 동작은 그렇게 합니다). 웃긴 건 Vim에서 blockwise는 다른 것과 완전히 동떨어져 구현되어 있어서, blockwise로 복사한 레지스터가 있을 때 Vim 스크립트에서 그 레지스터를 강제로 고치면 blockwise 모드가 무조건 해제됩니다. 좀 난감하죠.

    컬럼 블록을 위한 포맷을 공유하자는 것은 의도는 좋습니다만 (특히 가장 큰 문제로) 탭 처리에서 문제가 생길 가능성이 매우 높습니다. 다른 건 보장 가능해도 컬럼 블록 안에 탭이 들어 있는 경우 및 붙이는 위치에 탭이 들어 있는 경우를 통일시키는 건 불가능해 보입니다. 아까 전의 Vim의 예시를 들면, Vim의 경우 :set virtualedit=block 같은 명령으로 블록 선택시 캐럿을 탭 중간에 위치시킬 수 있는데 이 경우 레지스터에는 선택된 내용에서 부서진 탭이 공백으로 치환된 내용이 들어 갑니다. 그리고 virtualedit를 좀 더 조정해서 보통의 경우에도 탭 중간에 캐럿을 위치시킬 수 있게 하면, 붙여넣기 할 때 탭을 깨뜨리거나(!!!) 하는 것도 잘 처리됩니다. 이런 동작이 모든 편집기에서 동일하게 처리된다는 보장을 하긴 힘들 것 같습니다.

    1. 사무엘 2011/07/11 09:48 # M/D Permalink

      헐, 탭이라..;; 하지만 칼럼 블록을 쓰는 상황이라면 거의 다 불변폭 글꼴 + '공백'이지 않을까요? ㄲㄲ

Leave a comment
« Previous : 1 : ... 1675 : 1676 : 1677 : 1678 : 1679 : 1680 : 1681 : 1682 : 1683 : ... 2139 : Next »

블로그 이미지

그런즉 이제 애호박, 단호박, 늙은호박 이 셋은 항상 있으나, 그 중에 제일은 늙은호박이니라.

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2024/04   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        

Site Stats

Total hits:
2666991
Today:
2229
Yesterday:
1937