Как скопировать в буфер обмена в Emacs Lisp

ЗДЕСЬ - это другая библиотека с открытым исходным кодом на GitHub с именем EvalEx.

В отличие от механизма JavaScript эта библиотека ориентирована только на оценку математических выражений. Кроме того, библиотека расширяема и поддерживает использование логических операторов, а также круглых скобок.

30
задан User1 1 February 2010 в 17:55
поделиться

3 ответа

Вы ищете kill-new .

kill-new is a compiled Lisp function in `simple.el'.

(kill-new string &optional replace yank-handler)

Make string the latest kill in the kill ring.
Set `kill-ring-yank-pointer' to point to it.
If `interprogram-cut-function' is non-nil, apply it to string.
Optional second argument replace non-nil means that string will replace
the front of the kill ring, rather than being added to the list.

Optional third arguments yank-handler controls how the string is later
inserted into a buffer; see `insert-for-yank' for details.
When a yank handler is specified, string must be non-empty (the yank
handler, if non-nil, is stored as a `yank-handler' text property on string).

When the yank handler has a non-nil PARAM element, the original string
argument is not used by `insert-for-yank'.  However, since Lisp code
may access and use elements from the kill ring directly, the string
argument should still be a "useful" string for such uses.
52
ответ дан 27 November 2019 в 16:53
поделиться

Я делаю это:

(with-temp-buffer
  (insert "Hello World")
  (clipboard-kill-region (point-min) (point-max)))

, который получает его в буфер обмена. Если вы хотите его на кольце Kill-Ring добавьте kill-Region .

4
ответ дан 27 November 2019 в 16:53
поделиться

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

class Array3D {
    size_t m_width, m_height;
    std::vector<int> m_data;
  public:
    Array3D(size_t x, size_t y, size_t z, int init = 0):
      m_width(x), m_height(y), m_data(x*y*z, init)
    {}
    int& operator()(size_t x, size_t y, size_t z) {
        return m_data.at(x + y * m_width + z * m_width * m_height);
    }
};

// Usage:
Array3D arr(10, 15, 20, 100); // 10x15x20 array initialized with value 100
arr(8, 12, 17) = 3;

std:: vector распределяет место хранения динамически, что хорошо, потому что пространство стека часто очень ограничено, и 3D массивы легко используют много пространства. Перенос его в такой класс также делает передачу массива (путем копирования или ссылки) другим функциям тривиальной, в то время как выполнение любой передачи многомерных статических массивов очень проблематично.

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

-121--1314546-

Решение, попробуйте вызвать новый ActiveXObject:


function testForActiveX(){
    tester = null;
    try {
        tester = new ActiveXObject('htmlfile');
    }
     catch (e) {
        // catch the exception
    }
    if (tester) {
        // ActiveX is installed
        return true;
    }
    return false;
}
-121--1742766-

Команда для помещения выбранного элемента в буфер обмена системы окна x-select-text . Вы можете дать ему блок текста, чтобы запомнить. Так что (буфер-подстрока (точка) (метка)) или что-то должно дать вам то, что вам нужно передать в него. В ответе Джо вы можете увидеть функцию межпрограммного разреза. Посмотри, как это найти.

0
ответ дан 27 November 2019 в 16:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: