Board.KolibriOS.org
http://board.kolibrios.org/

Общесистемный буфер обмена
http://board.kolibrios.org/viewtopic.php?f=1&t=991
Page 11 of 13

Author:  Mario_r4 [ Sun Dec 01, 2013 6:12 pm ]
Post subject:  Re: Общесистемный буфер обмена

0CodErr wrote:
а зачем это нужно в буфере обмена? Какая ядру разница?

Ядру разницы нет, но есть разница приложениям. Внутри себя они могут использовать все что душе программиста угодно, но вот в буфер засылать все что угодно - это создавать лишние проблемы. Так что лучше определиться со стандартом заранее, чтобы не было неожиданных сюрпризов.
0CodErr wrote:
Я думаю, надо делать надёжно.
Или, как вариант, указывать тип содержимого(что-то вроде TEXT_CR, TEXT_LF, TEXT_CR_LF).

Лишний геморрой с дополнительными данными. Лучше уж единообразие для всех без исключения.

З.Ы. Также если сделать требование следовать одному стандарту, не придется писать лишний код, учитывающий все возможные варианты.

Author:  0CodErr [ Sun Dec 01, 2013 7:02 pm ]
Post subject:  Re: Общесистемный буфер обмена

Mario_r4, тогда есть вероятность, что придётся перед копированием в буфер обмена преобразовывать в единственно верный формат. Потому что файлы с различными EOL уже и так существуют, хотим мы этого или нет.

Author:  Mario_r4 [ Sun Dec 01, 2013 7:27 pm ]
Post subject:  Re: Общесистемный буфер обмена

0CodErr wrote:
Mario_r4, тогда есть вероятность, что придётся перед копированием в буфер обмена преобразовывать в единственно верный формат. Потому что файлы с различными EOL уже и так существуют, хотим мы этого или нет.

Да, но не нужно тащить этот же бардак в реализацию буфера обмена. И придется преобразовывать только отличающиеся форматы. В Tinypad придется в любом случае преобразовывать, по причине собственного формата хранения во внутреннем буфере приложения. Я вообще склоняюсь к мысли остановиться на символе 0x0d (код 13) это все же даст некоторую экономию памяти, по сравнению с 0x0d 0x0a ну больших кусках текста.

Author:  hidnplayr [ Sun Dec 01, 2013 8:28 pm ]
Post subject:  Re: Общесистемный буфер обмена

0CodErr wrote:
Mario_r4, а зачем это нужно в буфере обмена? Какая ядру разница?
Mario_r4 wrote:
Статья на википедии утверждает, что для надежности нужно использовать 0x0d 0x0a.
Я думаю, надо делать надёжно.
Или, как вариант, указывать тип содержимого(что-то вроде TEXT_CR, TEXT_LF, TEXT_CR_LF).


Text with only CR is nonsense.
To me it seems very simple, when writing text, use CR LF (for compatibility)
When reading text, parse only LF and ignore CR.

Author:  Mario_r4 [ Sun Dec 01, 2013 8:47 pm ]
Post subject:  Re: Общесистемный буфер обмена

hidnplayr wrote:
To me it seems very simple, when writing text, use CR LF (for compatibility)
When reading text, parse only LF and ignore CR.

Why? After all, to any program we add support for clipboard from scratch. There is no established standard already. However, if we use 1 byte instead of 2 bytes, then a large amount of text, we can get savings of memory.

On the other hand, if the use of 2 byte code will simplify working with the clipboard, we can leave 2 bytes . I'm still thinking.

Author:  hidnplayr [ Sun Dec 01, 2013 9:20 pm ]
Post subject:  Re: Общесистемный буфер обмена

Mario_r4 wrote:
hidnplayr wrote:
To me it seems very simple, when writing text, use CR LF (for compatibility)
When reading text, parse only LF and ignore CR.

Why? After all, to any program we add support for clipboard from scratch. There is no established standard already. However, if we use 1 byte instead of 2 bytes, then a large amount of text, we can get savings of memory.

On the other hand, if the use of 2 byte code will simplify working with the clipboard, we can leave 2 bytes . I'm still thinking.


Any program should accept any encoding, this has nothing to do with clipboard.

Author:  Mario_r4 [ Sun Dec 01, 2013 9:40 pm ]
Post subject:  Re: Общесистемный буфер обмена

hidnplayr wrote:
Any program should accept any encoding, this has nothing to do with clipboard.

However, this increases the number of possible choices and therefore inflates code. I've come across in Windows with the situation where the standard Notepad does not understand line breaks. If the conditions for the buffer exchange would be more rigid, then such situations can be avoided in principle.

Author:  0CodErr [ Sun Dec 01, 2013 9:42 pm ]
Post subject:  Re: Общесистемный буфер обмена

hidnplayr wrote:
Text with only CR is nonsense.
For example:http://en.wikipedia.org/wiki/End_of_line#Representations
Quote:
    LF: Multics, Unix and Unix-like systems (GNU/Linux, OS X, FreeBSD, AIX, Xenix, etc.), BeOS, Amiga, RISC OS and others.
    CR+LF: Microsoft Windows, DEC TOPS-10, RT-11 and most other early non-Unix and non-IBM OSes, CP/M, MP/M, DOS (MS-DOS, PC DOS, etc.), Atari TOS, OS/2, Symbian OS, Palm OS, Amstrad CPC
    LF+CR: Acorn BBC and RISC OS spooled text output.
    CR: Commodore 8-bit machines, Acorn BBC, ZX Spectrum, TRS-80, Apple II family, Mac OS up to version 9 and OS-9
    RS: QNX pre-POSIX implementation.
I'm not sure, maybe it actually nonsense.

Author:  hidnplayr [ Sun Dec 01, 2013 9:57 pm ]
Post subject:  Re: Общесистемный буфер обмена

0CodErr wrote:
hidnplayr wrote:
Text with only CR is nonsense.
For example:http://en.wikipedia.org/wiki/End_of_line#Representations
Quote:
    LF: Multics, Unix and Unix-like systems (GNU/Linux, OS X, FreeBSD, AIX, Xenix, etc.), BeOS, Amiga, RISC OS and others.
    CR+LF: Microsoft Windows, DEC TOPS-10, RT-11 and most other early non-Unix and non-IBM OSes, CP/M, MP/M, DOS (MS-DOS, PC DOS, etc.), Atari TOS, OS/2, Symbian OS, Palm OS, Amstrad CPC
    LF+CR: Acorn BBC and RISC OS spooled text output.
    CR: Commodore 8-bit machines, Acorn BBC, ZX Spectrum, TRS-80, Apple II family, Mac OS up to version 9 and OS-9
    RS: QNX pre-POSIX implementation.
I'm not sure, maybe it actually nonsense.


MAC OS 9 was discontinued in 2002, should we still care? maybe.. maybe not :)

Author:  Freeman [ Sun Dec 01, 2013 11:35 pm ]
Post subject:  Re: Общесистемный буфер обмена

Mario_r4
If you want single-byte line break, single LF (Unix style) is better than single CR (Mac style), unless you also want to define your own, incompatible, Kolibri-only format, assumes programs must be written from scratch or specially adopted to Kolibri.

Author:  Mario_r4 [ Mon Dec 02, 2013 12:03 am ]
Post subject:  Re: Общесистемный буфер обмена

Ok, let the majority will be right again - I'm tired of arguing with you guys. Time will heal all.

Author:  Mario_r4 [ Wed Dec 11, 2013 10:41 pm ]
Post subject:  Re: Общесистемный буфер обмена

SVN r.4343 - изменил документацию, добавил текст с блочным выделением.
Attachment:
clipboard_container_rus.txt [1.69 KiB]
Downloaded 186 times

Attachment:
clipboard_container_eng.txt [1.08 KiB]
Downloaded 177 times

Если кто может подправить мой кривоватый английский перевод, то просьба сделать, можно даже на SVN сразу.

Author:  punk_joker [ Thu Jan 02, 2014 1:04 am ]
Post subject:  Re: Общесистемный буфер обмена

А нумерация слотов идет с нуля или единицы?

Author:  Mario_r4 [ Thu Jan 02, 2014 1:09 am ]
Post subject:  Re: Общесистемный буфер обмена

punk_joker wrote:
А нумерация слотов идет с нуля или единицы?

С нуля разумеется. Я же программист, а не гуманитарий. :mrgreen:

Author:  punk_joker [ Thu Jan 02, 2014 1:46 am ]
Post subject:  Re: Общесистемный буфер обмена

Если я правильно понял, то при записи номер слота не указывается, но при чтении его указать необходимо. В какой слот тогда происходит запись?

Spoiler: Show
======================================================================
====================== Функция 54, подфункция 2 ======================
================== Считать данные из буфера обмена. ==================
======================================================================
Параметры:
* eax = 54 - номер функции
* ebx = 2 - номер подфункции
* eсx = номер слота
* edx = не используется, оставлено для единообразия
* esi = указатель на буфер под копируемые данные
Возвращаемое значение:
* eax = 0 - успешно
* eax = 1 - ошибка
* eax = -1 - отсутствует область главного списка

======================================================================
====================== Функция 54, подфункция 3 ======================
================== Записать данные в буфер обмена. ===================
======================================================================
Параметры:
* eax = 54 - номер функции
* ebx = 3 - номер подфункции
* eсx = не используется, оставлено для единообразия
* edx = количество копируемых байт
* esi = указатель на буфер под копируемые данные
Возвращаемое значение:
* eax = 0 - успешно
* eax = 1 - ошибка
* eax = -1 - отсутствует область главного списка

Page 11 of 13 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/