Я пытаюсь добавить приложение истории в оболочку MacPorts. В настоящее время MacPorts использует историю, подобную bash, в которой история записывается после завершения сеанса. Это может быть проблематично, если сеанс выйдет из строя, поэтому я пытаюсь заставить оболочку MacPorts следовать примеру zsh. То есть, добавлять каждый элемент истории в файл по мере его выполнения.
В GNU readline эта функциональность тривиальна с функцией _ 1_. Однако MacPorts полагается на editline вместо этого. Библиотека строки редактирования, похоже, не имеет эквивалента для append_history
, поэтому я немного не понимаю, что делать, чтобы добавить историю в файл. Я думал об использовании старых добрых стандартных функций, таких как fopen
и fprintf
, но понял, что строка редактирования использует свою собственную кодировку для строк истории (например, символ пробела переводится в восьмеричное \040
). MacPorts должен быть совместим с этой кодировкой, поскольку строка редактирования используется в нескольких местах. Я предполагаю, что эта кодировка используется, потому что пробелы используются в качестве разделителя истории.
Я мог бы попытаться написать свои собственные функции, совместимые с этой кодировкой, но это чревато ненужными трудностями. Я чувствую, что что-то упускаю. Есть ли простой способ добавить историю в файл с помощью строки редактирования?
history()
, она принимает аргумент,ev
этот аргумент определяет операцию, которую будет выполнять функция, некоторые значенияev
, которые могут оказаться полезными:H_APPEND
для добавленияchar *
в список истории иH_SAVE
, который сохраняет список истории в указанный файл. Для справки это декларация историиint history(History *h, HistEvent *ev, int op, ...);
, все это согласноman 3 editline
- person xmonk   schedule 29.05.2018H_APPEND
и так далее, но похоже, что он используется для добавления в список истории в памяти. Не для добавления в список истории на диске. Кроме того,H_SAVE
, похоже, не поддерживает приложение. Я думаю, что он перезаписывает весь файл истории, поэтому он не кажется жизнеспособным для того, что я хочу. - person GDP2   schedule 29.05.2018