[elisp]text를 빠르게 그리는 방법?

hwiorb의 이미지

emacs로 ranger커맨더와 흡사한 모드를 만들고 있습니다.

처음에 c로 만들까 하다가 emacs에서 쓰려고 elisp으로 만들고 있는데,
dired처럼 파일 목록이 한번에 출력되면 상관 없는데, ranger는 파일이 스크롤링이 되는 거라서,
내부적으로 text를 지우고 다시 그리니, 너무 느려서 어떻게 극복해야 할지 모르겠습니다.

현재는 tetris 게임에서 쓰고 있는 gamegrid패키지와 같은 방법을 써서,
어느 정도 속도는 확보했는데, 스크롤링을 몇번 하다보면, 점점 속도가 느려져 쓸수가 없습니다.
아무래도, 스크롤시 잔상이 남아서 일부의 공백을 더 삭제하는 것이, 쌓여서 느려지는 것이라 생각됩니다.

여기서 더 빠르게 그리는 방법이라곤, C로 프로그램을 만들고,
term-mode으로 실행한 뒤, emacs에서 emulation 하는 것밖에 생각이 안듭니다.

어떻게 하면, emacs에서 효율적으로 빠르게 text를 치환하거나, 다시 그릴수 있을까요?

klenui의 이미지

흥미로운 주제네요... 프로젝트 마감이 눈앞인데.. 이런 흥미로운 먹이감을 던져주시니.. 감사합니다. -_-;;
답을 알고 있는건 아닌데, 스레드가 계속 발전했으면 하는 마음에 댓글답니다.
알게 되는 정보를 공유하도록 하지요...

hwiorb의 이미지

내내 놀다가, 새벽에 글 남깁니다.

속도가 느린 이유의 추축에 대해 자세히 설명하자면, 일단 화면상에 직접 그립니다.
그러면, 스크롤링시 파일 이름이 긴 경우, 잔상이 남게 됩니다. 그래서 이 부분을 지우기 위해,
출력되는 파일 이름과 줄끝까지 지운뒤, 공백문자를 집어넣습니다. 원래 그러면 안되지만,
테트리스 게임에 사용하는 gamegrid패키지에서는 문자열 출력시 delete-char, insert-char 해주더군요.
그래서, 그냥 한번에 넣는게 효율적이라 보고 있습니다.
실제로 줄끝까지 제거가 한 줄당 2번(이전/현재 디렉토리) 해주는 비효율적인 부분이 있긴 있는데,
1번으로 바꿨다고 해서 버벅임이 없는건 아닙니다.

이 상태로 화면을 다시 그릴땐 timer로 0.1초마다 다시 그려주게 됩니다. 속도가 느려질때는
파일 갯수가 약 200개 이상 되는 곳에서, 처음부터 끝까지 스크롤 몇번 해대면, 그때부터 버벅대기 시작합니다
(하이라이팅도 속도에 영향을 미치는듯 싶습니다)
못써줄 정도는 아니지만, 느려진 속도가 정상이 되지 않으니, 쓸수 없다는 평가가 맞겠죠.

본문엔 안적었지만, 극복하는 방법으로는 문자열 버퍼 변수를 만드는 방법을 쓰면 되겠지만,
그럴 경우, 가변폭 글꼴로 인해서, 들쭉 날쭉해서 안이뻐 보일겁니다. -_-;;
어떻게 보면, 이것때문에 뭘하기가 그렇습니다. 그래서 화면에 출력하고,
move-to-column으로 이동해서 컬럼 위치부터 줄끝까지 제거해주고 있습니다.
move-to-column도 속도면에서 좀 비싼 함수네요.

nil.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.